> On Jul 15, 2015, at 10:00 AM, Scott Duplichan <sc...@notabs.org> wrote:
>
> Kinney, Michael D [mailto:michael.d.kin...@intel.com] wrote:
>
> ]Sent: Wednesday, July 15, 2015 11:11 AM
> ]To: Scott Duplichan; edk2-devel@lists.sourceforge.net; Kinney, Michael D
> ]Cc: Mcdaniel, Daryl
> ]Subject: RE: [edk2] [PATCH] BaseTools: Add GCC49LTO tool chain: GCC49 with
> link time optimization
> ]
> ]Scott,
> ]
> ]Is adding -Wl to those link options a new requirement for GCC49? Can all
> GCC toolchains accept -Wl in ]front of those link options? Maybe you can
> just all -Wl to the build rule without adding GCCLINK_PREFIX?
> ]
> ]Mike
>
> Hello Mike,
>
> The -Wl is added to the GCC49LTO link command for compatibility
> with a bigger change: GCC49LTO uses gcc to launch the link step
> rather than calling ld directly. This is because the gcc docs state:
>
> "to enable link-time optimizations you need to
> use the GCC driver to perform the link-step”
>
OK thanks for that I was getting confused. Xcode uses ld, so it does not have
this restriction.
> To make this change, the patch substitutes gcc for ld in DLINK_PATH.
> But when linking with gcc instead of ld, the command line is different
> in some aspects. Options such as -o <path> are understood by both gcc
> and ld and no change is needed there. But an option such as
> --start-group is not understood by gcc. It needs to be passed to the
> link step, and that is what the prepended '-Wl', does. Now if '-Wl,' is
> unconditionally prepended, then the other gcc builds break because
> they still use ld for linking, and ld doesn't understand a '-Wl,'
> prefix.
>
> The old gcc lto patch from last year that I never formally submitted
> changes the link command from ld to gcc for all GCC tool chains. One
> reason that I never submitted the patch is that making a change of this
> significance to the existing gcc tool chains would be questioned.
>
Maybe you are better off adding new targets in tools_def.txt for the LTO
versions? That way you only need to add an target for tools that you test? The
GCC stuff seems more modular than the other targets, it may not be that bad?
We turned on/off LTO in the DSC, and we ran into an issue in that we could not
then override optimization in the INF, basically we could not make -fno-lto the
last compiler flag.
Traditionally we did this:
[BuildOptions]
XCODE:*_*_*_CC_FLAGS = -O0
But with LTO we had to:
[BuildOptions]
XCODE:*_*_*_CC_FLAGS = -O0 -fno-lto
Thanks,
At a minimum you may want to make sure the over ride per driver still works,
assuming gcc supports that.
If you want to modify the existing GCC entries, without really changing them
you may want to use something like the PLATFORM_FLAGS on the ARM targets.
https://svn.code.sf.net/p/edk2/code/trunk/edk2/BaseTools/Conf/tools_def.template
<https://svn.code.sf.net/p/edk2/code/trunk/edk2/BaseTools/Conf/tools_def.template>
#
# Use default values, or override in DSC file
#
*_ARMLINUXGCC_AARCH64_ARCHCC_FLAGS =
*_ARMLINUXGCC_AARCH64_ARCHASM_FLAGS =
*_ARMLINUXGCC_AARCH64_ARCHDLINK_FLAGS =
*_ARMLINUXGCC_AARCH64_PLATFORM_FLAGS =
DEBUG_ARMLINUXGCC_AARCH64_ASM_FLAGS = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) -g
RELEASE_ARMLINUXGCC_AARCH64_ASM_FLAGS = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS)
*_ARMLINUXGCC_AARCH64_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -E -x
assembler-with-cpp -include $(DEST_DIR_DEBUG)/AutoGen.h
*_ARMLINUXGCC_AARCH64_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -x c -E
-P -DVFRCOMPILE --include $(DEST_DIR_DEBUG)/$(MODULE_NAME)StrDefs.h
*_ARMLINUXGCC_AARCH64_SLINK_FLAGS = -rc
*_ARMLINUXGCC_AARCH64_DLINK_FLAGS = $(ARCHDLINK_FLAGS)
DEF(GCC_ARM_AARCH64_DLINK_COMMON)
DEBUG_ARMLINUXGCC_AARCH64_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS)
DEF(GCC_AARCH64_CC_FLAGS) -Wno-address -O0
RELEASE_ARMLINUXGCC_AARCH64_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS)
DEF(GCC_AARCH64_CC_FLAGS) -Wno-address -Wno-unused-but-set-variable
Thanks,
Andrew Fish
> Thanks,
> Scott
>
>
> -----Original Message-----
> From: Scott Duplichan [mailto:sc...@notabs.org]
> Sent: Wednesday, July 15, 2015 12:03 AM
> To: Kinney, Michael D; edk2-devel@lists.sourceforge.net
> Cc: Mcdaniel, Daryl
> Subject: RE: [edk2] [PATCH] BaseTools: Add GCC49LTO tool chain: GCC49 with
> link time optimization
>
> Kinney, Michael D [mailto:michael.d.kin...@intel.com] wrote:
> ]
> ]Sent: Tuesday, July 14, 2015 03:56 PM
> ]To: Scott Duplichan; edk2-devel@lists.sourceforge.net; Kinney, Michael D
> ]Cc: Mcdaniel, Daryl
> ]Subject: RE: [edk2] [PATCH] BaseTools: Add GCC49LTO tool chain: GCC49 with
> link time optimization
> ]
> ]Hi Scott,
> ]
> ]What is the purpose of GCCLINK_PREFIX? Why can't the Wl flag just be
> included in tools_def.txt as ]required?
>
> Hello Kinney,
>
> The tools_def.txt allows customization of the DLINK_FLAGS part of the
> generated link command line. But the '-Wl,' must be prepended, with no
> space, to the --start-group and --end-group options within the link
> command line:
>
> "$(DLINK)" -o ${dst} $(DLINK_FLAGS) \
> $(GCCLINK_PREFIX)--start-group \
> $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) \
> $(GCCLINK_PREFIX)--end-group $(DLINK2_FLAGS)
>
> Gcc will not accept --start-group or --end-group on the command line with
> no prefix.
>
> Thanks,
> Scott
>
> ]Thanks,
> ]
> ]Mike
>
> -----Original Message-----
> From: Scott Duplichan [mailto:sc...@notabs.org]
> Sent: Tuesday, July 14, 2015 9:44 AM
> To: edk2-devel@lists.sourceforge.net
> Cc: Mcdaniel, Daryl
> Subject: [edk2] [PATCH] BaseTools: Add GCC49LTO tool chain: GCC49 with link
> time optimization
>
> BaseTools: Add GCC49LTO tool chain: GCC49 with link time optimization
>
> New tool chain GCC49LTO uses gcc -flto (link time optimization) for
> DEBUG and RELEASE builds of IA32, X64, and AARCH64.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Scott Duplichan <sc...@notabs.org>
> ---
>
> This patch enables gcc link time optimization by adding a stand-alone
> GCC49LTO tool chain. The existing GCC49 and other GCC tool chains remain
> unmodified. Link time optimization is added for IA32, X64 and AARCH64.
> ARM is omitted for the time being because I am unable to build some of
> the ARM projects. Link time optimization is added for RELEASE and DEBUG
> builds. It is not enabled for NOOPT builds because the gcc documentation
> states "Link-time optimization does not work well with generation of
> debugging information. Combining ‘-flto’ with ‘-g’ is currently
> experimental and expected to produce unexpected results."
>
> Builds that complete error free with GCC49 also complete with GCC49LTO.
> However, use of -flto allows gcc to see and warn about an AutoGen.h/
> AutoGen.c declaration difference for PCD array data. Other warnings
> are exposed when ASSERT code is expanded and optimized. A separate
> patch that allows overriding the warning as error option lets the
> builds complete so that -flto can be tested before the autogen and
> other warning issues are resolved.
>
> The only successful boot test so far is Duet. The patches from
> last year are still needed. I may rebsubmit these patches. GCC
> builds using the latest CorebootPayloadPkg code are not working
> on my board, so this needs to be debugged before it can be used
> as a gcc -flto test case.
>
> While this patch mainly targets BaseTools, some non-BaseTools files
> are changed: ArmVirt.dsc.inc and ArmVExpress.dsc.inc are modified
> to add GCC LTO compatibility to their overrides of DLINK_FLAGS.
> StdLib.inc is modified to disable link time optimization for its
> build. This is because gcc code generation for StdLib contains calls
> to compiler helper functions. While this can work with link time
> optimization, it requires linker option -plugin-opt=-pass-through=.
> Right now we have no easy way to generate the library path needed
> by -plugin-opt=-pass-through=.
>
> Laszlo suggested adding link time optimization support for GCC48
> since it ships with RHEL-7.1. I will do that in a day or two. I
> want to submit this patch now because I have done a lot of build
> testing with it.
>
>
> ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc | 2 +-
> ArmVirtPkg/ArmVirt.dsc.inc | 2 +-
> BaseTools/Conf/build_rule.template | 2 +-
> BaseTools/Conf/tools_def.template | 178 ++++++++++++++++++++++
> StdLib/StdLib.inc | 6 +
> 5 files changed, 187 insertions(+), 3 deletions(-)
>
> diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
> b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
> index 37a1ef7..1736104 100644
> --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
> +++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
> @@ -13,7 +13,7 @@
> #
>
> [BuildOptions.AARCH64.EDKII.DXE_RUNTIME_DRIVER]
> - GCC:*_*_AARCH64_DLINK_FLAGS =
> --script=$(EDK_TOOLS_PATH)/Scripts/gcc-aarch64-64K-align-ld-script
> + GCC:*_*_AARCH64_DLINK_FLAGS =
> $(GCCLINK_PREFIX)--script=$(EDK_TOOLS_PATH)/Scripts/gcc-aarch64-64K-align-ld-script
>
> [LibraryClasses.common]
> !if $(TARGET) == RELEASE
> diff --git a/ArmVirtPkg/ArmVirt.dsc.inc b/ArmVirtPkg/ArmVirt.dsc.inc
> index d3f401b..4e2b237 100644
> --- a/ArmVirtPkg/ArmVirt.dsc.inc
> +++ b/ArmVirtPkg/ArmVirt.dsc.inc
> @@ -18,7 +18,7 @@
> DEFINE TTY_TERMINAL = FALSE
>
> [BuildOptions.AARCH64.EDKII.DXE_RUNTIME_DRIVER]
> - GCC:*_*_AARCH64_DLINK_FLAGS =
> --script=$(EDK_TOOLS_PATH)/Scripts/gcc-aarch64-64K-align-ld-script
> + GCC:*_*_AARCH64_DLINK_FLAGS =
> $(GCCLINK_PREFIX)--script=$(EDK_TOOLS_PATH)/Scripts/gcc-aarch64-64K-align-ld-script
>
> [LibraryClasses.common]
> !if $(TARGET) == RELEASE
> diff --git a/BaseTools/Conf/build_rule.template
> b/BaseTools/Conf/build_rule.template
> index 596d41d..86ea464 100644
> --- a/BaseTools/Conf/build_rule.template
> +++ b/BaseTools/Conf/build_rule.template
> @@ -279,7 +279,7 @@
> "$(DLINK)" /OUT:${dst} $(DLINK_FLAGS) $(DLINK_SPATH)
> @$(STATIC_LIBRARY_FILES_LIST)
>
> <Command.GCC>
> - "$(DLINK)" -o ${dst} $(DLINK_FLAGS) --start-group $(DLINK_SPATH)
> @$(STATIC_LIBRARY_FILES_LIST) --end-group $(DLINK2_FLAGS)
> + "$(DLINK)" -o ${dst} $(DLINK_FLAGS) $(GCCLINK_PREFIX)--start-group
> $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) $(GCCLINK_PREFIX)--end-group
> $(DLINK2_FLAGS)
> "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}
>
> <Command.ARMGCC, Command.ARMLINUXGCC>
> diff --git a/BaseTools/Conf/tools_def.template
> b/BaseTools/Conf/tools_def.template
> index 8e5750e..8d1b319 100644
> --- a/BaseTools/Conf/tools_def.template
> +++ b/BaseTools/Conf/tools_def.template
> @@ -344,6 +344,12 @@ DEFINE SOURCERY_CYGWIN_TOOLS = /cygdrive/c/Program
> Files/CodeSourcery/Sourcery G
> # Required to build platforms or ACPI tables:
> # Intel(r) ACPI Compiler from
> # https://acpica.org/downloads
> +# GCC49LTO -Linux,Windows- Requires:
> +# LTO capable GCC 4.9 targeting
> x86_64-linux-gnu, aarch64-linux-gnu, or arm-linux-gnueabi
> +# Optional:
> +# Required to build platforms or ACPI tables:
> +# Intel(r) ACPI Compiler from
> +# https://acpica.org/downloads
> # ELFGCC -Linux- Requires:
> # GCC(this tool chain uses whatever version of
> gcc and binutils that is installed in /usr/bin)
> # Optional:
> @@ -3920,6 +3926,39 @@ DEFINE GCC49_AARCH64_DLINK_FLAGS =
> DEF(GCC48_AARCH64_DLINK_FLAGS)
> DEFINE GCC49_ARM_ASLDLINK_FLAGS = DEF(GCC48_ARM_ASLDLINK_FLAGS)
> DEFINE GCC49_AARCH64_ASLDLINK_FLAGS = DEF(GCC48_AARCH64_ASLDLINK_FLAGS)
>
> +DEFINE GCC49LTO_IA32_BASE_CC_FLAGS = -g -fshort-wchar
> -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -ffunction-sections
> -fdata-sections -include AutoGen.h -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings
> -m32 -malign-double -fno-stack-protector -D EFI32 -fno-builtin
> +DEFINE GCC49LTO_IA32_X64_DLINK_COMMON = -nostdlib
> -Wl,-n,-q,--gc-sections,--script=$(EDK_TOOLS_PATH)/Scripts/gcc4.9-ld-script
> +DEFINE GCC49LTO_IA32_X64_ASLDLINK_FLAGS =
> DEF(GCC49LTO_IA32_X64_DLINK_COMMON),--entry,ReferenceAcpiTable,-u,ReferenceAcpiTable
> +DEFINE GCC49LTO_IA32_X64_DLINK_FLAGS =
> DEF(GCC49LTO_IA32_X64_DLINK_COMMON),--entry,$(IMAGE_ENTRY_POINT),-u,$(IMAGE_ENTRY_POINT),-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map
> +DEFINE GCC49LTO_IA32_DLINK_FLAGS =
> DEF(GCC49LTO_IA32_X64_DLINK_FLAGS),-melf_i386,--oformat=elf32-i386
> +DEFINE GCC49LTO_X64_BASE_CC_FLAGS = -g -fshort-wchar
> -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -ffunction-sections
> -fdata-sections -include AutoGen.h -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings
> -m64 -fno-stack-protector "-DEFIAPI=__attribute__((ms_abi))"
> -DNO_BUILTIN_VA_FUNCS -mno-red-zone -Wno-address -mcmodel=large -fno-builtin
> +DEFINE GCC49LTO_X64_DLINK_FLAGS =
> DEF(GCC49LTO_IA32_X64_DLINK_FLAGS),-melf_x86_64,--oformat=elf64-x86-64
> +DEFINE GCC49LTO_ASM_FLAGS = DEF(GCC48_ASM_FLAGS)
> +DEFINE GCC49LTO_ARM_AARCH64_DLINK_COMMON = -nostdlib
> -Wl,--emit-relocs,--gc-sections,-u,$(IMAGE_ENTRY_POINT),-e,$(IMAGE_ENTRY_POINT),-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map
> +
> +DEFINE GCC49LTO_ARM_ASM_FLAGS = DEF(GCC48_ARM_ASM_FLAGS)
> +DEFINE GCC49LTO_ARM_BASE_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS)
> -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings -g -fshort-wchar -fno-strict-aliasing
> -Wall -Werror -Wno-array-bounds -include AutoGen.h -mword-relocations
> -mlittle-endian -mabi=aapcs -mapcs -fno-short-enums -fsigned-char
> -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-builtin
> -Wno-address -mthumb -mfloat-abi=soft -fstack-protector -mno-unaligned-access
> +DEFINE GCC49LTO_ARM_DLINK_FLAGS =
> DEF(GCC49LTO_ARM_AARCH64_DLINK_COMMON),-Ttext=0x0
> +DEFINE GCC49LTO_ARM_ASLDLINK_FLAGS =
> DEF(GCC49LTO_ARM_DLINK_FLAGS),--entry,ReferenceAcpiTable,-u,ReferenceAcpiTable
> +
> +DEFINE GCC49LTO_AARCH64_ASM_FLAGS = DEF(GCC48_AARCH64_ASM_FLAGS)
> +DEFINE GCC49LTO_AARCH64_BASE_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS)
> -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings -g -fshort-wchar -fno-strict-aliasing
> -Wall -Werror -Wno-array-bounds -include AutoGen.h -mcmodel=large
> -mlittle-endian -fno-short-enums -fverbose-asm -fsigned-char
> -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-builtin
> -Wno-address
> +DEFINE GCC49LTO_AARCH64_DLINK_FLAGS =
> DEF(GCC49LTO_ARM_AARCH64_DLINK_COMMON),--script=$(EDK_TOOLS_PATH)/Scripts/gcc-aarch64-ld-script
> +DEFINE GCC49LTO_AARCH64_ASLDLINK_FLAGS =
> DEF(GCC49LTO_AARCH64_DLINK_FLAGS),--entry,ReferenceAcpiTable,-u,ReferenceAcpiTable
> +
> +DEFINE GCC49LTO_IA32_DEBUG_FLAGS = -Os -flto
> +DEFINE GCC49LTO_IA32_RELEASE_FLAGS = -Os -flto
> -Wno-unused-but-set-variable
> +DEFINE GCC49LTO_IA32_NOOPT_FLAGS = -Og
> +DEFINE GCC49LTO_X64_DEBUG_FLAGS = -Os -flto
> +DEFINE GCC49LTO_X64_RELEASE_FLAGS = -Os -flto
> -Wno-unused-but-set-variable
> +DEFINE GCC49LTO_X64_NOOPT_FLAGS = -Og
> +DEFINE GCC49LTO_ARM_DEBUG_FLAGS = -Og
> +DEFINE GCC49LTO_ARM_RELEASE_FLAGS = -Wno-unused-but-set-variable
> +DEFINE GCC49LTO_ARM_NOOPT_FLAGS = -Og
> +DEFINE GCC49LTO_AARCH64_DEBUG_FLAGS = -Og -flto
> +DEFINE GCC49LTO_AARCH64_RELEASE_FLAGS = -flto -Wno-unused-but-set-variable
> +DEFINE GCC49LTO_AARCH64_NOOPT_FLAGS = -Og
> +
> ####################################################################################
> #
> # Unix GCC And Intel Linux ACPI Compiler
> @@ -4613,6 +4652,145 @@ RELEASE_GCC49_AARCH64_CC_FLAGS =
> DEF(GCC49_AARCH64_CC_FLAGS) -Wno-unused-but-s
>
> ####################################################################################
> #
> +# GCC 4.9 LTO - This configuration is used to compile under Linux to produce
> +# PE/COFF binaries using GCC 4.9 with Link Time Optimization
> enabled.
> +#
> +####################################################################################
> +*_GCC49LTO_*_*_FAMILY = GCC
> +
> +*_GCC49LTO_*_MAKE_PATH = DEF(GCC49_IA32_PREFIX)make
> +*_GCC49LTO_*_*_DLL = ENV(GCC49_DLL)
> +*_GCC49LTO_*_ASL_PATH = DEF(UNIX_IASL_BIN)
> +*_GCC49LTO_*_GCCLINK_PREFIX = -Wl,
> +
> +*_GCC49LTO_*_PP_FLAGS = DEF(GCC_PP_FLAGS)
> +*_GCC49LTO_*_ASLPP_FLAGS = DEF(GCC_ASLPP_FLAGS)
> +*_GCC49LTO_*_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS)
> +*_GCC49LTO_*_VFRPP_FLAGS = DEF(GCC_VFRPP_FLAGS)
> +*_GCC49LTO_*_APP_FLAGS =
> +*_GCC49LTO_*_ASL_FLAGS = DEF(IASL_FLAGS)
> +*_GCC49LTO_*_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS)
> +
> +##################
> +# GCC49LTO IA32 definitions
> +##################
> +*_GCC49LTO_IA32_OBJCOPY_PATH = DEF(GCC49_IA32_PREFIX)objcopy
> +*_GCC49LTO_IA32_CC_PATH = DEF(GCC49_IA32_PREFIX)gcc
> +*_GCC49LTO_IA32_SLINK_PATH = DEF(GCC49_IA32_PREFIX)gcc-ar
> +*_GCC49LTO_IA32_DLINK_PATH = DEF(GCC49_IA32_PREFIX)gcc
> +*_GCC49LTO_IA32_ASLDLINK_PATH = DEF(GCC49_IA32_PREFIX)gcc
> +*_GCC49LTO_IA32_ASM_PATH = DEF(GCC49_IA32_PREFIX)gcc
> +*_GCC49LTO_IA32_PP_PATH = DEF(GCC49_IA32_PREFIX)gcc
> +*_GCC49LTO_IA32_VFRPP_PATH = DEF(GCC49_IA32_PREFIX)gcc
> +*_GCC49LTO_IA32_ASLCC_PATH = DEF(GCC49_IA32_PREFIX)gcc
> +*_GCC49LTO_IA32_ASLPP_PATH = DEF(GCC49_IA32_PREFIX)gcc
> +*_GCC49LTO_IA32_RC_PATH = DEF(GCC49_IA32_PREFIX)objcopy
> +
> + *_GCC49LTO_IA32_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m32
> + *_GCC49LTO_IA32_ASLDLINK_FLAGS =
> DEF(GCC49LTO_IA32_X64_ASLDLINK_FLAGS),-melf_i386
> + *_GCC49LTO_IA32_ASM_FLAGS = DEF(GCC49LTO_ASM_FLAGS) -m32
> -march=i386
> + DEBUG_GCC49LTO_IA32_CC_FLAGS = DEF(GCC49LTO_IA32_BASE_CC_FLAGS)
> DEF(GCC49LTO_IA32_DEBUG_FLAGS) -c
> +RELEASE_GCC49LTO_IA32_CC_FLAGS = DEF(GCC49LTO_IA32_BASE_CC_FLAGS)
> DEF(GCC49LTO_IA32_RELEASE_FLAGS) -c
> + NOOPT_GCC49LTO_IA32_CC_FLAGS = DEF(GCC49LTO_IA32_BASE_CC_FLAGS)
> DEF(GCC49LTO_IA32_NOOPT_FLAGS) -c
> + DEBUG_GCC49LTO_IA32_DLINK_FLAGS = DEF(GCC49LTO_IA32_DLINK_FLAGS)
> DEF(GCC49LTO_IA32_BASE_CC_FLAGS) DEF(GCC49LTO_IA32_DEBUG_FLAGS)
> +RELEASE_GCC49LTO_IA32_DLINK_FLAGS = DEF(GCC49LTO_IA32_DLINK_FLAGS)
> DEF(GCC49LTO_IA32_BASE_CC_FLAGS) DEF(GCC49LTO_IA32_RELEASE_FLAGS)
> + NOOPT_GCC49LTO_IA32_DLINK_FLAGS = DEF(GCC49LTO_IA32_DLINK_FLAGS)
> DEF(GCC49LTO_IA32_BASE_CC_FLAGS) DEF(GCC49LTO_IA32_NOOPT_FLAGS)
> + *_GCC49LTO_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS)
> + *_GCC49LTO_IA32_OBJCOPY_FLAGS =
> + *_GCC49LTO_IA32_NASM_FLAGS = -f elf32
> +
> +##################
> +# GCC49LTO X64 definitions
> +##################
> +*_GCC49LTO_X64_OBJCOPY_PATH = DEF(GCC49_X64_PREFIX)objcopy
> +*_GCC49LTO_X64_CC_PATH = DEF(GCC49_X64_PREFIX)gcc
> +*_GCC49LTO_X64_SLINK_PATH = DEF(GCC49_X64_PREFIX)gcc-ar
> +*_GCC49LTO_X64_DLINK_PATH = DEF(GCC49_X64_PREFIX)gcc
> +*_GCC49LTO_X64_ASLDLINK_PATH = DEF(GCC49_X64_PREFIX)gcc
> +*_GCC49LTO_X64_ASM_PATH = DEF(GCC49_X64_PREFIX)gcc
> +*_GCC49LTO_X64_PP_PATH = DEF(GCC49_X64_PREFIX)gcc
> +*_GCC49LTO_X64_VFRPP_PATH = DEF(GCC49_X64_PREFIX)gcc
> +*_GCC49LTO_X64_ASLCC_PATH = DEF(GCC49_X64_PREFIX)gcc
> +*_GCC49LTO_X64_ASLPP_PATH = DEF(GCC49_X64_PREFIX)gcc
> +*_GCC49LTO_X64_RC_PATH = DEF(GCC49_X64_PREFIX)objcopy
> +
> +*_GCC49LTO_X64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m64
> +*_GCC49LTO_X64_ASLDLINK_FLAGS =
> DEF(GCC49LTO_IA32_X64_ASLDLINK_FLAGS),-melf_x86_64
> +*_GCC49LTO_X64_ASM_FLAGS = DEF(GCC49LTO_ASM_FLAGS) -m64
> + DEBUG_GCC49LTO_X64_CC_FLAGS = DEF(GCC49LTO_X64_BASE_CC_FLAGS)
> DEF(GCC49LTO_X64_DEBUG_FLAGS) -c
> +RELEASE_GCC49LTO_X64_CC_FLAGS = DEF(GCC49LTO_X64_BASE_CC_FLAGS)
> DEF(GCC49LTO_X64_RELEASE_FLAGS) -c
> + NOOPT_GCC49LTO_X64_CC_FLAGS = DEF(GCC49LTO_X64_BASE_CC_FLAGS)
> DEF(GCC49LTO_X64_NOOPT_FLAGS) -c
> + DEBUG_GCC49LTO_X64_DLINK_FLAGS = DEF(GCC49LTO_X64_DLINK_FLAGS)
> DEF(GCC49LTO_X64_BASE_CC_FLAGS) DEF(GCC49LTO_X64_DEBUG_FLAGS)
> +RELEASE_GCC49LTO_X64_DLINK_FLAGS = DEF(GCC49LTO_X64_DLINK_FLAGS)
> DEF(GCC49LTO_X64_BASE_CC_FLAGS) DEF(GCC49LTO_X64_RELEASE_FLAGS)
> + NOOPT_GCC49LTO_X64_DLINK_FLAGS = DEF(GCC49LTO_X64_DLINK_FLAGS)
> DEF(GCC49LTO_X64_BASE_CC_FLAGS) DEF(GCC49LTO_X64_NOOPT_FLAGS)
> + *_GCC49LTO_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS)
> + *_GCC49LTO_X64_OBJCOPY_FLAGS =
> + *_GCC49LTO_X64_NASM_FLAGS = -f elf64
> +
> +##################
> +# GCC49LTO ARM definitions
> +##################
> +*_GCC49LTO_ARM_CC_PATH = ENV(GCC49_ARM_PREFIX)gcc
> +*_GCC49LTO_ARM_SLINK_PATH = ENV(GCC49_ARM_PREFIX)gcc-ar
> +*_GCC49LTO_ARM_DLINK_PATH = ENV(GCC49_ARM_PREFIX)gcc
> +*_GCC49LTO_ARM_ASLDLINK_PATH = ENV(GCC49_ARM_PREFIX)gcc
> +*_GCC49LTO_ARM_ASM_PATH = ENV(GCC49_ARM_PREFIX)gcc
> +*_GCC49LTO_ARM_PP_PATH = ENV(GCC49_ARM_PREFIX)gcc
> +*_GCC49LTO_ARM_VFRPP_PATH = ENV(GCC49_ARM_PREFIX)gcc
> +*_GCC49LTO_ARM_ASLCC_PATH = ENV(GCC49_ARM_PREFIX)gcc
> +*_GCC49LTO_ARM_ASLPP_PATH = ENV(GCC49_ARM_PREFIX)gcc
> +*_GCC49LTO_ARM_RC_PATH = ENV(GCC49_ARM_PREFIX)objcopy
> +
> +*_GCC49LTO_ARM_ARCHCC_FLAGS = -mthumb
> +*_GCC49LTO_ARM_PLATFORM_FLAGS = -march=armv7-a
> +
> +*_GCC49LTO_ARM_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS)
> +*_GCC49LTO_ARM_ASLDLINK_FLAGS = DEF(GCC49LTO_ARM_ASLDLINK_FLAGS)
> +*_GCC49LTO_ARM_ASM_FLAGS = DEF(GCC49LTO_ARM_ASM_FLAGS)
> +*_GCC49LTO_ARM_DLINK_FLAGS = DEF(GCC49LTO_ARM_DLINK_FLAGS)
> +*_GCC49LTO_ARM_PLATFORM_FLAGS = -march=armv7-a
> +*_GCC49LTO_ARM_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS)
> DEF(GCC_PP_FLAGS)
> +*_GCC49LTO_ARM_RC_FLAGS = DEF(GCC_ARM_RC_FLAGS)
> +*_GCC49LTO_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS)
> DEF(GCC_VFRPP_FLAGS)
> +
> + DEBUG_GCC49LTO_ARM_CC_FLAGS = DEF(GCC49LTO_ARM_BASE_CC_FLAGS)
> DEF(GCC49LTO_ARM_DEBUG_FLAGS) -c
> +RELEASE_GCC49LTO_ARM_CC_FLAGS = DEF(GCC49LTO_ARM_BASE_CC_FLAGS)
> DEF(GCC49LTO_ARM_RELEASE_FLAGS) -c
> + NOOPT_GCC49LTO_ARM_CC_FLAGS = DEF(GCC49LTO_ARM_BASE_CC_FLAGS)
> DEF(GCC49LTO_ARM_NOOPT_FLAGS) -c
> + DEBUG_GCC49LTO_ARM_DLINK_FLAGS = DEF(GCC49LTO_ARM_DLINK_FLAGS)
> DEF(GCC49LTO_ARM_BASE_CC_FLAGS) DEF(GCC49LTO_ARM_DEBUG_FLAGS)
> +RELEASE_GCC49LTO_ARM_DLINK_FLAGS = DEF(GCC49LTO_ARM_DLINK_FLAGS)
> DEF(GCC49LTO_ARM_BASE_CC_FLAGS) DEF(GCC49LTO_ARM_RELEASE_FLAGS)
> + NOOPT_GCC49LTO_ARM_DLINK_FLAGS = DEF(GCC49LTO_ARM_DLINK_FLAGS)
> DEF(GCC49LTO_ARM_BASE_CC_FLAGS) DEF(GCC49LTO_ARM_NOOPT_FLAGS)
> +
> +##################
> +# GCC49LTO AARCH64 definitions
> +##################
> +*_GCC49LTO_AARCH64_CC_PATH = ENV(GCC49_AARCH64_PREFIX)gcc
> +*_GCC49LTO_AARCH64_SLINK_PATH = ENV(GCC49_AARCH64_PREFIX)gcc-ar
> +*_GCC49LTO_AARCH64_DLINK_PATH = ENV(GCC49_AARCH64_PREFIX)gcc
> +*_GCC49LTO_AARCH64_ASLDLINK_PATH = ENV(GCC49_AARCH64_PREFIX)gcc
> +*_GCC49LTO_AARCH64_ASM_PATH = ENV(GCC49_AARCH64_PREFIX)gcc
> +*_GCC49LTO_AARCH64_PP_PATH = ENV(GCC49_AARCH64_PREFIX)gcc
> +*_GCC49LTO_AARCH64_VFRPP_PATH = ENV(GCC49_AARCH64_PREFIX)gcc
> +*_GCC49LTO_AARCH64_ASLCC_PATH = ENV(GCC49_AARCH64_PREFIX)gcc
> +*_GCC49LTO_AARCH64_ASLPP_PATH = ENV(GCC49_AARCH64_PREFIX)gcc
> +*_GCC49LTO_AARCH64_RC_PATH = ENV(GCC49_AARCH64_PREFIX)objcopy
> +
> +*_GCC49LTO_AARCH64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS)
> +*_GCC49LTO_AARCH64_ASLDLINK_FLAGS = DEF(GCC49LTO_AARCH64_ASLDLINK_FLAGS)
> +*_GCC49LTO_AARCH64_ASM_FLAGS = DEF(GCC49LTO_AARCH64_ASM_FLAGS)
> +*_GCC49LTO_AARCH64_PLATFORM_FLAGS=
> +*_GCC49LTO_AARCH64_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS)
> DEF(GCC_PP_FLAGS)
> +*_GCC49LTO_AARCH64_RC_FLAGS = DEF(GCC_AARCH64_RC_FLAGS)
> +*_GCC49LTO_AARCH64_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS)
> DEF(GCC_VFRPP_FLAGS)
> +
> + DEBUG_GCC49LTO_AARCH64_CC_FLAGS = DEF(GCC49LTO_AARCH64_BASE_CC_FLAGS)
> DEF(GCC49LTO_AARCH64_DEBUG_FLAGS) -c
> +RELEASE_GCC49LTO_AARCH64_CC_FLAGS = DEF(GCC49LTO_AARCH64_BASE_CC_FLAGS)
> DEF(GCC49LTO_AARCH64_RELEASE_FLAGS) -c
> + NOOPT_GCC49LTO_AARCH64_CC_FLAGS = DEF(GCC49LTO_AARCH64_BASE_CC_FLAGS)
> DEF(GCC49LTO_AARCH64_NOOPT_FLAGS) -c
> + DEBUG_GCC49LTO_AARCH64_DLINK_FLAGS = DEF(GCC49LTO_AARCH64_DLINK_FLAGS)
> DEF(GCC49LTO_AARCH64_BASE_CC_FLAGS) DEF(GCC49LTO_AARCH64_DEBUG_FLAGS)
> +RELEASE_GCC49LTO_AARCH64_DLINK_FLAGS = DEF(GCC49LTO_AARCH64_DLINK_FLAGS)
> DEF(GCC49LTO_AARCH64_BASE_CC_FLAGS) DEF(GCC49LTO_AARCH64_RELEASE_FLAGS)
> + NOOPT_GCC49LTO_AARCH64_DLINK_FLAGS = DEF(GCC49LTO_AARCH64_DLINK_FLAGS)
> DEF(GCC49LTO_AARCH64_BASE_CC_FLAGS) DEF(GCC49LTO_AARCH64_NOOPT_FLAGS)
> +
> +####################################################################################
> +#
> # Cygwin GCC And Intel ACPI Compiler
> #
> ####################################################################################
> diff --git a/StdLib/StdLib.inc b/StdLib/StdLib.inc
> index 1b7fcf0..1821a46 100644
> --- a/StdLib/StdLib.inc
> +++ b/StdLib/StdLib.inc
> @@ -125,3 +125,9 @@
> ARMGCC:*_*_*_CC_FLAGS = -nostdinc -nostdlib -DUEFI_C_SOURCE
> -Wno-unknown-pragmas -Wno-unused -Wno-format-zero-length
> XCODE:*_*_*_CC_FLAGS = -nostdinc -nostdlib -DUEFI_C_SOURCE
> -Wno-unused-const-variable -Wno-string-compare -Wno-sometimes-uninitialized
> !endif
> +
> + # For gcc link time optimization (-flto) use, library functions that
> resolve
> + # compiler generated calls must be compiled without -flto.
> + # Wildcard can't be used for gcc version because GCC44 predates
> -flto/-fno-lto
> + GCC:*_GCC49LTO_IA32_CC_FLAGS = -fno-lto
> + GCC:*_GCC51LTO_IA32_CC_FLAGS = -fno-lto
>
>
>
>
> ------------------------------------------------------------------------------
> Don't Limit Your Business. Reach for the Cloud.
> GigeNET's Cloud Solutions provide you with the tools and support that
> you need to offload your IT needs and focus on growing your business.
> Configured For All Businesses. Start Your Cloud Today.
> https://www.gigenetcloud.com/
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel