From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.byosoft.com.cn (mail.byosoft.com.cn [58.240.74.242]) by mx.groups.io with SMTP id smtpd.web11.3412.1622170330385742142 for ; Thu, 27 May 2021 19:52:12 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=none, err=permanent DNS error (domain: byosoft.com.cn, ip: 58.240.74.242, mailfrom: gaoliming@byosoft.com.cn) Received: from DESKTOPS6D0PVI ([58.246.60.130]) (envelope-sender ) by 192.168.6.13 with ESMTP for ; Fri, 28 May 2021 10:52:06 +0800 X-WM-Sender: gaoliming@byosoft.com.cn X-Originating-IP: 58.246.60.130 X-WM-AuthFlag: YES X-WM-AuthUser: gaoliming@byosoft.com.cn From: "gaoliming" To: , , "'Ni, Ray'" References: <20210526082310.1597-1-ray.ni@intel.com> <20210526082310.1597-2-ray.ni@intel.com> In-Reply-To: Subject: =?UTF-8?B?5Zue5aSNOiBbZWRrMi1kZXZlbF0gW1BBVENIIDEvNF0gQmFzZVRvb2xzOiBDcmVhdGUgQ0xBTkdEV0FSRiB0b29sY2hhaW4=?= Date: Fri, 28 May 2021 10:52:06 +0800 Message-ID: <000201d7536c$72484030$56d8c090$@byosoft.com.cn> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQDN+np5LmVk0lkCLYcaVCRRi2jpIAJZ9ZndAZmd0tis60OIsA== X-Groupsio-MsgNum: 75824 Content-Type: multipart/related; boundary="----=_NextPart_000_0003_01D753AF.80708940" Content-Language: zh-cn ------=_NextPart_000_0003_01D753AF.80708940 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0004_01D753AF.80708940" ------=_NextPart_001_0004_01D753AF.80708940 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: quoted-printable Ray: I would like to suggest CLANGDWARF also generate EFI image. If so, the people can use this tool chain for EFI development with DWARF format debug symbol.=20 In dll generation phase, CLANGDWARF still generates dll image, then copy dll image to elf image. In EFI generation phase, dll image will be convert= ed to EFI image.=20 =20 Thanks Liming =B7=A2=BC=FE=C8=CB: devel@edk2.groups.io =B4=FA=B1= =ED Steven Shi =B7=A2=CB=CD=CA=B1=BC=E4: 2021=C4=EA5=D4=C226=C8=D5 19:35 =CA=D5=BC=FE=C8=CB: devel@edk2.groups.io; Ni, Ray =D6=F7=CC=E2: Re: [edk2-devel] [PATCH 1/4] BaseTools: Create CLANGDWARF to= olchain =20 Some suggestions: =20 1. There are many blanks appending the line =A1=B0+ "$(DLINK)" -o ${dst} $(DLINK_FLAGS) @$(STATIC_LIBRARY_FILES_LIST) =A1=B0 =20 =20 2. We need a toolchain dependency descirption in the BaseTools\Conf\tools_def.template. Below is the example for CLANGPDB. Plea= se add one for the CLANGDWARF. # CLANGPDB -Linux, Windows, Mac- Requires: # Clang 9 or above from http://releases.llvm.org/ # Optional: # Required to compile nasm source: # nasm compiler from # NASM -- http://www.nasm.us/ # Required to build platforms or ACPI tables: # Intel(r) ACPI Compiler from # https://acpica.org/downloads =20 3. We could merge the CLANG38 and the CLANGDWARF toolchains together in the future. =20 =20 Thanks Steven Shi =20 =20 > -----Original Message----- > From: devel@edk2.groups.io > On Behalf Of Ni, Ray > Sent: Wednesday, May 26, 2021 4:23 PM > To: devel@edk2.groups.io =20 > Subject: [edk2-devel] [PATCH 1/4] BaseTools: Create CLANGDWARF > toolchain >=20 > Signed-off-by: Ray Ni < ray.ni@intel.com> > --- > BaseTools/Conf/build_rule.template | 10 ++- > BaseTools/Conf/tools_def.template | 98 > ++++++++++++++++++++++++++++++ > 2 files changed, 107 insertions(+), 1 deletion(-) >=20 > diff --git a/BaseTools/Conf/build_rule.template > b/BaseTools/Conf/build_rule.template > index 1395792cd6..e69f963cc8 100755 > --- a/BaseTools/Conf/build_rule.template > +++ b/BaseTools/Conf/build_rule.template > @@ -293,7 +293,10 @@ > >=20 > $(MAKE_FILE) >=20 >=20 >=20 > - >=20 > + >=20 > + $(DEBUG_DIR)(+)$(MODULE_NAME).elf >=20 > + >=20 > + >=20 > $(DEBUG_DIR)(+)$(MODULE_NAME).dll >=20 >=20 >=20 > >=20 > @@ -303,6 +306,11 @@ > >=20 > "$(DLINK)" /OUT:${dst} $(DLINK_FLAGS) $(DLINK_SPATH) > @$(STATIC_LIBRARY_FILES_LIST) $(DLINK2_FLAGS) >=20 >=20 >=20 > + >=20 > + "$(DLINK)" -o ${dst} $(DLINK_FLAGS) @$(STATIC_LIBRARY_FILES_LIS= T) >=20 > + "$(CP)" ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).debug >=20 > + "$(OBJCOPY)" --strip-unneeded -R .eh_frame ${dst} >=20 > + >=20 > >=20 > "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -Wl,--start- > group,@$(STATIC_LIBRARY_FILES_LIST),--end-group $(CC_FLAGS) > $(DLINK2_FLAGS) >=20 > "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst} >=20 > diff --git a/BaseTools/Conf/tools_def.template > b/BaseTools/Conf/tools_def.template > index 498696e583..390e297cc1 100755 > --- a/BaseTools/Conf/tools_def.template > +++ b/BaseTools/Conf/tools_def.template > @@ -2828,6 +2828,104 @@ NOOPT_CLANGPDB_X64_DLINK_FLAGS =3D > /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:RE > NOOPT_CLANGPDB_X64_DLINK2_FLAGS =3D >=20 > NOOPT_CLANGPDB_X64_GENFW_FLAGS =3D --keepexceptiontable >=20 >=20 >=20 > +######################################################### > ########################### >=20 > +# >=20 > +# CLANGDWARF - This configuration is used to compile under > Windows/Linux/Mac to produce >=20 > +# ELF binaries using LLVM/Clang/LLD with Link Time Optimization enable= d >=20 > +# >=20 > +######################################################### > ########################### >=20 > +*_CLANGDWARF_*_*_FAMILY =3D GCC >=20 > +*_CLANGDWARF_*_*_BUILDRULEFAMILY =3D CLANGDWARF >=20 > +*_CLANGDWARF_*_MAKE_PATH =3D ENV(CLANG_HOST_BIN)make >=20 > +*_CLANGDWARF_*_*_DLL =3D ENV(CLANGPDB_DLL) >=20 > +*_CLANGDWARF_*_ASL_PATH =3D DEF(UNIX_IASL_BIN) >=20 > + >=20 > +*_CLANGDWARF_*_APP_FLAGS =3D >=20 > +*_CLANGDWARF_*_ASL_FLAGS =3D DEF(DEFAULT_WIN_ASL_FLAGS) >=20 > +*_CLANGDWARF_*_ASL_OUTFLAGS =3D > DEF(DEFAULT_WIN_ASL_OUTFLAGS) >=20 > +*_CLANGDWARF_*_ASLDLINK_FLAGS =3D DEF(MSFT_ASLDLINK_FLAGS) >=20 > +*_CLANGDWARF_*_DEPS_FLAGS =3D DEF(GCC_DEPS_FLAGS) >=20 > + >=20 > +DEFINE CLANGDWARF_IA32_PREFIX =3D ENV(CLANG_BIN) >=20 > +DEFINE CLANGDWARF_X64_PREFIX =3D ENV(CLANG_BIN) >=20 > + >=20 > +DEFINE CLANGDWARF_IA32_TARGET =3D -target i686-pc-linux-gnu >=20 > +DEFINE CLANGDWARF_X64_TARGET =3D -target x86_64-pc-linux-gnu >=20 > + >=20 > +DEFINE CLANGDWARF_WARNING_OVERRIDES =3D -Wno-parentheses- > equality -Wno-tautological-compare -Wno-tautological-constant-out-of- > range-compare -Wno-empty-body -Wno-unused-const-variable -Wno- > varargs -Wno-unknown-warning-option -Wno-microsoft-enum-forward- > reference >=20 > +DEFINE CLANGDWARF_ALL_CC_FLAGS =3D DEF(GCC48_ALL_CC_FLAGS) > DEF(CLANGDWARF_WARNING_OVERRIDES) -fno-stack-protector - > funsigned-char -ftrap- > function=3Dundefined_behavior_has_been_optimized_away_by_clang -Wno- > address -Wno-shift-negative-value -Wno-unknown-pragmas -Wno- > incompatible-library-redeclaration -Wno-null-dereference -mno-implicit- > float -mms-bitfields -mno-stack-arg-probe -nostdlib -nostdlibinc -fseh- > exceptions >=20 > + >=20 > +########################### >=20 > +# CLANGDWARF IA32 definitions >=20 > +########################### >=20 > +*_CLANGDWARF_IA32_CC_PATH =3D > DEF(CLANGDWARF_IA32_PREFIX)clang >=20 > +*_CLANGDWARF_IA32_SLINK_PATH =3D > DEF(CLANGDWARF_IA32_PREFIX)llvm-ar >=20 > +*_CLANGDWARF_IA32_DLINK_PATH =3D > DEF(CLANGDWARF_IA32_PREFIX)ld.lld >=20 > +*_CLANGDWARF_IA32_ASLDLINK_PATH =3D > DEF(CLANGDWARF_IA32_PREFIX)clang >=20 > +*_CLANGDWARF_IA32_ASM_PATH =3D > DEF(CLANGDWARF_IA32_PREFIX)clang >=20 > +*_CLANGDWARF_IA32_PP_PATH =3D > DEF(CLANGDWARF_IA32_PREFIX)clang >=20 > +*_CLANGDWARF_IA32_VFRPP_PATH =3D > DEF(CLANGDWARF_IA32_PREFIX)clang >=20 > +*_CLANGDWARF_IA32_ASLCC_PATH =3D > DEF(CLANGDWARF_IA32_PREFIX)clang >=20 > +*_CLANGDWARF_IA32_ASLPP_PATH =3D > DEF(CLANGDWARF_IA32_PREFIX)clang >=20 > +*_CLANGDWARF_IA32_OBJCOPY_PATH =3D > DEF(CLANGDWARF_IA32_PREFIX)llvm-objcopy >=20 > + >=20 > +*_CLANGDWARF_IA32_ASLCC_FLAGS =3D DEF(GCC_ASLCC_FLAGS) -m32 > -fno-lto DEF(CLANGDWARF_IA32_TARGET) >=20 > +*_CLANGDWARF_IA32_ASM_FLAGS =3D DEF(GCC_ASM_FLAGS) -m32 - > march=3Di386 DEF(CLANGDWARF_IA32_TARGET) >=20 > +*_CLANGDWARF_IA32_OBJCOPY_FLAGS =3D >=20 > +*_CLANGDWARF_IA32_NASM_FLAGS =3D -f elf32 >=20 > +*_CLANGDWARF_IA32_PP_FLAGS =3D DEF(GCC_PP_FLAGS) > DEF(CLANGDWARF_IA32_TARGET) >=20 > +*_CLANGDWARF_IA32_ASLPP_FLAGS =3D DEF(GCC_ASLPP_FLAGS) > DEF(CLANGDWARF_IA32_TARGET) >=20 > +*_CLANGDWARF_IA32_VFRPP_FLAGS =3D DEF(GCC_VFRPP_FLAGS) > DEF(CLANGDWARF_IA32_TARGET) >=20 > + >=20 > +DEBUG_CLANGDWARF_IA32_CC_FLAGS =3D > DEF(CLANGDWARF_ALL_CC_FLAGS) -m32 -Oz -flto -march=3Di586 > DEF(CLANGDWARF_IA32_TARGET) -g >=20 > +DEBUG_CLANGDWARF_IA32_DLINK_FLAGS =3D --eh-frame-hdr -q --gc- > sections -z common-page-size=3D0x40 --entry $(IMAGE_ENTRY_POINT) -Map > $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 -melf_i386 -- > format=3Delf >=20 > +DEBUG_CLANGDWARF_IA32_DLINK2_FLAGS =3D >=20 > + >=20 > +RELEASE_CLANGDWARF_IA32_CC_FLAGS =3D > DEF(CLANGDWARF_ALL_CC_FLAGS) -m32 -Oz -flto -march=3Di586 > DEF(CLANGDWARF_IA32_TARGET) >=20 > +RELEASE_CLANGDWARF_IA32_DLINK_FLAGS =3D --eh-frame-hdr -q --gc- > sections -z common-page-size=3D0x40 --entry $(IMAGE_ENTRY_POINT) -Map > $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 -melf_i386 -- > format=3Delf >=20 > +RELEASE_CLANGDWARF_IA32_DLINK2_FLAGS =3D >=20 > + >=20 > +NOOPT_CLANGDWARF_IA32_CC_FLAGS =3D > DEF(CLANGDWARF_ALL_CC_FLAGS) -m32 -O0 -march=3Di586 > DEF(CLANGDWARF_IA32_TARGET) -g >=20 > +NOOPT_CLANGDWARF_IA32_DLINK_FLAGS =3D --eh-frame-hdr -q --gc- > sections -z common-page-size=3D0x40 --entry $(IMAGE_ENTRY_POINT) -Map > $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O0 -melf_i386 -- > format=3Delf >=20 > +NOOPT_CLANGDWARF_IA32_DLINK2_FLAGS =3D >=20 > + >=20 > +########################## >=20 > +# CLANGDWARF X64 definitions >=20 > +########################## >=20 > +*_CLANGDWARF_X64_CC_PATH =3D > DEF(CLANGDWARF_X64_PREFIX)clang >=20 > +*_CLANGDWARF_X64_SLINK_PATH =3D > DEF(CLANGDWARF_X64_PREFIX)llvm-ar >=20 > +*_CLANGDWARF_X64_DLINK_PATH =3D > DEF(CLANGDWARF_X64_PREFIX)ld.lld >=20 > +*_CLANGDWARF_X64_ASLDLINK_PATH =3D > DEF(CLANGDWARF_X64_PREFIX)clang >=20 > +*_CLANGDWARF_X64_ASM_PATH =3D > DEF(CLANGDWARF_X64_PREFIX)clang >=20 > +*_CLANGDWARF_X64_PP_PATH =3D > DEF(CLANGDWARF_X64_PREFIX)clang >=20 > +*_CLANGDWARF_X64_VFRPP_PATH =3D > DEF(CLANGDWARF_X64_PREFIX)clang >=20 > +*_CLANGDWARF_X64_ASLCC_PATH =3D > DEF(CLANGDWARF_X64_PREFIX)clang >=20 > +*_CLANGDWARF_X64_ASLPP_PATH =3D > DEF(CLANGDWARF_X64_PREFIX)clang >=20 > +*_CLANGDWARF_X64_OBJCOPY_PATH =3D > DEF(CLANGDWARF_IA32_PREFIX)llvm-objcopy >=20 > + >=20 > +*_CLANGDWARF_X64_ASLCC_FLAGS =3D DEF(GCC_ASLCC_FLAGS) -m64 > -fno-lto DEF(CLANGDWARF_X64_TARGET) >=20 > +*_CLANGDWARF_X64_ASM_FLAGS =3D DEF(GCC_ASM_FLAGS) -m64 > DEF(CLANGDWARF_X64_TARGET) >=20 > +*_CLANGDWARF_X64_OBJCOPY_FLAGS =3D >=20 > +*_CLANGDWARF_X64_NASM_FLAGS =3D -f elf64 >=20 > +*_CLANGDWARF_X64_PP_FLAGS =3D DEF(GCC_PP_FLAGS) > DEF(CLANGDWARF_X64_TARGET) >=20 > +*_CLANGDWARF_X64_ASLPP_FLAGS =3D DEF(GCC_ASLPP_FLAGS) > DEF(CLANGDWARF_X64_TARGET) >=20 > +*_CLANGDWARF_X64_VFRPP_FLAGS =3D DEF(GCC_VFRPP_FLAGS) > DEF(CLANGDWARF_X64_TARGET) >=20 > + >=20 > +DEBUG_CLANGDWARF_X64_CC_FLAGS =3D > DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 "- > DEFIAPI=3D__attribute__((ms_abi))" -mno-red-zone -mcmodel=3Dsmall -fpie = -Oz > -flto DEF(CLANGDWARF_X64_TARGET) -g >=20 > +DEBUG_CLANGDWARF_X64_DLINK_FLAGS =3D --eh-frame-hdr -q --gc- > sections -z common-page-size=3D0x40 --entry $(IMAGE_ENTRY_POINT) -Map > $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 - > melf_x86_64 --format=3Delf -pie >=20 > +DEBUG_CLANGDWARF_X64_DLINK2_FLAGS =3D >=20 > +DEBUG_CLANGDWARF_X64_GENFW_FLAGS =3D --keepexceptiontable >=20 > + >=20 > +RELEASE_CLANGDWARF_X64_CC_FLAGS =3D > DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 "- > DEFIAPI=3D__attribute__((ms_abi))" -mno-red-zone -mcmodel=3Dsmall -fpie = -Oz > -flto DEF(CLANGDWARF_X64_TARGET) >=20 > +RELEASE_CLANGDWARF_X64_DLINK_FLAGS =3D --eh-frame-hdr -q --gc- > sections -z common-page-size=3D0x40 --entry $(IMAGE_ENTRY_POINT) -Map > $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 - > melf_x86_64 --format=3Delf -pie >=20 > +RELEASE_CLANGDWARF_X64_DLINK2_FLAGS =3D >=20 > +RELEASE_CLANGDWARF_X64_GENFW_FLAGS =3D >=20 > + >=20 > +NOOPT_CLANGDWARF_X64_CC_FLAGS =3D > DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 "- > DEFIAPI=3D__attribute__((ms_abi))" -mno-red-zone -mcmodel=3Dsmall -fpie = -O0 > DEF(CLANGDWARF_X64_TARGET) -g >=20 > +NOOPT_CLANGDWARF_X64_DLINK_FLAGS =3D --eh-frame-hdr -q --gc- > sections -z common-page-size=3D0x40 --entry $(IMAGE_ENTRY_POINT) -Map > $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O0 - > melf_x86_64 --format=3Delf -pie >=20 > +NOOPT_CLANGDWARF_X64_DLINK2_FLAGS =3D >=20 > +NOOPT_CLANGDWARF_X64_GENFW_FLAGS =3D --keepexceptiontable >=20 > + >=20 > # >=20 > # >=20 > # XCODE5 support >=20 > -- > 2.31.1.windows.1 >=20 >=20 >=20 > -=3D-=3D-=3D-=3D-=3D-=3D > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#75599): https://edk2.groups.io/g/devel/message/75599 > Mute This Topic: https://groups.io/mt/83095853/1781003 > Group Owner: devel+owner@edk2.group= s. io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [steven.shi@intel.com] > -=3D-=3D-=3D-=3D-=3D-=3D >=20 =20 ------=_NextPart_001_0004_01D753AF.80708940 Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: quoted-printable

Ray:

 I wou= ld like to suggest CLANGDWARF also generate EFI image. If so, the people can use this to= ol chain for EFI development with DWARF format debug symbol.

  

  In dll generation = phase, CLANGDWARF still generates dll image, then copy dll image to elf ima= ge. In EFI generation phase, dll image will be converted to EFI image. <= o:p>

 

Thanks

Liming<= /span>

=B7=A2=BC=FE=C8=CB: devel@edk2.groups.io <= ;devel@edk2.groups.io> =B4=FA=B1=ED Steven Shi
=B7= =A2=CB=CD=CA=B1=BC=E4: 2021=C4=EA5=D4=C2= 26=C8=D5 19:35
=CA=D5=BC=FE=C8=CB:
devel@edk2.groups.io; Ni, R= ay <ray.ni@intel.com>
=D6=F7=CC=E2: Re: [edk2-devel] [PATCH 1/4] BaseTools: Create= CLANGDWARF toolchain

 

Some suggestions:

 

  1. There are many blanks appending the line =A1=B0= +        "$(DLINK)" -o ${dst} = $(DLINK_FLAGS) @$(STATIC_LIBRARY_FILES_LIST)     &= nbsp;  =A1=B0

 

=

 

  1. We need a toolchain dependency descirption in the BaseTools\C= onf\tools_def.template. Below is the example for CLANGPDB. Please add one f= or the CLANGDWARF.

#   CLANGPDB -Linux, Windows, Mac-  Requires:<= o:p>

# &nbs= p;            &= nbsp;           &nbs= p;  Clang 9 or above from http:/= /releases.llvm.org/

#          &= nbsp;           &nbs= p; Optional:

#            =             &nb= sp;    Required to compile nasm source:

#     =             &nb= sp;            = nasm compiler from

#          &nbs= p;            &= nbsp;       NASM -- http://www.nasm.us/

#         =             &nb= sp;       Required to build platforms or ACPI= tables:

#&= nbsp;           &nbs= p;            &= nbsp;     Intel(r) ACPI Compiler from=

#    &nb= sp;            =             &nb= sp; https://acpica.org/downloads

&nb= sp;

  1. We c= ould merge the CLANG38 and the CLANGDWARF toolchains together in the future= .

 

&n= bsp;

Thanks=

Steven Shi=

 

 

> -----Original Mess= age-----

&g= t; From: devel@edk2.groups.io &= lt;devel@edk2.groups.io> On = Behalf Of Ni, Ray

> Sent: Wednesday, May 26, 2021 4:23 PM

<= p class=3DMsoPlainText>> To: devel@edk2.groups.io

> Subject: [edk2-devel] [PATCH 1/4] BaseTo= ols: Create CLANGDWARF

