From 54435b515032e027d71baafc4b0dfff46ecf663e Mon Sep 17 00:00:00 2001 From: Brooks Davis Date: Tue, 22 Oct 2019 19:07:22 +0000 Subject: [PATCH] Fix build without CLANG enabled. [0] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix LLD build where PREFIX != LOCALBASE. [1] powerpc64: add configure option to select ELFv2 ABI [2] In preparation for compiler+ABI change in PowerPC64, this change adds a configure option to select ELFv2 as default powerpc64 ABI when compiling llvm90. The new option automatically set when ELFv2 environment is detected (when PPC_ABI=ELFv2) PR: 241400 [1], 241410 [0] Submitted by: Alfredo Dal'Ava JĂșnior [2] Differential Revision: https://reviews.freebsd.org/D22100 [2] --- devel/llvm90/Makefile | 16 ++++++--- ...ch-lib_Target_PowerPC_PPCTargetMachine.cpp | 23 +++++++++++++ .../patch-tools_clang_lib_Basic_Targets_PPC.h | 34 +++++++++++++++++++ devel/llvm90/pkg-plist | 6 ++-- 4 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 devel/llvm90/files/ppc64-elfv2/patch-lib_Target_PowerPC_PPCTargetMachine.cpp create mode 100644 devel/llvm90/files/ppc64-elfv2/patch-tools_clang_lib_Basic_Targets_PPC.h diff --git a/devel/llvm90/Makefile b/devel/llvm90/Makefile index 8e9f01d2f223..77f95db33b92 100644 --- a/devel/llvm90/Makefile +++ b/devel/llvm90/Makefile @@ -2,7 +2,7 @@ PORTNAME= llvm DISTVERSION= 9.0.0 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= devel lang .if ${DISTVERSION:M*rc*} MASTER_SITES= https://prereleases.llvm.org/${LLVM_RELEASE}/${RCDIR} @@ -66,7 +66,7 @@ CMAKE_ARGS+= -DPYTHON_EXECUTABLE=${PYTHON_CMD} \ CFLAGS+= -DNDEBUG CXXFLAGS+= -DNDEBUG -OPTIONS_DEFINE= BE_AMDGPU CLANG DOCS EXTRAS LIT LLD LLD_LINK LLDB PYCLANG +OPTIONS_DEFINE= BE_AMDGPU CLANG DOCS ELFV2 EXTRAS LIT LLD LLD_LINK LLDB PYCLANG OPTIONS_DEFINE_amd64= COMPILER_RT GOLD OPENMP OPTIONS_DEFINE_i386= COMPILER_RT OPENMP OPTIONS_DEFINE_powerpc64= OPENMP @@ -106,6 +106,9 @@ DOCS_CMAKE_ON= -DLLVM_ENABLE_SPHINX=ON \ -DSPHINX_WARNINGS_AS_ERRORS=OFF \ -DLLVM_BUILD_DOCS=ON DOCS_PLIST_FILES= ${MAN1SRCS:S|^|man/man1/|:S|.1$|${LLVM_SUFFIX}.1.gz|} +ELFV2_DESC= [PowerPC64] Use OpenPOWER ELF ABI v2 by default +ELFV2_EXTRA_PATCHES= ${PATCHDIR}/ppc64-elfv2 +ELFV2_IMPLIES= CLANG EXTRAS_DESC= Extra clang tools EXTRAS_EXTRA_PATCHES= ${PATCHDIR}/extras EXTRAS_IMPLIES= CLANG @@ -217,6 +220,11 @@ EXTRAS_PATTERN= ${EXTRAS_COMMANDS:tW:C/ */|/g}|${EXTRAS_LIBS:tW:C/ */|/g} .include +# PPC_ABI variable is only defined after including bsd.port.options.mk +.if defined(PPC_ABI) && ${PPC_ABI} == ELFv2 +OPTIONS_DEFAULT_powerpc64= ELFV2 +.endif + # keep in sync with /usr/src/lib/clang/clang.build.mk # ----------- start of sync block ------------------ # Armv6 and armv7 uses hard float abi, unless the CPUTYPE has soft in it. @@ -238,7 +246,7 @@ COMMANDS+= ${CLANG_COMMANDS} MAN1SRCS+= clang.1 \ diagtool.1 \ scan-build.1 -CLANG_PATTERN= (c-index-test|clang|diagtool|hmaptool|scan-|Reporter.py|ScanView.py|scanview.css|sorttable.js|startfile.py|-analyzer) +CLANG_PATTERN= (c-index-test|clang|diagtool|hmaptool|scan-|Reporter.py|ScanView.py|scanview.css|sorttable.js|startfile.py|-analyzer|AnalyzerPlugin.so) SHEBANG_FILES+= tools/clang/tools/scan-view/bin/scan-view \ tools/clang/tools/clang-format/clang-format-diff.py \ tools/clang/tools/clang-format/git-clang-format \ @@ -536,7 +544,7 @@ post-install-LIT-on: ${STAGEDIR}${PREFIX}/bin/FileCheck${LLVM_SUFFIX} post-install-LLD_LINK-on: - ${LN} -s ld.lld ${STAGEDIR}${LOCALBASE}/llvm${LLVM_SUFFIX}/bin/ld + ${LN} -s ld.lld ${STAGEDIR}${LLVM_PREFIX}/bin/ld TEST_CMD= '(cd ${WRKSRC}/test; ${SETENV} ${MAKE_ENV} LD_LIBRARY_PATH=${WRKSRC}/Release/lib ${MAKE_CMD} check-local-lit)' do-test: diff --git a/devel/llvm90/files/ppc64-elfv2/patch-lib_Target_PowerPC_PPCTargetMachine.cpp b/devel/llvm90/files/ppc64-elfv2/patch-lib_Target_PowerPC_PPCTargetMachine.cpp new file mode 100644 index 000000000000..b0a1482581c9 --- /dev/null +++ b/devel/llvm90/files/ppc64-elfv2/patch-lib_Target_PowerPC_PPCTargetMachine.cpp @@ -0,0 +1,23 @@ +--- lib/Target/PowerPC/PPCTargetMachine.cpp.orig 2019-07-04 07:43:51 UTC ++++ lib/Target/PowerPC/PPCTargetMachine.cpp +@@ -209,6 +209,20 @@ static PPCTargetMachine::PPCABI computeTargetABI(const + if (TT.isMacOSX()) + return PPCTargetMachine::PPC_ABI_UNKNOWN; + ++ if (TT.isOSFreeBSD()) { ++ switch (TT.getArch()) { ++ case Triple::ppc64le: ++ case Triple::ppc64: ++ if (TT.getOSMajorVersion() >= 13) ++ return PPCTargetMachine::PPC_ABI_ELFv2; ++ else ++ return PPCTargetMachine::PPC_ABI_ELFv1; ++ case Triple::ppc: ++ default: ++ return PPCTargetMachine::PPC_ABI_UNKNOWN; ++ } ++ } ++ + switch (TT.getArch()) { + case Triple::ppc64le: + return PPCTargetMachine::PPC_ABI_ELFv2; diff --git a/devel/llvm90/files/ppc64-elfv2/patch-tools_clang_lib_Basic_Targets_PPC.h b/devel/llvm90/files/ppc64-elfv2/patch-tools_clang_lib_Basic_Targets_PPC.h new file mode 100644 index 000000000000..5b6460a0afba --- /dev/null +++ b/devel/llvm90/files/ppc64-elfv2/patch-tools_clang_lib_Basic_Targets_PPC.h @@ -0,0 +1,34 @@ +--- tools/clang/lib/Basic/Targets/PPC.h.orig 2019-07-09 13:32:26 UTC ++++ tools/clang/lib/Basic/Targets/PPC.h +@@ -374,12 +374,29 @@ class LLVM_LIBRARY_VISIBILITY PPC64TargetInfo : public + IntMaxType = SignedLong; + Int64Type = SignedLong; + ++ if (Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) { ++ switch (Triple.getEnvironment()){ ++ case llvm::Triple::ELFv1: ++ ABI = "elfv1"; ++ break; ++ default: ++ ABI = "elfv2"; ++ break; ++ } ++ } else { ++ if ((Triple.getOS() == llvm::Triple::FreeBSD) && ++ (Triple.getOSMajorVersion() < 13)) { ++ ABI = "elfv1"; ++ } else { ++ ABI = "elfv2"; ++ } ++ } ++ ++ + if ((Triple.getArch() == llvm::Triple::ppc64le)) { + resetDataLayout("e-m:e-i64:64-n32:64"); +- ABI = "elfv2"; + } else { + resetDataLayout("E-m:e-i64:64-n32:64"); +- ABI = Triple.getEnvironment() == llvm::Triple::ELFv2 ? "elfv2" : "elfv1"; + } + + if (Triple.getOS() == llvm::Triple::AIX) diff --git a/devel/llvm90/pkg-plist b/devel/llvm90/pkg-plist index 92a707982f22..2c67fd0d0e56 100644 --- a/devel/llvm90/pkg-plist +++ b/devel/llvm90/pkg-plist @@ -2729,10 +2729,10 @@ llvm%%LLVM_SUFFIX%%/include/llvm/XRay/YAMLXRayRecord.h %%COMPILER_RT%%llvm%%LLVM_SUFFIX%%/include/xray/xray_interface.h %%COMPILER_RT%%llvm%%LLVM_SUFFIX%%/include/xray/xray_log_interface.h %%COMPILER_RT%%llvm%%LLVM_SUFFIX%%/include/xray/xray_records.h -llvm%%LLVM_SUFFIX%%/lib/CheckerDependencyHandlingAnalyzerPlugin.so -llvm%%LLVM_SUFFIX%%/lib/CheckerOptionHandlingAnalyzerPlugin.so +%%CLANG%%llvm%%LLVM_SUFFIX%%/lib/CheckerDependencyHandlingAnalyzerPlugin.so +%%CLANG%%llvm%%LLVM_SUFFIX%%/lib/CheckerOptionHandlingAnalyzerPlugin.so %%GOLD%%llvm%%LLVM_SUFFIX%%/lib/LLVMgold.so -llvm%%LLVM_SUFFIX%%/lib/SampleAnalyzerPlugin.so +%%CLANG%%llvm%%LLVM_SUFFIX%%/lib/SampleAnalyzerPlugin.so %%CLANG%%llvm%%LLVM_SUFFIX%%/lib/clang/%%LLVM_RELEASE%%/include/__clang_cuda_builtin_vars.h %%CLANG%%llvm%%LLVM_SUFFIX%%/lib/clang/%%LLVM_RELEASE%%/include/__clang_cuda_cmath.h %%CLANG%%%%OPENMP%%llvm%%LLVM_SUFFIX%%/lib/clang/%%LLVM_RELEASE%%/include/__clang_cuda_complex_builtins.h