:: commit ee45d739f440161eebe7f2680894b7f8cc870ee3

mintsuki <mintsuki@protonmail.com> — 2021-12-08 16:41

parents: 47db3e8ea8

build: Makefile improvements

diff --git a/Makefile b/Makefile
index 5fc4ce20..d8514116 100644
--- a/Makefile
+++ b/Makefile
@@ -6,20 +6,23 @@ PREFIX ?= /usr/local
 DESTDIR ?=
 
 BUILDDIR ?= $(shell pwd)/build
-BINDIR ?= $(BUILDDIR)/bin
+override BINDIR := $(BUILDDIR)/bin
 
-SPACE := $(subst ,, )
+override SPACE := $(subst ,, )
 
 MKESCAPE = $(subst $(SPACE),\ ,$(1))
 SHESCAPE = $(subst ','\'',$(1))
 
-export PATH := $(shell pwd)/toolchain/bin:$(PATH)
+override PATH := $(shell pwd)/toolchain/bin:$(PATH)
+export PATH
 
-NCPUS := $(shell nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 1)
+override NCPUS := $(shell nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 1)
 
-export LIMINE_VERSION := $(shell cat version 2>/dev/null || ( git describe --exact-match --tags `git log -n1 --pretty='%h'` 2>/dev/null || git log -n1 --pretty='%h' ) )
+override LIMINE_VERSION := $(shell cat version 2>/dev/null || ( git describe --exact-match --tags `git log -n1 --pretty='%h'` 2>/dev/null || git log -n1 --pretty='%h' ) )
+export LIMINE_VERSION
 
-export LIMINE_COPYRIGHT := $(shell grep Copyright LICENSE.md)
+override LIMINE_COPYRIGHT := $(shell grep Copyright LICENSE.md)
+export LIMINE_COPYRIGHT
 
 TOOLCHAIN ?= limine
 
@@ -37,7 +40,7 @@ MAKEOVERRIDES += TOOLCHAIN_CC+=--target=x86_64-elf
 endif
 endif
 
-CC_MACHINE := $(shell PATH='$(call SHESCAPE,$(PATH))' $(TOOLCHAIN_CC) -dumpmachine | dd bs=6 count=1 2>/dev/null)
+override CC_MACHINE := $(shell PATH='$(call SHESCAPE,$(PATH))' $(TOOLCHAIN_CC) -dumpmachine | dd bs=6 count=1 2>/dev/null)
 
 ifneq ($(MAKECMDGOALS), toolchain)
 ifneq ($(MAKECMDGOALS), distclean)
@@ -51,14 +54,12 @@ endif
 endif
 endif
 
-STAGE1_FILES := $(shell find -L ./stage1 -type f -name '*.asm' | sort)
+override STAGE1_FILES := $(shell find -L ./stage1 -type f -name '*.asm')
 
 .PHONY: all
-all:
-	$(MAKE) limine-uefi
-	$(MAKE) limine-uefi32
-	$(MAKE) limine-bios
+all: limine-uefi limine-uefi32 limine-bios
 	$(MAKE) limine-install
+	$(MAKE) '$(call SHESCAPE,$(BINDIR))/limine-eltorito-efi.bin'
 
 .PHONY: limine-install
 limine-install:
@@ -68,7 +69,7 @@ limine-install:
 
 .PHONY: clean
 clean: limine-bios-clean limine-uefi-clean limine-uefi32-clean
-	$(MAKE) -C '$(call SHESCAPE,$(BINDIR))' clean || true
+	rm -rf '$(call SHESCAPE,$(BINDIR))' '$(call SHESCAPE,$(BUILDDIR))/stage1'
 
 .PHONY: install
 install: all
@@ -109,20 +110,16 @@ $(call MKESCAPE,$(BINDIR))/limine-eltorito-efi.bin:
 	) || rm -f '$(call SHESCAPE,$@)'
 
 .PHONY: limine-uefi
