brianpl created this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
brianpl added a reviewer: jyknight.
brianpl updated this revision to Diff 235182.
brianpl added a comment.

Fix a typo.


Currently, tool discovery checks for a tool with its target triple as a
prefix. Unfortunately, the triple it uses is canonicalized, and may
contain the Android platform numbers as a suffix. This prevents matching
of the binaries in the LLVM bin directory of the Android NDK.

This CL adds checks during discovery that will match the canonical
Android NDK triples. The matcher will work with vendor "unknown", and at
any level platform.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D71848

Files:
  clang/lib/Driver/Driver.cpp
  clang/test/Driver/android-triple-version.c

Index: clang/test/Driver/android-triple-version.c
===================================================================
--- /dev/null
+++ clang/test/Driver/android-triple-version.c
@@ -0,0 +1,141 @@
+// 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.
+
+// Ensure no execute permissions on .../bin/{target-triple}/ld.
+// RUN: chmod -x %S/Inputs/basic_android_ndk_tree/arm-linux-androideabi/bin/ld
+// RUN: chmod -x %S/Inputs/basic_android_ndk_tree/aarch64-linux-android/bin/ld
+// RUN: chmod -x %S/Inputs/basic_android_ndk_tree/i686-linux-android/bin/ld
+// RUN: chmod -x %S/Inputs/basic_android_ndk_tree/mipsel-linux-android/bin/ld
+
+// Ensure execute permissions on .../bin/{target-triple}-ld
+// RUN: chmod +x  %S/Inputs/basic_android_ndk_tree/bin/arm-linux-androideabi-ld
+// RUN: chmod +x  %S/Inputs/basic_android_ndk_tree/bin/aarch64-linux-android-ld
+// RUN: chmod +x %S/Inputs/basic_android_ndk_tree/bin/i686-linux-android-ld
+// RUN: chmod +x %S/Inputs/basic_android_ndk_tree/bin/mipsel-linux-android-ld
+
+// Test target arm-linux-androideabi
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target arm-linux-androideabi %s |& \
+// RUN: grep arm-linux-androideabi-ld
+
+// Test target arm-unknown-linux-androideabi
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target arm-unknown-linux-androideabi %s |& \
+// RUN: grep arm-linux-androideabi-ld
+
+// Test target arm-linux-androideabi14
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target arm-linux-androideabi14 %s |& \
+// RUN: grep arm-linux-androideabi-ld
+
+// Test target arm-linux-androideabi29
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target arm-linux-androideabi29 %s |& \
+// RUN: grep arm-linux-androideabi-ld
+
+// Test target arm-unknown-linux-androideabi14
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target arm-unknown-linux-androideabi14 %s |& \
+// RUN: grep arm-linux-androideabi-ld
+
+// Test target arm-unknown-linux-androideabi29
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target arm-unknown-linux-androideabi29 %s |& \
+// RUN: grep arm-linux-androideabi-ld
+
+// Test target aarch64-linux-android
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target aarch64-linux-android %s |& \
+// RUN: grep aarch64-linux-android-ld
+
+// Test target aarch64-unknown-linux-android
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target aarch64-unknown-linux-android %s |& \
+// RUN: grep aarch64-linux-android-ld
+
+// Test target aarch64-linux-android14
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target aarch64-linux-android14 %s |& \
+// RUN: grep aarch64-linux-android-ld
+
+// Test target aarch64-linux-android29
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target aarch64-linux-android29 %s |& \
+// RUN: grep aarch64-linux-android-ld
+
+// Test target aarch64-unknown-linux-android14
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target aarch64-unknown-linux-android14 %s |& \
+// RUN: grep aarch64-linux-android-ld
+
+// Test target aarch64-unknown-linux-android29
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target aarch64-unknown-linux-android29 %s |& \
+// RUN: grep aarch64-linux-android-ld
+
+// Test target i686-linux-android
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target i686-linux-android %s |& \
+// RUN: grep i686-linux-android-ld
+
+// Test target i686-unknown-linux-android
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target i686-unknown-linux-android %s |& \
+// RUN: grep i686-linux-android-ld
+
+// Test target i686-linux-android14
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target i686-linux-android14 %s |& \
+// RUN: grep i686-linux-android-ld
+
+// Test target i686-linux-android29
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target i686-linux-android29 %s |& \
+// RUN: grep i686-linux-android-ld
+
+// Test target i686-unknown-linux-android14
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target i686-unknown-linux-android14 %s |& \
+// RUN: grep i686-linux-android-ld
+
+// Test target i686-unknown-linux-android29
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target i686-unknown-linux-android29 %s |& \
+// RUN: grep i686-linux-android-ld
+
+// Test target mipsel-linux-android
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target mipsel-linux-android %s |& \
+// RUN: grep mipsel-linux-android-ld
+
+// Test target mipsel-unknown-linux-android
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target mipsel-unknown-linux-android %s |& \
+// RUN: grep mipsel-linux-android-ld
+
+// Test target mipsel-linux-android14
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target mipsel-linux-android14 %s |& \
+// RUN: grep mipsel-linux-android-ld
+
+// Test target mipsel-linux-android29
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target mipsel-linux-android29 %s |& \
+// RUN: grep mipsel-linux-android-ld
+
+// Test target mipsel-unknown-linux-android14
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target mipsel-unknown-linux-android14 %s |& \
+// RUN: grep mipsel-linux-android-ld
+
+// Test target mipsel-unknown-linux-android29
+// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \
+// RUN:     %clang -### -target mipsel-unknown-linux-android29 %s |& \
+// RUN: grep mipsel-linux-android-ld
+
+// Ensure no execute permissions on .../bin/{target-triple}-ld
+// RUN: chmod -x %S/Inputs/basic_android_ndk_tree/bin/arm-linux-androideabi-ld
+// RUN: chmod -x %S/Inputs/basic_android_ndk_tree/bin/aarch64-linux-android-ld
+// RUN: chmod -x %S/Inputs/basic_android_ndk_tree/bin/i686-linux-android-ld
+// RUN: chmod -x %S/Inputs/basic_android_ndk_tree/bin/mipsel-linux-android-ld
Index: clang/lib/Driver/Driver.cpp
===================================================================
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -4690,6 +4690,24 @@
   std::string DefaultTargetTriple = llvm::sys::getDefaultTargetTriple();
   if (DefaultTargetTriple != TargetTriple)
     Names.emplace_back((DefaultTargetTriple + "-" + Tool).str());
+
+  // Allow discovery of the Android NDK toolchain triples.
+  llvm::Triple ToolchainTriple = TC.getTriple();
+  if (ToolchainTriple.isAndroid()) {
+    std::string ArchName = ToolchainTriple.getArchName();
+    std::string VendorName = ToolchainTriple.getVendorName();
+    std::string OSName = ToolchainTriple.getOSName();
+    std::string ToolName = Tool;
+    if (ArchName == "arm" && VendorName == "unknown") {
+      Names.emplace_back("arm-" + OSName + "-android-" + ToolName);
+      Names.emplace_back("arm-" + OSName + "-androideabi-" + ToolName);
+    } else if (VendorName == "unknown") {
+      Names.emplace_back(ArchName + "-" + OSName + "-android-" + ToolName);
+    } else {
+      Names.emplace_back(ArchName + "-" + VendorName + "-" + OSName +
+                         "-android-" + ToolName);
+    }
+  }
 }
 
 static bool ScanDirForExecutable(SmallString<128> &Dir,
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to