From d3f8fea119d0c40be25b355b30ed988d648608a5 Mon Sep 17 00:00:00 2001 From: Butta Date: Sat, 28 Mar 2020 21:23:46 +0530 Subject: [PATCH] libllvm: set default sysroot to TERMUX_PREFIX The previous approach appended TERMUX_PREFIX to the empty default sysroot, which would render those paths useless if the --sysroot command-line flag was ever set. With this approach, clang reuses much more of the existing sysroot logic and makes it more likely that a passed-in sysroot will work. Also, remove the rpath for alternate architectures, as it wasn't working. --- packages/libllvm/build.sh | 4 +- ...lang-lib-Driver-ToolChains-Linux.cpp.patch | 90 +++++-------------- 2 files changed, 24 insertions(+), 70 deletions(-) diff --git a/packages/libllvm/build.sh b/packages/libllvm/build.sh index ea457da25..7c3ddaadf 100644 --- a/packages/libllvm/build.sh +++ b/packages/libllvm/build.sh @@ -2,7 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://clang.llvm.org/ TERMUX_PKG_DESCRIPTION="Modular compiler and toolchain technologies library" TERMUX_PKG_LICENSE="NCSA" TERMUX_PKG_VERSION=9.0.1 -TERMUX_PKG_REVISION=3 +TERMUX_PKG_REVISION=4 TERMUX_PKG_SHA256=(00a1ee1f389f81e9979f3a640a01c431b3021de0d42278f6508391a2f0b81c9a 5778512b2e065c204010f88777d44b95250671103e434f9dc7363ab2e3804253 86262bad3e2fd784ba8c5e2158d7aa36f12b85f2515e95bc81d65d75bb9b0c82 @@ -37,7 +37,7 @@ TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" -DCLANG_DEFAULT_CXX_STDLIB=libc++ -DCLANG_INCLUDE_TESTS=OFF -DCLANG_TOOL_C_INDEX_TEST_BUILD=OFF --DC_INCLUDE_DIRS=$TERMUX_PREFIX/include +-DDEFAULT_SYSROOT=$(dirname $TERMUX_PREFIX) -DLLVM_LINK_LLVM_DYLIB=ON -DLLVM_TABLEGEN=$TERMUX_PKG_HOSTBUILD_DIR/bin/llvm-tblgen -DCLANG_TABLEGEN=$TERMUX_PKG_HOSTBUILD_DIR/bin/clang-tblgen diff --git a/packages/libllvm/tools-clang-lib-Driver-ToolChains-Linux.cpp.patch b/packages/libllvm/tools-clang-lib-Driver-ToolChains-Linux.cpp.patch index cf3755096..f33495e6c 100644 --- a/packages/libllvm/tools-clang-lib-Driver-ToolChains-Linux.cpp.patch +++ b/packages/libllvm/tools-clang-lib-Driver-ToolChains-Linux.cpp.patch @@ -1,74 +1,28 @@ --- tools/clang/lib/Driver/ToolChains/Linux.cpp.orig 2019-12-21 22:30:03.676720096 +0000 +++ ./tools/clang/lib/Driver/ToolChains/Linux.cpp 2019-12-21 22:34:42.941719383 +0000 -@@ -316,6 +316,41 @@ +@@ -403,7 +403,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + if (Triple.getVendor() == llvm::Triple::OpenEmbedded && + Triple.isArch64Bit()) + addPathIfExists(D, SysRoot + "/usr/" + OSLibDir, Paths); +- else ++ else if (!IsAndroid) + addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths); + if (IsRISCV) { + StringRef ABIName = tools::riscv::getRISCVABI(Args, Triple); +@@ -451,7 +451,15 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + addPathIfExists(D, D.Dir + "/../lib", Paths); - const std::string OSLibDir = getOSLibDir(Triple, Args); - const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot); -+ bool NativeBuild = true; + addPathIfExists(D, SysRoot + "/lib", Paths); +- addPathIfExists(D, SysRoot + "/usr/lib", Paths); ++ bool nativeBuild = MultiarchTriple == llvm::sys::getDefaultTargetTriple(); ++ if (nativeBuild || !IsAndroid) ++ addPathIfExists(D, SysRoot + "/usr/lib", Paths); + -+ if(IsAndroid) { -+ if (MultiarchTriple == llvm::sys::getDefaultTargetTriple()) -+ addPathIfExists(D, SysRoot + "@TERMUX_PREFIX@/lib", Paths); -+ else -+ NativeBuild = false; -+ -+ if (Arch == llvm::Triple::aarch64) { -+ addPathIfExists(D, SysRoot + "@TERMUX_PREFIX@/aarch64-linux-android/lib", Paths); -+ addPathIfExists(D, SysRoot + "/system/lib64", Paths); -+ if (!NativeBuild) -+ ExtraOpts.push_back("-rpath=@TERMUX_PREFIX@/aarch64-linux-android/lib"); -+ } -+ else if (Arch == llvm::Triple::arm || Arch == llvm::Triple::thumb) { -+ addPathIfExists(D, SysRoot + "@TERMUX_PREFIX@/arm-linux-androideabi/lib", Paths); -+ addPathIfExists(D, SysRoot + "/system/lib", Paths); -+ if (!NativeBuild) -+ ExtraOpts.push_back("-rpath=@TERMUX_PREFIX@/arm-linux-androideabi/lib"); -+ } -+ else if (Arch == llvm::Triple::x86_64) { -+ addPathIfExists(D, SysRoot + "@TERMUX_PREFIX@/x86_64-linux-android/lib", Paths); -+ addPathIfExists(D, SysRoot + "/system/lib64", Paths); -+ if (!NativeBuild) -+ ExtraOpts.push_back("-rpath=@TERMUX_PREFIX@/x86_64-linux-android/lib"); -+ } -+ else if (Arch == llvm::Triple::x86) { -+ addPathIfExists(D, SysRoot + "@TERMUX_PREFIX@/i686-linux-android/lib", Paths); -+ addPathIfExists(D, SysRoot + "/system/lib", Paths); -+ if (!NativeBuild) -+ ExtraOpts.push_back("-rpath=@TERMUX_PREFIX@/i686-linux-android/lib"); -+ } -+ -+ ExtraOpts.push_back("-rpath=@TERMUX_PREFIX@/lib"); ++ if (IsAndroid) { ++ addPathIfExists(D, SysRoot + "/usr/" + MultiarchTriple + "/lib", Paths); ++ addPathIfExists(D, "/system/" + OSLibDir, Paths); ++ ExtraOpts.push_back("-rpath=" + SysRoot + "/usr/lib"); + } + } - // Add the multilib suffixed paths where they are available. - if (GCCInstallation.isValid()) { -@@ -656,8 +691,27 @@ - return; - - if (!DriverArgs.hasArg(options::OPT_nostdlibinc)) -- addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/local/include"); -- -+ if (getTriple().isAndroid()) { -+ switch (getTriple().getArch()) { -+ case llvm::Triple::x86_64: -+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "@TERMUX_PREFIX@/include/x86_64-linux-android"); -+ break; -+ case llvm::Triple::x86: -+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "@TERMUX_PREFIX@/include/i686-linux-android"); -+ break; -+ case llvm::Triple::aarch64: -+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "@TERMUX_PREFIX@/include/aarch64-linux-android"); -+ break; -+ case llvm::Triple::arm: -+ case llvm::Triple::thumb: -+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "@TERMUX_PREFIX@/include/arm-linux-androideabi"); -+ break; -+ default: -+ break; -+ } -+ -+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include"); -+ } - SmallString<128> ResourceDirInclude(D.ResourceDir); - llvm::sys::path::append(ResourceDirInclude, "include"); - if (!DriverArgs.hasArg(options::OPT_nobuiltininc) && + ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const {