1 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 import("//build/config/sysroot.gni") # Imports android/config.gni. 6 import("//build/toolchain/clang.gni") 7 import("//build/toolchain/goma.gni") 8 import("//build/toolchain/gcc_toolchain.gni") 9 10 # The Android GCC toolchains share most of the same parameters, so we have this 11 # wrapper around gcc_toolchain to avoid duplication of logic. 12 # 13 # Parameters: 14 # - android_ndk_sysroot 15 # Sysroot for this architecture. 16 # - android_ndk_lib_dir 17 # Subdirectory inside of android_ndk_sysroot where libs go. 18 # - tool_prefix 19 # Prefix to be added to the tool names. 20 # - toolchain_cpu_arch 21 # Same as gcc_toolchain 22 template("android_gcc_toolchain") { 23 gcc_toolchain(target_name) { 24 # Make our manually injected libs relative to the build dir. 25 android_ndk_lib = rebase_path( 26 invoker.android_ndk_sysroot + "/" + invoker.android_ndk_lib_dir, 27 root_build_dir) 28 29 libs_section_prefix = "$android_ndk_lib/crtbegin_dynamic.o" 30 libs_section_postfix = "$android_ndk_lib/crtend_android.o" 31 32 solink_libs_section_prefix = "$android_ndk_lib/crtbegin_so.o" 33 solink_libs_section_postfix = "$android_ndk_lib/crtend_so.o" 34 35 # The tools should be run relative to the build dir. 36 tool_prefix = rebase_path(invoker.tool_prefix, root_build_dir) 37 38 if (use_goma) { 39 goma_prefix = "$goma_dir/gomacc " 40 } else { 41 goma_prefix = "" 42 } 43 44 cc = goma_prefix + tool_prefix + "gcc" 45 cxx = goma_prefix + tool_prefix + "g++" 46 ar = tool_prefix + "ar" 47 ld = cxx 48 49 toolchain_os = "android" 50 toolchain_cpu_arch = invoker.toolchain_cpu_arch 51 52 # We make the assumption that the gcc_toolchain will produce a soname with 53 # the following definition. 54 soname = "{{target_output_name}}{{output_extension}}" 55 56 stripped_soname = "lib.stripped/${soname}" 57 temp_stripped_soname = "${stripped_soname}.tmp" 58 59 android_strip = "${tool_prefix}strip" 60 61 mkdir_command = "mkdir -p lib.stripped" 62 strip_command = "$android_strip --strip-unneeded -o $temp_stripped_soname $soname" 63 replace_command = "if ! cmp -s $temp_stripped_soname $stripped_soname; then mv $temp_stripped_soname $stripped_soname; fi" 64 postsolink = "$mkdir_command && $strip_command && $replace_command" 65 solink_outputs = [ stripped_soname ] 66 67 # We make the assumption that the gcc_toolchain will produce an exe with 68 # the following definition. 69 exe = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" 70 stripped_exe = "exe.stripped/$exe" 71 mkdir_command = "mkdir -p exe.stripped" 72 strip_command = "$android_strip --strip-unneeded -o $stripped_exe $exe" 73 postlink = "$mkdir_command && $strip_command" 74 link_outputs = [ stripped_exe ] 75 } 76 } 77 78 android_gcc_toolchain("x86") { 79 android_ndk_sysroot = "$android_ndk_root/$x86_android_sysroot_subdir" 80 android_ndk_lib_dir = "usr/lib" 81 82 tool_prefix = "$x86_android_toolchain_root/bin/i686-linux-android-" 83 toolchain_cpu_arch = "x86" 84 } 85 86 android_gcc_toolchain("arm") { 87 android_ndk_sysroot = "$android_ndk_root/$arm_android_sysroot_subdir" 88 android_ndk_lib_dir = "usr/lib" 89 90 tool_prefix = "$arm_android_toolchain_root/bin/arm-linux-androideabi-" 91 toolchain_cpu_arch = "arm" 92 } 93 94 android_gcc_toolchain("mipsel") { 95 android_ndk_sysroot = "$android_ndk_root/$mips_android_sysroot_subdir" 96 android_ndk_lib_dir = "usr/lib" 97 98 tool_prefix = "$mips_android_toolchain_root/bin/mipsel-linux-android-" 99 toolchain_cpu_arch = "mipsel" 100 } 101