From f659d764c8e470c331dc98c598baaa49eec526d5 Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Fri, 10 Jun 2016 18:30:33 +0000 Subject: [PATCH] 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 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272413 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/Driver.cpp | 10 +++++++++- .../bin/arm-linux-androideabi-ld | 0 .../bin/arm-linux-androideabi-ld.exe | 0 test/Driver/android-triple-version.c | 10 ++++++++++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100755 test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld create mode 100755 test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld.exe create mode 100644 test/Driver/android-triple-version.c diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index f7e15309ac..7db9e112a1 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -2343,7 +2343,15 @@ void Driver::generatePrefixedToolNames( const char *Tool, const ToolChain &TC, SmallVectorImpl &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/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld b/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld new file mode 100755 index 0000000000..e69de29bb2 diff --git a/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld.exe b/test/Driver/Inputs/android_triple_version/bin/arm-linux-androideabi-ld.exe new file mode 100755 index 0000000000..e69de29bb2 diff --git a/test/Driver/android-triple-version.c b/test/Driver/android-triple-version.c new file mode 100644 index 0000000000..093f71f88b --- /dev/null +++ b/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 -- 2.40.0