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.web10.39694.1622431411537330964 for ; Sun, 30 May 2021 20:23:34 -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 ; Mon, 31 May 2021 11:23:29 +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'" , , "'Shi, Steven'" References: <20210526082310.1597-1-ray.ni@intel.com> <20210526082310.1597-2-ray.ni@intel.com> ,<000201d7536c$72484030$56d8c090$@byosoft.com.cn> In-Reply-To: Subject: =?UTF-8?B?5Zue5aSNOiBbZWRrMi1kZXZlbF0gW1BBVENIIDEvNF0gQmFzZVRvb2xzOiBDcmVhdGUgQ0xBTkdEV0FSRiB0b29sY2hhaW4=?= Date: Mon, 31 May 2021 11:23:27 +0800 Message-ID: <009101d755cc$530c3fc0$f924bf40$@byosoft.com.cn> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQDN+np5LmVk0lkCLYcaVCRRi2jpIAJZ9ZndAZmd0tgCXgO97gJYihNfrMpRIFA= X-Groupsio-MsgNum: 75861 Content-Type: multipart/related; boundary="----=_NextPart_000_0092_01D7560F.61343AB0" Content-Language: zh-cn ------=_NextPart_000_0092_01D7560F.61343AB0 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0093_01D7560F.613461C0" ------=_NextPart_001_0093_01D7560F.613461C0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: quoted-printable Ray: If the tool chain generates ELF image, its ELF image can be converted to EFI image by Edk2 GenFw tool. Then, this tool chain can be used for EFI development.=20 =20 So, I propose to make CLANGDWARF tool chain generate ELF image and EFI image both. It can support the usage of ELF image generation. =20 Thanks Liming =B7=A2=BC=FE=C8=CB: Ni, Ray =20 =B7=A2=CB=CD=CA=B1=BC=E4: 2021=C4=EA5=D4=C228=C8=D5 22:31 =CA=D5=BC=FE=C8=CB: devel@edk2.groups.io; gaoliming@byosoft.com.cn; Shi, S= teven =D6=F7=CC=E2: Re: [edk2-devel] [PATCH 1/4] BaseTools: Create CLANGDWARF to= olchain =20 Liming, that is not the intention of this new toolchain. we want to have a toolchain that can generate elf. or can you suggest a ne= w name for this toolchain? =20 thanks, ray _____ From: devel@edk2.groups.io > on behalf of gaolimi= ng > Sent: Friday, May 28, 2021 10:52:06 AM To: devel@edk2.groups.io >; Shi, Steven >; Ni, Ray > Subject: =BB=D8=B8=B4: [edk2-devel] [PATCH 1/4] BaseTools: Create CLANGDWA= RF toolchain=20 =20 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 ; N= i, 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_0093_01D7560F.613461C0 Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: quoted-printable
=

Ray:

 If the= tool chain generates ELF image, its ELF image can be converted to EFI imag= e by Edk2 GenFw tool. Then, this tool chain can be used for EFI development= .

 

 So, I propose to make CLANGDWARF tool chain generate ELF= image and EFI image both. It can support the usage of ELF image generation= .

 

Thanks

Liming<= /span>

=B7=A2=BC=FE=C8=CB= : Ni, Ray <ray.ni@intel.com>
=B7=A2=CB=CD=CA=B1=BC=E4: 2021=C4=EA5=D4=C228=C8=D5 22:31
=CA=D5=BC= =FE=C8=CB: devel@edk2.gro= ups.io; gaoliming@byosoft.com.cn; Shi, Steven <steven.shi@intel.com><= br>=D6=F7=CC=E2:= Re: [edk2-devel] [PATCH 1/4] BaseTools: Create CLANGDWARF toolchain

<= o:p> 

Liming,

that is not the intention of this new toolchain.<= /span>

we want to hav= e a toolchain that can generate elf. or can you suggest a new name for this= toolchain?

 

thanks,

ray


From: devel@edk2.groups.io <devel@edk2.groups.io> = on behalf of gaoliming <gaol= iming@byosoft.com.cn>
Sent: Friday, May 28, 2021 10:52:06 = AM
To: devel@edk2.groups.= io <devel@edk2.groups.io= >; Shi, Steven <steven.shi@in= tel.com>; Ni, Ray <ray.ni@int= el.com>
Subject: =BB=D8=B8=B4: [edk2-devel] [PATCH 1/4] Ba= seTools: Create CLANGDWARF toolchain <= /span>

 

Ray:

 I would like to suggest CLANGDWARF also = generate EFI image. If so, the people can use this tool chain for EFI devel= opment with DWARF format debug symbol.

  

=

  In dll generation phase, CLANGDWARF still generates dll image,= then copy dll image to elf image. In EFI generation phase, dll image will = be converted to EFI image.

=

 

Thanks

Liming

<= div style=3D'border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0= cm 0cm'>

= =B7=A2=BC=FE=C8=CB: devel@edk2.groups.io <deve= l@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, Ray <ray.ni@intel.com>
=D6=F7=CC=E2: Re: [edk2-devel] [PATCH 1/4] BaseTool= s: Create CLANGDWARF toolchain<= /span>

 <= /o:p>

Some suggestions:<= o:p>

 

  1. There ar= e many blanks appending the line =A1=B0+      = ;  "$(DLINK)" -o ${dst} $(DLINK_FLAGS) @$(STATIC_LIBRARY_FIL= ES_LIST)        =A1=B0<= /li>

 

 <= /o:p>

  1. We n= eed a toolchain dependency descirption in the BaseTools\Conf\tools_def.temp= late. Below is the example for CLANGPDB. Please add one for the CLANGDWARF.=

#&n= bsp;  CLANGPDB -Linux, Windows, Mac-  Requires:=

#    &n= bsp;            = ;            Clang 9= or above from http://releases.llvm.o= rg/

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

#  = ;            &n= bsp;            = ;  Required to compile nasm source:

#       &= nbsp;           &nbs= p;           nasm compile= r from

#&n= bsp;            = ;            &n= bsp;     NASM -- http:/= /www.nasm.us/

#          &nbs= p;            &= nbsp;     Required to build platforms or ACPI tables:

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

#      = ;            &n= bsp;            https://acpica.org/downloads<= /o:p>

 

  1. We could m= erge the CLANG38 and the CLANGDWARF toolchains together in the future.=

 

 =

Thanks

Steven Shi

 

 

> -----Original Mes= sage-----

= > From: devel@edk2.groups.io= <devel@edk2.groups.io> O= n Behalf Of Ni, Ray

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

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

> Subject: [edk2-devel] [PATCH 1/4] Base= Tools: Create CLANGDWARF

> toolchain

>

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

> ---

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

>  BaseTools= /Conf/tools_def.template  | 98

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

>  2 files chan= ged, 107 insertions(+), 1 deletion(-)

>

> diff --git a/BaseTools/Conf/build_rule.templat= e

> b/B= aseTools/Conf/build_rule.template

> index 1395792cd6..e69f963cc8 100755=

> --- a/BaseTools= /Conf/build_rule.template

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

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

> &n= bsp;    <ExtraDependency>

>

>      &n= bsp;   $(MAKE_FILE)

>

>

>

> -    <OutputFile><= /p>

>

<= p class=3Dxmsoplaintext>> +    <Out= putFile.CLANGDWARF>

>

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

>

> +

>

&= gt; +    <OutputFile.MSFT, OutputFile.INTEL, OutputFile.G= CC>

>= ;

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

>

>= ;

>

>  =     <Command.MSFT, Command.INTEL>

>

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

>  &n= bsp;   <Command.CLANGPDB>

>

>       &= nbsp;  "$(DLINK)" /OUT:${dst} $(DLINK_FLAGS) $(DLINK_SP= ATH)

> = @$(STATIC_LIBRARY_FILES_LIST) $(DLINK2_FLAGS)

>

>

>

> +    <Command.CLANGDWARF>= ;

>

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

>

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

>

> +    =     "$(OBJCOPY)" --strip-unneeded -R .eh_frame ${d= st}

> <= o:p>

> +

>

>   =    <Command.GCC>

>

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

> group,@$(STAT= IC_LIBRARY_FILES_LIST),--end-group $(CC_FLAGS)

> $(DLINK2_FLAGS)=

>

=

>     &n= bsp;    "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}<= o:p>

> =

> diff --gi= t a/BaseTools/Conf/tools_def.template

> b/BaseTools/Conf/tools_def.template

> index 49869= 6e583..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_C= LANGPDB_X64_DLINK2_FLAGS     =3D

<= p class=3Dxmsoplaintext>>

>  NOOPT_CLANGPDB_X64_GENFW_= FLAGS      =3D --keepexceptiontable

> <= /p>

>

<= p class=3Dxmsoplaintext>>

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

