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> Reviewed-on: http://review.coreboot.org/12433 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Tested-by: Raptor Engineering Automated Test Stand <noreply@raptorengineeringinc.com>
This commit is contained in:
parent
0dc6a1e898
commit
d3634c108d
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
|
@ -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 */
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue