Index: build/toolchain/cros/BUILD.gn |
diff --git a/build/toolchain/cros/BUILD.gn b/build/toolchain/cros/BUILD.gn |
index 5db3c200889678598ddff608aabcd76e0dfde9ed..dec710edcc8418f5ef5975b6b81d311a7fbfd2c8 100644 |
--- a/build/toolchain/cros/BUILD.gn |
+++ b/build/toolchain/cros/BUILD.gn |
@@ -4,33 +4,68 @@ |
import("//build/toolchain/gcc_toolchain.gni") |
+# CrOS builds must cross-compile on a Linux host for the actual CrOS |
+# device target. There are many different CrOS devices so the build |
+# system provides configuration variables that permit a CrOS build to |
+# control the cross-compilation tool chain. However, requiring such |
+# fine-grain specification is tedious for build-bots and developers. |
+# Consequently, the CrOS build system defaults to a convenience |
+# compilation mode where the compilation host is also the build target. |
+# |
+# Chrome can be compiled in this way with the gn variable: |
+# |
+# target_os = "chromeos" |
+# |
+# To perform a board-specific build, first obtain the correct system |
+# root (http://goo.gl/aFB4XH) for the board. Then configure GN to use it |
+# by setting appropriate cross-compilation variables. |
+# |
+# For example, to compile a Chrome source tree in /g/src for an |
+# auron_paine CrOS device with the system root cached in /g/.cros_cache, |
+# the following GN arguments must be provided to configure |
+# cross-compilation with Goma acceleration. (NB: additional variables |
+# will be necessary to successfully compile a working CrOS Chrome. See |
+# the definition of GYP_DEFINES inside a sysroot shell.) |
+# |
+# goma_dir = "/g/.cros_cache/common/goma+2" |
+# target_sysroot= /g/.cros_cache/chrome-sdk/tarballs/auron_paine+7644.0.0+sysroot_chromeos-base_chromeos-chrome.tar.xz" |
+# cros_target_cc = "x86_64-cros-linux-gnu-gcc -B/g/.cros_cache/chrome-sdk/tarballs/auron_paine+7657.0.0+target_toolchain/usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.25.51-gold" |
+# cros_target_cxx = "x86_64-cros-linux-gnu-g++ -B/g/.cros_cache/chrome-sdk/tarballs/auron_paine+7657.0.0+target_toolchain/usr/x86_64-pc-linux-gnu/x86_64-cros-linux-gnu/binutils-bin/2.25.51-gold" |
+# cros_target_ar = "x86_64-cros-linux-gnu-gcc-ar" |
+# target_cpu = "x64" |
+ |
declare_args() { |
- # The CrOS build system supports many different kinds of targets across |
- # many different architectures. Bringing your own toolchain is also supported, |
- # so it's actually impossible to enumerate all toolchains for all targets |
- # as GN toolchain specifications. |
- # These arguments provide a mechanism for specifying your CC, CXX and AR at |
- # buildfile-generation time, allowing the CrOS build system to always use |
- # the right tools for the current target. |
+ # These must be specified for a board-specific build. |
cros_target_cc = "" |
cros_target_cxx = "" |
cros_target_ar = "" |
} |
-gcc_toolchain("target") { |
- assert(cros_target_cc != "", "Must provide target CC.") |
- assert(cros_target_cxx != "", "Must provide target CXX.") |
- assert(cros_target_ar != "", "Must provide target AR.") |
+clang_toolchain("clang_target") { |
+ toolchain_cpu = target_cpu |
+ toolchain_os = "linux" |
+} |
- cc = "${cros_target_cc}" |
- cxx = "${cros_target_cxx}" |
+gcc_toolchain("target") { |
+ # These defaults permit building on a Linux host as described above. |
+ cc = "gcc" |
+ cxx = "g++" |
+ ar = "ar" |
- ar = "${cros_target_ar}" |
+ # But to build for a specific board, the cros_* args will need to be defined. |
+ if (cros_target_cc != "") { |
+ cc = "${cros_target_cc}" |
+ } |
+ if (cros_target_cxx != "") { |
+ cxx = "${cros_target_cxx}" |
+ } |
+ if (cros_target_ar != "") { |
+ ar = "${cros_target_ar}" |
+ } |
ld = cxx |
- toolchain_cpu = "${target_cpu}" |
+ toolchain_cpu = target_cpu |
toolchain_os = "linux" |
is_clang = is_clang |
use_ccache = false |
- use_goma = false |
} |