diff --git a/.vscode/settings.json b/.vscode/settings.json index ed892b3..ea2491b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,5 @@ { "rust-analyzer.cargo.target": "x86_64-unknown-none", - "rust-analyzer.check.allTargets": false + "rust-analyzer.check.allTargets": false, + "makefile.configureOnOpen": false } diff --git a/Makefile b/Makefile index 0a020d0..b33a344 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ # Default target is x86_64-unknown-none TARGET ?= "x86_64-unknown-none" # Limine BIOS file directory -LIMINE-DIR ?= "/usr/share/limine" +LIMINEDIR ?= "/usr/share/limine" # QEMU system is set accordingly and automatically qemu = "qemu-system-x86_64" @@ -28,8 +28,9 @@ all: gila iso run checkenv: + $(info "Limine directory: $(LIMINEDIR)") $(foreach file,$(limine-files),\ - $(if $(shell test -f $(LIMINE-DIR)/$(file) | echo "it exists"),$(info "Found $(file)"),$(error "No $(file) in $(LIMINE-DIR)"))) + $(if $(shell test -f $(LIMINEDIR)/$(file) | echo "it exists"),$(info "Found $(file)"),$(error "No $(file) in $(LIMINEDIR)"))) $(foreach exec,$(executables),\ $(if $(shell which $(exec)),$(info "Found $(exec)"),$(error "No $(exec) in PATH"))) @@ -60,9 +61,9 @@ iso: build/iso/gila limine.conf mkdir -p build/iso/EFI/BOOT cp ./limine.conf build/iso/ - cp $(LIMINE-DIR)/limine-bios.sys build/iso/limine/ - cp $(LIMINE-DIR)/limine-bios-cd.bin build/iso/limine/ - cp $(LIMINE-DIR)/limine-uefi-cd.bin build/iso/limine/ + cp $(LIMINEDIR)/limine-bios.sys build/iso/limine/ + cp $(LIMINEDIR)/limine-bios-cd.bin build/iso/limine/ + cp $(LIMINEDIR)/limine-uefi-cd.bin build/iso/limine/ tree build/iso/ @@ -74,4 +75,4 @@ iso: build/iso/gila limine.conf clean: rm -rf build - cargo clean \ No newline at end of file + cargo clean diff --git a/README.md b/README.md index 26bc0b4..b5b2137 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ To build an ISO image that you can boot, there are several prerequisites: - `limine` command installed - `xorriso` command installed - `make` command installed -- `qemu-system-(your target architecture)` command installed (for running) +- `qemu-system-{your target architecture}` command installed (for running) Then run `make` to invoke the [Makefile](Makefile). @@ -72,12 +72,14 @@ Then run `make` to invoke the [Makefile](Makefile). - `make iso`: Builds the bootable ISO with Limine installed. - `make run`: Builds the ISO and boots it in QEMU. -By supplying `TARGET=(rustc target triple)` as an additional argument, you can change the architecture that gila will be compiled & run for. The default is `x86_64-unknown-none`. +To change the target gila will be compiled or run for, supply `TARGET={valid-rustc-targettriple}` either as an argument to `make` or as an environment variable. The default is `x86_64-unknown-none`. -The default limine BIOS file search directory is `/usr/share/limine`. You can change this by supplying a path (no trailing slash) like so: `LIMINE-DIR=/home/user/Downloads/limine`. +To change the search path for limine's binaries, supply `LIMINEDIR=/some/valid/path/no/trailing/slash` either as an argument to `make` or as an environment variable. The default is `/usr/share/limine`. -You can install all these dependencies automatically by using `nix-shell` and -supplying [shell.nix](shell.nix) as an argument. +If you use Nix, you can install all these dependencies automatically by running `nix-shell`. This will also automatically set the correct directory for the limine BIOS files. + +> [!IMPORTANT] +> **I do not, and cannot, currently recommend using `nix` for dependency management.** `nixpkgs` ships an outdated version of Limine which is incompatible and contains none of the necessary files. ## Kernel Parameters diff --git a/shell.nix b/shell.nix index d9acacb..8d5bfa8 100644 --- a/shell.nix +++ b/shell.nix @@ -1,28 +1,28 @@ let - nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-24.05"; + nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/25.05-pre"; pkgs = import nixpkgs { config = {}; overlays = []; }; in - pkgs.mkShell { packages = with pkgs; [ bash - limine + limine.dev xorriso rustup qemu - make + gnumake ]; shellHook = '' rustup default nightly; rustup target add x86_64-unknown-none + export LIMINEDIR="${pkgs.limine}/share/limine" ''; -} \ No newline at end of file +}