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
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)

View File

@ -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 $@

View File

@ -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 \

View File

@ -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)