Hi Jordan,
I've separated this patch to 3 commits and post a public branch for them: 
https://github.com/shijunjing/edk2/commits/review6 . Please take a look.



Steven Shi
Intel\SSG\STO\UEFI Firmware

Tel: +86 021-61166522
iNet: 821-6522

> -----Original Message-----
> From: Shi, Steven
> Sent: Monday, July 04, 2016 9:38 PM
> To: Justen, Jordan L <jordan.l.jus...@intel.com>; edk2-devel@lists.01.org;
> Gao, Liming <liming....@intel.com>
> Cc: Kinney, Michael D <michael.d.kin...@intel.com>; af...@apple.com
> Subject: RE: [edk2] [PATCH 1/7] BaseTools: Enable three new toolchains
> 
> OK. I will separate this patch to 3 commits and post a public branch for them.
> 
> 
> Steven Shi
> Intel\SSG\STO\UEFI Firmware
> 
> Tel: +86 021-61166522
> iNet: 821-6522
> 
> 
> > -----Original Message-----
> > From: Justen, Jordan L
> > Sent: Thursday, June 30, 2016 4:55 AM
> > To: Shi, Steven <steven....@intel.com>; edk2-devel@lists.01.org; Gao,
> > Liming <liming....@intel.com>
> > Cc: Kinney, Michael D <michael.d.kin...@intel.com>; af...@apple.com
> > Subject: Re: [edk2] [PATCH 1/7] BaseTools: Enable three new toolchains
> >
> > This should be 3 separate commits. It should be obvious in the commit
> > subject line what toolchain is being added.
> >
> > Can you post a public branch with your commits? Maybe on a personal
> > github fork of the edk2 repo.
> >
> > On 2016-06-28 08:18:55, Shi, Steven wrote:
> > > Enable three new toolchains: CLANG38, CLANGSCAN38 and GCC53.
> > > (1)CLANG38 uses Clang3.8.0, enable LLVM Link Time Optimization (LTO)
> > > and code size optimization flag (-Oz) by default for aggressive code
> > > size improvement. CLANG38 X64 code is small code model + PIE.
> > > (2)CLANGSCAN38 is based on CLANG38 to seamlessly integrate Clang
> > > scan-build analyzer infrastructure into edk2 build infrastructure.
> >
> > I'm not sure we should add a separate toolchain for this.
> >
> > > (3)GCC53 use gcc 5.3, enable GCC Link Time Optimization (LTO) and
> > > code size optimization (–Os) for aggressive code size improvement.
> > > GCC53 X64 code is also small + PIE.
> >
> > As of GCC 5.0, the minor releases have been bumped left. Essentially,
> > GCC51, GCC52, etc don't make sense, and GCC5 or GCC6 should be used
> > now.
> >
> > https://gcc.gnu.org/releases.html
> >
> > So, will this work with all versions of GCC 5.*? If not, I suggest we
> > consider starting this support at GCC6.
> >
> > -Jordan
> >
> > >
> > > Contributed-under: TianoCore Contribution Agreement 1.0
> > > Signed-off-by: Steven Shi <steven....@intel.com>
> > > ---
> > >  BaseTools/Conf/build_rule.template |  17 ++-
> > >  BaseTools/Conf/tools_def.template  | 267
> > +++++++++++++++++++++++++++++++++++++
> > >  2 files changed, 283 insertions(+), 1 deletion(-)
> > >  mode change 100644 => 100755 BaseTools/Conf/build_rule.template
> > >  mode change 100644 => 100755 BaseTools/Conf/tools_def.template
> > >
> > > diff --git a/BaseTools/Conf/build_rule.template
> > b/BaseTools/Conf/build_rule.template
> > > old mode 100644
> > > new mode 100755
> > > index 91bcc18..7f21813
> > > --- a/BaseTools/Conf/build_rule.template
> > > +++ b/BaseTools/Conf/build_rule.template
> > > @@ -137,6 +137,9 @@
> > >      <Command.XCODE>
> > >          "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src}
> > >
> > > +    <Command.CLANGSCAN38>
> > > +        "$(SCAN)" $(SCAN_FLAGS) -o $(SCAN_DST) "$(CC)" $(CC_FLAGS) -o
> > ${dst} $(INC) ${src}
> > > +
> > >  [C-Code-File.COMMON.IPF]
> > >      <InputFile>
> > >          ?.c
> > > @@ -267,7 +270,10 @@
> > >
> > >      <Command.GCC>
> > >          "$(SLINK)" -cr ${dst} $(SLINK_FLAGS) @$(OBJECT_FILES_LIST)
> > > -
> > > +
> > > +    <Command.CLANG38, Command.CLANGSCAN38>
> > > +        "$(SLINK)" cr ${dst} $(SLINK_FLAGS) @$(OBJECT_FILES_LIST)
> > > +
> > >      <Command.RVCT>
> > >          "$(SLINK)" $(SLINK_FLAGS) ${dst} --via $(OBJECT_FILES_LIST)
> > >
> > > @@ -295,6 +301,10 @@
> > >          "$(DLINK)" -o ${dst} $(DLINK_FLAGS) --start-group $(DLINK_SPATH)
> > @$(STATIC_LIBRARY_FILES_LIST) --end-group $(DLINK2_FLAGS)
> > >          "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}
> > >
> > > +    <Command.GCC53, Command.CLANG38, Command.CLANGSCAN38>
> > > +        "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -Wl,--start-
> > group,$(DLINK_SPATH),@$(STATIC_LIBRARY_FILES_LIST) -Wl,--end-group
> > $(DLINK2_FLAGS)
> > > +        "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}
> > > +
> > >      <Command.RVCT>
> > >          "$(DLINK)" $(DLINK_FLAGS) -o ${dst} $(DLINK_SPATH) --via
> > $(STATIC_LIBRARY_FILES_LIST) $(DLINK2_FLAGS)
> > >
> > > @@ -448,6 +458,11 @@
> > >          "$(ASLDLINK)" -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll
> > $(ASLDLINK_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj
> > >          "$(GENFW)" -o ${dst} -c $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll
> > $(GENFW_FLAGS)
> > >
> > > +    <Command.GCC53>
> > > +        "$(ASLCC)" -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj
> > $(ASLCC_FLAGS) $(INC) ${src}
> > > +        "$(ASLDLINK)" -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll
> > $(ASLDLINK_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj
> > > +        "$(GENFW)" -o ${dst} -c $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll
> > $(GENFW_FLAGS)
> > > +
> > >      <Command.XCODE>
> > >          "$(ASLCC)" -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj
> > $(ASLCC_FLAGS) $(INC) ${src}
> > >          "$(ASLDLINK)" -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll
> > $(ASLDLINK_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj
> > > diff --git a/BaseTools/Conf/tools_def.template
> > b/BaseTools/Conf/tools_def.template
> > > old mode 100644
> > > new mode 100755
> > > index 2065fa3..d401031
> > > --- a/BaseTools/Conf/tools_def.template
> > > +++ b/BaseTools/Conf/tools_def.template
> > > @@ -366,12 +366,30 @@ 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
> > > +#   GCC53    -Linux-  Requires:
> > > +#                             GCC 5.3 targeting x86_64-linux-gnu
> > > +#                        Optional:
> > > +#                             Required to build platforms or ACPI tables:
> > > +#                               Intel(r) ACPI Compiler from
> > > +#                               https://acpica.org/downloads
> > >  #   CLANG35     -Linux,Windows-  Requires:
> > >  #                             Clang v3.5 or later, and GNU binutils 
> > > targeting aarch64-
> > linux-gnu or arm-linux-gnueabi
> > >  #                        Optional:
> > >  #                             Required to build platforms or ACPI tables:
> > >  #                               Intel(r) ACPI Compiler from
> > >  #                               https://acpica.org/downloads
> > > +#   CLANG38  -Linux-  Requires:
> > > +#                             Clang v3.8 or later, LLVMgold plugin and 
> > > GNU binutils
> > 2.26 targeting x86_64-linux-gnu
> > > +#                        Optional:
> > > +#                             Required to build platforms or ACPI tables:
> > > +#                               Intel(r) ACPI Compiler from
> > > +#                               https://acpica.org/downloads
> > > +#   CLANGSCAN38 -Linux-  Requires:
> > > +#                             Clang v3.8 or later, and GNU binutils 2.26 
> > > targeting
> > x86_64-linux-gnu
> > > +#                        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:
> > > @@ -7410,3 +7428,252 @@ RELEASE_RVCTCYGWIN_ARM_CC_FLAGS  =
> > "$(CCPATH_FLAG)" $(ARCHCC_FLAGS) $(PLATFORM_F
> > >  # Build rule order
> > >  #################
> > >  *_*_*_*_BUILDRULEORDER = nasm asm Asm ASM S s
> > > +
> > >
> >
> +#############################################################
> > #######################
> > > +#
> > > +# Clang 3.8 - This configuration is used to compile under Linux to
> produce
> > > +#  PE/COFF binaries using LLVM/Clang 3.8 with Link Time Optimization
> > enabled
> > > +#
> > >
> >
> +#############################################################
> > #######################
> > > +
> > > +*_CLANG38_*_*_FAMILY                = GCC
> > > +*_CLANG38_*_*_BUILDRULEFAMILY       = CLANG38
> > > +*_CLANG38_*_MAKE_PATH               = DEF(GCC49_IA32_PREFIX)make
> > > +*_CLANG38_*_*_DLL                   = ENV(CLANG38_DLL)
> > > +*_CLANG38_*_ASL_PATH                = DEF(UNIX_IASL_BIN)
> > > +
> > > +*_CLANG38_*_PP_FLAGS                = DEF(GCC_PP_FLAGS) -target
> x86_64-
> > pc-linux-gnu
> > > +*_CLANG38_*_ASLPP_FLAGS             = DEF(GCC_ASLPP_FLAGS) -target
> > x86_64-pc-linux-gnu
> > > +*_CLANG38_*_VFRPP_FLAGS             = DEF(GCC_VFRPP_FLAGS) -target
> > x86_64-pc-linux-gnu
> > > +*_CLANG38_*_APP_FLAGS               =
> > > +*_CLANG38_*_ASL_FLAGS               = DEF(IASL_FLAGS)
> > > +*_CLANG38_*_ASL_OUTFLAGS            = DEF(IASL_OUTFLAGS)
> > > +
> > > +DEFINE CLANG38_IA32_PREFIX          = ENV(CLANG38_BIN)
> > > +DEFINE CLANG38_X64_PREFIX           = ENV(CLANG38_BIN)
> > > +
> > > +DEFINE CLANG38_ALL_CC_FLAGS     = -c -fshort-wchar -fno-strict-
> aliasing
> > -Wall -Werror -Wno-array-bounds -Wno-empty-body -ffunction-sections -
> > fdata-sections -include AutoGen.h -
> > DSTRING_ARRAY_NAME=$(BASE_NAME)Strings -fno-stack-protector -fno-
> > builtin -mms-bitfields -Wno-address -Wno-shift-negative-value -Wno-
> > parentheses-equality -Wno-unknown-pragmas -Wno-tautological-
> constant-
> > out-of-range-compare -Wno-incompatible-library-redeclaration -target
> > x86_64-pc-linux-gnu -fno-asynchronous-unwind-tables -mno-sse -mno-
> mmx
> > -msoft-float -mno-implicit-float  -ftrap-
> > function=undefined_behavior_has_been_optimized_away_by_clang -
> > funsigned-char -fno-ms-extensions -fno-common -Wno-null-dereference -
> > Wno-tautological-compare
> > > +
> > > +DEFINE CLANG38_ALL_DLINK_FLAGS  = -flto -nostdlib -Wl,-n -Wl,-q -
> Wl,--
> > gc-sections -z common-page-size=0x40 -Wl,--
> entry,$(IMAGE_ENTRY_POINT)
> > -Wl,-u,$(IMAGE_ENTRY_POINT) -Wl,-
> > Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map
> > > +DEFINE CLANG38_IA32_DLINK2_FLAGS = -Wl,--
> > defsym=PECOFF_HEADER_SIZE=0x220 -Wl,--
> > script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds
> > > +DEFINE CLANG38_X64_DLINK2_FLAGS  = -Wl,--
> > defsym=PECOFF_HEADER_SIZE=0x228 -Wl,--
> > script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds
> > > +
> > > +###########################
> > > +# CLANG38 IA32 definitions
> > > +###########################
> > > +*_CLANG38_IA32_OBJCOPY_PATH         =
> > DEF(GCC49_IA32_PREFIX)objcopy
> > > +*_CLANG38_IA32_CC_PATH              = DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANG38_IA32_SLINK_PATH           =
> DEF(CLANG38_IA32_PREFIX)llvm-
> > ar
> > > +*_CLANG38_IA32_DLINK_PATH           =
> DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANG38_IA32_ASLDLINK_PATH        =
> > DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANG38_IA32_ASM_PATH             =
> DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANG38_IA32_PP_PATH              = DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANG38_IA32_VFRPP_PATH           =
> DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANG38_IA32_ASLCC_PATH           =
> DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANG38_IA32_ASLPP_PATH           =
> DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANG38_IA32_RC_PATH              = DEF(GCC49_IA32_PREFIX)objcopy
> > > +
> > > +*_CLANG38_IA32_ASLCC_FLAGS          = -x c -Os -m32 -target x86_64-
> pc-
> > linux-gnu -flto
> > > +*_CLANG38_IA32_ASLDLINK_FLAGS       =
> > DEF(CLANG38_ALL_DLINK_FLAGS) -Wl,-Oz -Wl,-melf_i386 -Wl,--
> > entry,ReferenceAcpiTable -Wl,-u,ReferenceAcpiTable
> > > +*_CLANG38_IA32_ASM_FLAGS            = DEF(GCC49_ASM_FLAGS) -m32 -
> > march=i386
> > > +DEBUG_CLANG38_IA32_CC_FLAGS         = DEF(CLANG38_ALL_CC_FLAGS)
> -
> > m32 -D EFI32 -Oz -flto -march=i586 -g
> > > +RELEASE_CLANG38_IA32_CC_FLAGS       = DEF(CLANG38_ALL_CC_FLAGS)
> > -m32 -D EFI32 -Oz -flto -march=i586
> > > +*_CLANG38_IA32_DLINK_FLAGS          =
> DEF(CLANG38_ALL_DLINK_FLAGS)
> > -Wl,-Oz -Wl,-melf_i386 -Wl,--oformat=elf32-i386
> > > +*_CLANG38_IA32_DLINK2_FLAGS         =
> > DEF(CLANG38_IA32_DLINK2_FLAGS)
> > > +*_CLANG38_IA32_RC_FLAGS             = DEF(GCC_IA32_RC_FLAGS)
> > > +*_CLANG38_IA32_OBJCOPY_FLAGS        =
> > > +*_CLANG38_IA32_NASM_FLAGS           = -f elf32
> > > +
> > > +##########################
> > > +# CLANG38 X64 definitions
> > > +##########################
> > > +*_CLANG38_X64_OBJCOPY_PATH         =
> DEF(GCC49_X64_PREFIX)objcopy
> > > +*_CLANG38_X64_CC_PATH              = DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANG38_X64_SLINK_PATH           = DEF(CLANG38_X64_PREFIX)llvm-
> ar
> > > +*_CLANG38_X64_DLINK_PATH           = DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANG38_X64_ASLDLINK_PATH        =
> DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANG38_X64_ASM_PATH             = DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANG38_X64_PP_PATH              = DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANG38_X64_VFRPP_PATH           = DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANG38_X64_ASLCC_PATH           = DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANG38_X64_ASLPP_PATH           = DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANG38_X64_RC_PATH              = DEF(GCC49_X64_PREFIX)objcopy
> > > +
> > > +*_CLANG38_X64_ASLCC_FLAGS          = -x c -Os -m64 -target x86_64-pc-
> > linux-gnu -flto
> > > +*_CLANG38_X64_ASLDLINK_FLAGS       =
> > DEF(CLANG38_ALL_DLINK_FLAGS) -Wl,-Oz -Wl,-melf_x86_64 -Wl,--
> > entry,ReferenceAcpiTable -Wl,-u,ReferenceAcpiTable -Wl,-pie -
> > mcmodel=small
> > > +*_CLANG38_X64_ASM_FLAGS            = DEF(GCC49_ASM_FLAGS) -m64 -
> > target x86_64-pc-linux-gnu
> > > +DEBUG_CLANG38_X64_CC_FLAGS         = DEF(CLANG38_ALL_CC_FLAGS)
> -
> > m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -
> > fpie -g -Oz -flto
> > > +RELEASE_CLANG38_X64_CC_FLAGS       = DEF(CLANG38_ALL_CC_FLAGS)
> -
> > m64 "-DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -
> > fpie -Oz -flto
> > > +*_CLANG38_X64_DLINK_FLAGS          =
> DEF(CLANG38_ALL_DLINK_FLAGS)
> > -Wl,-Oz -Wl,-melf_x86_64 -Wl,--oformat=elf64-x86-64 -Wl,-pie -
> > mcmodel=small
> > > +*_CLANG38_X64_DLINK2_FLAGS         =
> > DEF(CLANG38_X64_DLINK2_FLAGS)
> > > +*_CLANG38_X64_RC_FLAGS             = DEF(GCC_X64_RC_FLAGS)
> > > +*_CLANG38_X64_OBJCOPY_FLAGS        =
> > > +*_CLANG38_X64_NASM_FLAGS           = -f elf64
> > > +
> > >
> >
> +#############################################################
> > #######################
> > > +#
> > > +# ClangScan 3.8 - This configuration is used to base on CLANG38 build
> tool
> > chain to
> > > +# run the clang static analyzer (scan-build) over edk2 codebase
> > > +#
> > >
> >
> +#############################################################
> > #######################
> > > +
> > > +*_CLANGSCAN38_*_*_FAMILY                = GCC
> > > +*_CLANGSCAN38_*_*_BUILDRULEFAMILY       = CLANGSCAN38
> > > +*_CLANGSCAN38_*_MAKE_PATH               =
> > DEF(GCC49_IA32_PREFIX)make
> > > +*_CLANGSCAN38_*_*_DLL                   = ENV(CLANG38_DLL)
> > > +*_CLANGSCAN38_*_ASL_PATH                = DEF(UNIX_IASL_BIN)
> > > +
> > > +*_CLANGSCAN38_*_PP_FLAGS                = DEF(GCC_PP_FLAGS) -target
> > x86_64-pc-linux-gnu
> > > +*_CLANGSCAN38_*_ASLPP_FLAGS             = DEF(GCC_ASLPP_FLAGS) -
> > target x86_64-pc-linux-gnu
> > > +*_CLANGSCAN38_*_VFRPP_FLAGS             = DEF(GCC_VFRPP_FLAGS) -
> > target x86_64-pc-linux-gnu
> > > +*_CLANGSCAN38_*_APP_FLAGS               =
> > > +*_CLANGSCAN38_*_ASL_FLAGS               = DEF(IASL_FLAGS)
> > > +*_CLANGSCAN38_*_ASL_OUTFLAGS            = DEF(IASL_OUTFLAGS)
> > > +
> > > +DEFINE CLANGSCAN38_ALL_CHECKER_FLAGS  = -enable-checker
> > alpha.security.MallocOverflow -enable-checker
> > alpha.security.ReturnPtrRange -enable-checker
> > alpha.security.taint.TaintPropagation -disable-checker
> > deadcode.DeadStores -disable-checker core.NullDereference
> > > +DEFINE SCAN_OUTPUT_PATH = ~/ClangReport
> > > +
> > > +###############################
> > > +# CLANGSCAN38 IA32 definitions
> > > +###############################
> > > +*_CLANGSCAN38_IA32_OBJCOPY_PATH         =
> > DEF(GCC49_IA32_PREFIX)objcopy
> > > +*_CLANGSCAN38_IA32_SCAN_PATH            =
> > DEF(CLANG38_IA32_PREFIX)scan-build
> > > +*_CLANGSCAN38_IA32_SCAN_DST             = DEF(SCAN_OUTPUT_PATH)
> > > +*_CLANGSCAN38_IA32_CC_PATH              =
> > DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANGSCAN38_IA32_SLINK_PATH           =
> > DEF(CLANG38_IA32_PREFIX)llvm-ar
> > > +*_CLANGSCAN38_IA32_DLINK_PATH           =
> > DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANGSCAN38_IA32_ASLDLINK_PATH        =
> > DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANGSCAN38_IA32_ASM_PATH             =
> > DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANGSCAN38_IA32_PP_PATH              =
> > DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANGSCAN38_IA32_VFRPP_PATH           =
> > DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANGSCAN38_IA32_ASLCC_PATH           =
> > DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANGSCAN38_IA32_ASLPP_PATH           =
> > DEF(CLANG38_IA32_PREFIX)clang
> > > +*_CLANGSCAN38_IA32_RC_PATH              =
> > DEF(GCC49_IA32_PREFIX)objcopy
> > > +
> > > +*_CLANGSCAN38_IA32_ASLCC_FLAGS          = -x c -Os -m32 -target
> > x86_64-pc-linux-gnu -flto
> > > +*_CLANGSCAN38_IA32_ASLDLINK_FLAGS       =
> > DEF(CLANG38_ALL_DLINK_FLAGS) -Wl,-Oz -Wl,-melf_i386 -Wl,--
> > entry,ReferenceAcpiTable -Wl,-u,ReferenceAcpiTable
> > > +*_CLANGSCAN38_IA32_ASM_FLAGS            = DEF(GCC49_ASM_FLAGS) -
> > m32 -march=i386
> > > +*_CLANGSCAN38_IA32_SCAN_FLAGS           =
> > DEF(CLANGSCAN38_ALL_CHECKER_FLAGS)
> > > +DEBUG_CLANGSCAN38_IA32_CC_FLAGS         =
> > DEF(CLANG38_ALL_CC_FLAGS) -m32 -D EFI32 -Oz -flto -march=i586 -g
> > > +RELEASE_CLANGSCAN38_IA32_CC_FLAGS       =
> > DEF(CLANG38_ALL_CC_FLAGS) -m32 -D EFI32 -Oz -flto -march=i586
> > > +*_CLANGSCAN38_IA32_DLINK_FLAGS          =
> > DEF(CLANG38_ALL_DLINK_FLAGS) -Wl,-Oz -Wl,-melf_i386 -Wl,--
> > oformat=elf32-i386
> > > +*_CLANGSCAN38_IA32_DLINK2_FLAGS         =
> > DEF(CLANG38_IA32_DLINK2_FLAGS)
> > > +*_CLANGSCAN38_IA32_RC_FLAGS             = DEF(GCC_IA32_RC_FLAGS)
> > > +*_CLANGSCAN38_IA32_OBJCOPY_FLAGS        =
> > > +*_CLANGSCAN38_IA32_NASM_FLAGS           = -f elf32
> > > +
> > > +##############################
> > > +# CLANGSCAN38 X64 definitions
> > > +##############################
> > > +
> > > +*_CLANGSCAN38_X64_OBJCOPY_PATH         =
> > DEF(GCC49_X64_PREFIX)objcopy
> > > +*_CLANGSCAN38_X64_SCAN_PATH            =
> > DEF(CLANG38_X64_PREFIX)scan-build
> > > +*_CLANGSCAN38_X64_SCAN_DST             = DEF(SCAN_OUTPUT_PATH)
> > > +*_CLANGSCAN38_X64_CC_PATH              =
> > DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANGSCAN38_X64_SLINK_PATH           =
> > DEF(CLANG38_X64_PREFIX)llvm-ar
> > > +*_CLANGSCAN38_X64_DLINK_PATH           =
> > DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANGSCAN38_X64_ASLDLINK_PATH        =
> > DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANGSCAN38_X64_ASM_PATH             =
> > DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANGSCAN38_X64_PP_PATH              =
> > DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANGSCAN38_X64_VFRPP_PATH           =
> > DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANGSCAN38_X64_ASLCC_PATH           =
> > DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANGSCAN38_X64_ASLPP_PATH           =
> > DEF(CLANG38_X64_PREFIX)clang
> > > +*_CLANGSCAN38_X64_RC_PATH              =
> > DEF(GCC49_X64_PREFIX)objcopy
> > > +
> > > +*_CLANGSCAN38_X64_ASLCC_FLAGS          = -x c -Os -m64 -target
> x86_64-
> > pc-linux-gnu -flto
> > > +*_CLANGSCAN38_X64_ASLDLINK_FLAGS       =
> > DEF(CLANG38_ALL_DLINK_FLAGS) -Wl,-Oz -Wl,-melf_x86_64 -Wl,--
> > entry,ReferenceAcpiTable -Wl,-u,ReferenceAcpiTable -Wl,-pie -
> > mcmodel=small
> > > +*_CLANGSCAN38_X64_ASM_FLAGS            = DEF(GCC49_ASM_FLAGS) -
> > m64 -target x86_64-pc-linux-gnu
> > > +*_CLANGSCAN38_X64_SCAN_FLAGS       =
> > DEF(CLANGSCAN38_ALL_CHECKER_FLAGS)
> > > +DEBUG_CLANGSCAN38_X64_CC_FLAGS         =
> > DEF(CLANG38_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -
> > mno-red-zone -mcmodel=small -fpie -g -Oz -flto
> > > +RELEASE_CLANGSCAN38_X64_CC_FLAGS       =
> > DEF(CLANG38_ALL_CC_FLAGS) -m64 "-DEFIAPI=__attribute__((ms_abi))" -
> > mno-red-zone -mcmodel=small -fpie -Oz -flto
> > > +*_CLANGSCAN38_X64_DLINK_FLAGS          =
> > DEF(CLANG38_ALL_DLINK_FLAGS) -Wl,-Oz -Wl,-melf_x86_64 -Wl,--
> > oformat=elf64-x86-64 -Wl,-pie -mcmodel=small
> > > +*_CLANGSCAN38_X64_DLINK2_FLAGS         =
> > DEF(CLANG38_X64_DLINK2_FLAGS)
> > > +*_CLANGSCAN38_X64_RC_FLAGS             = DEF(GCC_X64_RC_FLAGS)
> > > +*_CLANGSCAN38_X64_OBJCOPY_FLAGS        =
> > > +*_CLANGSCAN38_X64_NASM_FLAGS           = -f elf64
> > > +
> > >
> >
> +#############################################################
> > #############################
> > > +#
> > > +# GCC 5.3 - This configuration is used to compile under Linux to produce
> > > +# PE/COFF binaries using GCC 5.3 with link-time optimization and image
> > size optimization.
> > > +# Tested with GNU Binutils 2.26, e.g. ld 2.26 and gcc-ar 2.26
> > > +#
> > >
> >
> +#############################################################
> > #############################
> > > +DEFINE GCC53_IA32_PREFIX          = ENV(GCC53_BIN)
> > > +DEFINE GCC53_X64_PREFIX           = ENV(GCC53_BIN)
> > > +
> > > +*_GCC53_*_*_FAMILY                = GCC
> > > +*_GCC53_*_*_BUILDRULEFAMILY       = GCC53
> > > +*_GCC53_*_MAKE_PATH               = DEF(GCC53_IA32_PREFIX)make
> > > +*_GCC53_*_*_DLL                   = ENV(GCC53_DLL)
> > > +*_GCC53_*_ASL_PATH                = DEF(UNIX_IASL_BIN)
> > > +
> > > +*_GCC53_*_PP_FLAGS                = DEF(GCC_PP_FLAGS)
> > > +*_GCC53_*_ASLPP_FLAGS             = DEF(GCC_ASLPP_FLAGS)
> > > +*_GCC53_*_ASLCC_FLAGS             = DEF(GCC_ASLCC_FLAGS)
> > > +*_GCC53_*_VFRPP_FLAGS             = DEF(GCC_VFRPP_FLAGS)
> > > +*_GCC53_*_APP_FLAGS               =
> > > +*_GCC53_*_ASL_FLAGS               = DEF(IASL_FLAGS)
> > > +*_GCC53_*_ASL_OUTFLAGS            = DEF(IASL_OUTFLAGS)
> > > +
> > > +DEFINE GCC53_ALL_CC_FLAGS         = -fshort-wchar -fno-strict-aliasing -
> > Wall -Werror -Wno-array-bounds -Wno-address  -ffunction-sections -
> fdata-
> > sections -fno-stack-protector -c -include AutoGen.h -fno-common -fno-
> > builtin -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings -Wno-unused-but-
> > set-variable
> > > +DEFINE GCC53_IA32_CC_FLAGS        = DEF(GCC53_ALL_CC_FLAGS) -m32
> -
> > march=i586 -malign-double -D EFI32 -fno-asynchronous-unwind-tables
> > > +DEFINE GCC53_X64_CC_FLAGS         = DEF(GCC53_ALL_CC_FLAGS) -m64
> "-
> > DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -fno-
> > asynchronous-unwind-tables -fpie
> > > +
> > > +DEFINE GCC53_ALL_DLINK_FLAGS      = -Os -flto -nostdlib -Wl,-n -Wl,-q -
> > Wl,--gc-sections -z common-page-size=0x40 -Wl,--
> > entry,$(IMAGE_ENTRY_POINT) -Wl,-u,$(IMAGE_ENTRY_POINT) -Wl,-
> > Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map
> > > +DEFINE GCC53_X64_DLINK2_FLAGS     = -Wl,--
> > defsym=PECOFF_HEADER_SIZE=0x228 -Wl,--
> > script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds
> > > +DEFINE GCC53_IA32_DLINK2_FLAGS    = -Wl,--
> > defsym=PECOFF_HEADER_SIZE=0x220 -Wl,--
> > script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds
> > > +
> > > +############################
> > > +# GCC53 IA32 definitions
> > > +############################
> > > +*_GCC53_IA32_OBJCOPY_PATH         =
> DEF(GCC53_IA32_PREFIX)objcopy
> > > +*_GCC53_IA32_CC_PATH              = DEF(GCC53_IA32_PREFIX)gcc
> > > +*_GCC53_IA32_SLINK_PATH           = DEF(GCC53_IA32_PREFIX)gcc-ar
> > > +*_GCC53_IA32_DLINK_PATH           = DEF(GCC53_IA32_PREFIX)gcc
> > > +*_GCC53_IA32_ASLDLINK_PATH        = DEF(GCC53_IA32_PREFIX)ld
> > > +*_GCC53_IA32_ASM_PATH             = DEF(GCC53_IA32_PREFIX)gcc
> > > +*_GCC53_IA32_PP_PATH              = DEF(GCC53_IA32_PREFIX)gcc
> > > +*_GCC53_IA32_VFRPP_PATH           = DEF(GCC53_IA32_PREFIX)gcc
> > > +*_GCC53_IA32_ASLCC_PATH           = DEF(GCC53_IA32_PREFIX)gcc
> > > +*_GCC53_IA32_ASLPP_PATH           = DEF(GCC53_IA32_PREFIX)gcc
> > > +*_GCC53_IA32_RC_PATH              = DEF(GCC53_IA32_PREFIX)objcopy
> > > +
> > > +*_GCC53_IA32_ASLCC_FLAGS          = DEF(GCC53_IA32_CC_FLAGS) -x c -
> > m32
> > > +*_GCC53_IA32_ASLDLINK_FLAGS       =
> > DEF(GCC49_IA32_X64_ASLDLINK_FLAGS) -m elf_i386
> > > +*_GCC53_IA32_ASM_FLAGS            = DEF(GCC49_ASM_FLAGS) -m32 -
> > march=i386
> > > +*_GCC53_IA32_DLINK_FLAGS          = DEF(GCC53_ALL_DLINK_FLAGS) -
> Wl,-
> > melf_i386 -Wl,--oformat=elf32-i386
> > > +*_GCC53_IA32_DLINK2_FLAGS         = DEF(GCC53_IA32_DLINK2_FLAGS)
> > > +*_GCC53_IA32_RC_FLAGS             = DEF(GCC_IA32_RC_FLAGS)
> > > +*_GCC53_IA32_OBJCOPY_FLAGS        =
> > > +*_GCC53_IA32_NASM_FLAGS           = -f elf32
> > > +
> > > +DEBUG_GCC53_IA32_CC_FLAGS         = DEF(GCC53_IA32_CC_FLAGS) -
> flto
> > -Os -g
> > > +RELEASE_GCC53_IA32_CC_FLAGS       = DEF(GCC53_IA32_CC_FLAGS) -
> flto
> > -Os
> > > +
> > > +###########################
> > > +# GCC53 X64 definitions
> > > +###########################
> > > +*_GCC53_X64_OBJCOPY_PATH         = DEF(GCC53_X64_PREFIX)objcopy
> > > +*_GCC53_X64_CC_PATH              = DEF(GCC53_X64_PREFIX)gcc
> > > +*_GCC53_X64_SLINK_PATH           = DEF(GCC53_X64_PREFIX)gcc-ar
> > > +*_GCC53_X64_DLINK_PATH           = DEF(GCC53_X64_PREFIX)gcc
> > > +*_GCC53_X64_ASLDLINK_PATH        = DEF(GCC53_X64_PREFIX)ld
> > > +*_GCC53_X64_ASM_PATH             = DEF(GCC53_X64_PREFIX)gcc
> > > +*_GCC53_X64_PP_PATH              = DEF(GCC53_X64_PREFIX)gcc
> > > +*_GCC53_X64_VFRPP_PATH           = DEF(GCC53_X64_PREFIX)gcc
> > > +*_GCC53_X64_ASLCC_PATH           = DEF(GCC53_X64_PREFIX)gcc
> > > +*_GCC53_X64_ASLPP_PATH           = DEF(GCC53_X64_PREFIX)gcc
> > > +*_GCC53_X64_RC_PATH              = DEF(GCC53_X64_PREFIX)objcopy
> > > +
> > > +*_GCC53_X64_ASLCC_FLAGS          = DEF(GCC53_X64_CC_FLAGS) -x c -
> > m64 -Os
> > > +*_GCC53_X64_ASLDLINK_FLAGS       =
> > DEF(GCC49_IA32_X64_ASLDLINK_FLAGS) -m elf_x86_64 -pie -Os
> > > +*_GCC53_X64_ASM_FLAGS            = DEF(GCC49_ASM_FLAGS) -m64
> > > +*_GCC53_X64_DLINK_FLAGS          = DEF(GCC53_ALL_DLINK_FLAGS) -pie
> -
> > mcmodel=small -Wl,-melf_x86_64  -Wl,--oformat=elf64-x86-64
> > > +*_GCC53_X64_DLINK2_FLAGS         = DEF(GCC53_X64_DLINK2_FLAGS)
> > > +*_GCC53_X64_RC_FLAGS             = DEF(GCC_X64_RC_FLAGS)
> > > +*_GCC53_X64_OBJCOPY_FLAGS        =
> > > +*_GCC53_X64_NASM_FLAGS           = -f elf64
> > > +
> > > +DEBUG_GCC53_X64_CC_FLAGS         = DEF(GCC53_X64_CC_FLAGS) -flto
> -
> > Os -g
> > > +RELEASE_GCC53_X64_CC_FLAGS       = DEF(GCC53_X64_CC_FLAGS) -flto
> -
> > Os
> > > --
> > > 2.7.4
> > >
> > > _______________________________________________
> > > edk2-devel mailing list
> > > edk2-devel@lists.01.org
> > > https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to