> toolchain

>

> Signed-off-by: Ray Ni <ray.ni@intel.com>

> ---

>  BaseTools/Conf/build_rule.template | 10 ++-

>  BaseTools/Conf/tool= s_def.template  | 98

> ++++++++++++++++++++++++++++++

>  2 files changed, 107 ins= ertions(+), 1 deletion(-)

>

> diff --git a/BaseTools/Conf/build_rule.template

> b/BaseTools/Conf/b= uild_rule.template

> index 1395792cd6..e69f963cc8 100755

> --- a/BaseTools/Conf/build_rul= e.template

= > +++ b/BaseTools/Conf/build_rule.template

> @@ -293,7 +293,10 @@

>    &= nbsp; <ExtraDependency>

>

= >         &nb= sp;$(MAKE_FILE)

>

= >

> =

> -&nbs= p;   <OutputFile>

>

<= span lang=3DEN-US>> +    <OutputFile.CLANGDWARF>

>

> +  =       $(DEBUG_DIR)(+)$(MODULE_NAME).elf=

>

> +

>

> +    <Output= File.MSFT, OutputFile.INTEL, OutputFile.GCC>

>

>       &n= bsp;  $(DEBUG_DIR)(+)$(MODULE_NAME).dll

>

>

>

>      <Command.MS= FT, Command.INTEL>