<= span lang=3DEN-US>> ###########################

>

> +#

>

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

> Windows/Linux/Mac to produce

>

> +#  ELF binaries using LLVM/Clan= g/LLD with Link Time Optimization enabled

>

> +#

>

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

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

>

> +*_CLANGDWARF_*_*_FAMILY    &n= bsp;        =3D GCC

>

> +*_CLANGDWARF_*_*_BUILDRULEFA= MILY    =3D CLANGDWARF

>

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

> <= /o:p>

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

>

> +*_CLANGDWARF_*_ASL_PATH &nb= sp;           =3D DEF(UNI= X_IASL_BIN)

>

&g= t; +

> =

> +*_C= LANGDWARF_*_APP_FLAGS         =    =3D

>

> +*_CLANGDWARF_*_ASL_FLAGS      &nb= sp;     =3D DEF(DEFAULT_WIN_ASL_FLAGS)

>

> +*_CLANGDWARF_*_ASL_OUTFL= AGS         =3D

> DEF(DEFAULT_WIN_ASL_OUTF= LAGS)

>=

> +*_= CLANGDWARF_*_ASLDLINK_FLAGS       =3D DEF(MSF= T_ASLDLINK_FLAGS)

>

> +*_CLANGDWARF_*_DEPS_FLAGS      &n= bsp;    =3D DEF(GCC_DEPS_FLAGS)

>

> +

>

> +DEFINE CLANGDWARF_IA32_PREFIX  &n= bsp;    =3D ENV(CLANG_BIN)

>

> +DEFINE CLANGDWARF_X64_PREFIX  &= nbsp;     =3D ENV(CLANG_BIN)

>

> +

>

> +DEFINE CLANGDWARF_IA32_TARGET &= nbsp;     =3D -target i686-pc-linux-gnu

>

> +DEFINE CLANGDWARF_X64_T= ARGET        =3D -target x86_64-pc-linux= -gnu

> =

> +

>

> +DEFINE CLA= NGDWARF_WARNING_OVERRIDES =3D -Wno-parentheses-

> equality -Wno-tautological-compa= re -Wno-tautological-constant-out-of-

> range-compare -Wno-empty-body -Wno-unused-= const-variable -Wno-

> varargs -Wno-unknown-warning-option -Wno-microsoft-enum-for= ward-

>= reference

>

>= ; +DEFINE CLANGDWARF_ALL_CC_FLAGS      =3D DEF(GCC= 48_ALL_CC_FLAGS)

> DEF(CLANGDWARF_WARNING_OVERRIDES) -fno-stack-protector -

> funsigne= d-char -ftrap-

> function=3Dundefined_behavior_has_been_optimized_away_by_clang -W= no-

> a= ddress -Wno-shift-negative-value -Wno-unknown-pragmas -Wno-

> incompatible-library= -redeclaration -Wno-null-dereference -mno-implicit-

> float -mms-bitfields -mno-st= ack-arg-probe -nostdlib -nostdlibinc -fseh-

> exceptions

<= p class=3Dxmsoplaintext>>

> +

>

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

>

> +# CLANGDWARF IA3= 2 definitions

>

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

>

> +*_CLANGDWARF_IA32_CC_PATH    =           =3D

> DEF(CLANGDWARF_IA32_P= REFIX)clang

>

&g= t; +*_CLANGDWARF_IA32_SLINK_PATH       &= nbsp;   =3D

> DEF(CLANGDWARF_IA32_PREFIX)llvm-ar

>

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

> DEF(CLANGDWARF_IA3= 2_PREFIX)ld.lld

>

> +*_CLANGDWARF_IA32_ASLDLINK_PATH      =   =3D

> DEF(CLANGDWARF_IA32_PREFIX)clang

>

> +*_CLANGDWARF_IA32_ASM_PATH   =           =3D

> DEF(CLANGDWARF_IA32_P= REFIX)clang

>

&g= t; +*_CLANGDWARF_IA32_PP_PATH       &nbs= p;      =3D

> DEF(CLANGDWARF_IA32_PREFIX)clang=

>

> +*_CLANGDWARF_IA32_= VFRPP_PATH           =3D<= o:p>

> DEF(C= LANGDWARF_IA32_PREFIX)clang

<= span lang=3DEN-US>>

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

> DEF(CLANGDWARF_IA32_PREFIX)clang

>

> +*_CLANGDWARF_IA32= _ASLPP_PATH           =3D=

