summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Gao <jmgao@google.com>2016-06-10 18:30:33 +0000
committerJosh Gao <jmgao@google.com>2016-06-10 18:30:33 +0000
commit4e9cef0491ce508904137eb857df9523f5647ff5 (patch)
treead600c85a5b091524e7f0e20d32985ca536d84e2
parentb2b0da4ad08da9a48940c4f5398c5603d78282b7 (diff)
downloadbcm5719-llvm-4e9cef0491ce508904137eb857df9523f5647ff5.tar.gz
bcm5719-llvm-4e9cef0491ce508904137eb857df9523f5647ff5.zip
Strip Android version when looking up toolchain paths.
Summary: Android target triples can include a version number in the abi field (e.g. 'aarch64-linux-android21'), used for checking for availability. However, the driver was searching for toolchain binaries using the passed in triple as a prefix. Reviewers: srhines, danalbert, t.p.northover Subscribers: t.p.northover, aemerson, tberghammer, danalbert, srhines, cfe-commits Differential Revision: http://reviews.llvm.org/D21163 llvm-svn: 272413
-rw-r--r--clang/lib/Driver/Driver.cpp10
-rwxr-xr-xclang/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld0
-rwxr-xr-xclang/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld.exe0
-rw-r--r--clang/test/Driver/android-triple-version.c10
4 files changed, 19 insertions, 1 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index f7e15309ac3..7db9e112a15 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -2343,7 +2343,15 @@ void Driver::generatePrefixedToolNames(
const char *Tool, const ToolChain &TC,
SmallVectorImpl<std::string> &Names) const {
// FIXME: Needs a better variable than DefaultTargetTriple
- Names.emplace_back(DefaultTargetTriple + "-" + Tool);
+ StringRef Triple = DefaultTargetTriple;
+
+ // On Android, the target triple can include a version number that needs to
+ // be stripped.
+ if (TC.getTriple().isAndroid()) {
+ Triple = Triple.rtrim("0123456789");
+ }
+
+ Names.emplace_back((Triple + "-" + Tool).str());
Names.emplace_back(Tool);
// Allow the discovery of tools prefixed with LLVM's default target triple.
diff --git a/clang/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld b/clang/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld
new file mode 100755
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld
diff --git a/clang/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld.exe b/clang/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld.exe
new file mode 100755
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld.exe
diff --git a/clang/test/Driver/android-triple-version.c b/clang/test/Driver/android-triple-version.c
new file mode 100644
index 00000000000..093f71f88bd
--- /dev/null
+++ b/clang/test/Driver/android-triple-version.c
@@ -0,0 +1,10 @@
+// Android's target triples can contain a version number in the environment
+// field (e.g. arm-linux-androideabi9).
+// Make sure that any version is stripped when finding toolchain binaries.
+
+// RUN: env "PATH=%S/Inputs/android_triple_version/bin" \
+// RUN: %clang -### -target arm-linux-androideabi %s 2>&1 | FileCheck %s
+// RUN: env "PATH=%S/Inputs/android_triple_version/bin" \
+// RUN: %clang -### -target arm-linux-androideabi9 %s 2>&1 | FileCheck %s
+
+// CHECK: arm-linux-androideabi-ld
OpenPOWER on IntegriCloud