>

> @@ -303,6 +306,11 @@

>      <Command.CLANGPD= B>

> =

>  = ;        "$(DLINK)" /OUT:= ${dst} $(DLINK_FLAGS) $(DLINK_SPATH)

> @$(STATIC_LIBRARY_FILES_LIST) $(DLINK2_FLAGS= )

>

>

>

> +   = <Command.CLANGDWARF>

>

> +        "$(DLINK)= " -o ${dst} $(DLINK_FLAGS) @$(STATIC_LIBRARY_FILES_LIST)

> <= /p>

> +    = ;    "$(CP)" ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).= debug

> =

> +&nbs= p;       "$(OBJCOPY)" --strip-unnee= ded -R .eh_frame ${dst}

>

> +

>

>      <Command.GCC>

>

>      =     "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -Wl,-= -start-

>= ; group,@$(STATIC_LIBRARY_FILES_LIST),--end-group $(CC_FLAGS)

> $(DLINK2_FLAGS)

>

>   &n= bsp;      "$(OBJCOPY)" $(OBJCOPY_FL= AGS) ${dst}

>

>= diff --git a/BaseTools/Conf/tools_def.template

> b/BaseTools/Conf/tools_def.templa= te

> ind= ex 498696e583..390e297cc1 100755

> --- a/BaseTools/Conf/tools_def.template

> +++ b/BaseTool= s/Conf/tools_def.template

> @@ -2828,6 +2828,104 @@ NOOPT_CLANGPDB_X64_DLINK_FLAGS&= nbsp;     =3D

> /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:RE=

>  NOOP= T_CLANGPDB_X64_DLINK2_FLAGS     =3D

>

>  NOOPT_CLANGPDB_X64_GENFW= _FLAGS      =3D --keepexceptiontable

> <= /p>

>

>

> +#################################= ########################

> ###########################

>

> +#

>

> +# CLANGDWARF - This configuration is used to c= ompile under

> Windows/Linux/Mac to produce

>

> +#  ELF binaries using LLVM/Clang/LLD with Li= nk Time Optimization enabled

<= span lang=3DEN-US>>

> +#

>

> +#########################################################

> ############= ###############

>

= > +*_CLANGDWARF_*_*_FAMILY       &nbs= p;     =3D GCC

