]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Conf/tools_def.template
BaseTools GCC: introduce GCC5 toolchain to support GCC v5.x in LTO mode
[mirror_edk2.git] / BaseTools / Conf / tools_def.template
index 10ac21e42c8f5f790041fe06ccb302390082cad5..d88454a898a7ac96091468ad750cbe483af99ec8 100644 (file)
@@ -197,6 +197,9 @@ DEFINE GCC48_X64_PREFIX        = ENV(GCC48_BIN)
 DEFINE GCC49_IA32_PREFIX       = ENV(GCC49_BIN)\r
 DEFINE GCC49_X64_PREFIX        = ENV(GCC49_BIN)\r
 \r
+DEFINE GCC5_IA32_PREFIX        = ENV(GCC5_BIN)\r
+DEFINE GCC5_X64_PREFIX         = ENV(GCC5_BIN)\r
+\r
 DEFINE UNIX_IASL_BIN           = ENV(IASL_PREFIX)iasl\r
 DEFINE WIN_ASL_BIN_DIR         = C:\ASL\r
 DEFINE WIN_IASL_BIN            = DEF(WIN_ASL_BIN_DIR)\iasl.exe\r
@@ -366,6 +369,12 @@ DEFINE SOURCERY_CYGWIN_TOOLS = /cygdrive/c/Program Files/CodeSourcery/Sourcery G
 #                             Required to build platforms or ACPI tables:\r
 #                               Intel(r) ACPI Compiler from\r
 #                               https://acpica.org/downloads\r
+#   GCC5        -Linux,Windows-  Requires:\r
+#                             GCC 5 with LTO support, targeting x86_64-linux-gnu, aarch64-linux-gnu, or arm-linux-gnueabi\r
+#                        Optional:\r
+#                             Required to build platforms or ACPI tables:\r
+#                               Intel(r) ACPI Compiler from\r
+#                               https://acpica.org/downloads\r
 #   CLANG35     -Linux,Windows-  Requires:\r
 #                             Clang v3.5 or later, and GNU binutils targeting aarch64-linux-gnu or arm-linux-gnueabi\r
 #                        Optional:\r
@@ -4452,6 +4461,27 @@ DEFINE GCC49_AARCH64_DLINK2_FLAGS    = DEF(GCC48_AARCH64_DLINK2_FLAGS)
 DEFINE GCC49_ARM_ASLDLINK_FLAGS      = DEF(GCC48_ARM_ASLDLINK_FLAGS)\r
 DEFINE GCC49_AARCH64_ASLDLINK_FLAGS  = DEF(GCC48_AARCH64_ASLDLINK_FLAGS)\r
 \r
