[PATCH] Improve x86 android support, add x86_64 android target

David Majnemer david.majnemer at gmail.com
Wed Dec 4 02:23:51 PST 2013


On Wed, Dec 4, 2013 at 2:15 AM, Alexey Volkov <avolkov.intel at gmail.com>wrote:

> Hi all,
>
> This patch improving x86 android target support.
> Look for x86_64-android-linux under <sysroot>/lib/gcc.
> i386-linux-android is renamed to i686-linux-android to align with Android
> project.
> Use /system/bin/linker64 as dynamic linker on x86_64.
>
> Alexey Volkov
> Intel Corporation
>
> http://llvm-reviews.chandlerc.com/D2325
>
> Files:
>   lib/Driver/ToolChains.cpp
>   lib/Driver/Tools.cpp
>   test/Driver/clang-translation.c
>   test/Driver/linux-ld.c
>
> Index: lib/Driver/ToolChains.cpp
> ===================================================================
> --- lib/Driver/ToolChains.cpp
> +++ lib/Driver/ToolChains.cpp
> @@ -1118,14 +1118,15 @@
>    static const char *const X86_64Triples[] = {
>      "x86_64-linux-gnu", "x86_64-unknown-linux-gnu", "x86_64-pc-linux-gnu",
>      "x86_64-redhat-linux6E", "x86_64-redhat-linux", "x86_64-suse-linux",
> -    "x86_64-manbo-linux-gnu", "x86_64-linux-gnu", "x86_64-slackware-linux"
> +    "x86_64-manbo-linux-gnu", "x86_64-linux-gnu",
> "x86_64-slackware-linux",
> +    "x86_64-linux-android"
>    };
>    static const char *const X86LibDirs[] = { "/lib32", "/lib" };
>    static const char *const X86Triples[] = {
>      "i686-linux-gnu", "i686-pc-linux-gnu", "i486-linux-gnu",
> "i386-linux-gnu",
>      "i386-redhat-linux6E", "i686-redhat-linux", "i586-redhat-linux",
>      "i386-redhat-linux", "i586-suse-linux", "i486-slackware-linux",
> -    "i686-montavista-linux"
> +    "i686-montavista-linux", "i686-linux-android"
>    };
>
>    static const char *const MIPSLibDirs[] = { "/lib" };
> Index: lib/Driver/Tools.cpp
> ===================================================================
> --- lib/Driver/Tools.cpp
> +++ lib/Driver/Tools.cpp
> @@ -6278,9 +6278,12 @@
>
>  static StringRef getLinuxDynamicLinker(const ArgList &Args,
>                                         const toolchains::Linux
> &ToolChain) {
> -  if (ToolChain.getTriple().getEnvironment() == llvm::Triple::Android)
> -    return "/system/bin/linker";
> -  else if (ToolChain.getArch() == llvm::Triple::x86)
> +  if (ToolChain.getTriple().getEnvironment() == llvm::Triple::Android) {
> +    if (ToolChain.getArch() == llvm::Triple::x86_64)
> +      return "/system/bin/linker64";
>

Does Android have a 64-bit MIPS or AArch64 target?  Would this patch do the
right thing for those targets or would you need to change this condition to
checking the width of a pointer?


> +    else
> +      return "/system/bin/linker";
> +  } else if (ToolChain.getArch() == llvm::Triple::x86)
>      return "/lib/ld-linux.so.2";
>    else if (ToolChain.getArch() == llvm::Triple::aarch64)
>      return "/lib/ld-linux-aarch64.so.1";
> Index: test/Driver/clang-translation.c
> ===================================================================
> --- test/Driver/clang-translation.c
> +++ test/Driver/clang-translation.c
> @@ -206,8 +206,14 @@
>  // AMD64-MINGW: "amd64--mingw32"
>  // AMD64-MINGW: "-munwind-tables"
>
> -// RUN: %clang -target i386-linux-android -### -S %s 2>&1 \
> +// RUN: %clang -target i686-linux-android -### -S %s 2>&1 \
>  // RUN:        --sysroot=%S/Inputs/basic_android_tree/sysroot \
>  // RUN:   | FileCheck --check-prefix=ANDROID-X86 %s
>  // ANDROID-X86: clang
>  // ANDROID-X86: "-target-cpu" "core2"
> +
> +// RUN: %clang -target x86_64-linux-android -### -S %s 2>&1 \
> +// RUN:        --sysroot=%S/Inputs/basic_android_tree/sysroot \
> +// RUN:   | FileCheck --check-prefix=ANDROID-X86_64 %s
> +// ANDROID-X86_64: clang
> +// ANDROID-X86_64: "-target-cpu" "core2"
> Index: test/Driver/linux-ld.c
> ===================================================================
> --- test/Driver/linux-ld.c
> +++ test/Driver/linux-ld.c
> @@ -516,7 +516,11 @@
>  // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
>  // RUN:   | FileCheck --check-prefix=CHECK-ANDROID %s
>  // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
> -// RUN:     --target=i386-linux-android \
> +// RUN:     --target=i686-linux-android \
> +// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
> +// RUN:   | FileCheck --check-prefix=CHECK-ANDROID %s
> +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
> +// RUN:     --target=x86_64-linux-android \
>  // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
>  // RUN:   | FileCheck --check-prefix=CHECK-ANDROID %s
>  // CHECK-ANDROID: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]"
> @@ -543,7 +547,12 @@
>  // RUN:     -shared \
>  // RUN:   | FileCheck --check-prefix=CHECK-ANDROID-SO %s
>  // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
> -// RUN:     --target=i386-linux-android \
> +// RUN:     --target=i686-linux-android \
> +// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
> +// RUN:     -shared \
> +// RUN:   | FileCheck --check-prefix=CHECK-ANDROID-SO %s
> +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
> +// RUN:     --target=x86_64-linux-android \
>  // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
>  // RUN:     -shared \
>  // RUN:   | FileCheck --check-prefix=CHECK-ANDROID-SO %s
> @@ -572,7 +581,12 @@
>  // RUN:     -static \
>  // RUN:   | FileCheck --check-prefix=CHECK-ANDROID-STATIC %s
>  // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
> -// RUN:     --target=i386-linux-android \
> +// RUN:     --target=i686-linux-android \
> +// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
> +// RUN:     -static \
> +// RUN:   | FileCheck --check-prefix=CHECK-ANDROID-STATIC %s
> +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
> +// RUN:     --target=x86-linux-android \
>  // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
>  // RUN:     -static \
>  // RUN:   | FileCheck --check-prefix=CHECK-ANDROID-STATIC %s
> @@ -600,7 +614,12 @@
>  // RUN:     -pie \
>  // RUN:   | FileCheck --check-prefix=CHECK-ANDROID-PIE %s
>  // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
> -// RUN:     --target=i386-linux-android \
> +// RUN:     --target=i686-linux-android \
> +// RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
> +// RUN:     -pie \
> +// RUN:   | FileCheck --check-prefix=CHECK-ANDROID-PIE %s
> +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
> +// RUN:     --target=x86_64-linux-android \
>  // RUN:     --sysroot=%S/Inputs/basic_android_tree/sysroot \
>  // RUN:     -pie \
>  // RUN:   | FileCheck --check-prefix=CHECK-ANDROID-PIE %s
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131204/0895c754/attachment.html>


More information about the cfe-commits mailing list