> DEF(= CLANGDWARF_IA32_PREFIX)clang

= >

> +*_CLANGDWARF_IA32_OBJCOPY_PATH    =      =3D

= > DEF(CLANGDWARF_IA32_PREFIX)llvm-objcopy<= /span>

>

> +<= /p>

>

<= p class=3Dxmsoplaintext>> +*_CLANGDWARF_IA32_ASLCC_FL= AGS          =3D DEF(GCC_ASLCC= _FLAGS) -m32

> -fno-lto DEF(CLANGDWARF_IA32_TARGET)

>

> +*_CLANGDWARF_IA32_ASM_FLAGS &nb= sp;          =3D DEF(GCC_ASM_F= LAGS) -m32 -

> march=3Di386 DEF(CLANGDWARF_IA32_TARGET)

>

> +*_CLANGDWARF_IA32_OBJCOPY_FLAGS&= nbsp;       =3D

>

> +*_CLANGDWARF_IA32_NASM_FLAGS &n= bsp;         =3D -f elf32

>

> +*_CLANGDWARF_IA32= _PP_FLAGS           =   =3D DEF(GCC_PP_FLAGS)

= > DEF(CLANGDWARF_IA32_TARGET)

>

> +*_CLANGDWARF_IA32_ASLPP_FLAGS&n= bsp;         =3D DEF(GCC_ASLPP_FLAG= S)

> DE= F(CLANGDWARF_IA32_TARGET)

>

> +*_CLANGDWARF_IA32_VFRPP_FLAGS    &nbs= p;     =3D DEF(GCC_VFRPP_FLAGS)

> DEF(CLANGDWARF_IA32_TARGET)<= o:p>

> =

> +

> <= /span>

> +DEBUG_CLANGDWAR= F_IA32_CC_FLAGS         =3D

> DEF(CLANGDWA= RF_ALL_CC_FLAGS) -m32 -Oz -flto -march=3Di586

> DEF(CLANGDWARF_IA32_TARGET) -g

>

> +DEBUG_CLAN= GDWARF_IA32_DLINK_FLAGS      =3D --eh-frame-hdr -q= --gc-

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

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

> format=3Delf

> =

> +DEBUG_CLANGDWA= RF_IA32_DLINK2_FLAGS     =3D

>

> +

>

> +RELEASE_CLANGDWARF_IA32_CC_FLAGS&nbs= p;      =3D

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

> DEF(CLANGDWARF_IA32_TARGET)

>

> +RELEASE_CLANGDWARF_IA32_DLINK_FLAGS &nbs= p;  =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 -O= 3 -melf_i386 --

> format=3Delf

>

> +RELEASE_CLANGDWARF_IA32_DLINK2_FLAGS   =3D

> =

> +

> =

> +NOOPT_CLANGDWARF_IA32= _CC_FLAGS         =3D

> DEF(CLANGDWARF_ALL= _CC_FLAGS) -m32 -O0 -march=3Di586

> DEF(CLANGDWARF_IA32_TARGET) -g

>

> +NOOPT_CLANGDWARF_IA32_D= LINK_FLAGS      =3D --eh-frame-hdr -q --gc-

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

> $(DEST_DIR_DEBUG)/$(B= ASE_NAME).map --whole-archive -O0 -melf_i386 --

> format=3Delf

>

> +NOOPT_CLANGDWARF_IA32_DLINK= 2_FLAGS     =3D

>

> +

= >

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

>

> +# CLANGDWARF X64 definitions

>

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

>

> +*_CLANGDWARF_X64_CC_PATH       &= nbsp;      =3D

> DEF(CLANGDWARF_X64_PREFIX)clang

>

> +*_CLANGDWARF_X64= _SLINK_PATH           =3D=

> DEF(= CLANGDWARF_X64_PREFIX)llvm-ar

>

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

> DEF(CLANGDWARF_X64_PREFIX)ld.lld

>

> +*_CLANGDWARF_X64= _ASLDLINK_PATH        =3D

> DEF(CLANGDWARF_X64_= PREFIX)clang

>

&= gt; +*_CLANGDWARF_X64_ASM_PATH       &nb= sp;     =3D

> DEF(CLANGDWARF_X64_PREFIX)clang

>

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

&g= t; DEF(CLANGDWARF_X64_PREFIX)clang

>

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

> DEF(CLANGDWARF_X64_PREFIX)clang

> <= /o:p>

> +*_CLANGDW= ARF_X64_ASLCC_PATH         &nb= sp; =3D