>

= > +*_CLANGDWARF_*_*_BUILDRULEFAMILY   = =3D CLANGDWARF

>

= > +*_CLANGDWARF_*_MAKE_PATH       &nb= sp;    =3D ENV(CLANG_HOST_BIN)make

>

> +*_CLANGDWARF_*_*_DLL  &= nbsp;           &nbs= p; =3D ENV(CLANGPDB_DLL)

>

> +*_CLANGDWARF_*_ASL_PATH      =        =3D DEF(UNIX_IASL_BIN)

>

> +

>

> +*_CLANGDWARF_*_APP_FLAGS &nb= sp;          =3D

> <= /p>

> +*_CLANGDWARF_*_ASL_FLAG= S            =3D DEF= (DEFAULT_WIN_ASL_FLAGS)

>

> +*_CLANGDWARF_*_ASL_OUTFLAGS     &n= bsp;   =3D

> DEF(DEFAULT_WIN_ASL_OUTFLAGS)

>

> +*_CLANGDWARF_*_ASLDLINK_FLAGS &nb= sp;     =3D DEF(MSFT_ASLDLINK_FLAGS)<= /p>

>

> +*_CLANGDWARF_*_DEPS_FLAGS&nb= sp;          =3D DEF(GCC_DEPS_= FLAGS)

>=

> +

>

> +DEFINE CLANG= DWARF_IA32_PREFIX       =3D ENV(CLANG_BIN)

>

> +DEFINE CLANG= DWARF_X64_PREFIX        =3D ENV(CLANG_BI= N)

>

> +

> <= /span>

> +DEFINE CLANGDWAR= F_IA32_TARGET       =3D -target i686-pc-linux= -gnu

> <= o:p>

> +DEFIN= E CLANGDWARF_X64_TARGET        =3D -targ= et x86_64-pc-linux-gnu

>

> +

>

> +DEFINE CLANGDWARF_WARNING_OVERRIDES =3D -Wno-parentheses-=

> equality -Wno-ta= utological-compare -Wno-tautological-constant-out-of-

=

> range-compare -Wno-empty-bo= dy -Wno-unused-const-variable -Wno-

> varargs -Wno-unknown-warning-option -Wno-micr= osoft-enum-forward-

> reference

>

> +DEFINE CLANGDWARF_ALL_CC_FLAGS     = ; =3D DEF(GCC48_ALL_CC_FLAGS)

= > DEF(CLANGDWARF_WARNING_OVERRIDES) -fno-stack-protec= tor -

> = funsigned-char -ftrap-

> function=3Dundefined_behavior_has_been_optimized_away_by_c= lang -Wno-

= > address -Wno-shift-negative-value -Wno-unknown-pragmas -Wno-

> incompatible-li= brary-redeclaration -Wno-null-dereference -mno-implicit-<= /p>

> float -mms-bitfields -mn= o-stack-arg-probe -nostdlib -nostdlibinc -fseh-

> exceptions

<= p class=3DMsoPlainText>>

> +

>

> +###########################=

>

> +# CLANGDWARF IA32 de= finitions

&= gt;

> += ###########################

>

> +*_CLANGDWARF_IA32_CC_PATH     &n= bsp;        =3D

> DEF(CLANGDWARF_IA32_PREFIX)cla= ng

>

> +*_CLANG= DWARF_IA32_SLINK_PATH         =   =3D

= > DEF(CLANGDWARF_IA32_PREFIX)llvm-ar

>

> +*_CLANGDWARF_IA32_DLINK_PATH   = ;        =3D

> DEF(CLANGDWARF_IA32_PREFIX)ld.lld=

> =

> +*_CLANGDW= ARF_IA32_ASLDLINK_PATH        =3D

> DEF(CLANGDWA= RF_IA32_PREFIX)clang

>

> +*_CLANGDWARF_IA32_ASM_PATH      &n= bsp;      =3D

> DEF(CLANGDWARF_IA32_PREFIX)clang

>

> +*_CLANGDWARF_IA32_P= P_PATH           &nb= sp;  =3D

> DEF(CLANGDWARF_IA32_PREFIX)clang

>

> +*_CLANGDWARF_IA32_VFRPP_PATH  &nbs= p;        =3D

> DEF(CLANGDWARF_IA32_PREFIX)clang=

> =

> +*_CLANGDW= ARF_IA32_ASLCC_PATH         &n= bsp; =3D

&g= t; DEF(CLANGDWARF_IA32_PREFIX)clang

>

> +*_CLANGDWARF_IA32_ASLPP_PATH   &nb= sp;       =3D

> DEF(CLANGDWARF_IA32_PREFIX)clang

>

> +*_CLANGDWAR= F_IA32_OBJCOPY_PATH         =3D

> DEF(CLANG= DWARF_IA32_PREFIX)llvm-objcopy

>

> +

>

> +*_CLANGDWARF_IA32_ASLCC_FLAGS     &nbs= p;    =3D DEF(GCC_ASLCC_FLAGS) -m32

> -fno-lto DEF(CLANGDWARF_IA32_T= ARGET)

>=

> +*_C= LANGDWARF_IA32_ASM_FLAGS        &nb= sp;   =3D DEF(GCC_ASM_FLAGS) -m32 -