+DEFINE GCC5_IA32_CC_FLAGS            = DEF(GCC49_IA32_CC_FLAGS) -flto -fno-builtin\r
+DEFINE GCC5_X64_CC_FLAGS             = DEF(GCC49_X64_CC_FLAGS) -flto -fno-builtin -DUSING_LTO\r
+DEFINE GCC5_IA32_X64_DLINK_COMMON    = DEF(GCC49_IA32_X64_DLINK_COMMON)\r
+DEFINE GCC5_IA32_X64_ASLDLINK_FLAGS  = DEF(GCC49_IA32_X64_ASLDLINK_FLAGS)\r
+DEFINE GCC5_IA32_X64_DLINK_FLAGS     = DEF(GCC49_IA32_X64_DLINK_FLAGS) -flto\r
+DEFINE GCC5_IA32_DLINK2_FLAGS        = DEF(GCC49_IA32_DLINK2_FLAGS)\r
+DEFINE GCC5_X64_DLINK_FLAGS          = DEF(GCC49_X64_DLINK_FLAGS) -flto\r
+DEFINE GCC5_X64_DLINK2_FLAGS         = DEF(GCC49_X64_DLINK2_FLAGS)\r
+DEFINE GCC5_ASM_FLAGS                = DEF(GCC49_ASM_FLAGS)\r
+DEFINE GCC5_ARM_ASM_FLAGS            = DEF(GCC49_ARM_ASM_FLAGS)\r
+DEFINE GCC5_AARCH64_ASM_FLAGS        = DEF(GCC49_AARCH64_ASM_FLAGS)\r
+DEFINE GCC5_ARM_CC_FLAGS             = DEF(GCC49_ARM_CC_FLAGS)\r
+DEFINE GCC5_AARCH64_CC_FLAGS         = DEF(GCC49_AARCH64_CC_FLAGS)\r
+DEFINE GCC5_AARCH64_CC_XIPFLAGS      = DEF(GCC49_AARCH64_CC_XIPFLAGS)\r
+DEFINE GCC5_ARM_DLINK_FLAGS          = DEF(GCC49_ARM_DLINK_FLAGS)\r
+DEFINE GCC5_ARM_DLINK2_FLAGS         = DEF(GCC49_ARM_DLINK2_FLAGS)\r
+DEFINE GCC5_AARCH64_DLINK_FLAGS      = DEF(GCC49_AARCH64_DLINK_FLAGS)\r
+DEFINE GCC5_AARCH64_DLINK2_FLAGS     = DEF(GCC49_AARCH64_DLINK2_FLAGS)\r
+DEFINE GCC5_ARM_ASLDLINK_FLAGS       = DEF(GCC49_ARM_ASLDLINK_FLAGS)\r
+DEFINE GCC5_AARCH64_ASLDLINK_FLAGS   = DEF(GCC49_AARCH64_ASLDLINK_FLAGS)\r
+\r
 ####################################################################################\r
 #\r
 # Unix GCC And Intel Linux ACPI Compiler\r
@@ -5184,6 +5214,140 @@ RELEASE_GCC49_ARM_CC_FLAGS       = DEF(GCC49_ARM_CC_FLAGS) -Wno-unused-but-set-v
 RELEASE_GCC49_AARCH64_CC_FLAGS     = DEF(GCC49_AARCH64_CC_FLAGS) -Wno-unused-but-set-variable -mcmodel=tiny\r
 RELEASE_GCC49_AARCH64_DLINK_FLAGS  = DEF(GCC49_AARCH64_DLINK_FLAGS)\r
 \r
