[PATCH] D71848: Allow the discovery of Android NDK's triple-prefixed binaries.
brianpl updated this revision to Diff 237691. brianpl added a comment. - Search for tools prefixed with GNU target triples. - Merge branch 'master' of https://github.com/llvm/llvm-project Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D71848/new/ https://reviews.llvm.org/D71848 Files: clang/include/clang/Driver/ToolChain.h clang/lib/Driver/Driver.cpp clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Linux.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,172 @@ +// 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 + +// Link clang into the mock NDK. +// RUN: rm -f %S/Inputs/basic_android_ndk_tree/bin/clang +// RUN: ln -s %clang %S/Inputs/basic_android_ndk_tree/bin/clang + +// Test target arm-linux-androideabi +// RUN: env "PATH=%S/Inputs/basic_android_ndk_tree/bin" \ +// RUN: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -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: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -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: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -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: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -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: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -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: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -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: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -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: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -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: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -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: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -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: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -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: %S/Inputs/basic_android_ndk_tree/bin/clang \ +// RUN: -### -target aarch64-unknown-linux-android29 %s |& \ +// RUN: grep aarch64-linux-android-ld +
[PATCH] D71848: Allow the discovery of Android NDK's triple-prefixed binaries.
brianpl added a comment. > Just to clarify, this is needed for the triple-prefixed tools, but the > triple-specific directory worked fine before this patch? If I'm understanding > that correctly then LGTM, otherwise I'm confused as to why I haven't seen > this problem before. Yes, that's right. Without the patch, Clang will overlook the triple-prefixed tools, but it will correctly find tools in the triple-specific directory either way. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D71848/new/ https://reviews.llvm.org/D71848 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D71848: Allow the discovery of Android NDK's triple-prefixed binaries.
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
[PATCH] D71848: Allow the discovery of Android NDK's triple-prefixed binaries.
brianpl updated this revision to Diff 235182. brianpl added a comment. Fix a typo. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D71848/new/ 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