-limine-uefi:
-	$(MAKE) gnu-efi
+limine-uefi: gnu-efi
 	$(MAKE) stage23-uefi
 	mkdir -p '$(call SHESCAPE,$(BINDIR))'
 	cp '$(call SHESCAPE,$(BUILDDIR))/stage23-uefi/BOOTX64.EFI' '$(call SHESCAPE,$(BINDIR))/'
-	$(MAKE) '$(call SHESCAPE,$(BINDIR))/limine-eltorito-efi.bin'
 
 .PHONY: limine-uefi32
-limine-uefi32:
-	$(MAKE) gnu-efi
+limine-uefi32: gnu-efi
 	$(MAKE) stage23-uefi32
 	mkdir -p '$(call SHESCAPE,$(BINDIR))'
 	cp '$(call SHESCAPE,$(BUILDDIR))/stage23-uefi32/BOOTIA32.EFI' '$(call SHESCAPE,$(BINDIR))/'
-	$(MAKE) '$(call SHESCAPE,$(BINDIR))/limine-eltorito-efi.bin'
 
 .PHONY: limine-bios-clean
 limine-bios-clean: stage23-bios-clean decompressor-clean
diff --git a/decompressor/Makefile b/decompressor/Makefile
index ba835fee..3ff3defd 100644
--- a/decompressor/Makefile
+++ b/decompressor/Makefile
@@ -4,14 +4,14 @@ endif
 
 BUILDDIR =
 
-SPACE := $(subst ,, )
+override SPACE := $(subst ,, )
 
 MKESCAPE = $(subst $(SPACE),\ ,$(1))
 SHESCAPE = $(subst ','\'',$(1))
 OBJESCAPE = $(subst .a ,.a' ',$(subst .o ,.o' ',$(call SHESCAPE,$(1))))
 
 ifeq ($(call MKESCAPE,$(BUILDDIR)), )
-	$(error $(call MKESCAPE,$(BUILDDIR)) not specified)
+	$(error BUILDDIR not specified)
 endif
 
 TOOLCHAIN ?= limine
@@ -33,7 +33,7 @@ endif
 WERROR = -Werror
 CFLAGS ?= -Os -pipe -Wall -Wextra $(WERROR)
 
-INTERNAL_CFLAGS = \
+override INTERNAL_CFLAGS := \
 	-m32 \
 	-march=i686 \
 	-mtune=generic \
@@ -56,22 +56,20 @@ INTERNAL_CFLAGS = \
 
 LDFLAGS ?=
 
-INTERNAL_LDFLAGS = \
+override INTERNAL_LDFLAGS := \
 	-melf_i386 \
 	-nostdlib \
 	-z max-page-size=0x1000 \
 	-static \
 	-Tlinker.ld
 
-.PHONY: all clean
+override C_FILES := $(shell find -L ./ -type f -name '*.c')
+override ASM_FILES := $(shell find -L ./ -type f -name '*.asm')
+override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM_FILES:.asm=.o) $(C_FILES:.c=.o))
+override HEADER_DEPS := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(C_FILES:.c=.d))
 
-C_FILES := $(shell find -L ./ -type f -name '*.c' | sort)
-ASM_FILES := $(shell find -L ./ -type f -name '*.asm' | sort)
-OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM_FILES:.asm=.o) $(C_FILES:.c=.o))
-HEADER_DEPS := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(C_FILES:.c=.d))
-
-all:
-	$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/decompressor.bin'
+.PHONY: all
+all: $(call MKESCAPE,$(BUILDDIR))/decompressor.bin
 
 $(call MKESCAPE,$(BUILDDIR))/decompressor.bin: $(OBJ) $(call MKESCAPE,$(BUILDDIR))/tinf/tinfgzip.o $(call MKESCAPE,$(BUILDDIR))/tinf/tinflate.o
 	$(TOOLCHAIN_LD) '$(call OBJESCAPE,$^)' $(LDFLAGS) $(INTERNAL_LDFLAGS) -o '$(call SHESCAPE,$(BUILDDIR))/decompressor.elf'
@@ -97,5 +95,6 @@ $(call MKESCAPE,$(BUILDDIR))/%.o: %.asm
 	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
 	nasm '$(call SHESCAPE,$<)' -f elf32 -o '$(call SHESCAPE,$@)'
 