> march=3Di386 DEF(CLANGDWARF_IA32_T= ARGET)

>=

> +*_C= LANGDWARF_IA32_OBJCOPY_FLAGS        =3D<= o:p>

> <= /o:p>

> +*_CLANGDWA= RF_IA32_NASM_FLAGS         &nb= sp; =3D -f elf32

>

> +*_CLANGDWARF_IA32_PP_FLAGS       =       =3D DEF(GCC_PP_FLAGS)

<= p class=3DMsoPlainText>> DEF(CLANGDWARF_IA32_TARGET)<= o:p>

> <= /o:p>

> +*_CLANGDWA= RF_IA32_ASLPP_FLAGS          = =3D DEF(GCC_ASLPP_FLAGS)

> DEF(CLANGDWARF_IA32_TARGET)

>

> +*_CLANGDWARF_IA32_VFRPP_FLAGS &n= bsp;        =3D DEF(GCC_VFRPP_FLAGS)

> DEF(CLANG= DWARF_IA32_TARGET)

>

> +

>

>= +DEBUG_CLANGDWARF_IA32_CC_FLAGS        =  =3D

&= gt; DEF(CLANGDWARF_ALL_CC_FLAGS) -m32 -Oz -flto -march=3Di586

> DEF(CLANGDWARF_IA32= _TARGET) -g

>

>= +DEBUG_CLANGDWARF_IA32_DLINK_FLAGS      =3D --eh-= frame-hdr -q --gc-

> sections -z common-page-size=3D0x40 --entry $(IMAGE_ENTRY_PO= INT) -Map

&= gt; $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 -melf_i386 --

> format= =3Delf

>= ;

> +DE= BUG_CLANGDWARF_IA32_DLINK2_FLAGS     =3D

>

> +

>

> +RELEASE_CLANGDWARF_IA32_CC_FLAGS&= nbsp;      =3D

> DEF(CLANGDWARF_ALL_CC_FLAGS) -m32 -Oz -fl= to -march=3Di586

> DEF(CLANGDWARF_IA32_TARGET)

>

> +RELEASE_CLANGDWARF_IA32_DLINK_FLAGS  = ;  =3D --eh-frame-hdr -q --gc-

> sections -z common-page-size=3D0x40 --entry $= (IMAGE_ENTRY_POINT) -Map

> $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 -= melf_i386 --

> format=3Delf

>

> +RELEASE_CLANGDWARF_IA32_DLINK2_FLAGS   =3D<= /span>

>

> +

>

> +NOOPT_CLANGDWARF_IA32_CC_FLAGS=          =3D

<= p class=3DMsoPlainText>> DEF(CLANGDWARF_ALL_CC_FLAGS)= -m32 -O0 -march=3Di586

> DEF(CLANGDWARF_IA32_TARGET) -g

>

> +NOOPT_CLANGDWARF_IA32_DLINK_FLAGS=       =3D --eh-frame-hdr -q --gc-

> sections -z common-pag= e-size=3D0x40 --entry $(IMAGE_ENTRY_POINT) -Map

> $(DEST_DIR_DEBUG)/$(BASE_NAME).ma= p --whole-archive -O0 -melf_i386 --

> format=3Delf

>

> +NOOPT_CLANGDWARF_IA32_DLINK2_FLAGS &n= bsp;   =3D

>

> +

>

>= +##########################

<= span lang=3DEN-US>>

> +# CLANGDWARF X64 definitions

>

> +##########################=

>

> +*_CLANGDWARF_X64_CC_= PATH            &nbs= p; =3D

> DEF(CLANGDWARF_X64_PREFIX)clang

>

> +*_CLANGDWARF_X64_SLINK_PATH   &n= bsp;       =3D

> DEF(CLANGDWARF_X64_PREFIX)llvm-ar<= o:p>

> <= /o:p>

> +*_CLANGDWA= RF_X64_DLINK_PATH         &nbs= p; =3D

>= DEF(CLANGDWARF_X64_PREFIX)ld.lld

>

<= span lang=3DEN-US>> +*_CLANGDWARF_X64_ASLDLINK_PATH   &nb= sp;    =3D

> DEF(CLANGDWARF_X64_PREFIX)clang

>

> +*_CLANGDWARF_X64_ASM_PATH &n= bsp;           =3D

> DEF(CLANGDWA= RF_X64_PREFIX)clang

>

> +*_CLANGDWARF_X64_PP_PATH      &nbs= p;       =3D

> DEF(CLANGDWARF_X64_PREFIX)clang

> <= /span>

> +*_CLANGDWARF_X64= _VFRPP_PATH           =3D=

> DEF(C= LANGDWARF_X64_PREFIX)clang

>

> +*_CLANGDWARF_X64_ASLCC_PATH     &= nbsp;     =3D

> DEF(CLANGDWARF_X64_PREFIX)clang

>

> +*_CLANGDWARF_X64_ASLPP_PA= TH           =3D

> DEF(CLANGDWARF= _X64_PREFIX)clang

>

> +*_CLANGDWARF_X64_OBJCOPY_PATH      &nbs= p;  =3D

> DEF(CLANGDWARF_IA32_PREFIX)llvm-objcopy

>

> +

>