&g= t; DEF(CLANGDWARF_X64_PREFIX)clang

>

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

> DEF(CLANGDWARF_X64_PREFIX)clang

> <= /o:p>

> +*_CLANGDW= ARF_X64_OBJCOPY_PATH         =3D

> DEF(CLA= NGDWARF_IA32_PREFIX)llvm-objcopy

>

= > +

>

> +*_CLANGDWARF_X64_ASLCC_FLAGS     = ;     =3D DEF(GCC_ASLCC_FLAGS) -m64

> -fno-lto DEF(CLANGDWARF_= X64_TARGET)

>

&g= t; +*_CLANGDWARF_X64_ASM_FLAGS       &nb= sp;    =3D DEF(GCC_ASM_FLAGS) -m64

> DEF(CLANGDWARF_X64_TARGET)

>

> +*_CLANGDWAR= F_X64_OBJCOPY_FLAGS        =3D

>

> +*_CLANGDWARF_X64_= NASM_FLAGS           =3D = -f elf64

&= gt;

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

> DEF(CLANGDWARF_X64_TARGET)

> =

> +*_CLANGDWARF_X= 64_ASLPP_FLAGS          =3D DE= F(GCC_ASLPP_FLAGS)

> DEF(CLANGDWARF_X64_TARGET)

>

> +*_CLANGDWARF_X64_VFRPP_FLAGS  &= nbsp;       =3D DEF(GCC_VFRPP_FLAGS)

> DEF(CLANGDWAR= F_X64_TARGET)

>

= > +

>= ;

> +D= EBUG_CLANGDWARF_X64_CC_FLAGS        = ; =3D

>= DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 "-

> DEFIAPI=3D__attribute__((ms_abi))&quo= t; -mno-red-zone -mcmodel=3Dsmall -fpie -Oz

> -flto DEF(CLANGDWARF_X64_TARGET) = -g

>

> +DEBUG= _CLANGDWARF_X64_DLINK_FLAGS      =3D --eh-frame-hd= r -q --gc-

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

> $(DE= ST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 -

<= p class=3Dxmsoplaintext>> melf_x86_64 --format=3Delf = -pie

> =

> +DEB= UG_CLANGDWARF_X64_DLINK2_FLAGS     =3D

>

> +DEBUG_CLANGDWARF_X64_GEN= FW_FLAGS      =3D --keepexceptiontable<= /span>

>

> +<= /p>

>

<= p class=3Dxmsoplaintext>> +RELEASE_CLANGDWARF_X64_CC_= FLAGS       =3D

> DEF(CLANGDWARF_ALL_CC_FLAGS) -m64= "-

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

= > -flto DEF(CLANGDWARF_X64_TARGET)

>

> +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= -

> me= lf_x86_64 --format=3Delf -pie

>

> +RELEASE_CLANGDWARF_X64_DLINK2_FLAGS   =3D

> <= /o:p>

> +RELEASE_C= LANGDWARF_X64_GENFW_FLAGS    =3D

>

> +

>

> +NOOPT_CLANGDWARF_X64_CC_FLAGS &= nbsp;       =3D

> DEF(CLANGDWARF_ALL_CC_FLAGS) -m64= "-

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

= > DEF(CLANGDWARF_X64_TARGET) -g

>

> +NOOPT_CLANGDWARF_X64_DLINK_FLAGS  &nbs= p;   =3D --eh-frame-hdr -q --gc-

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

> $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-arch= ive -O0 -

= > melf_x86_64 --format=3Delf -pie

>

> +NOOPT_CLANGDWARF_X64_DLINK2_FLAGS  &= nbsp;  =3D

>

> +NOOPT_CLANGDWARF_X64_GENFW_FLAGS      =3D = --keepexceptiontable

>

> +

>

>  #

>

>  #

>

>  # XCODE5 support

>

> --

<= span lang=3DEN-US>> 2.31.1.windows.1

>

>

>

<= span lang=3DEN-US>> -=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<= /o:p>

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

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

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

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

>

 

<= /div>

------=_NextPart_001_0093_01D7560F.613461C0-- ------=_NextPart_000_0092_01D7560F.61343AB0 Content-Type: image/png; name="image001.png" Content-Transfer-Encoding: base64 Content-ID: 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 kAnSNP8PVTe0FkhNigMAAAAASUVORK5CYII= ------=_NextPart_000_0092_01D7560F.61343AB0--