[coreboot-gerrit] Patch set updated for coreboot: rules.h: Add ENV_ macros to detect current architecture

Julius Werner (jwerner@chromium.org) gerrit at coreboot.org
Sat Nov 14 00:03:09 CET 2015


Julius Werner (jwerner at chromium.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/12433

-gerrit

commit 34df18721d0cf1840237b414b36bb43fb52fba46
Author: Julius Werner <jwerner at 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 at 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                       | 100 ++++++++++++++++++++++++++++++
 toolchain.inc                             |   2 +-
 6 files changed, 134 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..debb200 100644
--- a/src/include/rules.h
+++ b/src/include/rules.h
@@ -94,4 +94,104 @@
 #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
+#define ENV_ARMV4 0
+#define ENV_ARMV7 0
+#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
+#define ENV_ARMV8 0
+#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))



More information about the coreboot-gerrit mailing list