build: Misc build system improvements

This commit is contained in:
mintsuki 2021-08-07 07:26:34 +02:00
parent 5ffce7c42e
commit 7cca9dd42f
4 changed files with 48 additions and 37 deletions

View File

@ -1,19 +1,27 @@
PREFIX = /usr/local PREFIX ?= /usr/local
DESTDIR = 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) 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) ; ), ) ifeq ($(shell PATH="$(PATH)" command -v $(TOOLCHAIN_CC) ; ), )
TOOLCHAIN_CC := cc override TOOLCHAIN_CC := cc
endif 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), toolchain)
ifneq ($(MAKECMDGOALS), distclean) ifneq ($(MAKECMDGOALS), distclean)

View File

@ -4,23 +4,24 @@ ifeq ($(BUILDDIR), )
$(error BUILDDIR not specified) $(error BUILDDIR not specified)
endif endif
TOOLCHAIN = limine TOOLCHAIN ?= limine
TOOLCHAIN_CC = $(TOOLCHAIN)-gcc TOOLCHAIN_CC ?= $(TOOLCHAIN)-gcc
TOOLCHAIN_LD = $(TOOLCHAIN)-ld TOOLCHAIN_LD ?= $(TOOLCHAIN)-ld
TOOLCHAIN_OBJCOPY = $(TOOLCHAIN)-objcopy TOOLCHAIN_OBJCOPY ?= $(TOOLCHAIN)-objcopy
ifeq ($(shell command -v $(TOOLCHAIN_CC) ; ), ) ifeq ($(shell command -v $(TOOLCHAIN_CC) ; ), )
TOOLCHAIN_CC := cc override TOOLCHAIN_CC := cc
endif endif
ifeq ($(shell command -v $(TOOLCHAIN_LD) ; ), ) ifeq ($(shell command -v $(TOOLCHAIN_LD) ; ), )
TOOLCHAIN_LD := ld override TOOLCHAIN_LD := ld
endif endif
ifeq ($(shell command -v $(TOOLCHAIN_OBJCOPY) ; ), ) ifeq ($(shell command -v $(TOOLCHAIN_OBJCOPY) ; ), )
TOOLCHAIN_OBJCOPY := objcopy override TOOLCHAIN_OBJCOPY := objcopy
endif endif
CFLAGS = -Os -pipe -Wall -Wextra -Werror WERROR = -Werror
CFLAGS ?= -Os -pipe -Wall -Wextra $(WERROR)
INTERNAL_CFLAGS = \ INTERNAL_CFLAGS = \
-m32 \ -m32 \
@ -41,7 +42,7 @@ INTERNAL_CFLAGS = \
-MMD \ -MMD \
-I. -I.
LDFLAGS = LDFLAGS ?=
INTERNAL_LDFLAGS = \ INTERNAL_LDFLAGS = \
-melf_i386 \ -melf_i386 \
@ -71,7 +72,7 @@ $(BUILDDIR)/decompressor.bin: $(OBJ)
-include $(HEADER_DEPS) -include $(HEADER_DEPS)
$(BUILDDIR)/%.o: %.c $(BUILDDIR)/%.o: %.c
$(TOOLCHAIN_CC) $(CFLAGS) $(INTERNAL_CFLAGS) -c $< -o $@ $(TOOLCHAIN_CC) $(CFLAGS) -Os $(INTERNAL_CFLAGS) -c $< -o $@
$(BUILDDIR)/%.o: %.asm $(BUILDDIR)/%.o: %.asm
nasm $< -f elf32 -o $@ nasm $< -f elf32 -o $@

View File

