Some suggestions:
# 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
Thanks
Steven Shi
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Ni, Ray
> Sent: Wednesday, May 26, 2021 4:23 PM
> To: devel@edk2.groups.io
> Subject: [edk2-devel] [PATCH 1/4] BaseTools: 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 changed, 107 insertions(+), 1 deletion(-)
>
> 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 @@
> <ExtraDependency>
>
> $(MAKE_FILE)
>
>
>
> - <OutputFile>
>
> + <OutputFile.CLANGDWARF>
>
> + $(DEBUG_DIR)(+)$(MODULE_NAME).elf
>
> +
>
> + <OutputFile.MSFT, OutputFile.INTEL, OutputFile.GCC>
>
> $(DEBUG_DIR)(+)$(MODULE_NAME).dll
>
>
>
> <Command.MSFT, Command.INTEL>
>
> @@ -303,6 +306,11 @@
> <Command.CLANGPDB>
>
> "$(DLINK)" /OUT:${dst} $(DLINK_FLAGS) $(DLINK_SPATH)
> @$(STATIC_LIBRARY_FILES_LIST) $(DLINK2_FLAGS)
>
>
>
> + <Command.CLANGDWARF>
>
> + "$(DLINK)" -o ${dst} $(DLINK_FLAGS) @$(STATIC_LIBRARY_FILES_LIST)
>
> + "$(CP)" ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).debug
>
> + "$(OBJCOPY)" --strip-unneeded -R .eh_frame ${dst}
>
> +
>
> <Command.GCC>
>
> "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -Wl,--start-
> group,@$(STATIC_LIBRARY_FILES_LIST),--end-group $(CC_FLAGS)
> $(DLINK2_FLAGS)
>
> "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}
>
> 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 =
> /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:RE
> NOOPT_CLANGPDB_X64_DLINK2_FLAGS =
>
> NOOPT_CLANGPDB_X64_GENFW_FLAGS = --keepexceptiontable
>
>
>
> +#########################################################
> ###########################
>
> +#
>
> +# CLANGDWARF - This configuration is used to compile under
> Windows/Linux/Mac to produce
>
> +# ELF binaries using LLVM/Clang/LLD with Link Time Optimization enabled
>
> +#
>
> +#########################################################
> ###########################
>
> +*_CLANGDWARF_*_*_FAMILY = GCC
>
> +*_CLANGDWARF_*_*_BUILDRULEFAMILY = CLANGDWARF
>
> +*_CLANGDWARF_*_MAKE_PATH = ENV(CLANG_HOST_BIN)make
>
> +*_CLANGDWARF_*_*_DLL = ENV(CLANGPDB_DLL)
>
> +*_CLANGDWARF_*_ASL_PATH = DEF(UNIX_IASL_BIN)
>
> +
>
> +*_CLANGDWARF_*_APP_FLAGS =
>
> +*_CLANGDWARF_*_ASL_FLAGS = DEF(DEFAULT_WIN_ASL_FLAGS)
>
> +*_CLANGDWARF_*_ASL_OUTFLAGS =
> DEF(DEFAULT_WIN_ASL_OUTFLAGS)
>
> +*_CLANGDWARF_*_ASLDLINK_FLAGS = DEF(MSFT_ASLDLINK_FLAGS)
>
> +*_CLANGDWARF_*_DEPS_FLAGS = DEF(GCC_DEPS_FLAGS)
>
> +
>
> +DEFINE CLANGDWARF_IA32_PREFIX = ENV(CLANG_BIN)
>
> +DEFINE CLANGDWARF_X64_PREFIX = ENV(CLANG_BIN)
>
> +
>
> +DEFINE CLANGDWARF_IA32_TARGET = -target i686-pc-linux-gnu
>
> +DEFINE CLANGDWARF_X64_TARGET = -target x86_64-pc-linux-gnu
>
> +
>
> +DEFINE CLANGDWARF_WARNING_OVERRIDES = -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
>
> +DEFINE CLANGDWARF_ALL_CC_FLAGS = DEF(GCC48_ALL_CC_FLAGS)
> DEF(CLANGDWARF_WARNING_OVERRIDES) -fno-stack-protector -
> funsigned-char -ftrap-
> function=undefined_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
>
> +
>
> +###########################
>
> +# CLANGDWARF IA32 definitions
>
> +###########################
>
> +*_CLANGDWARF_IA32_CC_PATH =
> DEF(CLANGDWARF_IA32_PREFIX)clang
>
> +*_CLANGDWARF_IA32_SLINK_PATH =
> DEF(CLANGDWARF_IA32_PREFIX)llvm-ar
>
> +*_CLANGDWARF_IA32_DLINK_PATH =
> DEF(CLANGDWARF_IA32_PREFIX)ld.lld
>
> +*_CLANGDWARF_IA32_ASLDLINK_PATH =
> DEF(CLANGDWARF_IA32_PREFIX)clang
>
> +*_CLANGDWARF_IA32_ASM_PATH =
> DEF(CLANGDWARF_IA32_PREFIX)clang
>
> +*_CLANGDWARF_IA32_PP_PATH =
> DEF(CLANGDWARF_IA32_PREFIX)clang
>
> +*_CLANGDWARF_IA32_VFRPP_PATH =
> DEF(CLANGDWARF_IA32_PREFIX)clang
>
> +*_CLANGDWARF_IA32_ASLCC_PATH =
> DEF(CLANGDWARF_IA32_PREFIX)clang
>
> +*_CLANGDWARF_IA32_ASLPP_PATH =
> DEF(CLANGDWARF_IA32_PREFIX)clang
>
> +*_CLANGDWARF_IA32_OBJCOPY_PATH =
> DEF(CLANGDWARF_IA32_PREFIX)llvm-objcopy
>
> +
>
> +*_CLANGDWARF_IA32_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m32
> -fno-lto DEF(CLANGDWARF_IA32_TARGET)
>
> +*_CLANGDWARF_IA32_ASM_FLAGS = DEF(GCC_ASM_FLAGS) -m32 -
> march=i386 DEF(CLANGDWARF_IA32_TARGET)
>
> +*_CLANGDWARF_IA32_OBJCOPY_FLAGS =
>
> +*_CLANGDWARF_IA32_NASM_FLAGS = -f elf32
>
> +*_CLANGDWARF_IA32_PP_FLAGS = DEF(GCC_PP_FLAGS)
> DEF(CLANGDWARF_IA32_TARGET)
>
> +*_CLANGDWARF_IA32_ASLPP_FLAGS = DEF(GCC_ASLPP_FLAGS)
> DEF(CLANGDWARF_IA32_TARGET)
>
> +*_CLANGDWARF_IA32_VFRPP_FLAGS = DEF(GCC_VFRPP_FLAGS)
> DEF(CLANGDWARF_IA32_TARGET)
>
> +
>
> +DEBUG_CLANGDWARF_IA32_CC_FLAGS =
> DEF(CLANGDWARF_ALL_CC_FLAGS) -m32 -Oz -flto -march=i586
> DEF(CLANGDWARF_IA32_TARGET) -g
>
> +DEBUG_CLANGDWARF_IA32_DLINK_FLAGS = --eh-frame-hdr -q --gc-
> sections -z common-page-size=0x40 --entry $(IMAGE_ENTRY_POINT) -Map
> $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 -melf_i386 --
> format=elf
>
> +DEBUG_CLANGDWARF_IA32_DLINK2_FLAGS =
>
> +
>
> +RELEASE_CLANGDWARF_IA32_CC_FLAGS =
> DEF(CLANGDWARF_ALL_CC_FLAGS) -m32 -Oz -flto -march=i586
> DEF(CLANGDWARF_IA32_TARGET)
>
> +RELEASE_CLANGDWARF_IA32_DLINK_FLAGS = --eh-frame-hdr -q --gc-
> sections -z common-page-size=0x40 --entry $(IMAGE_ENTRY_POINT) -Map
> $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 -melf_i386 --
> format=elf
>
> +RELEASE_CLANGDWARF_IA32_DLINK2_FLAGS =
>
> +
>
> +NOOPT_CLANGDWARF_IA32_CC_FLAGS =
> DEF(CLANGDWARF_ALL_CC_FLAGS) -m32 -O0 -march=i586
> DEF(CLANGDWARF_IA32_TARGET) -g
>
> +NOOPT_CLANGDWARF_IA32_DLINK_FLAGS = --eh-frame-hdr -q --gc-
> sections -z common-page-size=0x40 --entry $(IMAGE_ENTRY_POINT) -Map
> $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O0 -melf_i386 --
> format=elf
>
> +NOOPT_CLANGDWARF_IA32_DLINK2_FLAGS =
>
> +
>
> +##########################
>
> +# CLANGDWARF X64 definitions
>
> +##########################
>
> +*_CLANGDWARF_X64_CC_PATH =
> DEF(CLANGDWARF_X64_PREFIX)clang
>
> +*_CLANGDWARF_X64_SLINK_PATH =
> DEF(CLANGDWARF_X64_PREFIX)llvm-ar
>
> +*_CLANGDWARF_X64_DLINK_PATH =
> DEF(CLANGDWARF_X64_PREFIX)ld.lld
>
> +*_CLANGDWARF_X64_ASLDLINK_PATH =
> DEF(CLANGDWARF_X64_PREFIX)clang
>
> +*_CLANGDWARF_X64_ASM_PATH =
> DEF(CLANGDWARF_X64_PREFIX)clang
>
> +*_CLANGDWARF_X64_PP_PATH =
> DEF(CLANGDWARF_X64_PREFIX)clang
>
> +*_CLANGDWARF_X64_VFRPP_PATH =
> DEF(CLANGDWARF_X64_PREFIX)clang
>
> +*_CLANGDWARF_X64_ASLCC_PATH =
> DEF(CLANGDWARF_X64_PREFIX)clang
>
> +*_CLANGDWARF_X64_ASLPP_PATH =
> DEF(CLANGDWARF_X64_PREFIX)clang
>
> +*_CLANGDWARF_X64_OBJCOPY_PATH =
> DEF(CLANGDWARF_IA32_PREFIX)llvm-objcopy
>
> +
>
> +*_CLANGDWARF_X64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m64
> -fno-lto DEF(CLANGDWARF_X64_TARGET)
>
> +*_CLANGDWARF_X64_ASM_FLAGS = DEF(GCC_ASM_FLAGS) -m64
> DEF(CLANGDWARF_X64_TARGET)
>
> +*_CLANGDWARF_X64_OBJCOPY_FLAGS =
>
> +*_CLANGDWARF_X64_NASM_FLAGS = -f elf64
>
> +*_CLANGDWARF_X64_PP_FLAGS = DEF(GCC_PP_FLAGS)
> DEF(CLANGDWARF_X64_TARGET)
>
> +*_CLANGDWARF_X64_ASLPP_FLAGS = DEF(GCC_ASLPP_FLAGS)
> DEF(CLANGDWARF_X64_TARGET)
>
> +*_CLANGDWARF_X64_VFRPP_FLAGS = DEF(GCC_VFRPP_FLAGS)
> DEF(CLANGDWARF_X64_TARGET)
>
> +
>
> +DEBUG_CLANGDWARF_X64_CC_FLAGS =
> DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 "-
> DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -fpie -Oz
> -flto DEF(CLANGDWARF_X64_TARGET) -g
>
> +DEBUG_CLANGDWARF_X64_DLINK_FLAGS = --eh-frame-hdr -q --gc-
> sections -z common-page-size=0x40 --entry $(IMAGE_ENTRY_POINT) -Map
> $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 -
> melf_x86_64 --format=elf -pie
>
> +DEBUG_CLANGDWARF_X64_DLINK2_FLAGS =
>
> +DEBUG_CLANGDWARF_X64_GENFW_FLAGS = --keepexceptiontable
>
> +
>
> +RELEASE_CLANGDWARF_X64_CC_FLAGS =
> DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 "-
> DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -fpie -Oz
> -flto DEF(CLANGDWARF_X64_TARGET)
>
> +RELEASE_CLANGDWARF_X64_DLINK_FLAGS = --eh-frame-hdr -q --gc-
> sections -z common-page-size=0x40 --entry $(IMAGE_ENTRY_POINT) -Map
> $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O3 -
> melf_x86_64 --format=elf -pie
>
> +RELEASE_CLANGDWARF_X64_DLINK2_FLAGS =
>
> +RELEASE_CLANGDWARF_X64_GENFW_FLAGS =
>
> +
>
> +NOOPT_CLANGDWARF_X64_CC_FLAGS =
> DEF(CLANGDWARF_ALL_CC_FLAGS) -m64 "-
> DEFIAPI=__attribute__((ms_abi))" -mno-red-zone -mcmodel=small -fpie -O0
> DEF(CLANGDWARF_X64_TARGET) -g
>
> +NOOPT_CLANGDWARF_X64_DLINK_FLAGS = --eh-frame-hdr -q --gc-
> sections -z common-page-size=0x40 --entry $(IMAGE_ENTRY_POINT) -Map
> $(DEST_DIR_DEBUG)/$(BASE_NAME).map --whole-archive -O0 -
> melf_x86_64 --format=elf -pie
>
> +NOOPT_CLANGDWARF_X64_DLINK2_FLAGS =
>
> +NOOPT_CLANGDWARF_X64_GENFW_FLAGS = --keepexceptiontable
>
> +
>
> #
>
> #
>
> # XCODE5 support
>
> --
> 2.31.1.windows.1
>
>
>
> -=-=-=-=-=-=
> 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.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub [steven.shi@intel.com]
> -=-=-=-=-=-=
>