summaryrefslogtreecommitdiffstats
path: root/build/build-clang/D146664.patch
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /build/build-clang/D146664.patch
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'build/build-clang/D146664.patch')
-rw-r--r--build/build-clang/D146664.patch99
1 files changed, 99 insertions, 0 deletions
diff --git a/build/build-clang/D146664.patch b/build/build-clang/D146664.patch
new file mode 100644
index 0000000000..9813c6c86e
--- /dev/null
+++ b/build/build-clang/D146664.patch
@@ -0,0 +1,99 @@
+From b57ff6da9c8b281ae9312e245fd3372e7ffaff28 Mon Sep 17 00:00:00 2001
+From: Mike Hommey <mh@glandium.org>
+Date: Thu, 23 Mar 2023 06:52:28 +0900
+Subject: [PATCH] Apply the same fallbacks as runtimes search for stdlib search
+
+When building clang with e.g. LLVM_ENABLE_RUNTIMES=libcxx;libunwind,
+those runtimes end up in the stdlib search directory, and when
+LLVM_ENABLE_PER_TARGET_RUNTIME_DIR is set, that ends up in a
+target-specific subdirectory. The stdlib search does handle the
+situation, but when the target in question is Android, the same issues
+as those that required fallbacks for runtimes search apply.
+
+Traditionally, those libraries are shipped as part of the Android NDK,
+but when one builds their own clang for Android, they may want to use
+the runtimes from the same version rather than the ones from the NDK.
+
+Differential Revision: https://reviews.llvm.org/D146664
+---
+ clang/lib/Driver/ToolChain.cpp | 42 +++++++++++++++++++---------------
+ 1 file changed, 24 insertions(+), 18 deletions(-)
+
+diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
+index 2dba975a5a8f..9052099cad5e 100644
+--- a/clang/lib/Driver/ToolChain.cpp
++++ b/clang/lib/Driver/ToolChain.cpp
+@@ -569,15 +569,9 @@ const char *ToolChain::getCompilerRTArgString(const llvm::opt::ArgList &Args,
+ return Args.MakeArgString(getCompilerRT(Args, Component, Type));
+ }
+
+-ToolChain::path_list ToolChain::getRuntimePaths() const {
+- path_list Paths;
+- auto addPathForTriple = [this, &Paths](const llvm::Triple &Triple) {
+- SmallString<128> P(D.ResourceDir);
+- llvm::sys::path::append(P, "lib", Triple.str());
+- Paths.push_back(std::string(P.str()));
+- };
+-
+- addPathForTriple(getTriple());
++template <typename F>
++static void fillPaths(const ToolChain &TC, F addPathForTriple) {
++ addPathForTriple(TC.getTriple());
+
+ // When building with per target runtime directories, various ways of naming
+ // the Arm architecture may have been normalised to simply "arm".
+@@ -594,30 +588,42 @@ ToolChain::path_list ToolChain::getRuntimePaths() const {
+ //
+ // M profile Arm is bare metal and we know they will not be using the per
+ // target runtime directory layout.
+- if (getTriple().getArch() == Triple::arm && !getTriple().isArmMClass()) {
+- llvm::Triple ArmTriple = getTriple();
++ if (TC.getTriple().getArch() == Triple::arm &&
++ !TC.getTriple().isArmMClass()) {
++ llvm::Triple ArmTriple = TC.getTriple();
+ ArmTriple.setArch(Triple::arm);
+ addPathForTriple(ArmTriple);
+ }
+
+ // Android targets may include an API level at the end. We still want to fall
+ // back on a path without the API level.
+- if (getTriple().isAndroid() &&
+- getTriple().getEnvironmentName() != "android") {
+- llvm::Triple TripleWithoutLevel = getTriple();
++ if (TC.getTriple().isAndroid() &&
++ TC.getTriple().getEnvironmentName() != "android") {
++ llvm::Triple TripleWithoutLevel = TC.getTriple();
+ TripleWithoutLevel.setEnvironmentName("android");
+ addPathForTriple(TripleWithoutLevel);
+ }
++}
+
++ToolChain::path_list ToolChain::getRuntimePaths() const {
++ path_list Paths;
++ auto addPathForTriple = [this, &Paths](const llvm::Triple &Triple) {
++ SmallString<128> P(D.ResourceDir);
++ llvm::sys::path::append(P, "lib", Triple.str());
++ Paths.push_back(std::string(P.str()));
++ };
++ fillPaths(*this, addPathForTriple);
+ return Paths;
+ }
+
+ ToolChain::path_list ToolChain::getStdlibPaths() const {
+ path_list Paths;
+- SmallString<128> P(D.Dir);
+- llvm::sys::path::append(P, "..", "lib", getTripleString());
+- Paths.push_back(std::string(P.str()));
+-
++ auto addPathForTriple = [this, &Paths](const llvm::Triple &Triple) {
++ SmallString<128> P(D.Dir);
++ llvm::sys::path::append(P, "..", "lib", Triple.str());
++ Paths.push_back(std::string(P.str()));
++ };
++ fillPaths(*this, addPathForTriple);
+ return Paths;
+ }
+
+--
+2.39.0.1.g6739ec1790
+