commit c2e51933f520e939426f1621eecbc05b48aeafaf parent 45e85e0b2a45977c15f973dca0362e32331f74d7 Author: Roberto E. Vargas Caballero <roberto.vargas@midokura.com> Date: Fri, 11 Nov 2022 12:48:30 +0100 build: Improve the build system Diffstat:
22 files changed, 86 insertions(+), 67 deletions(-)
diff --git a/config/toolchain/armclang.mk b/config/toolchain/armclang.mk @@ -1,3 +0,0 @@ -include $(PROJECTDIR)/config/clang.mk - -LINKSCRIPT = -T $(CONFDIR)/$(CONFDIR)/toolchain/armclang.ld diff --git a/config/toolchain/clang.mk b/config/toolchain/clang.mk @@ -1,10 +0,0 @@ -include $(PROJECTDIR)/config/toolchain/gnu.mk - -COMP = clang -ASM = clang -LINKER = ld.lld -OBJCOPY = llvm-objcopy -OBJDUMP = llvm-objdump -LINKSCRIPT = -T $(CONFDIR)/clang.ld -RCODE_CFLAGS = -mgeneral-regs-only -target aarch64-elf -fno-jump-tables -RCODE_ASFLAGS = -fintegrated-as -c -target aarch64-elf diff --git a/config/toolchain/gnu-darwin.mk b/config/toolchain/gnu-darwin.mk @@ -1,4 +0,0 @@ -include $(PROJECTDIR)/config/toolchain/gnu.mk - -TOOLLDFLAGS = -static -RANLIBFLAGS = -c diff --git a/config/toolchain/gnu.mk b/config/toolchain/gnu.mk @@ -1,19 +0,0 @@ -TOOLCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -fno-stack-protector -MD -Wall -TOOLLDFLAGS = -static -z nodefaultlib - -COMP = gcc -ASM = as -LINKER = ld -OBJDUMP = objdump -OBJCOPY = objcopy -RANLIB = ranlib -ARCHIVE = ar - -ARFLAGS = -U -LINKSCRIPT = -T $(CONFDIR)/toolchain/gnu.ld -NOPIE_CFLAGS = -nopie -NOPIE_LDFLAGS = -nopie -OS9_CFLAGS = -mgeneral-regs-only --no-pie -march=armv8.1-a -ARM32_CFLAGS = -marm -ARM32_LDFLAGS = -lgcc -ARMV81_ASFLAGS = -march=armv8.1-a diff --git a/config/toolchain/pcc.mk b/config/toolchain/pcc.mk @@ -1,3 +0,0 @@ -include $(PROJECTDIR)/config/toolchain/gnu.mk - -COMP = pcc diff --git a/config/amd64-darwin.mk b/scripts/build/conf/amd64-darwin.mk diff --git a/config/amd64-dragonfly.mk b/scripts/build/conf/amd64-dragonfly.mk diff --git a/config/amd64-linux.mk b/scripts/build/conf/amd64-linux.mk diff --git a/config/amd64-netbsd.mk b/scripts/build/conf/amd64-netbsd.mk diff --git a/config/amd64-openbsd.mk b/scripts/build/conf/amd64-openbsd.mk diff --git a/config/arm32-linux.mk b/scripts/build/conf/arm32-linux.mk diff --git a/config/arm64-linux.mk b/scripts/build/conf/arm64-linux.mk diff --git a/config/arm64-os9.mk b/scripts/build/conf/arm64-os9.mk diff --git a/config/toolchain/armclang.ld b/scripts/build/tool/armclang.ld diff --git a/scripts/build/tool/armclang.mk b/scripts/build/tool/armclang.mk @@ -0,0 +1,3 @@ +include $(BUILDDIR)/tool/clang.mk + +LINKSCRIPT = -T $(BUILDDIR)/tool/armclang.ld diff --git a/scripts/build/tool/clang.mk b/scripts/build/tool/clang.mk @@ -0,0 +1,10 @@ +include $(BUILDDIR)/tool/gnu.mk + +COMP = clang +ASM = clang +LINKER = ld.lld +OBJCOPY = llvm-objcopy +OBJDUMP = llvm-objdump +LINKSCRIPT = -T $(CONFDIR)/clang.ld +RCODE_CFLAGS = -mgeneral-regs-only -target aarch64-elf -fno-jump-tables +RCODE_ASFLAGS = -fintegrated-as -c -target aarch64-elf diff --git a/scripts/build/tool/gnu-darwin.mk b/scripts/build/tool/gnu-darwin.mk @@ -0,0 +1,4 @@ +include $(BUILDDIR)/tool/gnu.mk + +TOOLLDFLAGS = -static +RANLIBFLAGS = -c diff --git a/config/toolchain/gnu.ld b/scripts/build/tool/gnu.ld diff --git a/scripts/build/tool/gnu.mk b/scripts/build/tool/gnu.mk @@ -0,0 +1,19 @@ +TOOLCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -fno-stack-protector -MD -Wall +TOOLLDFLAGS = -static -z nodefaultlib + +COMP = gcc +ASM = as +LINKER = ld +OBJDUMP = objdump +OBJCOPY = objcopy +RANLIB = ranlib +ARCHIVE = ar + +ARFLAGS = -U +LINKSCRIPT = -T $(BUILDDIR)/tool/gnu.ld +NOPIE_CFLAGS = -nopie +NOPIE_LDFLAGS = -nopie +OS9_CFLAGS = -mgeneral-regs-only --no-pie -march=armv8.1-a +ARM32_CFLAGS = -marm +ARM32_LDFLAGS = -lgcc +ARMV81_ASFLAGS = -march=armv8.1-a diff --git a/scripts/build/tool/pcc.mk b/scripts/build/tool/pcc.mk @@ -0,0 +1,3 @@ +include $(BUILDDIR)/tool/gnu.mk + +COMP = pcc diff --git a/scripts/rules.mk b/scripts/rules.mk @@ -1,8 +1,11 @@ +# Define the target all as default +all: + +# Define default configuration variables CONF = amd64-linux TOOL = gnu -include $(PROJECTDIR)/config/$(CONF).mk -include $(PROJECTDIR)/config/toolchain/$(TOOL).mk +# Define helper macros for project directories INCDIR = $(PROJECTDIR)/include LIBDIR = $(PROJECTDIR)/lib BINDIR = $(PROJECTDIR)/bin @@ -10,36 +13,52 @@ DRVDIR = $(PROJECTDIR)/drivers FSDIR = $(PROJECTDIR)/fs SRCDIR = $(PROJECTDIR)/src SCRIPTDIR = $(PROJECTDIR)/scripts +BUILDDIR = $(PROJECTDIR)/scripts/build CONFDIR = $(PROJECTDIR)/config -INCLUDES = -I$(INCDIR) -I$(INCDIR)/bits/$(ARCH)/ -I$(INCDIR)/bits/$(SYS) -ENVIRON = $(SCRIPTDIR)/env.sh -LIBDEP = $(LIBDIR)/libk.a \ - $(LIBDIR)/libc.a \ - $(LIBDIR)/lib9p.a \ - -PROJ_CFLAGS = $(MORECFLAGS) \ - $(INCLUDES) \ - $(TOOLCFLAGS) \ - $(SYSCFLAGS) \ - $(CFLAGS) +ENVIRON = $(SCRIPTDIR)/env.sh -PROJ_LDFLAGS = $(MORELDFLAGS) \ - -L$(LIBDIR) \ - $(TOOLLDFLAGS) \ - $(SYSLDFLAGS) \ - $(LDFLAGS) +# library dependences helpers +LIBDEP =\ + $(LIBDIR)/libk.a\ + $(LIBDIR)/libc.a\ + $(LIBDIR)/lib9p.a\ -PROJ_ASFLAGS = $(MOREASFLAGS) \ - $(TOOLASFLAGS) \ - $(SYSASFLAGS) \ - $(ASFLAGS) +# Include configuration definitions +include $(BUILDDIR)/conf/$(CONF).mk +include $(BUILDDIR)/tool/$(TOOL).mk -PROJ_LDLIBS = $(MORELDLIBS) \ - $(TOOLLDLIBS) \ - $(SYSLDLIBS) \ - $(LDLIBS) +# Locations for -I or -L in compiler, assembler or linker +INCLUDES = -I$(INCDIR) -I$(INCDIR)/bits/$(ARCH)/ -I$(INCDIR)/bits/$(SYS) +# Definition of command line for cc, as, ld and emu +PROJ_CFLAGS =\ + $(MORECFLAGS)\ + $(INCLUDES)\ + $(TOOLCFLAGS)\ + $(SYSCFLAGS)\ + $(CFLAGS) + +PROJ_LDFLAGS =\ + $(MORELDFLAGS)\ + -L$(LIBDIR)\ + $(TOOLLDFLAGS)\ + $(SYSLDFLAGS)\ + $(LDFLAGS) + +PROJ_ASFLAGS =\ + $(MOREASFLAGS)\ + $(TOOLASFLAGS)\ + $(SYSASFLAGS)\ + $(ASFLAGS) + +PROJ_LDLIBS =\ + $(MORELDLIBS)\ + $(TOOLLDLIBS)\ + $(SYSLDLIBS)\ + $(LDLIBS) + +# Definition of tools CC = $(CROSS_COMPILE)$(COMP) AS = $(CROSS_COMPILE)$(ASM) LD = $(CROSS_COMPILE)$(LINKER) diff --git a/src/os9/hosted/Makefile b/src/os9/hosted/Makefile @@ -10,12 +10,12 @@ OBJS =\ $(LIBDIR)/crt.o\ $(SRCDIR)/os9/builtin.o\ -TARGET = $(BINDIR)/os9.elf +TARGET = $(BINDIR)/$(OS9).elf all: $(TARGET) $(DIRS): FORCE cd $@ && $(MAKE) -$(BINDIR)/os9.elf: $(OBJS) $(LIBDEP) +$(TARGET): $(OBJS) $(LIBDEP) $(LD) $(PROJ_LDFLAGS) $(OBJS) $(PROJ_LDLIBS) -lk -lc -o $@