build: Properly handle spaces in PATH
This commit is contained in:
parent
7ac20e0615
commit
d288550b2a
55
Makefile
55
Makefile
@ -2,51 +2,53 @@ PREFIX = /usr/local
|
||||
DESTDIR =
|
||||
|
||||
PATH := $(shell pwd)/toolchain/bin:$(PATH)
|
||||
SHELL := env PATH=$(PATH) /bin/bash
|
||||
SHELL := /usr/bin/env bash
|
||||
|
||||
TOOLCHAIN = x86_64-elf
|
||||
|
||||
TOOLCHAIN_CC = $(TOOLCHAIN)-gcc
|
||||
TOOLCHAIN_AR = $(TOOLCHAIN)-ar
|
||||
|
||||
ifeq ($(shell which $(TOOLCHAIN_CC)), )
|
||||
ifeq ($(shell export "PATH=$(PATH)"; which $(TOOLCHAIN_CC)), )
|
||||
TOOLCHAIN_CC := gcc
|
||||
endif
|
||||
ifeq ($(shell which $(TOOLCHAIN_AR)), )
|
||||
ifeq ($(shell export "PATH=$(PATH)"; which $(TOOLCHAIN_AR)), )
|
||||
TOOLCHAIN_AR := ar
|
||||
endif
|
||||
|
||||
ifneq ($(shell $(TOOLCHAIN_CC) -dumpmachine | head -c 6), x86_64)
|
||||
ifneq ($(shell export "PATH=$(PATH)"; $(TOOLCHAIN_CC) -dumpmachine | head -c 6), x86_64)
|
||||
$(error No suitable x86_64 GCC compiler found, please install an x86_64 GCC toolchain or run "make toolchain")
|
||||
endif
|
||||
|
||||
STAGE1_FILES := $(shell find -L ./stage1 -type f -name '*.asm' | sort)
|
||||
|
||||
.PHONY: all bin/limine-install clean install distclean limine-bios limine-uefi limine-bios-clean limine-uefi-clean stage23-bios stage23-bios-clean stage23-uefi stage23-uefi-clean decompressor decompressor-clean toolchain test.hdd echfs-test ext2-test fat16-test fat32-test iso9660-test iso9660-uefi-test pxe-test uefi-test hybrid-iso9660-test
|
||||
|
||||
.PHONY: all
|
||||
all:
|
||||
$(MAKE) limine-uefi
|
||||
$(MAKE) limine-bios
|
||||
$(MAKE) bin/limine-install
|
||||
|
||||
.PHONY: bin/limine-install
|
||||
bin/limine-install:
|
||||
$(MAKE) -C limine-install LIMINE_HDD_BIN=`realpath bin`/limine-hdd.bin
|
||||
[ -f limine-install/limine-install ] && cp limine-install/limine-install bin/ || true
|
||||
[ -f limine-install/limine-install.exe ] && cp limine-install/limine-install.exe bin/ || true
|
||||
|
||||
.PHONY: clean
|
||||
clean: limine-bios-clean limine-uefi-clean
|
||||
$(MAKE) -C limine-install clean
|
||||
|
||||
.PHONY: install
|
||||
install: all
|
||||
install -d $(DESTDIR)$(PREFIX)/bin
|
||||
install -s bin/limine-install $(DESTDIR)$(PREFIX)/bin/
|
||||
install -d $(DESTDIR)$(PREFIX)/share
|
||||
install -d $(DESTDIR)$(PREFIX)/share/limine
|
||||
install -m 644 bin/limine.sys $(DESTDIR)$(PREFIX)/share/limine/
|
||||
install -m 644 bin/limine-cd.bin $(DESTDIR)$(PREFIX)/share/limine/
|
||||
install -m 644 bin/limine-eltorito-efi.bin $(DESTDIR)$(PREFIX)/share/limine/
|
||||
install -m 644 bin/limine-pxe.bin $(DESTDIR)$(PREFIX)/share/limine/
|
||||
install -m 644 bin/BOOTX64.EFI $(DESTDIR)$(PREFIX)/share/limine/
|
||||
install -d "$(DESTDIR)$(PREFIX)/bin"
|
||||
install -s bin/limine-install "$(DESTDIR)$(PREFIX)/bin/"
|
||||
install -d "$(DESTDIR)$(PREFIX)/share"
|
||||
install -d "$(DESTDIR)$(PREFIX)/share/limine"
|
||||
install -m 644 bin/limine.sys "$(DESTDIR)$(PREFIX)/share/limine/"
|
||||
install -m 644 bin/limine-cd.bin "$(DESTDIR)$(PREFIX)/share/limine/"
|
||||
install -m 644 bin/limine-eltorito-efi.bin "$(DESTDIR)$(PREFIX)/share/limine/"
|
||||
install -m 644 bin/limine-pxe.bin "$(DESTDIR)$(PREFIX)/share/limine/"
|
||||
install -m 644 bin/BOOTX64.EFI "$(DESTDIR)$(PREFIX)/share/limine/"
|
||||
|
||||
build/stage1: $(STAGE1_FILES) build/decompressor/decompressor.bin build/stage23-bios/stage2.bin.gz
|
||||
mkdir -p bin
|
||||
@ -56,6 +58,7 @@ build/stage1: $(STAGE1_FILES) build/decompressor/decompressor.bin build/stage23-
|
||||
cp build/stage23-bios/limine.sys ./bin/
|
||||
touch build/stage1
|
||||
|
||||
.PHONY: limine-bios
|
||||
limine-bios: stage23-bios decompressor
|
||||
$(MAKE) build/stage1
|
||||
|
||||
@ -66,6 +69,7 @@ bin/limine-eltorito-efi.bin: build/stage23-uefi/BOOTX64.EFI
|
||||
mmd -D s -i $@ ::/EFI/BOOT
|
||||
mcopy -D o -i $@ build/stage23-uefi/BOOTX64.EFI ::/EFI/BOOT
|
||||
|
||||
.PHONY: limine-uefi
|
||||
limine-uefi:
|
||||
$(MAKE) gnu-efi
|
||||
$(MAKE) stage23-uefi
|
||||
@ -73,38 +77,49 @@ limine-uefi:
|
||||
cp build/stage23-uefi/BOOTX64.EFI ./bin/
|
||||
$(MAKE) bin/limine-eltorito-efi.bin
|
||||
|
||||
.PHONY: limine-bios-clean
|
||||
limine-bios-clean: stage23-bios-clean decompressor-clean
|
||||
|
||||
.PHONY: limine-uefi-clean
|
||||
limine-uefi-clean: stage23-uefi-clean
|
||||
|
||||
.PHONY: distclean
|
||||
distclean: clean test-clean
|
||||
rm -rf bin build stivale toolchain ovmf gnu-efi
|
||||
|
||||
stivale:
|
||||
git clone https://github.com/stivale/stivale.git
|
||||
|
||||
.PHONY: stage23-uefi
|
||||
stage23-uefi: stivale
|
||||
$(MAKE) -C stage23 all TARGET=uefi BUILDDIR="`pwd`/build/stage23-uefi"
|
||||
|
||||
.PHONY: stage23-uefi-clean
|
||||
stage23-uefi-clean:
|
||||
$(MAKE) -C stage23 clean TARGET=uefi BUILDDIR="`pwd`/build/stage23-uefi"
|
||||
|
||||
.PHONY: stage23-bios
|
||||
stage23-bios: stivale
|
||||
$(MAKE) -C stage23 all TARGET=bios BUILDDIR="`pwd`/build/stage23-bios"
|
||||
|
||||
.PHONY: stage23-bios-clean
|
||||
stage23-bios-clean:
|
||||
$(MAKE) -C stage23 clean TARGET=bios BUILDDIR="`pwd`/build/stage23-bios"
|
||||
|
||||
.PHONY: decompressor
|
||||
decompressor:
|
||||
$(MAKE) -C decompressor all BUILDDIR="`pwd`/build/decompressor"
|
||||
|
||||
.PHONY: decompressor-clean
|
||||
decompressor-clean:
|
||||
$(MAKE) -C decompressor clean BUILDDIR="`pwd`/build/decompressor"
|
||||
|
||||
.PHONY: test-clean
|
||||
test-clean:
|
||||
$(MAKE) -C test clean
|
||||
rm -rf test_image test.hdd test.iso
|
||||
|
||||
.PHONY: toolchain
|
||||
toolchain:
|
||||
scripts/make_toolchain.sh "`realpath ./toolchain`" -j`nproc`
|
||||
|
||||
@ -117,12 +132,14 @@ ovmf:
|
||||
mkdir -p ovmf
|
||||
cd ovmf && wget https://efi.akeo.ie/OVMF/OVMF-X64.zip && 7z x OVMF-X64.zip
|
||||
|
||||
.PHONY: test.hdd
|
||||
test.hdd:
|
||||
rm -f test.hdd
|
||||
dd if=/dev/zero bs=1M count=0 seek=64 of=test.hdd
|
||||
parted -s test.hdd mklabel gpt
|
||||
parted -s test.hdd mkpart primary 2048s 100%
|
||||
|
||||
.PHONY: echfs-test
|
||||
echfs-test:
|
||||
$(MAKE) test-clean
|
||||
$(MAKE) test.hdd
|
||||
@ -139,6 +156,7 @@ echfs-test:
|
||||
bin/limine-install test.hdd
|
||||
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -hda test.hdd -debugcon stdio
|
||||
|
||||
.PHONY: ext2-test
|
||||
ext2-test:
|
||||
$(MAKE) test-clean
|
||||
$(MAKE) test.hdd
|
||||
@ -160,6 +178,7 @@ ext2-test:
|
||||
bin/limine-install test.hdd
|
||||
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -hda test.hdd -debugcon stdio
|
||||
|
||||
.PHONY: fat16-test
|
||||
fat16-test:
|
||||
$(MAKE) test-clean
|
||||
$(MAKE) test.hdd
|
||||
@ -181,6 +200,7 @@ fat16-test:
|
||||
bin/limine-install test.hdd
|
||||
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -hda test.hdd -debugcon stdio
|
||||
|
||||
.PHONY: fat32-test
|
||||
fat32-test:
|
||||
$(MAKE) test-clean
|
||||
$(MAKE) test.hdd
|
||||
@ -202,6 +222,7 @@ fat32-test:
|
||||
bin/limine-install test.hdd
|
||||
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -hda test.hdd -debugcon stdio
|
||||
|
||||
.PHONY: iso9660-test
|
||||
iso9660-test:
|
||||
$(MAKE) test-clean
|
||||
$(MAKE) test.hdd
|
||||
@ -213,6 +234,7 @@ iso9660-test:
|
||||
xorriso -as mkisofs -b boot/limine-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table test_image/ -o test.iso
|
||||
qemu-system-x86_64 -net none -smp 4 -enable-kvm -cpu host -cdrom test.iso -debugcon stdio
|
||||
|
||||
.PHONY: iso9660-uefi-test
|
||||
iso9660-uefi-test:
|
||||
$(MAKE) ovmf
|
||||
$(MAKE) test-clean
|
||||
@ -225,6 +247,7 @@ iso9660-uefi-test:
|
||||
xorriso -as mkisofs -eltorito-alt-boot -e boot/limine-eltorito-efi.bin -no-emul-boot test_image/ -o test.iso
|
||||
qemu-system-x86_64 -M q35 -L ovmf -bios ovmf/OVMF.fd -net none -smp 4 -enable-kvm -cpu host -cdrom test.iso -debugcon stdio
|
||||
|
||||
.PHONY: hybrid-iso9660-test
|
||||
hybrid-iso9660-test:
|
||||
$(MAKE) ovmf
|
||||
$(MAKE) test-clean
|
||||
@ -240,6 +263,7 @@ hybrid-iso9660-test:
|
||||
xorriso -as mkisofs -b boot/limine-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/limine-eltorito-efi.bin -no-emul-boot test_image/ -o test.iso
|
||||
qemu-system-x86_64 -M q35 -L ovmf -bios ovmf/OVMF.fd -net none -smp 4 -enable-kvm -cpu host -cdrom test.iso -debugcon stdio
|
||||
|
||||
.PHONY: pxe-test
|
||||
pxe-test:
|
||||
$(MAKE) test-clean
|
||||
$(MAKE) limine-bios
|
||||
@ -249,6 +273,7 @@ pxe-test:
|
||||
cp -rv bin/* test/* test_image/boot/
|
||||
qemu-system-x86_64 -enable-kvm -smp 4 -cpu host -netdev user,id=n0,tftp=./test_image,bootfile=boot/limine-pxe.bin -device rtl8139,netdev=n0,mac=00:00:00:11:11:11 -debugcon stdio
|
||||
|
||||
.PHONY: uefi-test
|
||||
uefi-test:
|
||||
$(MAKE) ovmf
|
||||
$(MAKE) test-clean
|
||||
|
@ -55,13 +55,16 @@ rebuild `limine-install`, simply use `make` in the binary release.
|
||||
*These steps are not necessary if cloning a binary release. If so, skip to*
|
||||
*"Installing Limine binaries".*
|
||||
|
||||
**Note that the build system does not support building from a directory whose**
|
||||
**full path contains spaces.**
|
||||
|
||||
### Building the toolchain
|
||||
|
||||
This step can take a long time, but it will ensure that the compiler will work with
|
||||
Limine. If on an x86_64 host, with GCC installed, you can also skip to the next
|
||||
paragraph.
|
||||
|
||||
The toolchain building process depends on the following packages: `make`, `wget`,
|
||||
The toolchain building process depends on the following packages: `bash`, `make`, `wget`,
|
||||
`gcc`, `g++`, `binutils`.
|
||||
|
||||
Building the toolchain can be accomplished by running:
|
||||
@ -72,7 +75,7 @@ make toolchain
|
||||
|
||||
### Building Limine
|
||||
|
||||
In order to build Limine, the following packages have to be installed: `make`, `git`,
|
||||
In order to build Limine, the following packages have to be installed: `bash`, `make`, `git`,
|
||||
`which`, `nasm`, `mtools`. Furthermore, either the toolchain must have been built in
|
||||
the previous paragraph, or `gcc` and `binutils` must also be installed.
|
||||
|
||||
|
@ -15,15 +15,15 @@ CFLAGS = -O2 -pipe -Wall -Wextra
|
||||
all: limine-install
|
||||
|
||||
install: all
|
||||
install -d $(DESTDIR)$(PREFIX)/bin
|
||||
install -s limine-install $(DESTDIR)$(PREFIX)/bin/
|
||||
install -d $(DESTDIR)$(PREFIX)/share
|
||||
install -d $(DESTDIR)$(PREFIX)/share/limine
|
||||
install -m 644 limine.sys $(DESTDIR)$(PREFIX)/share/limine/
|
||||
install -m 644 limine-cd.bin $(DESTDIR)$(PREFIX)/share/limine/
|
||||
install -m 644 limine-eltorito-efi.bin $(DESTDIR)$(PREFIX)/share/limine/
|
||||
install -m 644 limine-pxe.bin $(DESTDIR)$(PREFIX)/share/limine/
|
||||
install -m 644 BOOTX64.EFI $(DESTDIR)$(PREFIX)/share/limine/
|
||||
install -d "$(DESTDIR)$(PREFIX)/bin"
|
||||
install -s limine-install "$(DESTDIR)$(PREFIX)/bin/"
|
||||
install -d "$(DESTDIR)$(PREFIX)/share"
|
||||
install -d "$(DESTDIR)$(PREFIX)/share/limine"
|
||||
install -m 644 limine.sys "$(DESTDIR)$(PREFIX)/share/limine/"
|
||||
install -m 644 limine-cd.bin "$(DESTDIR)$(PREFIX)/share/limine/"
|
||||
install -m 644 limine-eltorito-efi.bin "$(DESTDIR)$(PREFIX)/share/limine/"
|
||||
install -m 644 limine-pxe.bin "$(DESTDIR)$(PREFIX)/share/limine/"
|
||||
install -m 644 BOOTX64.EFI "$(DESTDIR)$(PREFIX)/share/limine/"
|
||||
|
||||
clean:
|
||||
rm -f limine-hdd.o limine-install limine-install.exe
|
||||
@ -31,6 +31,6 @@ clean:
|
||||
limine-install: limine-install.c limine-hdd.o
|
||||
$(CC) $(CFLAGS) -std=c11 $^ -o $@
|
||||
|
||||
limine-hdd.o: $(LIMINE_HDD_BIN)
|
||||
cd `dirname $^` && \
|
||||
$(OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) `basename $^` $(BUILD_DIR)/$@
|
||||
limine-hdd.o: $(shell echo "$(LIMINE_HDD_BIN)" | sed 's/ /\\ /g')
|
||||
cd "`dirname $^`" && \
|
||||
$(OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) "`basename $^`" "$(BUILD_DIR)/$@"
|
||||
|
Loading…
Reference in New Issue
Block a user