Patrick: Compared GCC5 and COREBOOT, the difference is that GCC5_IA32_PREFIX and GCC5_X64_PREFIX. CoreBoot tool chain has the different style. So, it can't reuse GCC5 tool chain. If GCC5 is update to refer to ENV (GCC5_IA32_PREFIX) and ENV (GCC5_X64_PREFIX) like ENV(GCC5_ARM_PREFIX) in CC_PATH, GCC5 can support COREBOOT usage. For the future, the different FLAG can be appended in [BuildOptions] of platform.dsc. So, I suggest to reuse GCC5 tool chain for coreboot.
GCC5: DEFINE GCC5_IA32_PREFIX = ENV(GCC5_BIN) DEFINE GCC5_X64_PREFIX = ENV(GCC5_BIN) *_GCC5_*_*_DLL = ENV(GCC5_DLL) COREBOOT: DEFINE COREBOOT_IA32_PREFIX = DEF(COREBOOT_PREFIX)i386-elf- DEFINE COREBOOT_X64_PREFIX = DEF(COREBOOT_PREFIX)x86_64-elf- *_COREBOOT_*_*_DLL = ENV(COREBOOT_DLL) Thanks Liming > -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of > Patrick Georgi > Sent: Tuesday, July 4, 2017 11:23 PM > To: [email protected] > Subject: [edk2] [PATCH] BaseTools: Add COREBOOT tools definition > > That toolset is defined as the current coreboot toolchain[0] at commit > time. Right now this is gcc 6.3, iasl and GNU make, with minor patches > as deemed necessary for firmware development by the coreboot maintainers. > > COREBOOT is primarily supposed to build CorebootPayloadPkg (and its > dependencies), but should be suitable for other builds as well. > It's tested to build a usable Ovmf image. > > For now, COREBOOT is a copy of the GCC5 rules, but it may diverge over > time. > > [0] As built by > https://review.coreboot.org/cgit/coreboot.git/tree/util/crossgcc > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Patrick Georgi <[email protected]> > --- > BaseTools/Conf/tools_def.template | 181 > ++++++++++++++++++++++++++++++++++++++ > 1 file changed, 181 insertions(+) > > diff --git a/BaseTools/Conf/tools_def.template > b/BaseTools/Conf/tools_def.template > index 65f21061e6..08adb32e38 100755 > --- a/BaseTools/Conf/tools_def.template > +++ b/BaseTools/Conf/tools_def.template > @@ -199,6 +199,12 @@ DEFINE GCC49_X64_PREFIX = ENV(GCC49_BIN) > DEFINE GCC5_IA32_PREFIX = ENV(GCC5_BIN) > DEFINE GCC5_X64_PREFIX = ENV(GCC5_BIN) > > +DEFINE COREBOOT_PREFIX = ENV(COREBOOT_SDK_PATH) > +DEFINE COREBOOT_IA32_PREFIX = DEF(COREBOOT_PREFIX)i386-elf- > +DEFINE COREBOOT_X64_PREFIX = DEF(COREBOOT_PREFIX)x86_64-elf- > +DEFINE COREBOOT_ARM_PREFIX = DEF(COREBOOT_PREFIX)arm-eabi- > +DEFINE COREBOOT_AARCH64_PREFIX = DEF(COREBOOT_PREFIX)aarch64-elf- > + > DEFINE UNIX_IASL_BIN = ENV(IASL_PREFIX)iasl > DEFINE WIN_IASL_BIN = ENV(IASL_PREFIX)iasl.exe > DEFINE WIN_ASL_BIN = ENV(IASL_PREFIX)asl.exe > @@ -4493,6 +4499,28 @@ DEFINE GCC5_AARCH64_DLINK2_FLAGS = > DEF(GCC49_AARCH64_DLINK2_FLAGS) -Wno-erro > DEFINE GCC5_ARM_ASLDLINK_FLAGS = DEF(GCC49_ARM_ASLDLINK_FLAGS) > DEFINE GCC5_AARCH64_ASLDLINK_FLAGS = DEF(GCC49_AARCH64_ASLDLINK_FLAGS) > > +DEFINE COREBOOT_IA32_CC_FLAGS = DEF(GCC5_IA32_CC_FLAGS) > +DEFINE COREBOOT_X64_CC_FLAGS = DEF(GCC5_X64_CC_FLAGS) > +DEFINE COREBOOT_IA32_X64_DLINK_COMMON = DEF(GCC5_IA32_X64_DLINK_COMMON) > +DEFINE COREBOOT_IA32_X64_ASLDLINK_FLAGS = DEF(GCC5_IA32_X64_ASLDLINK_FLAGS) > +DEFINE COREBOOT_IA32_X64_DLINK_FLAGS = DEF(GCC5_IA32_X64_DLINK_FLAGS) > +DEFINE COREBOOT_IA32_DLINK2_FLAGS = DEF(GCC5_IA32_DLINK2_FLAGS) > +DEFINE COREBOOT_X64_DLINK_FLAGS = DEF(GCC5_X64_DLINK_FLAGS) > +DEFINE COREBOOT_X64_DLINK2_FLAGS = DEF(GCC5_X64_DLINK2_FLAGS) > +DEFINE COREBOOT_ASM_FLAGS = DEF(GCC5_ASM_FLAGS) > +DEFINE COREBOOT_ARM_ASM_FLAGS = DEF(GCC5_ARM_ASM_FLAGS) > +DEFINE COREBOOT_AARCH64_ASM_FLAGS = DEF(GCC5_AARCH64_ASM_FLAGS) > +DEFINE COREBOOT_ARM_CC_FLAGS = DEF(GCC5_ARM_CC_FLAGS) > +DEFINE COREBOOT_ARM_CC_XIPFLAGS = DEF(GCC5_ARM_CC_XIPFLAGS) > +DEFINE COREBOOT_AARCH64_CC_FLAGS = DEF(GCC5_AARCH64_CC_FLAGS) > +DEFINE COREBOOT_AARCH64_CC_XIPFLAGS = DEF(GCC5_AARCH64_CC_XIPFLAGS) > +DEFINE COREBOOT_ARM_DLINK_FLAGS = DEF(GCC5_ARM_DLINK_FLAGS) > +DEFINE COREBOOT_ARM_DLINK2_FLAGS = DEF(GCC5_ARM_DLINK2_FLAGS) > +DEFINE COREBOOT_AARCH64_DLINK_FLAGS = DEF(GCC5_AARCH64_DLINK_FLAGS) > +DEFINE COREBOOT_AARCH64_DLINK2_FLAGS = DEF(GCC5_AARCH64_DLINK2_FLAGS) > +DEFINE COREBOOT_ARM_ASLDLINK_FLAGS = DEF(GCC5_ARM_ASLDLINK_FLAGS) > +DEFINE COREBOOT_AARCH64_ASLDLINK_FLAGS = DEF(GCC5_AARCH64_ASLDLINK_FLAGS) > + > > #################################################################################### > # > # Unix GCC And Intel Linux ACPI Compiler > @@ -5413,6 +5441,159 @@ RELEASE_GCC5_AARCH64_DLINK_FLAGS = > DEF(GCC5_AARCH64_DLINK_FLAGS) -flto -Os -L$(W > NOOPT_GCC5_AARCH64_DLINK_FLAGS = DEF(GCC5_AARCH64_DLINK_FLAGS) -z > common-page-size=0x1000 -O0 > NOOPT_GCC5_AARCH64_DLINK_XIPFLAGS = -z common-page-size=0x20 -O0 > > +#################################################################################### > +# > +# COREBOOT - This configuration is used to compile under Linux to produce > +# PE/COFF binaries using coreboot's toolchain > +# > +#################################################################################### > +*_COREBOOT_*_*_FAMILY = GCC > + > +*_COREBOOT_*_MAKE_PATH = DEF(COREBOOT_PREFIX)make > +*_COREBOOT_*_*_DLL = ENV(COREBOOT_DLL) > +*_COREBOOT_*_ASL_PATH = DEF(COREBOOT_PREFIX)iasl > + > +*_COREBOOT_*_PP_FLAGS = DEF(GCC_PP_FLAGS) > +*_COREBOOT_*_ASLPP_FLAGS = DEF(GCC_ASLPP_FLAGS) > +*_COREBOOT_*_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) > +*_COREBOOT_*_VFRPP_FLAGS = DEF(GCC_VFRPP_FLAGS) > +*_COREBOOT_*_APP_FLAGS = > +*_COREBOOT_*_ASL_FLAGS = DEF(IASL_FLAGS) > +*_COREBOOT_*_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS) > + > +################## > +# COREBOOT IA32 definitions > +################## > +*_COREBOOT_IA32_OBJCOPY_PATH = DEF(COREBOOT_IA32_PREFIX)objcopy > +*_COREBOOT_IA32_CC_PATH = DEF(COREBOOT_IA32_PREFIX)gcc > +*_COREBOOT_IA32_SLINK_PATH = DEF(COREBOOT_IA32_PREFIX)gcc-ar > +*_COREBOOT_IA32_DLINK_PATH = DEF(COREBOOT_IA32_PREFIX)gcc > +*_COREBOOT_IA32_ASLDLINK_PATH = DEF(COREBOOT_IA32_PREFIX)gcc > +*_COREBOOT_IA32_ASM_PATH = DEF(COREBOOT_IA32_PREFIX)gcc > +*_COREBOOT_IA32_PP_PATH = DEF(COREBOOT_IA32_PREFIX)gcc > +*_COREBOOT_IA32_VFRPP_PATH = DEF(COREBOOT_IA32_PREFIX)gcc > +*_COREBOOT_IA32_ASLCC_PATH = DEF(COREBOOT_IA32_PREFIX)gcc > +*_COREBOOT_IA32_ASLPP_PATH = DEF(COREBOOT_IA32_PREFIX)gcc > +*_COREBOOT_IA32_RC_PATH = DEF(COREBOOT_IA32_PREFIX)objcopy > + > +*_COREBOOT_IA32_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m32 -fno-lto > +*_COREBOOT_IA32_ASLDLINK_FLAGS = DEF(COREBOOT_IA32_X64_ASLDLINK_FLAGS) > -Wl,-m,elf_i386 > +*_COREBOOT_IA32_ASM_FLAGS = DEF(COREBOOT_ASM_FLAGS) -m32 > -march=i386 > +*_COREBOOT_IA32_DLINK2_FLAGS = DEF(COREBOOT_IA32_DLINK2_FLAGS) > +*_COREBOOT_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS) > +*_COREBOOT_IA32_OBJCOPY_FLAGS = > +*_COREBOOT_IA32_NASM_FLAGS = -f elf32 > + > + DEBUG_COREBOOT_IA32_CC_FLAGS = DEF(COREBOOT_IA32_CC_FLAGS) -flto -Os > + DEBUG_COREBOOT_IA32_DLINK_FLAGS = DEF(COREBOOT_IA32_X64_DLINK_FLAGS) > -flto -Os > -Wl,-m,elf_i386,--oformat=elf32-i386 > + > +RELEASE_COREBOOT_IA32_CC_FLAGS = DEF(COREBOOT_IA32_CC_FLAGS) -flto -Os > -Wno-unused-but-set-variable > +RELEASE_COREBOOT_IA32_DLINK_FLAGS = DEF(COREBOOT_IA32_X64_DLINK_FLAGS) > -flto -Os > -Wl,-m,elf_i386,--oformat=elf32-i386 > + > + NOOPT_COREBOOT_IA32_CC_FLAGS = DEF(COREBOOT_IA32_CC_FLAGS) -O0 > + NOOPT_COREBOOT_IA32_DLINK_FLAGS = DEF(COREBOOT_IA32_X64_DLINK_FLAGS) > -Wl,-m,elf_i386,--oformat=elf32-i386 > -O0 > + > +################## > +# COREBOOT X64 definitions > +################## > +*_COREBOOT_X64_OBJCOPY_PATH = DEF(COREBOOT_X64_PREFIX)objcopy > +*_COREBOOT_X64_CC_PATH = DEF(COREBOOT_X64_PREFIX)gcc > +*_COREBOOT_X64_SLINK_PATH = DEF(COREBOOT_X64_PREFIX)gcc-ar > +*_COREBOOT_X64_DLINK_PATH = DEF(COREBOOT_X64_PREFIX)gcc > +*_COREBOOT_X64_ASLDLINK_PATH = DEF(COREBOOT_X64_PREFIX)gcc > +*_COREBOOT_X64_ASM_PATH = DEF(COREBOOT_X64_PREFIX)gcc > +*_COREBOOT_X64_PP_PATH = DEF(COREBOOT_X64_PREFIX)gcc > +*_COREBOOT_X64_VFRPP_PATH = DEF(COREBOOT_X64_PREFIX)gcc > +*_COREBOOT_X64_ASLCC_PATH = DEF(COREBOOT_X64_PREFIX)gcc > +*_COREBOOT_X64_ASLPP_PATH = DEF(COREBOOT_X64_PREFIX)gcc > +*_COREBOOT_X64_RC_PATH = DEF(COREBOOT_X64_PREFIX)objcopy > + > +*_COREBOOT_X64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m64 -fno-lto > +*_COREBOOT_X64_ASLDLINK_FLAGS = DEF(COREBOOT_IA32_X64_ASLDLINK_FLAGS) > -Wl,-m,elf_x86_64 > +*_COREBOOT_X64_ASM_FLAGS = DEF(COREBOOT_ASM_FLAGS) -m64 > +*_COREBOOT_X64_DLINK2_FLAGS = DEF(COREBOOT_X64_DLINK2_FLAGS) > +*_COREBOOT_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS) > +*_COREBOOT_X64_OBJCOPY_FLAGS = > +*_COREBOOT_X64_NASM_FLAGS = -f elf64 > + > + DEBUG_COREBOOT_X64_CC_FLAGS = DEF(COREBOOT_X64_CC_FLAGS) -flto > -DUSING_LTO -Os > + DEBUG_COREBOOT_X64_DLINK_FLAGS = DEF(COREBOOT_X64_DLINK_FLAGS) -flto > -Os > + > +RELEASE_COREBOOT_X64_CC_FLAGS = DEF(COREBOOT_X64_CC_FLAGS) -flto > -DUSING_LTO -Os > -Wno-unused-but-set-variable > +RELEASE_COREBOOT_X64_DLINK_FLAGS = DEF(COREBOOT_X64_DLINK_FLAGS) -flto > -Os > + > + NOOPT_COREBOOT_X64_CC_FLAGS = DEF(COREBOOT_X64_CC_FLAGS) -O0 > + NOOPT_COREBOOT_X64_DLINK_FLAGS = DEF(COREBOOT_X64_DLINK_FLAGS) -O0 > + > +################## > +# COREBOOT ARM definitions > +################## > +*_COREBOOT_ARM_CC_PATH = ENV(COREBOOT_ARM_PREFIX)gcc > +*_COREBOOT_ARM_SLINK_PATH = ENV(COREBOOT_ARM_PREFIX)gcc-ar > +*_COREBOOT_ARM_DLINK_PATH = ENV(COREBOOT_ARM_PREFIX)gcc > +*_COREBOOT_ARM_ASLDLINK_PATH = ENV(COREBOOT_ARM_PREFIX)gcc > +*_COREBOOT_ARM_ASM_PATH = ENV(COREBOOT_ARM_PREFIX)gcc > +*_COREBOOT_ARM_PP_PATH = ENV(COREBOOT_ARM_PREFIX)gcc > +*_COREBOOT_ARM_VFRPP_PATH = ENV(COREBOOT_ARM_PREFIX)gcc > +*_COREBOOT_ARM_ASLCC_PATH = ENV(COREBOOT_ARM_PREFIX)gcc > +*_COREBOOT_ARM_ASLPP_PATH = ENV(COREBOOT_ARM_PREFIX)gcc > +*_COREBOOT_ARM_RC_PATH = ENV(COREBOOT_ARM_PREFIX)objcopy > + > +*_COREBOOT_ARM_ARCHCC_FLAGS = -mthumb > +*_COREBOOT_ARM_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) > +*_COREBOOT_ARM_ASLDLINK_FLAGS = DEF(COREBOOT_ARM_ASLDLINK_FLAGS) > +*_COREBOOT_ARM_ASM_FLAGS = DEF(COREBOOT_ARM_ASM_FLAGS) > +*_COREBOOT_ARM_DLINK2_FLAGS = DEF(COREBOOT_ARM_DLINK2_FLAGS) > +*_COREBOOT_ARM_PLATFORM_FLAGS = -march=armv7-a > +*_COREBOOT_ARM_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) > DEF(GCC_PP_FLAGS) > +*_COREBOOT_ARM_RC_FLAGS = DEF(GCC_ARM_RC_FLAGS) > +*_COREBOOT_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) > DEF(GCC_VFRPP_FLAGS) > +*_COREBOOT_ARM_CC_XIPFLAGS = DEF(COREBOOT_ARM_CC_XIPFLAGS) > + > + DEBUG_COREBOOT_ARM_CC_FLAGS = DEF(COREBOOT_ARM_CC_FLAGS) -O0 > + DEBUG_COREBOOT_ARM_DLINK_FLAGS = DEF(COREBOOT_ARM_DLINK_FLAGS) > + > +RELEASE_COREBOOT_ARM_CC_FLAGS = DEF(COREBOOT_ARM_CC_FLAGS) -flto > -Wno-unused-but-set-variable > +RELEASE_COREBOOT_ARM_DLINK_FLAGS = DEF(COREBOOT_ARM_DLINK_FLAGS) -flto > -Os > -L$(WORKSPACE)/ArmPkg/Library/GccLto -llto-arm > -Wl,-plugin-opt=-pass-through=-llto-arm > + > + NOOPT_COREBOOT_ARM_CC_FLAGS = DEF(COREBOOT_ARM_CC_FLAGS) -O0 > + NOOPT_COREBOOT_ARM_DLINK_FLAGS = DEF(COREBOOT_ARM_DLINK_FLAGS) -O0 > + > +################## > +# COREBOOT AARCH64 definitions > +################## > +*_COREBOOT_AARCH64_CC_PATH = ENV(COREBOOT_AARCH64_PREFIX)gcc > +*_COREBOOT_AARCH64_SLINK_PATH = ENV(COREBOOT_AARCH64_PREFIX)gcc-ar > +*_COREBOOT_AARCH64_DLINK_PATH = ENV(COREBOOT_AARCH64_PREFIX)gcc > +*_COREBOOT_AARCH64_ASLDLINK_PATH = ENV(COREBOOT_AARCH64_PREFIX)gcc > +*_COREBOOT_AARCH64_ASM_PATH = ENV(COREBOOT_AARCH64_PREFIX)gcc > +*_COREBOOT_AARCH64_PP_PATH = ENV(COREBOOT_AARCH64_PREFIX)gcc > +*_COREBOOT_AARCH64_VFRPP_PATH = ENV(COREBOOT_AARCH64_PREFIX)gcc > +*_COREBOOT_AARCH64_ASLCC_PATH = ENV(COREBOOT_AARCH64_PREFIX)gcc > +*_COREBOOT_AARCH64_ASLPP_PATH = ENV(COREBOOT_AARCH64_PREFIX)gcc > +*_COREBOOT_AARCH64_RC_PATH = ENV(COREBOOT_AARCH64_PREFIX)objcopy > + > +*_COREBOOT_AARCH64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) > +*_COREBOOT_AARCH64_ASLDLINK_FLAGS = DEF(COREBOOT_AARCH64_ASLDLINK_FLAGS) > +*_COREBOOT_AARCH64_ASM_FLAGS = DEF(COREBOOT_AARCH64_ASM_FLAGS) > +*_COREBOOT_AARCH64_DLINK2_FLAGS = DEF(COREBOOT_AARCH64_DLINK2_FLAGS) > +*_COREBOOT_AARCH64_PLATFORM_FLAGS = > +*_COREBOOT_AARCH64_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) > DEF(GCC_PP_FLAGS) > +*_COREBOOT_AARCH64_RC_FLAGS = DEF(GCC_AARCH64_RC_FLAGS) > +*_COREBOOT_AARCH64_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) > DEF(GCC_VFRPP_FLAGS) > +*_COREBOOT_AARCH64_CC_XIPFLAGS = DEF(COREBOOT_AARCH64_CC_XIPFLAGS) > + > + DEBUG_COREBOOT_AARCH64_CC_FLAGS = DEF(COREBOOT_AARCH64_CC_FLAGS) -O0 > -mcmodel=small > + DEBUG_COREBOOT_AARCH64_DLINK_FLAGS = DEF(COREBOOT_AARCH64_DLINK_FLAGS) -z > common-page-size=0x1000 > + DEBUG_COREBOOT_AARCH64_DLINK_XIPFLAGS = -z common-page-size=0x20 > + > +RELEASE_COREBOOT_AARCH64_CC_FLAGS = DEF(COREBOOT_AARCH64_CC_FLAGS) -flto > -Wno-unused-but-set-variable > -mcmodel=tiny -fomit-frame-pointer > +RELEASE_COREBOOT_AARCH64_DLINK_FLAGS = DEF(COREBOOT_AARCH64_DLINK_FLAGS) > -flto -Os > -L$(WORKSPACE)/ArmPkg/Library/GccLto -llto-aarch64 > -Wl,-plugin-opt=-pass-through=-llto-aarch64 -Wno-lto-type-mismatch > + > + NOOPT_COREBOOT_AARCH64_CC_FLAGS = DEF(COREBOOT_AARCH64_CC_FLAGS) -O0 > -mcmodel=small > + NOOPT_COREBOOT_AARCH64_DLINK_FLAGS = DEF(COREBOOT_AARCH64_DLINK_FLAGS) -z > common-page-size=0x1000 -O0 > + NOOPT_COREBOOT_AARCH64_DLINK_XIPFLAGS = -z common-page-size=0x20 -O0 > + > > #################################################################################### > # > # CLANG35 - This configuration is used to compile under Linux to produce > -- > 2.13.2.725.g09c95d1e9-goog > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

