Home | History | Annotate | Download | only in android
      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