diff --git a/Makefile b/Makefile index 88b3f05..9b75b70 100644 --- a/Makefile +++ b/Makefile @@ -49,6 +49,9 @@ fetch: # Cross compiler recipes include mk/prefix.mk +# Bootloader recipes +include mk/bootloader.mk + # Kernel recipes include mk/kernel.mk diff --git a/bootloader b/bootloader index c96eb83..6ed05fc 160000 --- a/bootloader +++ b/bootloader @@ -1 +1 @@ -Subproject commit c96eb83d18ba15e758d896bfba3c35700416f669 +Subproject commit 6ed05fcaa4f493f8b9c46e716f5edf5bcecc83e5 diff --git a/bootloader-efi b/bootloader-efi index 91809e7..0cb6f5a 160000 --- a/bootloader-efi +++ b/bootloader-efi @@ -1 +1 @@ -Subproject commit 91809e79c07e815d06397e04d09dd31648291027 +Subproject commit 0cb6f5afd3eab51085a460d331495e2693565b5e diff --git a/kernel b/kernel index bbc4a4a..413238a 160000 --- a/kernel +++ b/kernel @@ -1 +1 @@ -Subproject commit bbc4a4aefe12e4a66b4177324c07a40fbc202e48 +Subproject commit 413238a0a65dc03b9964843523ddd96ffc29276f diff --git a/mk/bochs.mk b/mk/bochs.mk index 55c9640..964dba5 100644 --- a/mk/bochs.mk +++ b/mk/bochs.mk @@ -1,2 +1,2 @@ -bochs: build/livedisk.bin +bochs: build/harddrive.bin bochs -f bochs.$(ARCH) diff --git a/mk/bootloader.mk b/mk/bootloader.mk new file mode 100644 index 0000000..736b4a5 --- /dev/null +++ b/mk/bootloader.mk @@ -0,0 +1,23 @@ +bootloader/build/$(BOOTLOADER_TARGET)/bootloader.bin: FORCE + env --unset=RUST_TARGET_PATH --unset=RUSTUP_TOOLCHAIN --unset=XARGO_RUST_SRC \ + $(MAKE) -C bootloader build/$(BOOTLOADER_TARGET)/bootloader.bin TARGET=$(BOOTLOADER_TARGET) + +build/bootloader.bin: bootloader/build/$(BOOTLOADER_TARGET)/bootloader.bin + mkdir -p build + cp -v $< $@ + +bootloader-coreboot/build/bootloader: build/kernel_coreboot + env --unset=RUST_TARGET_PATH --unset=RUSTUP_TOOLCHAIN --unset=XARGO_RUST_SRC \ + $(MAKE) -C bootloader-coreboot clean build/bootloader KERNEL="$(ROOT)/$<" + +build/coreboot.elf: bootloader-coreboot/build/bootloader + mkdir -p build + cp -v $< $@ + +bootloader-efi/build/$(EFI_TARGET)/boot.efi: FORCE + env --unset=RUST_TARGET_PATH --unset=RUSTUP_TOOLCHAIN --unset=XARGO_RUST_SRC \ + $(MAKE) -C bootloader-efi build/$(EFI_TARGET)/boot.efi TARGET=$(EFI_TARGET) + +build/bootloader.efi: bootloader-efi/build/$(EFI_TARGET)/boot.efi + mkdir -p build + cp -v $< $@ diff --git a/mk/config.mk b/mk/config.mk index 6ce3b70..5ba4c33 100644 --- a/mk/config.mk +++ b/mk/config.mk @@ -55,6 +55,11 @@ INSTALLER=\ installer/target/release/redox_installer $(INSTALLER_FLAGS) ## Bootloader variables +ifeq ($(ARCH),x86_64) + BOOTLOADER_TARGET=x86-unknown-none +else + BOOTLOADER_TARGET=$(ARCH)-unknown-none +endif EFI_TARGET=$(ARCH)-unknown-uefi PARTED=/sbin/parted diff --git a/mk/disk.mk b/mk/disk.mk index ff0a91e..38d6bc5 100644 --- a/mk/disk.mk +++ b/mk/disk.mk @@ -1,14 +1,9 @@ -build/bootloader: bootloader/$(ARCH)/** - mkdir -p build - nasm -f bin -o $@ -D ARCH_$(ARCH) -ibootloader/$(ARCH)/ bootloader/$(ARCH)/disk.asm - -build/harddrive.bin: build/filesystem.bin bootloader/$(ARCH)/** - nasm -f bin -o build/bootsector.bin -D ARCH_$(ARCH) -ibootloader/$(ARCH)/ bootloader/$(ARCH)/disk.asm +build/harddrive.bin: build/filesystem.bin build/bootloader.bin dd if=/dev/zero of=$@.partial bs=1M count=$$(expr $$(du -m $< | cut -f1) + 2) $(PARTED) -s -a minimal $@.partial mklabel msdos $(PARTED) -s -a minimal $@.partial mkpart primary 2048s $$(expr $$(du -m $< | cut -f1) \* 2048 + 2048)s - dd if=build/bootsector.bin of=$@.partial bs=1 count=446 conv=notrunc - dd if=build/bootsector.bin of=$@.partial bs=512 skip=1 seek=1 conv=notrunc + dd if=build/bootloader.bin of=$@.partial bs=1 count=446 conv=notrunc + dd if=build/bootloader.bin of=$@.partial bs=512 skip=1 seek=1 conv=notrunc dd if=$< of=$@.partial bs=1M seek=1 conv=notrunc mv $@.partial $@ @@ -25,22 +20,6 @@ build/livedisk.iso: build/livedisk.bin.gz build/iso/ isohybrid $@ -bootloader-coreboot/build/bootloader: build/kernel_coreboot - env --unset=RUST_TARGET_PATH --unset=RUSTUP_TOOLCHAIN --unset=XARGO_RUST_SRC \ - $(MAKE) -C bootloader-coreboot clean build/bootloader KERNEL="$(ROOT)/$<" - -build/coreboot.elf: bootloader-coreboot/build/bootloader - mkdir -p build - cp -v $< $@ - -bootloader-efi/build/$(EFI_TARGET)/boot.efi: FORCE - env --unset=RUST_TARGET_PATH --unset=RUSTUP_TOOLCHAIN --unset=XARGO_RUST_SRC \ - $(MAKE) -C bootloader-efi build/$(EFI_TARGET)/boot.efi TARGET=$(EFI_TARGET) - -build/bootloader.efi: bootloader-efi/build/$(EFI_TARGET)/boot.efi - mkdir -p build - cp -v $< $@ - build/harddrive-efi.bin: build/bootloader.efi build/filesystem.bin # TODO: Validate the correctness of this \ # Populate an EFI system partition \ diff --git a/mk/filesystem.mk b/mk/filesystem.mk index e048bad..ff77151 100644 --- a/mk/filesystem.mk +++ b/mk/filesystem.mk @@ -1,4 +1,4 @@ -build/filesystem.bin: filesystem.toml build/bootloader build/kernel prefix +build/filesystem.bin: filesystem.toml build/kernel prefix cargo build --manifest-path cookbook/Cargo.toml --release cargo build --manifest-path installer/Cargo.toml --release cargo build --manifest-path redoxfs/Cargo.toml --release @@ -11,7 +11,6 @@ build/filesystem.bin: filesystem.toml build/bootloader build/kernel prefix sleep 2 pgrep redoxfs cp $< build/filesystem/filesystem.toml - cp build/bootloader build/filesystem/bootloader cp build/kernel build/filesystem/kernel cp -r $(ROOT)/$(PREFIX_INSTALL)/$(TARGET)/include build/filesystem/include cp -r $(ROOT)/$(PREFIX_INSTALL)/$(TARGET)/lib build/filesystem/lib diff --git a/redoxfs b/redoxfs index 9083dd0..cfe5841 160000 --- a/redoxfs +++ b/redoxfs @@ -1 +1 @@ -Subproject commit 9083dd07c95752b2ebaefc91117e5f4629f2d578 +Subproject commit cfe5841646df0044e9e689a43b97c9aff3a65444