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