commit 8c56561c267d01b974920083f9b48eda3cbeeda5 parent e1019a640ea5b9981f083910c57c309cb3463ae6 Author: Roberto Vargas <roberto.vargas@arm.com> Date: Wed, 16 Jan 2019 16:47:18 +0000 Separate target configuration and toolchain configuration Having configuration files that mix the target configuration and the toolchain configuration creates problems for croos compilation. Change-Id: Ib13b84dfc8c3c4376f4eb22323af3bba0f047b32 Diffstat:
34 files changed, 109 insertions(+), 169 deletions(-)
diff --git a/Makefile b/Makefile @@ -17,15 +17,15 @@ src: lib bin bin lib: mkdir $@ -drivers src target: $(ENV) FORCE - +@. $(ENV) && cd $@ && $(MAKE) +drivers src target: $(ENVIRON) FORCE + +@. $(ENVIRON) && cd $@ && $(MAKE) -gen: $(ENV) FORCE - +@. $(ENV) && cd src && $(MAKE) gen +gen: $(ENVIRON) FORCE + +@. $(ENVIRON) && cd src && $(MAKE) gen -$(DIRS): $(ENV) +$(DIRS): $(ENVIRON) -$(ENV): +$(ENVIRON): @rm -f $@; \ trap 'r=$?;rm -f $$$$.tmp;exit $r' EXIT HUP INT QUIT TERM; \ echo PATH=$$PATH:$$PWD/$(SCRIPTDIR):. > $$$$.tmp && \ @@ -37,11 +37,12 @@ $(ENV): echo AR=\"$(AR)\" >> $$$$.tmp && \ echo RL=\"$(RL)\" >> $$$$.tmp && \ echo MAKE=\"$(MAKE)\" >> $$$$.tmp && \ + echo ARFLAGS=\"$(ARFLAGS)\" >> $$$$.tmp && \ echo RLFLAGS=\"$(RLFLAGS)\" >> $$$$.tmp && \ echo export PATH CC AS LD OC MAKE >> $$$$.tmp && \ - echo export OD RLFLAGS NM AR RL >> $$$$.tmp && \ + echo export OD RLFLAGS NM AR RL ARFLAGS >> $$$$.tmp && \ mv $$$$.tmp $@ -clean: +clean: $(ENVIRON) $(FORALL) - rm -rf lib bin $(ENV) + rm -rf lib bin $(ENVIRON) diff --git a/config/amd64-darwin-clang.mk b/config/amd64-darwin-clang.mk @@ -1,14 +0,0 @@ -ARCH = amd64 -SYS = darwin -ABI = amd64-darwin -MODE = hosted -SYSASFLAGS = -fintegrated-as -c -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -fno-stack-protector -MD -Wall -mno-sse -SYSLDFLAGS = -static -RANLIBFLAGS = -c -COMP = clang -ASM = clang -LINKER = ld -OBJDUMP = objdump -RANLIB = ranlib -ARCHIVE = ar diff --git a/config/amd64-darwin.mk b/config/amd64-darwin.mk @@ -0,0 +1,4 @@ +ARCH = amd64 +SYS = darwin +ABI = amd64-darwin +MODE = hosted diff --git a/config/amd64-dragonfly.mk b/config/amd64-dragonfly.mk @@ -2,11 +2,3 @@ ARCH = amd64 SYS = dragonfly ABI = amd64-posix MODE = hosted -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -fno-stack-protector -MD -Wall -SYSLDFLAGS = -static -z nodefaultlib -COMP = gcc -ASM = as -LINKER = ld -OBJDUMP = objdump -RANLIB = ranlib -ARCHIVE = ar diff --git a/config/amd64-linux-clang.mk b/config/amd64-linux-clang.mk @@ -1,13 +0,0 @@ -ARCH = amd64 -SYS = linux -ABI = amd64-posix -MODE = hosted -SYSASFLAGS = -fintegrated-as -c -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -fno-stack-protector -MD -Wall -SYSLDFLAGS = -static -z nodefaultlib -COMP = clang -ASM = clang -LINKER = ld.lld -OBJDUMP = llvm-objdump -RANLIB = ranlib -ARCHIVE = ar diff --git a/config/amd64-linux-pcc.mk b/config/amd64-linux-pcc.mk @@ -1,12 +0,0 @@ -ARCH = amd64 -SYS = linux -ABI = amd64-posix -MODE = hosted -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -Wall -SYSLDFLAGS = -static -z nodefaultlib -COMP = pcc -ASM = as -LINKER = ld -OBJDUMP = objdump -RANLIB = ranlib -ARCHIVE = ar diff --git a/config/amd64-linux.mk b/config/amd64-linux.mk @@ -2,11 +2,3 @@ ARCH = amd64 SYS = linux ABI = amd64-posix MODE = hosted -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -fno-stack-protector -MD -Wall -SYSLDFLAGS = -static -z nodefaultlib -COMP = gcc -ASM = as -LINKER = ld -OBJDUMP = objdump -RANLIB = ranlib -ARCHIVE = ar diff --git a/config/amd64-netbsd.mk b/config/amd64-netbsd.mk @@ -2,11 +2,3 @@ ARCH = amd64 SYS = netbsd ABI = amd64-posix MODE = hosted -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -fno-stack-protector -MD -Wall -SYSLDFLAGS = -static -z nodefaultlib -COMP = gcc -ASM = as -LINKER = ld -OBJDUMP = objdump -RANLIB = ranlib -ARCHIVE = ar diff --git a/config/amd64-openbsd.mk b/config/amd64-openbsd.mk @@ -2,11 +2,5 @@ ARCH = amd64 SYS = openbsd ABI = amd64-posix MODE = hosted -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -fno-stack-protector -MD -Wall -nopie -SYSLDFLAGS = -static -z nodefaultlib -nopie -COMP = gcc -ASM = as -LINKER = ld -OBJDUMP = objdump -RANLIB = ranlib -ARCHIVE = ar +SYSCFLAGS = $(NOPIE_CFLAGS) +SYSLDFLAGS = $(NOPIE_LDFLAGS) diff --git a/config/arm32-linux.mk b/config/arm32-linux.mk @@ -9,13 +9,6 @@ ARCH = arm32 SYS = linux ABI = arm32-posix MODE = hosted -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -fno-stack-protector -MD -Wall -marm -SYSLDFLAGS = -static -z nodefaultlib -SYSLDLIBS = -lgcc -COMP = gcc -ASM = as -LINKER = ld +SYSCFLAGS = $(ARM32_CFLAGS) +SYSLDFLAGS = $(ARM32_LDFLAGS) EMU = qemu-arm-static -OBJDUMP = objdump -RANLIB = ranlib -ARCHIVE = ar diff --git a/config/arm64-linux.mk b/config/arm64-linux.mk @@ -2,12 +2,4 @@ ARCH = arm64 SYS = linux ABI = arm64-posix MODE = hosted -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -fno-stack-protector -MD -Wall -SYSLDFLAGS = -static -z nodefaultlib -COMP = gcc -ASM = as -LINKER = ld EMU = qemu-aarch64-static -OBJDUMP = objdump -RANLIB = ranlib -ARCHIVE = ar diff --git a/config/rmode-rcode-armclang.mk b/config/rmode-rcode-armclang.mk @@ -1,13 +0,0 @@ -ARCH = rmode -SYS = rcode -MODE = native -SYSASFLAGS = -fintegrated-as -c -target aarch64-arm-none-eabi -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -mgeneral-regs-only -fno-stack-protector -MD -Wall -target aarch64-arm-none-eabi -fno-jump-tables -SYSLDFLAGS = -static -z nodefaultlib -T $(CONFDIR)/rmode-rcode-armclang.ld -COMP = armclang -ASM = armclang -LINKER = ld.lld -OBJCOPY = llvm-objcopy -OBJDUMP = llvm-objdump -RANLIB = ranlib -ARCHIVE = ar diff --git a/config/rmode-rcode-clang.mk b/config/rmode-rcode-clang.mk @@ -1,13 +0,0 @@ -ARCH = rmode -SYS = rcode -MODE = native -SYSASFLAGS = -fintegrated-as -c -target aarch64-elf -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -mgeneral-regs-only -fno-stack-protector -MD -Wall -target aarch64-elf -fno-jump-tables -SYSLDFLAGS = -static -z nodefaultlib -T $(CONFDIR)/rmode-rcode.ld -COMP = clang -ASM = clang -LINKER = ld.lld -OBJCOPY = llvm-objcopy -OBJDUMP = llvm-objdump -RANLIB = ranlib -ARCHIVE = ar diff --git a/config/rmode-rcode.mk b/config/rmode-rcode.mk @@ -1,12 +1,5 @@ ARCH = rmode SYS = rcode MODE = native -SYSCFLAGS = -g -static -nostdinc -ffreestanding -std=c99 -mgeneral-regs-only -fno-stack-protector -MD -Wall -SYSLDFLAGS = -static -z nodefaultlib -T $(CONFDIR)/rmode-rcode.ld -COMP = gcc -ASM = as -LINKER = ld -OBJCOPY = objcopy -OBJDUMP = objdump -RANLIB = ranlib -ARCHIVE = ar +SYSASFLAGS = $(RCODE_ASFLAGS) +SYSCFLAGS = $(RCODE_CFLAGS) diff --git a/config/rmode-rcode.ld b/config/toolchain/armclang.ld diff --git a/config/toolchain/armclang.mk b/config/toolchain/armclang.mk @@ -0,0 +1,5 @@ +include $(PROJECTDIR)/config/clang.mk + +RMODE_CFLAGS = -mgeneral-regs-only -target aarch64-elf -fno-jump-tables +RMODE_ASFLAGS = -fintegrated-as -c -target aarch64-arm-none-eabi +LINKSCRIPT = -T $(CONFDIR)/$(CONFDIR)/toolchain/armclang.ld diff --git a/config/toolchain/clang.mk b/config/toolchain/clang.mk @@ -0,0 +1,10 @@ +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 @@ -0,0 +1,4 @@ +include $(PROJECTDIR)/config/toolchain/gnu.mk + +TOOLLDFLAGS = -static +RANLIBFLAGS = -c diff --git a/config/rmode-rcode-armclang.ld b/config/toolchain/gnu.ld diff --git a/config/toolchain/gnu.mk b/config/toolchain/gnu.mk @@ -0,0 +1,18 @@ +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 +RCODE_CFLAGS = -mgeneral-regs-only +ARM32_CFLAGS = -marm +ARM32_LDFLAGS = -lgcc diff --git a/config/toolchain/pcc.mk b/config/toolchain/pcc.mk @@ -0,0 +1,3 @@ +include $(PROJECTDIR)/config/toolchain/gnu.mk + +COMP = pcc diff --git a/drivers/Makefile.drv b/drivers/Makefile.drv @@ -9,7 +9,7 @@ OBJS = $(DEVS) \ all: builtin.o builtin.o: $(OBJS) - $(LD) $(RCODE_LDFLAGS) -r -o $@ $(OBJS) + $(LD) $(PROJ_LDFLAGS) -r -o $@ $(OBJS) devc.c: $(TARGETDIR)/rcode mkdevc $(TARGETDIR)/rcode diff --git a/scripts/mklib b/scripts/mklib @@ -35,9 +35,9 @@ lib=${out-a.out} if ! test -f $lib then - ${AR:-ar} -qv $lib $(lorder $@ | tsort) + ${AR:-ar} $ARFLAGS -qv $lib $(lorder $@ | tsort) else - ${AR:-ar} -ruv $lib $(lorder $@ | tsort) + ${AR:-ar} $ARFLAGS -ruv $lib $(lorder $@ | tsort) fi ${RL:-ranlib} $RLFLAGS $lib diff --git a/scripts/rules.mk b/scripts/rules.mk @@ -1,5 +1,7 @@ CONF = rmode-rcode +TOOL = gnu include $(PROJECTDIR)/config/$(CONF).mk +include $(PROJECTDIR)/config/toolchain/$(TOOL).mk INCDIR = $(PROJECTDIR)/include LIBDIR = $(PROJECTDIR)/lib @@ -12,7 +14,7 @@ CONFDIR = $(PROJECTDIR)/config INCLUDES = -I$(INCDIR) -I$(INCDIR)/bits/$(ARCH)/ -I$(INCDIR)/bits/$(SYS) LIBS = -l9p -lhdl -lrmu -lk -lc DRIVERS = $(PROJECTDIR)/drivers/builtin.o -ENV = $(SCRIPTDIR)/env.sh +ENVIRON = $(SCRIPTDIR)/env.sh LIBDEP = $(LIBDIR)/libhdl.a \ $(LIBDIR)/librmu.a \ @@ -20,22 +22,26 @@ LIBDEP = $(LIBDIR)/libhdl.a \ $(LIBDIR)/libc.a \ $(LIBDIR)/lib9p.a \ -RCODE_CFLAGS = $(MORECFLAGS) \ +PROJ_CFLAGS = $(MORECFLAGS) \ $(INCLUDES) \ + $(TOOLCFLAGS) \ $(SYSCFLAGS) \ $(CFLAGS) -RCODE_LDFLAGS = $(MORELDFLAGS) \ +PROJ_LDFLAGS = $(MORELDFLAGS) \ -L$(LIBDIR) \ + $(TOOLLDFLAGS) \ $(SYSLDFLAGS) \ $(LDFLAGS) -RCODE_ASFLAGS = $(MOREASFLAGS) \ +PROJ_ASFLAGS = $(MOREASFLAGS) \ + $(TOOLASFLAGS) \ $(SYSASFLAGS) \ $(ASFLAGS) -RCODE_LDLIBS = $(MORELDLIBS) \ +PROJ_LDLIBS = $(MORELDLIBS) \ $(LIBS) \ + $(TOOLLDLIBS) \ $(SYSLDLIBS) \ $(LDLIBS) @@ -51,6 +57,7 @@ AR = $(CROSS_COMPILE)$(ARCHIVE) HOSTCC=$(COMP) FORALL= +@set -e ;\ + . $(ENVIRON); \ pwd=$$PWD; \ for i in $(DIRS); \ do \ @@ -62,19 +69,19 @@ FORALL= +@set -e ;\ .SUFFIXES: .map .dump .elf .bin .i .c.o: - $(CC) $(RCODE_CFLAGS) -o $@ -c $< + $(CC) $(PROJ_CFLAGS) -o $@ -c $< .c: - $(HOSTCC) $(RCODE_CFLAGS) -o $@ $< + $(HOSTCC) $(PROJ_CFLAGS) -o $@ $< .c.s: - $(CC) $(RCODE_CFLAGS) -o $@ -S $< + $(CC) $(PROJ_CFLAGS) -o $@ -S $< .c.i: - $(CPP) $(RCODE_CFLAGS) -o $@ $< + $(CPP) $(PROJ_CFLAGS) -o $@ $< .s.o: - $(AS) $(RCODE_ASFLAGS) -o $@ $< + $(AS) $(PROJ_ASFLAGS) -o $@ $< .elf.bin: $(OC) -O binary $< $@ diff --git a/src/lib9p/Makefile b/src/lib9p/Makefile @@ -11,4 +11,4 @@ TARGET = $(LIBDIR)/lib9p.a all: $(TARGET) $(TARGET): $(OBJS) - mklib -o $@ $(OBJS) + mklib -o $@ $? diff --git a/src/libc/Makefile b/src/libc/Makefile @@ -13,18 +13,15 @@ DIRS = arch\ string\ time\ -all: $(DIRS) - +@$(MAKE) $(TARGET) +all: $(DIRS) objlst.mk + +@$(MAKE) -f Makefile.libc $(DIRS): FORCE +@cd $@ && $(MAKE) -objlst: - find . -name '*.o' > $@ - -$(TARGET): objlst FORCE - mklib -o $@ `cat objlst` +objlst.mk: FORCE + mklst $@ clean: $(FORALL) - rm -f objlst + rm -f objlst.mk diff --git a/src/libc/Makefile.libc b/src/libc/Makefile.libc @@ -0,0 +1,12 @@ +.POSIX: +PROJECTDIR =../.. +include $(PROJECTDIR)/scripts/rules.mk +include rules.mk +include objlst.mk + +TARGET = $(LIBDIR)/libc.a + +all: $(TARGET) + +$(TARGET): $(OBJS) + mklib -o $@ $? diff --git a/src/libc/mklst b/src/libc/mklst @@ -1,12 +1,8 @@ #!/bin/sh set -e -trap 'r=$?;rm -f $$.tmp;exit $r' EXIT HUP QUIT INT TERM -archive=${1?'First parameter must be the archive name'} -if test -f $archive -then - newer="-newer $archive" -fi +rm -f $1 +trap 'r=$?;rm -f $$.tmp;exit $r' HUP EXIT QUIT TERM -find . -name '*.o' $newer > $$.tmp && mv $$.tmp objlst +echo OBJS = `find . -name '*.o'` | sed 's/$/\\/' > $$.tmp && mv $$.tmp $1 diff --git a/src/libhdl/Makefile b/src/libhdl/Makefile @@ -76,4 +76,4 @@ TARGET = $(LIBDIR)/libhdl.a all: $(TARGET) $(TARGET): $(OBJS) - mklib -o $@ $(OBJS) + mklib -o $@ $? diff --git a/src/libk/Makefile b/src/libk/Makefile @@ -19,4 +19,4 @@ TARGET = $(LIBDIR)/libk.a all: $(TARGET) $(TARGET): $(OBJS) - mklib -o $@ $(OBJS) + mklib -o $@ $? diff --git a/src/librmu/Makefile b/src/librmu/Makefile @@ -76,4 +76,4 @@ TARGET = $(LIBDIR)/librmu.a all: $(TARGET) $(TARGET): $(OBJS) - mklib -o $@ $(OBJS) + mklib -o $@ $? diff --git a/src/libtypes/Makefile b/src/libtypes/Makefile @@ -39,7 +39,7 @@ rscb.h: $(JSONDIR)/version git log -n1 | awk '/commit/ {print $2}' > json-version $(TARGET): $(OBJS) - mklib -o $@ $(OBJS) + mklib -o $@ $? clean: rm -f rscb.h diff --git a/target/hosted/Makefile b/target/hosted/Makefile @@ -32,10 +32,10 @@ romtab.c: $(SCRIPTDIR)/rmu.cmd mkrmctab -o $@ -b rom -i $(SCRIPTDIR)/rmu.cmd $(BINDIR)/romfw.elf: $(ROMOBJS) $(LIBDEP) - $(LD) $(RCODE_LDFLAGS) $(ROMOBJS) $(RCODE_LDLIBS) -o $@ + $(LD) $(PROJ_LDFLAGS) $(ROMOBJS) $(PROJ_LDLIBS) -o $@ $(BINDIR)/ramfw.elf: $(RAMOBJS) $(LIBDEP) - $(LD) $(RCODE_LDFLAGS) $(RAMOBJS) $(RCODE_LDLIBS) -o $@ + $(LD) $(PROJ_LDFLAGS) $(RAMOBJS) $(PROJ_LDLIBS) -o $@ clean: $(FORALL) diff --git a/target/native/Makefile b/target/native/Makefile @@ -52,10 +52,10 @@ romtab.c: $(SCRIPTDIR)/rmu.cmd mkrmctab -o $@ -b rom -i $(SCRIPTDIR)/rmu.cmd $(BINDIR)/romfw.elf: $(ROMOBJS) $(LIBDEP) - $(LD) $(RCODE_LDFLAGS) $(ROMOBJS) $(RCODE_LDLIBS) -o $@ + $(LD) $(PROJ_LDFLAGS) $(LINKSCRIPT) $(ROMOBJS) $(PROJ_LDLIBS) -o $@ $(BINDIR)/ramfw.elf: $(RAMOBJS) $(LIBDEP) - $(LD) $(RCODE_LDFLAGS) $(RAMOBJS) $(RCODE_LDLIBS) -o $@ + $(LD) $(PROJ_LDFLAGS) $(LINKSCRIPT) $(RAMOBJS) $(PROJ_LDLIBS) -o $@ $(BINDIR)/ramfw.bin: $(BINDIR)/ramfw.tst $(BINDIR)/romfw.bin: $(BINDIR)/romfw.tst