+.PHONY: clean
 clean:
 	rm -rf '$(call SHESCAPE,$(BUILDDIR))'
diff --git a/stage23/Makefile b/stage23/Makefile
index c526a155..b50af2ea 100644
--- a/stage23/Makefile
+++ b/stage23/Makefile
@@ -5,26 +5,26 @@ endif
 TARGET =
 BUILDDIR =
 
-SRCDIR := $(shell pwd)
+override SRCDIR := $(shell pwd)
 
-SPACE := $(subst ,, )
+override SPACE := $(subst ,, )
 
 MKESCAPE = $(subst $(SPACE),\ ,$(1))
 SHESCAPE = $(subst ','\'',$(1))
 OBJESCAPE = $(subst .a ,.a' ',$(subst .o ,.o' ',$(call SHESCAPE,$(1))))
 
 ifeq ($(call MKESCAPE,$(BUILDDIR)), )
-	$(error $(call MKESCAPE,$(BUILDDIR)) not specified)
+	$(error BUILDDIR not specified)
 endif
 
 ifeq ($(TARGET), bios)
-	OBJCOPY_ARCH := elf32-i386
+override OBJCOPY_ARCH := elf32-i386
 else ifeq ($(TARGET), uefi)
-	OBJCOPY_ARCH := elf64-x86-64
+override OBJCOPY_ARCH := elf64-x86-64
 else ifeq ($(TARGET), uefi32)
-	OBJCOPY_ARCH := elf32-i386
+override OBJCOPY_ARCH := elf32-i386
 else
-	$(error Invalid target)
+$(error Invalid target)
 endif
 
 TOOLCHAIN ?= limine
@@ -61,9 +61,9 @@ E9_OUTPUT = false
 WERROR = -Werror
 CFLAGS ?= -O3 -g -pipe -Wall -Wextra $(WERROR)
 
-S2CFLAGS := $(CFLAGS) -Os
+override S2CFLAGS := $(CFLAGS) -Os
 
-INTERNAL_CFLAGS := \
+override INTERNAL_CFLAGS := \
 	-std=gnu11 \
 	-ffreestanding \
 	-fno-stack-protector \
@@ -86,7 +86,7 @@ INTERNAL_CFLAGS := \
 	-I'$(call SHESCAPE,$(BUILDDIR))/tinf'
 
 ifeq ($(TARGET), bios)
-	INTERNAL_CFLAGS += \
+override INTERNAL_CFLAGS += \
 		-Dbios=1 \
 		-Duefi=0 \
 		-m32 \
@@ -98,7 +98,7 @@ ifeq ($(TARGET), bios)
 endif
 
 ifeq ($(TARGET), uefi)
-	INTERNAL_CFLAGS32 := \
+override INTERNAL_CFLAGS32 := \
 		$(INTERNAL_CFLAGS) \
 		-Dbios=0 \
 		-Duefi=1 \
@@ -109,7 +109,7 @@ ifeq ($(TARGET), uefi)
 		-DGNU_EFI_USE_MS_ABI \
 		-fpie
 
-	INTERNAL_CFLAGS += \
+override INTERNAL_CFLAGS += \
 		-Dbios=0 \
 		-Duefi=1 \
 		-m64 \
@@ -124,7 +124,7 @@ ifeq ($(TARGET), uefi)
 endif
 
 ifeq ($(TARGET), uefi32)
-	INTERNAL_CFLAGS += \
+override INTERNAL_CFLAGS += \
 		-Dbios=0 \
 		-Duefi=1 \
 		-m32 \
@@ -139,19 +139,19 @@ endif
 
 LDFLAGS ?=
 
-INTERNAL_LDFLAGS := \
+override INTERNAL_LDFLAGS := \
 	-nostdlib \
 	-z max-page-size=0x1000
 
 ifeq ($(TARGET), bios)
-	INTERNAL_LDFLAGS += \
+override INTERNAL_LDFLAGS += \
 		-melf_i386 \
 		-static \
 		--build-id=sha1
 endif
 
 ifeq ($(TARGET), uefi)
