diff --git a/arch/arm/rules.mk b/arch/arm/rules.mk index 713abb0f..3c010f98 100644 --- a/arch/arm/rules.mk +++ b/arch/arm/rules.mk @@ -306,7 +306,7 @@ ARCH_COMPILEFLAGS += $(ARCH_$(ARCH)_COMPILEFLAGS) GLOBAL_COMPILEFLAGS += $(THUMBINTERWORK) # set the max page size to something more reasonables (defaults to 64K or above) -GLOBAL_LDFLAGS += -z max-page-size=4096 +ARCH_LDFLAGS += -z max-page-size=4096 # find the direct path to libgcc.a for our particular multilib variant LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) $(THUMBCFLAGS) -print-libgcc-file-name) diff --git a/arch/arm64/rules.mk b/arch/arm64/rules.mk index 1aed1080..47342df7 100644 --- a/arch/arm64/rules.mk +++ b/arch/arm64/rules.mk @@ -92,9 +92,9 @@ $(info TOOLCHAIN_PREFIX = $(TOOLCHAIN_PREFIX)) ARCH_COMPILEFLAGS += $(ARCH_$(ARCH)_COMPILEFLAGS) -GLOBAL_LDFLAGS += -z max-page-size=4096 +ARCH_LDFLAGS += -z max-page-size=4096 -LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) -print-libgcc-file-name) +LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) -print-libgcc-file-name) # make sure some bits were set up MEMVARS_SET := 0 diff --git a/arch/microblaze/rules.mk b/arch/microblaze/rules.mk index 1495052a..bd8e6a12 100644 --- a/arch/microblaze/rules.mk +++ b/arch/microblaze/rules.mk @@ -29,21 +29,20 @@ WITH_LINKER_GC ?= 0 LITTLE_ENDIAN ?= 0 ifneq ($(LITTLE_ENDIAN),0) -GLOBAL_COMPILEFLAGS += -mlittle-endian -GLOBAL_LDFLAGS += -EL +ARCH_COMPILEFLAGS += -mlittle-endian +ARCH_LDFLAGS += -EL GLOBAL_MODULE_LDFLAGS += -EL endif -LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) $(GLOBAL_CFLAGS) -print-libgcc-file-name) +LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) $(GLOBAL_COMPILEFLAGS) -print-libgcc-file-name) $(info LIBGCC = $(LIBGCC)) cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc /dev/null 2>&1`"; \ then echo "$(2)"; else echo "$(3)"; fi ;) -ARCH_COMPILEFLAGS := ARCH_OPTFLAGS := -O2 -GLOBAL_LDFLAGS += -relax +ARCH_LDFLAGS += -relax KERNEL_BASE ?= $(MEMBASE) KERNEL_LOAD_OFFSET ?= 0 diff --git a/arch/mips/rules.mk b/arch/mips/rules.mk index 35b5a1af..49ab0c30 100644 --- a/arch/mips/rules.mk +++ b/arch/mips/rules.mk @@ -30,13 +30,13 @@ WITH_LINKER_GC ?= 0 LITTLE_ENDIAN ?= 0 ifneq ($(LITTLE_ENDIAN),0) -GLOBAL_COMPILEFLAGS += -EL -GLOBAL_ASFLAGS += -EL -GLOBAL_LDFLAGS += -EL +ARCH_COMPILEFLAGS += -EL +ARCH_ASFLAGS += -EL +ARCH_LDFLAGS += -EL GLOBAL_MODULE_LDFLAGS += -EL endif -ARCH_COMPILEFLAGS := -mno-gpopt +ARCH_COMPILEFLAGS += -mno-gpopt ARCH_OPTFLAGS := -O2 ifeq ($(MIPS_CPU),m14k) @@ -46,7 +46,7 @@ ifeq ($(MIPS_CPU),microaptiv-uc) ARCH_COMPILEFLAGS += -march=m14k endif -LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) $(GLOBAL_CFLAGS) -print-libgcc-file-name) +LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) -print-libgcc-file-name) $(info LIBGCC = $(LIBGCC)) cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc /dev/null 2>&1`"; \ diff --git a/arch/or1k/rules.mk b/arch/or1k/rules.mk index 0e01f17c..552b6068 100644 --- a/arch/or1k/rules.mk +++ b/arch/or1k/rules.mk @@ -20,15 +20,15 @@ ifndef TOOLCHAIN_PREFIX TOOLCHAIN_PREFIX := or1k-elf- endif -LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(CFLAGS) -print-libgcc-file-name) -$(info LIBGCC = $(LIBGCC)) - cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc /dev/null 2>&1`"; \ then echo "$(2)"; else echo "$(3)"; fi ;) ARCH_OPTFLAGS := -O2 -GLOBAL_LDFLAGS += -relax +ARCH_LDFLAGS += -relax + +LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) -print-libgcc-file-name) +$(info LIBGCC = $(LIBGCC)) KERNEL_BASE ?= $(MEMBASE) KERNEL_LOAD_OFFSET ?= 0 diff --git a/arch/x86/rules.mk b/arch/x86/rules.mk index 341bf019..6064b79b 100644 --- a/arch/x86/rules.mk +++ b/arch/x86/rules.mk @@ -74,28 +74,28 @@ $(warning ARCH_x86_TOOLCHAIN_PREFIX = $(ARCH_x86_TOOLCHAIN_PREFIX)) $(warning ARCH_x86_64_TOOLCHAIN_PREFIX = $(ARCH_x86_64_TOOLCHAIN_PREFIX)) $(warning TOOLCHAIN_PREFIX = $(TOOLCHAIN_PREFIX)) -LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(CFLAGS) -print-libgcc-file-name) - cc-option = $(shell if test -z "`$(1) $(2) -S -o /dev/null -xc /dev/null 2>&1`"; \ then echo "$(2)"; else echo "$(3)"; fi ;) # disable SSP if the compiler supports it; it will break stuff GLOBAL_CFLAGS += $(call cc-option,$(CC),-fno-stack-protector,) -GLOBAL_COMPILEFLAGS += -fasynchronous-unwind-tables -GLOBAL_COMPILEFLAGS += -gdwarf-2 -GLOBAL_COMPILEFLAGS += -fno-pic -GLOBAL_LDFLAGS += -z max-page-size=4096 +ARCH_COMPILEFLAGS += -fasynchronous-unwind-tables +ARCH_COMPILEFLAGS += -gdwarf-2 +ARCH_COMPILEFLAGS += -fno-pic +ARCH_LDFLAGS += -z max-page-size=4096 ifeq ($(SUBARCH),x86-64) -GLOBAL_COMPILEFLAGS += -fno-stack-protector -GLOBAL_COMPILEFLAGS += -mcmodel=kernel -GLOBAL_COMPILEFLAGS += -mno-red-zone +ARCH_COMPILEFLAGS += -fno-stack-protector +ARCH_COMPILEFLAGS += -mcmodel=kernel +ARCH_COMPILEFLAGS += -mno-red-zone endif # SUBARCH x86-64 - ARCH_OPTFLAGS := -O2 +LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(GLOBAL_COMPILEFLAGS) $(ARCH_COMPILEFLAGS) -print-libgcc-file-name) +$(warning LIBGCC = $(LIBGCC)) + LINKER_SCRIPT += $(SUBARCH_BUILDDIR)/kernel.ld # potentially generated files that should be cleaned out with clean make rule diff --git a/engine.mk b/engine.mk index 2c4be222..7aa285dc 100644 --- a/engine.mk +++ b/engine.mk @@ -72,6 +72,7 @@ ARCH_COMPILEFLAGS := ARCH_CFLAGS := ARCH_CPPFLAGS := ARCH_ASMFLAGS := +ARCH_LDFLAGS := # top level rule all:: $(OUTBIN) $(OUTELF).lst $(OUTELF).debug.lst $(OUTELF).sym $(OUTELF).sym.sorted $(OUTELF).size $(OUTELF).dump $(BUILDDIR)/srcfiles.txt $(BUILDDIR)/include_paths.txt @@ -220,6 +221,7 @@ GLOBAL_DEFINES += ARCH_COMPILEFLAGS=\"$(subst $(SPACE),_,$(ARCH_COMPILEFLAGS))\" GLOBAL_DEFINES += ARCH_CFLAGS=\"$(subst $(SPACE),_,$(ARCH_CFLAGS))\" GLOBAL_DEFINES += ARCH_CPPFLAGS=\"$(subst $(SPACE),_,$(ARCH_CPPFLAGS))\" GLOBAL_DEFINES += ARCH_ASMFLAGS=\"$(subst $(SPACE),_,$(ARCH_ASMFLAGS))\" +GLOBAL_DEFINES += ARCH_LDFLAGS=\"$(subst $(SPACE),_,$(ARCH_LDFLAGS))\" ifneq ($(OBJS),) $(warning OBJS=$(OBJS)) diff --git a/make/build.mk b/make/build.mk index 7c0e9130..6d05c3e1 100644 --- a/make/build.mk +++ b/make/build.mk @@ -22,7 +22,8 @@ $(OUTELF).hex: $(OUTELF) $(OUTELF): $(ALLMODULE_OBJS) $(EXTRA_OBJS) $(LINKER_SCRIPT) $(EXTRA_LINKER_SCRIPTS) @echo linking $@ $(NOECHO)$(SIZE) -t --common $(sort $(ALLMODULE_OBJS)) $(EXTRA_OBJS) - $(NOECHO)$(LD) $(GLOBAL_LDFLAGS) -dT $(LINKER_SCRIPT) $(addprefix -T,$(EXTRA_LINKER_SCRIPTS)) \ + $(NOECHO)$(LD) $(GLOBAL_LDFLAGS) $(ARCH_LDFLAGS) -dT $(LINKER_SCRIPT) \ + $(addprefix -T,$(EXTRA_LINKER_SCRIPTS)) \ $(ALLMODULE_OBJS) $(EXTRA_OBJS) $(LIBGCC) -Map=$(OUTELF).map -o $@ $(OUTELF).sym: $(OUTELF)