build: Misc build system improvements
diff --git a/Makefile b/Makefile
index ff79a0c3..d77e0ae5 100644
--- a/Makefile
+++ b/Makefile
@@ -1,19 +1,27 @@
-PREFIX = /usr/local
-DESTDIR =
+PREFIX ?= /usr/local
+DESTDIR ?=
-PATH := $(shell pwd)/toolchain/bin:$(PATH)
+export PATH := $(shell pwd)/toolchain/bin:$(PATH)
NCPUS := $(shell nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 1)
-TOOLCHAIN = limine
+TOOLCHAIN ?= limine
-TOOLCHAIN_CC = $(TOOLCHAIN)-gcc
+TOOLCHAIN_CC ?= $(TOOLCHAIN)-gcc
-ifeq ($(shell export "PATH=$(PATH)"; command -v $(TOOLCHAIN_CC) ; ), )
-TOOLCHAIN_CC := cc
+ifeq ($(shell PATH="$(PATH)" command -v $(TOOLCHAIN_CC) ; ), )
+override TOOLCHAIN_CC := cc
endif
-CC_MACHINE := $(shell export "PATH=$(PATH)"; $(TOOLCHAIN_CC) -dumpmachine | dd bs=6 count=1 2>/dev/null)
+ifeq ($(TOOLCHAIN_CC), clang)
+TOOLCHAIN_CC += --target=x86_64-elf
+ifeq ($(TOOLCHAIN_CC), clang)
+override TOOLCHAIN_CC += --target=x86_64-elf
+MAKEOVERRIDES += TOOLCHAIN_CC+=--target=x86_64-elf
+endif
+endif
+
+CC_MACHINE := $(shell PATH="$(PATH)" $(TOOLCHAIN_CC) -dumpmachine | dd bs=6 count=1 2>/dev/null)
ifneq ($(MAKECMDGOALS), toolchain)
ifneq ($(MAKECMDGOALS), distclean)
diff --git a/decompressor/Makefile b/decompressor/Makefile
index d9cb8fe1..07caef48 100644
--- a/decompressor/Makefile
+++ b/decompressor/Makefile
@@ -4,23 +4,24 @@ ifeq ($(BUILDDIR), )
$(error BUILDDIR not specified)
endif
-TOOLCHAIN = limine
+TOOLCHAIN ?= limine
-TOOLCHAIN_CC = $(TOOLCHAIN)-gcc
-TOOLCHAIN_LD = $(TOOLCHAIN)-ld
-TOOLCHAIN_OBJCOPY = $(TOOLCHAIN)-objcopy
+TOOLCHAIN_CC ?= $(TOOLCHAIN)-gcc
+TOOLCHAIN_LD ?= $(TOOLCHAIN)-ld
+TOOLCHAIN_OBJCOPY ?= $(TOOLCHAIN)-objcopy
ifeq ($(shell command -v $(TOOLCHAIN_CC) ; ), )
-TOOLCHAIN_CC := cc
+override TOOLCHAIN_CC := cc
endif
ifeq ($(shell command -v $(TOOLCHAIN_LD) ; ), )
-TOOLCHAIN_LD := ld
+override TOOLCHAIN_LD := ld
endif
ifeq ($(shell command -v $(TOOLCHAIN_OBJCOPY) ; ), )
-TOOLCHAIN_OBJCOPY := objcopy
+override TOOLCHAIN_OBJCOPY := objcopy
endif
-CFLAGS = -Os -pipe -Wall -Wextra -Werror
+WERROR = -Werror
+CFLAGS ?= -Os -pipe -Wall -Wextra $(WERROR)
INTERNAL_CFLAGS = \
-m32 \
@@ -41,7 +42,7 @@ INTERNAL_CFLAGS = \
-MMD \
-I.
-LDFLAGS =
+LDFLAGS ?=
INTERNAL_LDFLAGS = \
-melf_i386 \
@@ -71,7 +72,7 @@ $(BUILDDIR)/decompressor.bin: $(OBJ)
-include $(HEADER_DEPS)
$(BUILDDIR)/%.o: %.c
- $(TOOLCHAIN_CC) $(CFLAGS) $(INTERNAL_CFLAGS) -c $< -o $@
+ $(TOOLCHAIN_CC) $(CFLAGS) -Os $(INTERNAL_CFLAGS) -c $< -o $@
$(BUILDDIR)/%.o: %.asm
nasm $< -f elf32 -o $@
diff --git a/stage23/Makefile b/stage23/Makefile
index c04d79d2..02c936dc 100644
--- a/stage23/Makefile
+++ b/stage23/Makefile
@@ -6,41 +6,41 @@ ifeq ($(BUILDDIR), )
endif
ifeq ($(TARGET), bios)
- OBJCOPY_ARCH = elf32-i386
+ OBJCOPY_ARCH := elf32-i386
else ifeq ($(TARGET), uefi)
- OBJCOPY_ARCH = elf64-x86-64
+ OBJCOPY_ARCH := elf64-x86-64
else ifeq ($(TARGET), uefi32)
- OBJCOPY_ARCH = elf32-i386
+ OBJCOPY_ARCH := elf32-i386
else
$(error Invalid target)
endif
-TOOLCHAIN = limine
+TOOLCHAIN ?= limine
-TOOLCHAIN_CC = $(TOOLCHAIN)-gcc
-TOOLCHAIN_LD = $(TOOLCHAIN)-ld
-TOOLCHAIN_AR = $(TOOLCHAIN)-ar
-TOOLCHAIN_OBJCOPY = $(TOOLCHAIN)-objcopy
-TOOLCHAIN_OBJDUMP = $(TOOLCHAIN)-objdump
-TOOLCHAIN_READELF = $(TOOLCHAIN)-readelf
+TOOLCHAIN_CC ?= $(TOOLCHAIN)-gcc
+TOOLCHAIN_LD ?= $(TOOLCHAIN)-ld
+TOOLCHAIN_AR ?= $(TOOLCHAIN)-ar
+TOOLCHAIN_OBJCOPY ?= $(TOOLCHAIN)-objcopy
+TOOLCHAIN_OBJDUMP ?= $(TOOLCHAIN)-objdump
+TOOLCHAIN_READELF ?= $(TOOLCHAIN)-readelf
ifeq ($(shell command -v $(TOOLCHAIN_CC) ; ), )
-TOOLCHAIN_CC := cc
+override TOOLCHAIN_CC := cc
endif
ifeq ($(shell command -v $(TOOLCHAIN_LD) ; ), )
-TOOLCHAIN_LD := ld
+override TOOLCHAIN_LD := ld
endif
ifeq ($(shell command -v $(TOOLCHAIN_AR) ; ), )
-TOOLCHAIN_AR := ar
+override TOOLCHAIN_AR := ar
endif
ifeq ($(shell command -v $(TOOLCHAIN_OBJCOPY) ; ), )
-TOOLCHAIN_OBJCOPY := objcopy
+override TOOLCHAIN_OBJCOPY := objcopy
endif
ifeq ($(shell command -v $(TOOLCHAIN_OBJDUMP) ; ), )
-TOOLCHAIN_OBJDUMP := objdump
+override TOOLCHAIN_OBJDUMP := objdump
endif
ifeq ($(shell command -v $(TOOLCHAIN_READELF) ; ), )
-TOOLCHAIN_READELF := readelf
+override TOOLCHAIN_READELF := readelf
endif
COM_OUTPUT = false
@@ -50,7 +50,7 @@ BUILD_ID := $(shell dd if=/dev/urandom count=8 bs=1 2>/dev/null | od -An -t x4 |
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' && echo -n "(`git branch --show-current`)" ) ) )
WERROR = -Werror
-CFLAGS = -O3 -g -pipe -Wall -Wextra $(WERROR)
+CFLAGS ?= -O3 -g -pipe -Wall -Wextra $(WERROR)
S2CFLAGS := $(CFLAGS) -Os
@@ -120,7 +120,7 @@ ifeq ($(TARGET), uefi32)
-fpie
endif
-LDFLAGS =
+LDFLAGS ?=
INTERNAL_LDFLAGS := \
-nostdlib \
diff --git a/stage23/gensyms.sh b/stage23/gensyms.sh
index 01628ba3..b32c9433 100755
--- a/stage23/gensyms.sh
+++ b/stage23/gensyms.sh
@@ -2,7 +2,9 @@
set -e
-./test_pipefail.sh && set -o pipefail
+SCRIPT_PATH="$(dirname $0)"
+
+"$SCRIPT_PATH/test_pipefail.sh" && set -o pipefail
TMP1=$(mktemp)
TMP2=$(mktemp)
