summaryrefslogtreecommitdiffstats
path: root/build/build-clang/D146664_clang_15.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_clang_15.patch
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'build/build-clang/D146664_clang_15.patch')
-rw-r--r--build/build-clang/D146664_clang_15.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/build/build-clang/D146664_clang_15.patch b/build/build-clang/D146664_clang_15.patch
new file mode 100644
index 0000000000..e8b000ca39
--- /dev/null
+++ b/build/build-clang/D146664_clang_15.patch
@@ -0,0 +1,75 @@
+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.
+
+diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
+index 7a4319ea680f..afbc7de8befd 100644
+--- a/clang/lib/Driver/ToolChain.cpp
++++ b/clang/lib/Driver/ToolChain.cpp
+@@ -535,34 +535,39 @@ 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());
+
+ // 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;
+ }
+