-	INTERNAL_LDFLAGS += \
+override INTERNAL_LDFLAGS += \
 		-melf_x86_64 \
 		-static \
 		-pie \
@@ -160,7 +160,7 @@ ifeq ($(TARGET), uefi)
 endif
 
 ifeq ($(TARGET), uefi32)
-	INTERNAL_LDFLAGS += \
+override INTERNAL_LDFLAGS += \
 		-melf_i386 \
 		-static \
 		-pie \
@@ -170,36 +170,33 @@ endif
 
 .PHONY: all clean
 
-C_FILES := $(shell find -L ./ -type f -name '*.c' | sort)
+override C_FILES := $(shell find -L ./ -type f -name '*.c')
 ifeq ($(TARGET), bios)
-ASM32_FILES := $(shell find -L ./ -type f -name '*.asm32' | sort)
-ASMB_FILES := $(shell find -L ./ -type f -name '*.asmb' | sort)
+override ASM32_FILES := $(shell find -L ./ -type f -name '*.asm32')
+override ASMB_FILES := $(shell find -L ./ -type f -name '*.asmb')
 
-OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM32_FILES:.asm32=.o) $(ASMB_FILES:.asmb=.o) $(C_FILES:.c=.o))
+override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM32_FILES:.asm32=.o) $(ASMB_FILES:.asmb=.o) $(C_FILES:.c=.o))
 endif
 ifeq ($(TARGET), uefi)
-ASM64_FILES := $(shell find -L ./ -type f -name '*.asm64' | sort)
-ASM64U_FILES := $(shell find -L ./ -type f -name '*.asm64u' | sort)
+override ASM64_FILES := $(shell find -L ./ -type f -name '*.asm64')
+override ASM64U_FILES := $(shell find -L ./ -type f -name '*.asm64u')
 
-OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM64_FILES:.asm64=.o) $(ASM64U_FILES:.asm64u=.o) $(C_FILES:.c=.o))
+override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM64_FILES:.asm64=.o) $(ASM64U_FILES:.asm64u=.o) $(C_FILES:.c=.o))
 endif
 ifeq ($(TARGET), uefi32)
-ASM32_FILES := $(shell find -L ./ -type f -name '*.asm32' | sort)
-ASM32U_FILES := $(shell find -L ./ -type f -name '*.asm32u' | sort)
+override ASM32_FILES := $(shell find -L ./ -type f -name '*.asm32')
+override ASM32U_FILES := $(shell find -L ./ -type f -name '*.asm32u')
 
-OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM32_FILES:.asm32=.o) $(ASM32U_FILES:.asm32u=.o) $(C_FILES:.c=.o))
+override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM32_FILES:.asm32=.o) $(ASM32U_FILES:.asm32u=.o) $(C_FILES:.c=.o))
 endif
-HEADER_DEPS := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(C_FILES:.c=.d))
+override HEADER_DEPS := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(C_FILES:.c=.d))
 
 ifeq ($(TARGET), bios)
-all:
-	$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/limine_dbg.elf' '$(call SHESCAPE,$(BUILDDIR))/limine.sys' '$(call SHESCAPE,$(BUILDDIR))/stage2.bin' '$(call SHESCAPE,$(BUILDDIR))/stage2.bin.gz'
+all: $(call MKESCAPE,$(BUILDDIR))/limine_dbg.elf $(call MKESCAPE,$(BUILDDIR))/limine.sys $(call MKESCAPE,$(BUILDDIR))/stage2.bin.gz
 else ifeq ($(TARGET), uefi)
-all:
-	$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/BOOTX64.EFI'
+all: $(call MKESCAPE,$(BUILDDIR))/BOOTX64.EFI
 else ifeq ($(TARGET), uefi32)
-all:
-	$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/BOOTIA32.EFI'
+all: $(call MKESCAPE,$(BUILDDIR))/BOOTIA32.EFI
 endif
 
 $(call MKESCAPE,$(BUILDDIR))/sys/smp_trampoline.bin: sys/smp_trampoline.real
tab: 248 wrap: offon