+####################################################################################\r
+#\r
+# GCC 5 - This configuration is used to compile under Linux to produce\r
+#         PE/COFF binaries using GCC 5\r
+#\r
+####################################################################################\r
+*_GCC5_*_*_FAMILY                = GCC\r
+\r
+*_GCC5_*_MAKE_PATH               = DEF(GCC5_IA32_PREFIX)make\r
+*_GCC5_*_*_DLL                   = ENV(GCC5_DLL)\r
+*_GCC5_*_ASL_PATH                = DEF(UNIX_IASL_BIN)\r
+\r
+*_GCC5_*_PP_FLAGS                = DEF(GCC_PP_FLAGS)\r
+*_GCC5_*_ASLPP_FLAGS             = DEF(GCC_ASLPP_FLAGS)\r
+*_GCC5_*_ASLCC_FLAGS             = DEF(GCC_ASLCC_FLAGS)\r
+*_GCC5_*_VFRPP_FLAGS             = DEF(GCC_VFRPP_FLAGS)\r
+*_GCC5_*_APP_FLAGS               =\r
+*_GCC5_*_ASL_FLAGS               = DEF(IASL_FLAGS)\r
+*_GCC5_*_ASL_OUTFLAGS            = DEF(IASL_OUTFLAGS)\r
+\r
+##################\r
+# GCC5 IA32 definitions\r
+##################\r
+*_GCC5_IA32_OBJCOPY_PATH         = DEF(GCC5_IA32_PREFIX)objcopy\r
+*_GCC5_IA32_CC_PATH              = DEF(GCC5_IA32_PREFIX)gcc\r
+*_GCC5_IA32_SLINK_PATH           = DEF(GCC5_IA32_PREFIX)gcc-ar\r
+*_GCC5_IA32_DLINK_PATH           = DEF(GCC5_IA32_PREFIX)gcc\r
+*_GCC5_IA32_ASLDLINK_PATH        = DEF(GCC5_IA32_PREFIX)gcc\r
+*_GCC5_IA32_ASM_PATH             = DEF(GCC5_IA32_PREFIX)gcc\r
+*_GCC5_IA32_PP_PATH              = DEF(GCC5_IA32_PREFIX)gcc\r
+*_GCC5_IA32_VFRPP_PATH           = DEF(GCC5_IA32_PREFIX)gcc\r
+*_GCC5_IA32_ASLCC_PATH           = DEF(GCC5_IA32_PREFIX)gcc\r
+*_GCC5_IA32_ASLPP_PATH           = DEF(GCC5_IA32_PREFIX)gcc\r
+*_GCC5_IA32_RC_PATH              = DEF(GCC5_IA32_PREFIX)objcopy\r
+\r
+*_GCC5_IA32_ASLCC_FLAGS          = DEF(GCC_ASLCC_FLAGS) -m32 -fno-lto\r
+*_GCC5_IA32_ASLDLINK_FLAGS       = DEF(GCC5_IA32_X64_ASLDLINK_FLAGS) -Wl,-m,elf_i386\r
+*_GCC5_IA32_ASM_FLAGS            = DEF(GCC5_ASM_FLAGS) -m32 -march=i386\r
+*_GCC5_IA32_DLINK_FLAGS          = DEF(GCC5_IA32_X64_DLINK_FLAGS) -Os -Wl,-m,elf_i386,--oformat=elf32-i386\r
+*_GCC5_IA32_DLINK2_FLAGS         = DEF(GCC5_IA32_DLINK2_FLAGS)\r
+*_GCC5_IA32_RC_FLAGS             = DEF(GCC_IA32_RC_FLAGS)\r
+*_GCC5_IA32_OBJCOPY_FLAGS        =\r
+*_GCC5_IA32_NASM_FLAGS           = -f elf32\r
+\r
+  DEBUG_GCC5_IA32_CC_FLAGS       = DEF(GCC5_IA32_CC_FLAGS) -Os\r
+RELEASE_GCC5_IA32_CC_FLAGS       = DEF(GCC5_IA32_CC_FLAGS) -Os -Wno-unused-but-set-variable\r
+\r
+##################\r
+# GCC5 X64 definitions\r
+##################\r
+*_GCC5_X64_OBJCOPY_PATH          = DEF(GCC5_X64_PREFIX)objcopy\r
+*_GCC5_X64_CC_PATH               = DEF(GCC5_X64_PREFIX)gcc\r
+*_GCC5_X64_SLINK_PATH            = DEF(GCC5_X64_PREFIX)gcc-ar\r
+*_GCC5_X64_DLINK_PATH            = DEF(GCC5_X64_PREFIX)gcc\r
+*_GCC5_X64_ASLDLINK_PATH         = DEF(GCC5_X64_PREFIX)gcc\r
+*_GCC5_X64_ASM_PATH              = DEF(GCC5_X64_PREFIX)gcc\r
+*_GCC5_X64_PP_PATH               = DEF(GCC5_X64_PREFIX)gcc\r
+*_GCC5_X64_VFRPP_PATH            = DEF(GCC5_X64_PREFIX)gcc\r
+*_GCC5_X64_ASLCC_PATH            = DEF(GCC5_X64_PREFIX)gcc\r
+*_GCC5_X64_ASLPP_PATH            = DEF(GCC5_X64_PREFIX)gcc\r
+*_GCC5_X64_RC_PATH               = DEF(GCC5_X64_PREFIX)objcopy\r
+\r
+*_GCC5_X64_ASLCC_FLAGS           = DEF(GCC_ASLCC_FLAGS) -m64 -fno-lto\r
+*_GCC5_X64_ASLDLINK_FLAGS        = DEF(GCC5_IA32_X64_ASLDLINK_FLAGS) -Wl,-m,elf_x86_64\r
+*_GCC5_X64_ASM_FLAGS             = DEF(GCC5_ASM_FLAGS) -m64\r
+*_GCC5_X64_DLINK_FLAGS           = DEF(GCC5_X64_DLINK_FLAGS) -Os\r
+*_GCC5_X64_DLINK2_FLAGS          = DEF(GCC5_X64_DLINK2_FLAGS)\r
+*_GCC5_X64_RC_FLAGS              = DEF(GCC_X64_RC_FLAGS)\r
+*_GCC5_X64_OBJCOPY_FLAGS         =\r
+*_GCC5_X64_NASM_FLAGS            = -f elf64\r
+\r
+  DEBUG_GCC5_X64_CC_FLAGS        = DEF(GCC5_X64_CC_FLAGS)\r
+RELEASE_GCC5_X64_CC_FLAGS        = DEF(GCC5_X64_CC_FLAGS) -Wno-unused-but-set-variable\r
+\r
+##################\r
+# GCC5 ARM definitions\r
+##################\r
+*_GCC5_ARM_CC_PATH               = ENV(GCC5_ARM_PREFIX)gcc\r
+*_GCC5_ARM_SLINK_PATH            = ENV(GCC5_ARM_PREFIX)gcc-ar\r
+*_GCC5_ARM_DLINK_PATH            = ENV(GCC5_ARM_PREFIX)gcc\r
+*_GCC5_ARM_ASLDLINK_PATH         = ENV(GCC5_ARM_PREFIX)gcc\r
+*_GCC5_ARM_ASM_PATH              = ENV(GCC5_ARM_PREFIX)gcc\r
+*_GCC5_ARM_PP_PATH               = ENV(GCC5_ARM_PREFIX)gcc\r
+*_GCC5_ARM_VFRPP_PATH            = ENV(GCC5_ARM_PREFIX)gcc\r
+*_GCC5_ARM_ASLCC_PATH            = ENV(GCC5_ARM_PREFIX)gcc\r
+*_GCC5_ARM_ASLPP_PATH            = ENV(GCC5_ARM_PREFIX)gcc\r
+*_GCC5_ARM_RC_PATH               = ENV(GCC5_ARM_PREFIX)objcopy\r
+\r
+*_GCC5_ARM_ARCHCC_FLAGS          = -mthumb\r
+*_GCC5_ARM_ASLCC_FLAGS           = DEF(GCC_ASLCC_FLAGS)\r
+*_GCC5_ARM_ASLDLINK_FLAGS        = DEF(GCC5_ARM_ASLDLINK_FLAGS)\r
+*_GCC5_ARM_ASM_FLAGS             = DEF(GCC5_ARM_ASM_FLAGS)\r
+*_GCC5_ARM_DLINK2_FLAGS          = DEF(GCC5_ARM_DLINK2_FLAGS)\r
+*_GCC5_ARM_PLATFORM_FLAGS        = -march=armv7-a\r
+*_GCC5_ARM_PP_FLAGS              = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_PP_FLAGS)\r
+*_GCC5_ARM_RC_FLAGS              = DEF(GCC_ARM_RC_FLAGS)\r
+*_GCC5_ARM_VFRPP_FLAGS           = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_VFRPP_FLAGS)\r
+\r
+  DEBUG_GCC5_ARM_CC_FLAGS        = DEF(GCC5_ARM_CC_FLAGS) -O0\r
+  DEBUG_GCC5_ARM_DLINK_FLAGS     = DEF(GCC5_ARM_DLINK_FLAGS)\r
+\r
+RELEASE_GCC5_ARM_CC_FLAGS        = DEF(GCC5_ARM_CC_FLAGS) -flto -Wno-unused-but-set-variable\r
+RELEASE_GCC5_ARM_DLINK_FLAGS     = DEF(GCC5_ARM_DLINK_FLAGS) -flto -Os -L$(WORKSPACE)/ArmPkg/Library/GccLto -llto-arm -Wl,-plugin-opt=-pass-through=-llto-arm\r
+\r
+##################\r
+# GCC5 AARCH64 definitions\r
+##################\r
+*_GCC5_AARCH64_CC_PATH           = ENV(GCC5_AARCH64_PREFIX)gcc\r
+*_GCC5_AARCH64_SLINK_PATH        = ENV(GCC5_AARCH64_PREFIX)gcc-ar\r
+*_GCC5_AARCH64_DLINK_PATH        = ENV(GCC5_AARCH64_PREFIX)gcc\r
+*_GCC5_AARCH64_ASLDLINK_PATH     = ENV(GCC5_AARCH64_PREFIX)gcc\r
+*_GCC5_AARCH64_ASM_PATH          = ENV(GCC5_AARCH64_PREFIX)gcc\r
+*_GCC5_AARCH64_PP_PATH           = ENV(GCC5_AARCH64_PREFIX)gcc\r
+*_GCC5_AARCH64_VFRPP_PATH        = ENV(GCC5_AARCH64_PREFIX)gcc\r
+*_GCC5_AARCH64_ASLCC_PATH        = ENV(GCC5_AARCH64_PREFIX)gcc\r
+*_GCC5_AARCH64_ASLPP_PATH        = ENV(GCC5_AARCH64_PREFIX)gcc\r
+*_GCC5_AARCH64_RC_PATH           = ENV(GCC5_AARCH64_PREFIX)objcopy\r
+\r
+*_GCC5_AARCH64_ASLCC_FLAGS       = DEF(GCC_ASLCC_FLAGS)\r
+*_GCC5_AARCH64_ASLDLINK_FLAGS    = DEF(GCC5_AARCH64_ASLDLINK_FLAGS)\r
+*_GCC5_AARCH64_ASM_FLAGS         = DEF(GCC5_AARCH64_ASM_FLAGS)\r
+*_GCC5_AARCH64_DLINK2_FLAGS      = DEF(GCC5_AARCH64_DLINK2_FLAGS)\r
+*_GCC5_AARCH64_PLATFORM_FLAGS    =\r
+*_GCC5_AARCH64_PP_FLAGS          = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_PP_FLAGS)\r
+*_GCC5_AARCH64_RC_FLAGS          = DEF(GCC_AARCH64_RC_FLAGS)\r
+*_GCC5_AARCH64_VFRPP_FLAGS       = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_VFRPP_FLAGS)\r
+*_GCC5_AARCH64_CC_XIPFLAGS       = DEF(GCC5_AARCH64_CC_XIPFLAGS)\r
+\r
+  DEBUG_GCC5_AARCH64_CC_FLAGS    = DEF(GCC5_AARCH64_CC_FLAGS) -O0 -mcmodel=small\r
+  DEBUG_GCC5_AARCH64_DLINK_FLAGS = DEF(GCC5_AARCH64_DLINK_FLAGS) -z common-page-size=0x1000\r
+\r
+RELEASE_GCC5_AARCH64_CC_FLAGS    = DEF(GCC5_AARCH64_CC_FLAGS) -flto -Wno-unused-but-set-variable -mcmodel=tiny\r
+RELEASE_GCC5_AARCH64_DLINK_FLAGS = DEF(GCC5_AARCH64_DLINK_FLAGS) -flto -Os -L$(WORKSPACE)/ArmPkg/Library/GccLto -llto-aarch64 -Wl,-plugin-opt=-pass-through=-llto-aarch64\r
+\r
 ####################################################################################\r
 #\r
 # CLANG35   - This configuration is used to compile under Linux to produce\r