From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by ml01.01.org (Postfix) with ESMTP id D3D761A1E1F for ; Tue, 9 Aug 2016 21:54:21 -0700 (PDT) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga101.fm.intel.com with ESMTP; 09 Aug 2016 21:54:22 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,497,1464678000"; d="scan'208";a="1022806111" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga001.fm.intel.com with ESMTP; 09 Aug 2016 21:54:21 -0700 Received: from fmsmsx124.amr.corp.intel.com (10.18.125.39) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 9 Aug 2016 21:54:21 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx124.amr.corp.intel.com (10.18.125.39) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 9 Aug 2016 21:54:21 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.147]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.8]) with mapi id 14.03.0248.002; Wed, 10 Aug 2016 12:54:18 +0800 From: "Gao, Liming" To: "Shi, Steven" , "edk2-devel@lists.01.org" , "Carsey, Jaben" CC: "afish@apple.com" , "Kinney, Michael D" , "ard.biesheuvel@linaro.org" Thread-Topic: [PATCH v5 2/4] BaseTools-Conf:Introduce CLANG38 new toolchain for x86 Thread-Index: AQHR7WuaKevCd9fnx06wX/TbLv/fa6BBq22w Date: Wed, 10 Aug 2016 04:54:18 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A1155E9441@shsmsx102.ccr.corp.intel.com> References: <1470217386-20676-1-git-send-email-steven.shi@intel.com> <1470217386-20676-3-git-send-email-steven.shi@intel.com> In-Reply-To: <1470217386-20676-3-git-send-email-steven.shi@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v5 2/4] BaseTools-Conf:Introduce CLANG38 new toolchain for x86 X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Aug 2016 04:54:22 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Liming Gao > -----Original Message----- > From: Shi, Steven > Sent: Wednesday, August 03, 2016 5:43 PM > To: edk2-devel@lists.01.org; Gao, Liming ; Carsey, > Jaben > Cc: afish@apple.com; Kinney, Michael D ; > ard.biesheuvel@linaro.org; Shi, Steven > Subject: [PATCH v5 2/4] BaseTools-Conf:Introduce CLANG38 new toolchain > for x86 >=20 > This adds support for LLVM 3.8.x in LTO mode for IA32 and X64. > CLANG38 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. >=20 > CLANG LTO needs PIE in link flags to generate PIE code correctly, > otherwise the PIE is not really enabled. (e.g. OvmfPkgX64 will > hang in 64bits SEC at high address because of small model code > displacement overflow). >=20 > Test pass platforms: OVMF (OvmfPkgIa32.dsc, OvmfPkgX64.dsc and > OvmfPkgIa32X64.dsc). > Test compiler and linker version: LLVM 3.8, GNU ld 2.26. >=20 > Example steps to use the CLANG38 tool chain to build OVMF platform: > 1. Download and extract the llvm 3.8.0 Pre-Built Binaries from > http://www.llvm.org/releases/ (e.g. http://www.llvm.org/releases/ > 3.8.0/clang+llvm-3.8.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz and > extract it as ~/clang38). > 2. Copy LLVMgold.so from https://github.com/shijunjing/edk2/blob/ > llvm/BaseTools/Bin/LLVMgold.so to above clang lib folder (e.g. > ~/clang38/lib/LLVMgold.so) > 3. Install new version linker with plugin support (e.g. ld 2.26 in > GNU Binutils 2.26 or Ubuntu16.04) > $ cd edk2 > $ git checkout llvm > $ export CLANG38_BIN=3Dpath/to/your/clang38/ > (e.g. export CLANG38_BIN=3D~/clang38/bin/) > $ source edksetup.sh > $ make -C BaseTools/Source/C > $ build -t CLANG38 -a X64 -p OvmfPkg/OvmfPkgX64.dsc -n 5 -b DEBUG > -DDEBUG_ON_SERIAL_PORT > $ cd edk2/Build/OvmfX64/DEBUG_CLANG38/FV > $ qemu-system-x86_64.exe -bios OVMF.fd -serial file:serial.log -m 4096 > -hda fat:. >=20 > If you want, you can build and install GNU Binutils 2.26 as below steps > in Ubuntu: > Download binutils-2.26 source code from http://ftp.gnu.org/gnu/binutils/ > and extract it to ~/binutils-2.26 > $sudo apt-get install bison > $sudo apt-get install flex > Install other necessary binutils build tools if missing > $ mkdir build > $ cd build > $ ../binutils-2.26/configure --enable-gold --enable-plugins > --disable-werror --prefix=3D/usr > $ make -j 5 > $ sudo make install >=20 > If you want, you can build LLVMgold.so as below steps > Download llvm-3.8.0 source code from http://www.llvm.org/releases/ > 3.8.0/llvm-3.8.0.src.tar.xz and extract it to ~/llvm-3.8.0.src > Download clang3.8.0 source code from http://www.llvm.org/releases/ > 3.8.0/cfe-3.8.0.src.tar.xz and extract it to ~/llvm-3.8.0.src/tools/clang > Refer http://clang.llvm.org/get_started.html to Install other necessary > clang build tools if missing > $ mkdir llvm38build > $ cd llvm38build > If your GNU Binutils 2.26 is in /home/jshi19/binutils-2.26, > $ cmake ../llvm-3.8.0.src -G "Unix Makefiles" - > DCMAKE_BUILD_TYPE=3D"Release" > -DLLVM_TARGETS_TO_BUILD=3D"X86" -DCMAKE_VERBOSE_MAKEFILE=3DON > -DCMAKE_CXX_COMPILER=3D"/usr/bin/g++" - > DCMAKE_C_COMPILER=3D"/usr/bin/gcc" > -DLLVM_BINUTILS_INCDIR=3D/home/jshi19/binutils-2.26/include > $ make -j 5 LLVMgold The LLVMgold.so is in ~/llvm38build/lib/LLVMgold.so >=20 > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Steven Shi > --- > BaseTools/Conf/tools_def.template | 87 > +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 87 insertions(+) > mode change 100644 =3D> 100755 BaseTools/Conf/tools_def.template >=20 > diff --git a/BaseTools/Conf/tools_def.template > b/BaseTools/Conf/tools_def.template > old mode 100644 > new mode 100755 > index fd9eccb..6489039 > --- a/BaseTools/Conf/tools_def.template > +++ b/BaseTools/Conf/tools_def.template > @@ -381,6 +381,12 @@ DEFINE SOURCERY_CYGWIN_TOOLS =3D > /cygdrive/c/Program Files/CodeSourcery/Sourcery G > # 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 G= NU 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: > @@ -5428,6 +5434,87 @@ RELEASE_CLANG35_AARCH64_CC_FLAGS =3D > DEF(CLANG35_AARCH64_CC_FLAGS) $(ARCHCC_FLAGS) >=20 >=20 > ########################################################## > ########################## > # > +# Clang 3.8 - This configuration is used to compile under Linux to produ= ce > +# PE/COFF binaries using LLVM/Clang 3.8 with Link Time Optimization > enabled > +# > +######################################################### > ########################### > +*_CLANG38_*_*_FAMILY =3D GCC > +*_CLANG38_*_MAKE_PATH =3D make > +*_CLANG38_*_*_DLL =3D ENV(CLANG38_DLL) > +*_CLANG38_*_ASL_PATH =3D DEF(UNIX_IASL_BIN) > + > +*_CLANG38_*_APP_FLAGS =3D > +*_CLANG38_*_ASL_FLAGS =3D DEF(IASL_FLAGS) > +*_CLANG38_*_ASL_OUTFLAGS =3D DEF(IASL_OUTFLAGS) > + > +DEFINE CLANG38_IA32_PREFIX =3D ENV(CLANG38_BIN) > +DEFINE CLANG38_X64_PREFIX =3D ENV(CLANG38_BIN) > + > +DEFINE CLANG38_IA32_TARGET =3D -target i686-pc-linux-gnu > +DEFINE CLANG38_X64_TARGET =3D -target x86_64-pc-linux-gnu > + > +DEFINE CLANG38_ALL_CC_FLAGS =3D DEF(GCC44_ALL_CC_FLAGS) -Wno- > empty-body -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 -fno-asynchronous-unwind-tables -mno- > sse -mno-mmx -msoft-float -mno-implicit-float -ftrap- > function=3Dundefined_behavior_has_been_optimized_away_by_clang - > funsigned-char -fno-ms-extensions -Wno-null-dereference -Wno- > tautological-compare > + > +########################### > +# CLANG38 IA32 definitions > +########################### > +*_CLANG38_IA32_OBJCOPY_PATH =3D objcopy > +*_CLANG38_IA32_CC_PATH =3D DEF(CLANG38_IA32_PREFIX)clang > +*_CLANG38_IA32_SLINK_PATH =3D DEF(CLANG38_IA32_PREFIX)llvm-ar > +*_CLANG38_IA32_DLINK_PATH =3D DEF(CLANG38_IA32_PREFIX)clang > +*_CLANG38_IA32_ASLDLINK_PATH =3D DEF(CLANG38_IA32_PREFIX)clang > +*_CLANG38_IA32_ASM_PATH =3D DEF(CLANG38_IA32_PREFIX)clang > +*_CLANG38_IA32_PP_PATH =3D DEF(CLANG38_IA32_PREFIX)clang > +*_CLANG38_IA32_VFRPP_PATH =3D DEF(CLANG38_IA32_PREFIX)clang > +*_CLANG38_IA32_ASLCC_PATH =3D DEF(CLANG38_IA32_PREFIX)clang > +*_CLANG38_IA32_ASLPP_PATH =3D DEF(CLANG38_IA32_PREFIX)clang > +*_CLANG38_IA32_RC_PATH =3D objcopy > + > +*_CLANG38_IA32_ASLCC_FLAGS =3D DEF(GCC_ASLCC_FLAGS) -m32 -fno- > lto DEF(CLANG38_IA32_TARGET) > +*_CLANG38_IA32_ASLDLINK_FLAGS =3D > DEF(GCC5_IA32_X64_ASLDLINK_FLAGS) -Wl,-m,elf_i386 > +*_CLANG38_IA32_ASM_FLAGS =3D DEF(GCC5_ASM_FLAGS) -m32 - > march=3Di386 DEF(CLANG38_IA32_TARGET) > +DEBUG_CLANG38_IA32_CC_FLAGS =3D DEF(CLANG38_ALL_CC_FLAGS) - > m32 -Oz -flto -march=3Di586 DEF(CLANG38_IA32_TARGET) -g > +RELEASE_CLANG38_IA32_CC_FLAGS =3D DEF(CLANG38_ALL_CC_FLAGS) - > m32 -Oz -flto -march=3Di586 DEF(CLANG38_IA32_TARGET) > +*_CLANG38_IA32_DLINK_FLAGS =3D DEF(GCC5_IA32_X64_DLINK_FLAGS) > -Wl,-Oz -Wl,-melf_i386 -Wl,--oformat=3Delf32-i386 > +*_CLANG38_IA32_DLINK2_FLAGS =3D DEF(GCC5_IA32_DLINK2_FLAGS) > +*_CLANG38_IA32_RC_FLAGS =3D DEF(GCC_IA32_RC_FLAGS) > +*_CLANG38_IA32_OBJCOPY_FLAGS =3D > +*_CLANG38_IA32_NASM_FLAGS =3D -f elf32 > +*_CLANG38_IA32_PP_FLAGS =3D DEF(GCC_PP_FLAGS) > DEF(CLANG38_IA32_TARGET) > +*_CLANG38_IA32_ASLPP_FLAGS =3D DEF(GCC_ASLPP_FLAGS) > DEF(CLANG38_IA32_TARGET) > +*_CLANG38_IA32_VFRPP_FLAGS =3D DEF(GCC_VFRPP_FLAGS) > DEF(CLANG38_IA32_TARGET) > + > +########################## > +# CLANG38 X64 definitions > +########################## > +*_CLANG38_X64_OBJCOPY_PATH =3D objcopy > +*_CLANG38_X64_CC_PATH =3D DEF(CLANG38_X64_PREFIX)clang > +*_CLANG38_X64_SLINK_PATH =3D DEF(CLANG38_X64_PREFIX)llvm-ar > +*_CLANG38_X64_DLINK_PATH =3D DEF(CLANG38_X64_PREFIX)clang > +*_CLANG38_X64_ASLDLINK_PATH =3D DEF(CLANG38_X64_PREFIX)clang > +*_CLANG38_X64_ASM_PATH =3D DEF(CLANG38_X64_PREFIX)clang > +*_CLANG38_X64_PP_PATH =3D DEF(CLANG38_X64_PREFIX)clang > +*_CLANG38_X64_VFRPP_PATH =3D DEF(CLANG38_X64_PREFIX)clang > +*_CLANG38_X64_ASLCC_PATH =3D DEF(CLANG38_X64_PREFIX)clang > +*_CLANG38_X64_ASLPP_PATH =3D DEF(CLANG38_X64_PREFIX)clang > +*_CLANG38_X64_RC_PATH =3D objcopy > + > +*_CLANG38_X64_ASLCC_FLAGS =3D DEF(GCC_ASLCC_FLAGS) -m64 -fno- > lto DEF(CLANG38_X64_TARGET) > +*_CLANG38_X64_ASLDLINK_FLAGS =3D > DEF(GCC5_IA32_X64_ASLDLINK_FLAGS) -Wl,-m,elf_x86_64 > +*_CLANG38_X64_ASM_FLAGS =3D DEF(GCC5_ASM_FLAGS) -m64 > DEF(CLANG38_X64_TARGET) > +DEBUG_CLANG38_X64_CC_FLAGS =3D DEF(CLANG38_ALL_CC_FLAGS) - > m64 "-DEFIAPI=3D__attribute__((ms_abi))" -mno-red-zone -mcmodel=3Dsmall - > fpie -Oz -flto DEF(CLANG38_X64_TARGET) -g > +RELEASE_CLANG38_X64_CC_FLAGS =3D DEF(CLANG38_ALL_CC_FLAGS) - > m64 "-DEFIAPI=3D__attribute__((ms_abi))" -mno-red-zone -mcmodel=3Dsmall - > fpie -Oz -flto DEF(CLANG38_X64_TARGET) > +*_CLANG38_X64_DLINK_FLAGS =3D DEF(GCC5_IA32_X64_DLINK_FLAGS) > -Wl,-Oz -Wl,-melf_x86_64 -Wl,--oformat=3Delf64-x86-64 -Wl,-pie - > mcmodel=3Dsmall > +*_CLANG38_X64_DLINK2_FLAGS =3D DEF(GCC5_X64_DLINK2_FLAGS) > +*_CLANG38_X64_RC_FLAGS =3D DEF(GCC_X64_RC_FLAGS) > +*_CLANG38_X64_OBJCOPY_FLAGS =3D > +*_CLANG38_X64_NASM_FLAGS =3D -f elf64 > +*_CLANG38_X64_PP_FLAGS =3D DEF(GCC_PP_FLAGS) > DEF(CLANG38_X64_TARGET) > +*_CLANG38_X64_ASLPP_FLAGS =3D DEF(GCC_ASLPP_FLAGS) > DEF(CLANG38_X64_TARGET) > +*_CLANG38_X64_VFRPP_FLAGS =3D DEF(GCC_VFRPP_FLAGS) > DEF(CLANG38_X64_TARGET) > + > +######################################################### > ########################### > +# > # Cygwin GCC And Intel ACPI Compiler > # >=20 > ########################################################## > ########################## > -- > 2.7.4