@ -6,41 +6,41 @@ ifeq ($(BUILDDIR), )
endif endif
ifeq ($(TARGET), bios) ifeq ($(TARGET), bios)
OBJCOPY_ARCH = elf32-i386 OBJCOPY_ARCH := elf32-i386
else ifeq ($(TARGET), uefi) else ifeq ($(TARGET), uefi)
OBJCOPY_ARCH = elf64-x86-64 OBJCOPY_ARCH := elf64-x86-64
else ifeq ($(TARGET), uefi32) else ifeq ($(TARGET), uefi32)
OBJCOPY_ARCH = elf32-i386 OBJCOPY_ARCH := elf32-i386
else else
$(error Invalid target) $(error Invalid target)
endif endif
TOOLCHAIN = limine TOOLCHAIN ?= limine
TOOLCHAIN_CC = $(TOOLCHAIN)-gcc TOOLCHAIN_CC ?= $(TOOLCHAIN)-gcc
TOOLCHAIN_LD = $(TOOLCHAIN)-ld TOOLCHAIN_LD ?= $(TOOLCHAIN)-ld
TOOLCHAIN_AR = $(TOOLCHAIN)-ar TOOLCHAIN_AR ?= $(TOOLCHAIN)-ar
TOOLCHAIN_OBJCOPY = $(TOOLCHAIN)-objcopy TOOLCHAIN_OBJCOPY ?= $(TOOLCHAIN)-objcopy
TOOLCHAIN_OBJDUMP = $(TOOLCHAIN)-objdump TOOLCHAIN_OBJDUMP ?= $(TOOLCHAIN)-objdump
TOOLCHAIN_READELF = $(TOOLCHAIN)-readelf TOOLCHAIN_READELF ?= $(TOOLCHAIN)-readelf
ifeq ($(shell command -v $(TOOLCHAIN_CC) ; ), ) ifeq ($(shell command -v $(TOOLCHAIN_CC) ; ), )
TOOLCHAIN_CC := cc override TOOLCHAIN_CC := cc
endif endif
ifeq ($(shell command -v $(TOOLCHAIN_LD) ; ), ) ifeq ($(shell command -v $(TOOLCHAIN_LD) ; ), )
TOOLCHAIN_LD := ld override TOOLCHAIN_LD := ld
endif endif
ifeq ($(shell command -v $(TOOLCHAIN_AR) ; ), ) ifeq ($(shell command -v $(TOOLCHAIN_AR) ; ), )
TOOLCHAIN_AR := ar override TOOLCHAIN_AR := ar
endif endif
ifeq ($(shell command -v $(TOOLCHAIN_OBJCOPY) ; ), ) ifeq ($(shell command -v $(TOOLCHAIN_OBJCOPY) ; ), )
TOOLCHAIN_OBJCOPY := objcopy override TOOLCHAIN_OBJCOPY := objcopy
endif endif
ifeq ($(shell command -v $(TOOLCHAIN_OBJDUMP) ; ), ) ifeq ($(shell command -v $(TOOLCHAIN_OBJDUMP) ; ), )
TOOLCHAIN_OBJDUMP := objdump override TOOLCHAIN_OBJDUMP := objdump
endif endif
ifeq ($(shell command -v $(TOOLCHAIN_READELF) ; ), ) ifeq ($(shell command -v $(TOOLCHAIN_READELF) ; ), )
TOOLCHAIN_READELF := readelf override TOOLCHAIN_READELF := readelf
endif endif
COM_OUTPUT = false 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`)" ) ) ) 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 WERROR = -Werror
CFLAGS = -O3 -g -pipe -Wall -Wextra $(WERROR) CFLAGS ?= -O3 -g -pipe -Wall -Wextra $(WERROR)
S2CFLAGS := $(CFLAGS) -Os S2CFLAGS := $(CFLAGS) -Os
@ -120,7 +120,7 @@ ifeq ($(TARGET), uefi32)
-fpie -fpie
endif endif
LDFLAGS = LDFLAGS ?=
INTERNAL_LDFLAGS := \ INTERNAL_LDFLAGS := \
-nostdlib \ -nostdlib \

View File

@ -2,7 +2,9 @@
set -e set -e
./test_pipefail.sh && set -o pipefail SCRIPT_PATH="$(dirname $0)"
"$SCRIPT_PATH/test_pipefail.sh" && set -o pipefail
TMP1=$(mktemp) TMP1=$(mktemp)
TMP2=$(mktemp) TMP2=$(mktemp)