Augment the CrOS gn build to successfully build CrOS Chrome with gn.

BUG=558623

Review URL: https://codereview.chromium.org/1491463002

Cr-Original-Commit-Position: refs/heads/master@{#363616}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 294d703324a8914ca636209b32fca94034ce9e16
This commit is contained in:
rjkroege 2015-12-07 14:56:28 -08:00 коммит произвёл Commit bot
Родитель c59d3a0b27
Коммит 379012815d
2 изменённых файлов: 54 добавлений и 18 удалений

Просмотреть файл

@ -193,12 +193,13 @@ if (target_os == "android") {
_default_toolchain = "//build/toolchain/android:$target_cpu"
}
} else if (target_os == "chromeos") {
# See comments in build/toolchain/cros/BUILD.gn about board compiles.
assert(host_os == "linux",
"ChromeOS builds are only supported on Linux hosts.")
if (is_clang) {
_default_toolchain = "//build/toolchain/linux:clang_$target_cpu"
_default_toolchain = "//build/toolchain/cros:clang_target"
} else {
_default_toolchain = "//build/toolchain/linux:$target_cpu"
_default_toolchain = "//build/toolchain/cros:target"
}
} else if (target_os == "ios") {
_default_toolchain = "//build/toolchain/mac:ios_clang_arm"

Просмотреть файл

@ -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 = ""
}
clang_toolchain("clang_target") {
toolchain_cpu = target_cpu
toolchain_os = "linux"
}
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.")
# These defaults permit building on a Linux host as described above.
cc = "gcc"
cxx = "g++"
ar = "ar"
cc = "${cros_target_cc}"
cxx = "${cros_target_cxx}"
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
}