> +*_CLANGDWARF_X64_ASLCC_FLAGS &nbs= p;        =3D DEF(GCC_ASLCC_FLAGS) -m64<= o:p>

> -fno-l= to DEF(CLANGDWARF_X64_TARGET)

= >

> +*_CLANGDWARF_X64_ASM_FLAGS     = ;       =3D DEF(GCC_ASM_FLAGS) -m64

> DEF(CLANGDWARF_= X64_TARGET)

>

>= +*_CLANGDWARF_X64_OBJCOPY_FLAGS        = = =3D

> <= o:p>

> +*_CLA= NGDWARF_X64_NASM_FLAGS         = ;  =3D -f elf64

>

> +*_CLANGDWARF_X64_PP_FLAGS      &nb= sp;      =3D DEF(GCC_PP_FLAGS)

> DEF(CLANGDWARF_X64_TARGET= )

>

> +*_CLANGD= WARF_X64_ASLPP_FLAGS          = = =3D DEF(GCC_ASLPP_FLAGS)

> DEF(CLANGDWARF_X64_TARGET)

>

> +*_CLANGDWARF_X64_VFRPP_FLAGS &nbs= p;        =3D DEF(GCC_VFRPP_FLAGS)<= /o:p>

> DEF(CLANGDW= ARF_X64_TARGET)

>

= > +

>=

> +DEB= UG_CLANGDWARF_X64_CC_FLAGS         = = =3D

> D= EF(CLANGDWARF_ALL_CC_FLAGS) -m64 "-

> DEFIAPI=3D__attribute__((ms_abi))" = -mno-red-zone -mcmodel=3Dsmall -fpie -Oz

> -flto DEF(CLANGDWARF_X64_TARGET) -g=

>

> +DEBUG_CLANGDWA= RF_X64_DLINK_FLAGS      =3D --eh-frame-hdr -q --gc= -

> sect= ions -z common-page-size=3D0x40 --entry $(IMAGE_ENTRY_POINT) -Map

> $(DEST_DIR_DEBU= G)/$(BASE_NAME).map --whole-archive -O3 -

> melf_x86_64 --format=3Delf -pie

>

> +DEBUG_CLANGDWARF_= X64_DLINK2_FLAGS     =3D

>

> +DEBUG_CLANGDWARF_X64_GENFW_FLAGS =      =3D --keepexceptiontable

>

> +

>

> +RELEASE_CLANGDWARF_X64_CC_FLAGS  = ;     =3D

= > DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 "-

> DEFIAPI=3D__att= ribute__((ms_abi))" -mno-red-zone -mcmodel=3Dsmall -fpie -Oz

> -flto DEF(CLANG= DWARF_X64_TARGET)

>

> +RELEASE_CLANGDWARF_X64_DLINK_FLAGS    =3D --eh-fr= ame-hdr -q --gc-

> sections -z common-page-size=3D0x40 --entry $(IMAGE_ENTRY_POINT)= -Map

> = $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 -<= /p>

> melf_x86_64 --format=3De= lf -pie

>= ;

> +RE= LEASE_CLANGDWARF_X64_DLINK2_FLAGS   =3D

>

> +RELEASE_CLANGDWARF_X64_GENFW_FLAG= S    =3D

>

> +

>

> +NOOPT_CLANGDWARF_X64_CC_FLAGS      &nb= sp;  =3D

> DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 "-

> DEFIAPI=3D__attribute__((ms_abi= ))" -mno-red-zone -mcmodel=3Dsmall -fpie -O0

> DEF(CLANGDWARF_X64_TARGET) -g

>

> +NOOPT_CLANG= DWARF_X64_DLINK_FLAGS      =3D --eh-frame-hdr -q -= -gc-

> s= ections -z common-page-size=3D0x40 --entry $(IMAGE_ENTRY_POINT) -Map

> $(DEST_DIR_D= EBUG)/$(BASE_NAME).map --whole-archive -O0 -

> melf_x86_64 --format=3Delf -pie

>

> +NOOPT_CLANGD= WARF_X64_DLINK2_FLAGS     =3D

>

> +NOOPT_CLANGDWARF_X64_GENFW_FLAGS&= nbsp;     =3D --keepexceptiontable

>

> +

>

>  #

>

>  #

>

>  # XCODE5 support

>

=

> --

> 2.31.1.windows.1

> <= /p>

>

>

> -=3D-=3D-=3D-=3D-=3D-=3D

> Groups.io Links= : You receive all messages sent to this group.

> View/Reply Online (#75599): https://edk2.groups.io/g/devel/message/75599<= /span>

= > Mute This Topic: https://groups.io/mt/830= 95853/1781003

> Group Owner: devel+owner@edk2.g= roups.io

> Unsubscribe: https://edk2.groups= .io/g/devel/unsub [steven.shi@intel.com]

> -=3D-=3D-=3D-=3D-=3D-=3D=

>

 

------=_NextPart_001_0004_01D753AF.80708940-- ------=_NextPart_000_0003_01D753AF.80708940 Content-Type: image/png; name="image001.png" Content-Transfer-Encoding: base64 Content-ID: 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 kAnSNP8PVTe0FkhNigMAAAAASUVORK5CYII= ------=_NextPart_000_0003_01D753AF.80708940--