From 245bea9ef3bca55ebf38b8aa73bcbfb93f3f7306 Mon Sep 17 00:00:00 2001
From: mintsuki <mintsuki@protonmail.com>
Date: Wed, 22 Dec 2021 22:08:19 +0100
Subject: [PATCH] build: Misc Makefile improvements

---
 Makefile              | 10 ++++++----
 decompressor/Makefile |  6 +++---
 stage23/Makefile      | 30 +++++++++++++++---------------
 3 files changed, 24 insertions(+), 22 deletions(-)

diff --git a/Makefile b/Makefile
index 1a2c1f09..9f27fb04 100644
--- a/Makefile
+++ b/Makefile
@@ -9,9 +9,11 @@ BUILDDIR ?= $(shell pwd)/build
 override BINDIR := $(BUILDDIR)/bin
 
 override SPACE := $(subst ,, )
+override COMMA := ,
 
 MKESCAPE = $(subst $(SPACE),\ ,$(1))
 SHESCAPE = $(subst ','\'',$(1))
+NASMESCAPE = $(subst ','"'$(COMMA) \"'\"$(COMMA) '"',$(1))
 
 override PATH := $(shell pwd)/toolchain/bin:$(PATH)
 export PATH
@@ -73,7 +75,7 @@ clean: limine-bios-clean limine-uefi-clean limine-uefi32-clean
 .PHONY: install
 install: all
 	install -d '$(DESTDIR)$(PREFIX)/bin'
-	install -s '$(call SHESCAPE,$(BINDIR))/limine-install' '$(DESTDIR)$(PREFIX)/bin/'
+	install -s '$(call SHESCAPE,$(BINDIR))/limine-install' '$(DESTDIR)$(PREFIX)/bin/' || true
 	install -d '$(DESTDIR)$(PREFIX)/share'
 	install -d '$(DESTDIR)$(PREFIX)/share/limine'
 	install -m 644 '$(call SHESCAPE,$(BINDIR))/limine.sys' '$(DESTDIR)$(PREFIX)/share/limine/' || true
@@ -85,9 +87,9 @@ install: all
 
 $(call MKESCAPE,$(BUILDDIR))/stage1: $(STAGE1_FILES) $(call MKESCAPE,$(BUILDDIR))/decompressor/decompressor.bin $(call MKESCAPE,$(BUILDDIR))/stage23-bios/stage2.bin.gz
 	mkdir -p '$(call SHESCAPE,$(BINDIR))'
-	cd stage1/hdd && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call SHESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-hdd.bin'
-	cd stage1/cd  && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call SHESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-cd.bin'
-	cd stage1/pxe && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call SHESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-pxe.bin'
+	cd stage1/hdd && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-hdd.bin'
+	cd stage1/cd  && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-cd.bin'
+	cd stage1/pxe && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-pxe.bin'
 	cp '$(call SHESCAPE,$(BUILDDIR))/stage23-bios/limine.sys' '$(call SHESCAPE,$(BINDIR))/'
 	touch '$(call SHESCAPE,$(BUILDDIR))/stage1'
 
diff --git a/decompressor/Makefile b/decompressor/Makefile
index 6a18f4c9..5b94283d 100644
--- a/decompressor/Makefile
+++ b/decompressor/Makefile
@@ -86,17 +86,17 @@ $(call MKESCAPE,$(BUILDDIR))/tinf-copied: ../tinf/*
 	touch '$(call SHESCAPE,$(BUILDDIR))/tinf-copied'
 
 $(call MKESCAPE,$(BUILDDIR))/tinf/tinfgzip.o $(call MKESCAPE,$(BUILDDIR))/tinf/tinflate.o: $(call MKESCAPE,$(BUILDDIR))/tinf-copied
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	$(TOOLCHAIN_CC) $(CFLAGS) -Os $(INTERNAL_CFLAGS) -c '$(call SHESCAPE,$(@:.o=.c))' -o '$(call SHESCAPE,$@)'
 
 -include $(HEADER_DEPS)
 
 $(call MKESCAPE,$(BUILDDIR))/%.o: %.c $(call MKESCAPE,$(BUILDDIR))/tinf-copied
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	$(TOOLCHAIN_CC) $(CFLAGS) -Os $(INTERNAL_CFLAGS) -c '$(call SHESCAPE,$<)' -o '$(call SHESCAPE,$@)'
 
 $(call MKESCAPE,$(BUILDDIR))/%.o: %.asm
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	nasm '$(call SHESCAPE,$<)' -f elf32 -o '$(call SHESCAPE,$@)'
 
 .PHONY: clean
diff --git a/stage23/Makefile b/stage23/Makefile
index c46e0ec1..b0f43d64 100644
--- a/stage23/Makefile
+++ b/stage23/Makefile
@@ -212,16 +212,16 @@ all: $(call MKESCAPE,$(BUILDDIR))/BOOTIA32.EFI
 endif
 
 $(call MKESCAPE,$(BUILDDIR))/sys/smp_trampoline.bin: sys/smp_trampoline.real
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	nasm $< -f bin -o '$(call SHESCAPE,$@)'
 
 $(call MKESCAPE,$(BUILDDIR))/sys/smp_trampoline.o: $(call MKESCAPE,$(BUILDDIR))/sys/smp_trampoline.bin
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	cd '$(call SHESCAPE,$(BUILDDIR))/sys' && \
 		$(TOOLCHAIN_OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) smp_trampoline.bin '$(call SHESCAPE,$@)'
 
 $(call MKESCAPE,$(BUILDDIR))/font.o: font.bin
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	$(TOOLCHAIN_OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) font.bin '$(call SHESCAPE,$@)'
 
 $(call MKESCAPE,$(BUILDDIR))/tinf-copied: ../tinf/*
@@ -231,7 +231,7 @@ $(call MKESCAPE,$(BUILDDIR))/tinf-copied: ../tinf/*
 	touch '$(call SHESCAPE,$(BUILDDIR))/tinf-copied'
 
 $(call MKESCAPE,$(BUILDDIR))/tinf/tinfgzip.o $(call MKESCAPE,$(BUILDDIR))/tinf/tinflate.o: $(call MKESCAPE,$(BUILDDIR))/tinf-copied
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	$(TOOLCHAIN_CC) $(CFLAGS) $(INTERNAL_CFLAGS) -c '$(call SHESCAPE,$(@:.o=.c))' -o '$(call SHESCAPE,$@)'
 
 ifeq ($(TARGET), bios)
@@ -332,19 +332,19 @@ endif
 
 ifeq ($(TARGET), uefi)
 $(call MKESCAPE,$(BUILDDIR))/%.o: %.c $(call MKESCAPE,$(BUILDDIR))/tinf-copied $(call MKESCAPE,$(BUILDDIR))/reduced-gnu-efi
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	$(TOOLCHAIN_CC) $(CFLAGS) $(INTERNAL_CFLAGS) -c '$(call SHESCAPE,$<)' -o '$(call SHESCAPE,$@)'
 endif
 
 ifeq ($(TARGET), uefi32)
 $(call MKESCAPE,$(BUILDDIR))/%.o: %.c $(call MKESCAPE,$(BUILDDIR))/tinf-copied $(call MKESCAPE,$(BUILDDIR))/reduced-gnu-efi
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	$(TOOLCHAIN_CC) $(CFLAGS) $(INTERNAL_CFLAGS) -c '$(call SHESCAPE,$<)' -o '$(call SHESCAPE,$@)'
 endif
 
 ifeq ($(TARGET), bios)
 $(call MKESCAPE,$(BUILDDIR))/%.o: %.c $(call MKESCAPE,$(BUILDDIR))/tinf-copied
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	$(TOOLCHAIN_CC) $(CFLAGS) $(INTERNAL_CFLAGS) -c '$(call SHESCAPE,$<)' -o '$(call SHESCAPE,$@)'
 endif
 
@@ -352,7 +352,7 @@ endif
 
 ifeq ($(TARGET), bios)
 $(call MKESCAPE,$(BUILDDIR))/%.s2.o: %.s2.c
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	$(TOOLCHAIN_CC) $(S2CFLAGS) $(INTERNAL_CFLAGS) -c '$(call SHESCAPE,$<)' -o '$(call SHESCAPE,$@)'
 endif
 
@@ -360,7 +360,7 @@ endif
 
 ifeq ($(TARGET), uefi)
 $(call MKESCAPE,$(BUILDDIR))/%.32.o: %.32.c $(call MKESCAPE,$(BUILDDIR))/reduced-gnu-efi
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	$(TOOLCHAIN_CC) $(CFLAGS) $(INTERNAL_CFLAGS32) -c '$(call SHESCAPE,$<)' -o '$(call SHESCAPE,$@).32'
 	$(TOOLCHAIN_OBJCOPY) -I elf32-i386 -O elf64-x86-64 '$(call SHESCAPE,$@).32' '$(call SHESCAPE,$@)'
 	rm '$(call SHESCAPE,$@).32'
@@ -368,31 +368,31 @@ endif
 
 ifeq ($(TARGET), bios)
 $(call MKESCAPE,$(BUILDDIR))/%.o: %.asm32
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	nasm '$(call SHESCAPE,$<)' -F dwarf -g -Werror -f elf32 -o '$(call SHESCAPE,$@)'
 
 $(call MKESCAPE,$(BUILDDIR))/%.o: %.asmb
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	nasm '$(call SHESCAPE,$<)' -F dwarf -g -Werror -f elf32 -o '$(call SHESCAPE,$@)'
 endif
 
 ifeq ($(TARGET), uefi)
 $(call MKESCAPE,$(BUILDDIR))/%.o: %.asm64
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	nasm '$(call SHESCAPE,$<)' -F dwarf -g -Werror -f elf64 -o '$(call SHESCAPE,$@)'
 
 $(call MKESCAPE,$(BUILDDIR))/%.o: %.asm64u
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	nasm '$(call SHESCAPE,$<)' -F dwarf -g -Werror -f elf64 -o '$(call SHESCAPE,$@)'
 endif
 
 ifeq ($(TARGET), uefi32)
 $(call MKESCAPE,$(BUILDDIR))/%.o: %.asm32
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	nasm '$(call SHESCAPE,$<)' -F dwarf -g -Werror -f elf32 -o '$(call SHESCAPE,$@)'
 
 $(call MKESCAPE,$(BUILDDIR))/%.o: %.asm32u
-	dirname '$(call SHESCAPE,$@)' | xargs -d '\n' mkdir -p
+	mkdir -p "$$(dirname '$(call SHESCAPE,$@)')"
 	nasm '$(call SHESCAPE,$<)' -F dwarf -g -Werror -f elf32 -o '$(call SHESCAPE,$@)'
 endif