Julius Werner (jwerner@chromium.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/12433
-gerrit
commit 9da36c5ed9abd07480526d57d71a2d3332f2147e Author: Julius Werner jwerner@chromium.org Date: Fri Nov 13 13:28:41 2015 -0800
rules.h: Add ENV_ macros to detect current architecture
This patch expands the existing ENV_<stage> macros in <rules.h> with a set of ENV_<arch> macros which can be used to detect which architecture the current compilation unit is built for. These are more consistent than compiler-defined macros (like '#ifdef __arm__') and will make it easier to write small, architecture-dependent differences in common code (where we currently often use IS_ENABLED(CONFIG_ARCH_...), which is technically incorrect in a world where every stage can run on a different architecture, and merely kinda happened to work out for now).
Also remove a vestigal <arch/rules.h> from ARM64 which was no longer used, and genericise ARM subarchitecture Makefiles a little to make things like __COREBOOT_ARM_ARCH__ available from all file types (including .ld).
BUG=None TEST=Compiled Falco, Blaze, Jerry and Smaug.
Change-Id: Id51aeb290b5c215c653e42a51919d0838e28621f Signed-off-by: Julius Werner jwerner@chromium.org --- src/arch/arm/armv4/Makefile.inc | 18 ++---- src/arch/arm/armv7/Makefile.inc | 42 +++++++------ src/arch/arm64/armv8/Makefile.inc | 23 +++---- src/arch/arm64/include/armv8/arch/rules.h | 30 ---------- src/include/rules.h | 99 +++++++++++++++++++++++++++++++ toolchain.inc | 2 +- 6 files changed, 133 insertions(+), 81 deletions(-)
diff --git a/src/arch/arm/armv4/Makefile.inc b/src/arch/arm/armv4/Makefile.inc index ee1879c..1b91961 100644 --- a/src/arch/arm/armv4/Makefile.inc +++ b/src/arch/arm/armv4/Makefile.inc @@ -30,8 +30,7 @@ endif
bootblock-y += cache.c
-bootblock-c-ccopts += $(armv4_flags) -bootblock-S-ccopts += $(armv4_flags) +bootblock-generic-ccopts += $(armv4_flags)
endif # CONFIG_ARCH_BOOTBLOCK_ARMV4
@@ -40,10 +39,8 @@ endif # CONFIG_ARCH_BOOTBLOCK_ARMV4 ################################################################################
ifeq ($(CONFIG_ARCH_VERSTAGE_ARMV4),y) -libverstage-c-ccopts += $(armv4_flags) -libverstage-S-ccopts += $(armv4_flags) -verstage-c-ccopts += $(armv4_flags) -verstage-S-ccopts += $(armv4_flags) +libverstage-generic-ccopts += $(armv4_flags) +verstage-generic-ccopts += $(armv4_flags)
verstage-y += cache.c endif # CONFIG_ARCH_VERSTAGE_ARMV4 @@ -55,12 +52,10 @@ endif # CONFIG_ARCH_VERSTAGE_ARMV4 ifeq ($(CONFIG_ARCH_ROMSTAGE_ARMV4),y)
-romstage-c-ccopts += $(armv4_flags) -romstage-S-ccopts += $(armv4_flags) +romstage-generic-ccopts += $(armv4_flags) romstage-y += cache.c
-rmodules_arm-c-ccopts += $(armv4_flags) -rmodules_arm-S-ccopts += $(armv4_flags) +rmodules_arm-generic-ccopts += $(armv4_flags)
endif # CONFIG_ARCH_ROMSTAGE_ARMV4
@@ -70,7 +65,6 @@ endif # CONFIG_ARCH_ROMSTAGE_ARMV4
ifeq ($(CONFIG_ARCH_RAMSTAGE_ARMV4),y)
-ramstage-c-ccopts += $(armv4_flags) -ramstage-S-ccopts += $(armv4_flags) +ramstage-generic-ccopts += $(armv4_flags)
endif # CONFIG_ARCH_RAMSTAGE_ARMV4 diff --git a/src/arch/arm/armv7/Makefile.inc b/src/arch/arm/armv7/Makefile.inc index 3a489cb..2e9c49c 100644 --- a/src/arch/arm/armv7/Makefile.inc +++ b/src/arch/arm/armv7/Makefile.inc @@ -20,16 +20,14 @@ armv7-a_flags = -march=armv7-a $(armv7_flags) armv7-m_flags = -march=armv7-m $(armv7_flags)
armv7_asm_flags = -Wa,-mthumb -Wa,-mimplicit-it=always -Wa,-mno-warn-deprecated -armv7-a_asm_flags = $(armv7-a_flags) $(armv7_asm_flags) -armv7-m_asm_flags = $(armv7-m_flags) $(armv7_asm_flags)
############################################################################### # bootblock ###############################################################################
ifeq ($(CONFIG_ARCH_BOOTBLOCK_ARMV7),y) -bootblock-c-ccopts += $(armv7-a_flags) -bootblock-S-ccopts += $(armv7-a_asm_flags) +bootblock-generic-ccopts += $(armv7-a_flags) +bootblock-S-ccopts += $(armv7_asm_flags)
ifneq ($(CONFIG_BOOTBLOCK_CUSTOM),y) bootblock-y += bootblock.S @@ -42,8 +40,8 @@ bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += exception_asm.S bootblock-y += mmu.c
else ifeq ($(CONFIG_ARCH_BOOTBLOCK_ARMV7_M),y) -bootblock-c-ccopts += $(armv7-m_flags) -bootblock-S-ccopts += $(armv7-m_asm_flags) +bootblock-generic-ccopts += $(armv7-m_flags) +bootblock-S-ccopts += $(armv7_asm_flags)
ifneq ($(CONFIG_BOOTBLOCK_CUSTOM),y) bootblock-y += bootblock_m.S @@ -58,10 +56,10 @@ endif # CONFIG_ARCH_BOOTBLOCK_ARMV7 ################################################################################
ifeq ($(CONFIG_ARCH_VERSTAGE_ARMV7),y) -libverstage-c-ccopts += $(armv7-a_flags) -libverstage-S-ccopts += $(armv7-a_asm_flags) -verstage-c-ccopts += $(armv7-a_flags) -verstage-S-ccopts += $(armv7-a_asm_flags) +libverstage-generic-ccopts += $(armv7-a_flags) +libverstage-S-ccopts += $(armv7_asm_flags) +verstage-generic-ccopts += $(armv7-a_flags) +verstage-S-ccopts += $(armv7_asm_flags)
verstage-y += cache.c verstage-y += cpu.S @@ -70,10 +68,10 @@ verstage-y += exception_asm.S verstage-y += mmu.c
else ifeq ($(CONFIG_ARCH_VERSTAGE_ARMV7_M),y) -libverstage-c-ccopts += $(armv7-m_flags) -libverstage-S-ccopts += $(armv7-m_asm_flags) -verstage-c-ccopts += $(armv7-m_flags) -verstage-S-ccopts += $(armv7-m_asm_flags) +libverstage-generic-ccopts += $(armv7-m_flags) +libverstage-S-ccopts += $(armv7_asm_flags) +verstage-generic-ccopts += $(armv7-m_flags) +verstage-S-ccopts += $(armv7_asm_flags)
endif # CONFIG_ARCH_VERSTAGE_ARMV7_M
@@ -87,11 +85,11 @@ romstage-y += exception.c romstage-y += exception_asm.S romstage-y += mmu.c
-romstage-c-ccopts += $(armv7-a_flags) -romstage-S-ccopts += $(armv7-a_asm_flags) +romstage-generic-ccopts += $(armv7-a_flags) +romstage-S-ccopts += $(armv7_asm_flags)
-rmodules_arm-c-ccopts += $(armv7-a_flags) -rmodules_arm-S-ccopts += $(armv7-a_asm_flags) +rmodules_arm-generic-ccopts += $(armv7-a_flags) +rmodules_arm-S-ccopts += $(armv7_asm_flags)
endif # CONFIG_ARCH_ROMSTAGE_ARMV7
@@ -107,10 +105,10 @@ ramstage-y += exception.c ramstage-y += exception_asm.S ramstage-y += mmu.c
-ramstage-c-ccopts += $(armv7-a_flags) -ramstage-S-ccopts += $(armv7-a_asm_flags) +ramstage-generic-ccopts += $(armv7-a_flags) +ramstage-S-ccopts += $(armv7_asm_flags)
# All rmodule code is armv7 if ramstage is armv7. -rmodules_arm-c-ccopts += $(armv7-a_flags) -rmodules_arm-S-ccopts += $(armv7-a_asm_flags) +rmodules_arm-generic-ccopts += $(armv7-a_flags) +rmodules_arm-S-ccopts += $(armv7_asm_flags) endif # CONFIG_ARCH_RAMSTAGE_ARMV7 diff --git a/src/arch/arm64/armv8/Makefile.inc b/src/arch/arm64/armv8/Makefile.inc index f25a567..53d0e46 100644 --- a/src/arch/arm64/armv8/Makefile.inc +++ b/src/arch/arm64/armv8/Makefile.inc @@ -19,8 +19,6 @@ subdirs-y += lib/
armv8_flags = -march=armv8-a -I$(src)/arch/arm64/include/armv8/ -D__COREBOOT_ARM_ARCH__=8
-armv8_asm_flags = $(armv8_flags) - ################################################################################ ## bootblock ################################################################################ @@ -34,8 +32,7 @@ bootblock-y += cache_helpers.S bootblock-y += cpu.S bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += exception.c
-bootblock-c-ccopts += $(armv8_flags) -bootblock-S-ccopts += $(armv8_asm_flags) +bootblock-generic-ccopts += $(armv8_flags)
# Required to access unaligned timestamp struct members before MMU is active # (TODO: Maybe use explicit unaligned accesses in timestamp code instead, or @@ -54,10 +51,8 @@ verstage-y += cpu.S verstage-y += cache_helpers.S verstage-y += exception.c
-libverstage-c-ccopts += $(armv8_flags) -libverstage-S-ccopts += $(armv8_asm_flags) -verstage-c-ccopts += $(armv8_flags) -verstage-S-ccopts += $(armv8_asm_flags) +libverstage-generic-ccopts += $(armv8_flags) +verstage-generic-ccopts += $(armv8_flags)
endif
@@ -71,11 +66,9 @@ romstage-y += cache_helpers.S romstage-y += cpu.S romstage-y += exception.c
-romstage-c-ccopts += $(armv8_flags) -romstage-S-ccopts += $(armv8_asm_flags) +romstage-generic-ccopts += $(armv8_flags)
-rmodules_arm64-c-ccopts += $(armv8_flags) -rmodules_arm64-S-ccopts += $(armv8_asm_flags) +rmodules_arm64-generic-ccopts += $(armv8_flags)
endif
@@ -90,10 +83,8 @@ ramstage-y += cpu.S ramstage-y += exception.c ramstage-y += mmu.c
-ramstage-c-ccopts += $(armv8_flags) -ramstage-S-ccopts += $(armv8_asm_flags) +ramstage-generic-ccopts += $(armv8_flags)
-rmodules_arm64-c-ccopts += $(armv8_flags) -rmodules_arm64-S-ccopts += $(armv8_asm_flags) +rmodules_arm64-generic-ccopts += $(armv8_flags)
endif diff --git a/src/arch/arm64/include/armv8/arch/rules.h b/src/arch/arm64/include/armv8/arch/rules.h deleted file mode 100644 index a252894..0000000 --- a/src/arch/arm64/include/armv8/arch/rules.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef _ARCH_RULES_H -#define _ARCH_RULES_H - -/* For romstage and ramstage always build with simple device model, ie. - * PCI, PNP and CPU functions operate without use of devicetree. - * - * For ramstage individual source file may define __SIMPLE_DEVICE__ - * before including any header files to force that particular source - * be built with simple device model. - */ - -#if defined(__PRE_RAM__) -#define __SIMPLE_DEVICE__ -#endif - -#endif /* _ARCH_RULES_H */ diff --git a/src/include/rules.h b/src/include/rules.h index 315a65e..bb3bec3 100644 --- a/src/include/rules.h +++ b/src/include/rules.h @@ -94,4 +94,103 @@ #define __SIMPLE_DEVICE__ #endif
+/* Define helpers about the current architecture, based on toolchain.inc. */ + +#if defined(__ARCH_arm__) +#define ENV_ARM 1 +#define ENV_ARM64 0 +#if __COREBOOT_ARM_ARCH__ == 4 +#define ENV_ARMV4 1 +#define ENV_ARMV7 0 +#elif __COREBOOT_ARM_ARCH__ == 7 +#define ENV_ARMV4 0 +#define ENV_ARMV7 1 +#else +#error "Unknown ARM32 sub-architecture... please expand <rules.h>!" +#endif +#define ENV_ARMV8 0 +#define ENV_MIPS 0 +#define ENV_RISCV 0 +#define ENV_X86 0 +#define ENV_X86_32 0 +#define ENV_X86_64 0 + +#elif defined(__ARCH_arm64__) +#define ENV_ARM 0 +#define ENV_ARM64 1 +#define ENV_ARMV4 0 +#define ENV_ARMV7 0 +#if __COREBOOT_ARM_ARCH__ == 8 +#define ENV_ARMV8 1 +#else +#error "Unknown ARM64 sub-architecture... please expand <rules.h>!" +#endif +#define ENV_MIPS 0 +#define ENV_RISCV 0 +#define ENV_X86 0 +#define ENV_X86_32 0 +#define ENV_X86_64 0 + +#elif defined(__ARCH_mips__) +#define ENV_ARM 0 +#define ENV_ARM64 0 +#define ENV_ARMV4 0 +#define ENV_ARMV7 0 +#define ENV_ARMV8 0 +#define ENV_MIPS 1 +#define ENV_RISCV 0 +#define ENV_X86 0 +#define ENV_X86_32 0 +#define ENV_X86_64 0 + +#elif defined(__ARCH_riscv__) +#define ENV_ARM 0 +#define ENV_ARM64 0 +#define ENV_ARMV4 0 +#define ENV_ARMV7 0 +#define ENV_ARMV8 0 +#define ENV_MIPS 0 +#define ENV_RISCV 1 +#define ENV_X86 0 +#define ENV_X86_32 0 +#define ENV_X86_64 0 + +#elif defined(__ARCH_x86_32__) +#define ENV_ARM 0 +#define ENV_ARM64 0 +#define ENV_ARMV4 0 +#define ENV_ARMV7 0 +#define ENV_ARMV8 0 +#define ENV_MIPS 0 +#define ENV_RISCV 0 +#define ENV_X86 1 +#define ENV_X86_32 1 +#define ENV_X86_64 0 + +#elif defined(__ARCH_x86_64__) +#define ENV_ARM 0 +#define ENV_ARM64 0 +#define ENV_ARMV4 0 +#define ENV_ARMV7 0 +#define ENV_ARMV8 0 +#define ENV_MIPS 0 +#define ENV_RISCV 0 +#define ENV_X86 1 +#define ENV_X86_32 0 +#define ENV_X86_64 1 + +#else +#define ENV_ARM 0 +#define ENV_ARM64 0 +#define ENV_ARMV4 0 +#define ENV_ARMV7 0 +#define ENV_ARMV8 0 +#define ENV_MIPS 0 +#define ENV_RISCV 0 +#define ENV_X86 0 +#define ENV_X86_32 0 +#define ENV_X86_64 0 + +#endif + #endif /* _RULES_H */ diff --git a/toolchain.inc b/toolchain.inc index 7e7d158..0f3da83 100644 --- a/toolchain.inc +++ b/toolchain.inc @@ -115,7 +115,7 @@ OBJDUMP_$(1) := $(OBJDUMP_$(2)) STRIP_$(1) := $(STRIP_$(2)) READELF_$(1) := $(READELF_$(2)) CFLAGS_$(1) = $$(CFLAGS_common) $$(CFLAGS_$(2)) -CPPFLAGS_$(1) = $$(CPPFLAGS_common) $$(CPPFLAGS_$(2)) +CPPFLAGS_$(1) = $$(CPPFLAGS_common) $$(CPPFLAGS_$(2)) -D__ARCH_$(2)__ COMPILER_RT_$(1) := $$(COMPILER_RT_$(2)) COMPILER_RT_FLAGS_$(1) := $$(COMPILER_RT_FLAGS_$(2)) LDFLAGS_$(1) = $$(LDFLAGS_common) $$(LDFLAGS_$(2))