306 lines
9.6 KiB
Plaintext
306 lines
9.6 KiB
Plaintext
# Copyright 2014 The Chromium Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import("//build/config/compiler/compiler.gni")
|
|
import("//build/config/sysroot.gni")
|
|
import("//build/toolchain/cros_toolchain.gni")
|
|
import("//build/toolchain/gcc_toolchain.gni")
|
|
|
|
declare_args() {
|
|
# If set, build lacros with Chromium's toolchain instead of with Chrome OS's.
|
|
# TODO(thakis): Set this to `= chromeos_is_browser_only` once that works.
|
|
lacros_use_chromium_toolchain = false
|
|
}
|
|
|
|
# This is mostly identical to gcc_toolchain, but handles relativizing toolchain
|
|
# paths. This is needed for CrOS since these paths often change based on the
|
|
# environment. For example, cxx is a relative path picked up on $PATH in the
|
|
# chroot. But in Simple Chrome, cxx is a system-absolute path.
|
|
template("cros_toolchain") {
|
|
if (lacros_use_chromium_toolchain) {
|
|
clang_toolchain(target_name) {
|
|
forward_variables_from(invoker, "*")
|
|
}
|
|
} else {
|
|
gcc_toolchain(target_name) {
|
|
forward_variables_from(invoker, "*")
|
|
|
|
toolchain_args.cc_wrapper = ""
|
|
toolchain_args.clang_use_chrome_plugins = false
|
|
|
|
# CrOS's target toolchain wrapper prefers to invoke gomacc itself, so pass
|
|
# it the gomacc path via cmd-line arg. Otherwise, for both CrOS's host
|
|
# wrapper (used in the ebuild) and Chrome's clang (used in Simple Chrome),
|
|
# prepend gomacc like normal.
|
|
if (use_goma && toolchain_args.needs_gomacc_path_arg) {
|
|
extra_cppflags += " --gomacc-path $goma_dir/gomacc"
|
|
}
|
|
if (use_remoteexec && toolchain_args.needs_gomacc_path_arg) {
|
|
extra_cppflags += "--rewrapper-path $rbe_cros_cc_wrapper --rewrapper-cfg ${rbe_cc_cfg_file}"
|
|
}
|
|
|
|
# Relativize path if compiler is specified such that not to lookup from
|
|
# $PATH and cc/cxx does not contain additional flags.
|
|
if (cc != get_path_info(cc, "file") &&
|
|
string_replace(cc, " ", "") == cc) {
|
|
cc = rebase_path(cc, root_build_dir)
|
|
}
|
|
if (cxx != get_path_info(cxx, "file") &&
|
|
string_replace(cxx, " ", "") == cxx) {
|
|
cxx = rebase_path(cxx, root_build_dir)
|
|
}
|
|
if (ar != get_path_info(ar, "file") &&
|
|
string_replace(ar, " ", "") == ar) {
|
|
ar = rebase_path(ar, root_build_dir)
|
|
}
|
|
if (ld != get_path_info(ld, "file") &&
|
|
string_replace(ld, " ", "") == ld) {
|
|
ld = rebase_path(ld, root_build_dir)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# This is the normal toolchain for most targets.
|
|
cros_toolchain("target") {
|
|
toolchain_args = {
|
|
current_cpu = target_cpu
|
|
current_os = "chromeos"
|
|
sysroot = target_sysroot
|
|
}
|
|
|
|
if (!lacros_use_chromium_toolchain) {
|
|
ar = cros_target_ar
|
|
cc = cros_target_cc
|
|
cxx = cros_target_cxx
|
|
ld = cros_target_ld
|
|
|
|
if (cros_target_nm != "") {
|
|
nm = cros_target_nm
|
|
}
|
|
if (cros_target_readelf != "") {
|
|
readelf = cros_target_readelf
|
|
}
|
|
extra_cflags = cros_target_extra_cflags
|
|
extra_cppflags = cros_target_extra_cppflags
|
|
extra_cxxflags = cros_target_extra_cxxflags
|
|
extra_ldflags = cros_target_extra_ldflags
|
|
|
|
toolchain_args.needs_gomacc_path_arg = true
|
|
}
|
|
}
|
|
|
|
# This is a special toolchain needed just for the nacl_bootstrap target in
|
|
# //native_client/src/trusted/service_runtime/linux. It is identical
|
|
# to ":target" except that it forces use_debug_fission, use_gold, and
|
|
# use_sysroot off, and allows the user to set different sets of extra flags.
|
|
cros_toolchain("nacl_bootstrap") {
|
|
toolchain_args = {
|
|
if (target_cpu == "arm64") {
|
|
current_cpu = "arm"
|
|
} else {
|
|
current_cpu = target_cpu
|
|
}
|
|
current_os = "chromeos"
|
|
use_debug_fission = false
|
|
use_gold = false
|
|
use_sysroot = false
|
|
}
|
|
|
|
if (!lacros_use_chromium_toolchain) {
|
|
ar = cros_target_ar
|
|
cc = cros_target_cc
|
|
cxx = cros_target_cxx
|
|
ld = cros_target_ld
|
|
|
|
if (cros_target_nm != "") {
|
|
nm = cros_target_nm
|
|
}
|
|
if (cros_target_readelf != "") {
|
|
readelf = cros_target_readelf
|
|
}
|
|
extra_cflags = cros_nacl_bootstrap_extra_cflags
|
|
extra_cppflags = cros_nacl_bootstrap_extra_cppflags
|
|
extra_cxxflags = cros_nacl_bootstrap_extra_cxxflags
|
|
extra_ldflags = cros_nacl_bootstrap_extra_ldflags
|
|
|
|
toolchain_args.needs_gomacc_path_arg = true
|
|
}
|
|
|
|
# We build for ARM32, even when the rest of the build targets ARM64.
|
|
if (target_cpu == "arm64") {
|
|
ar = cros_nacl_helper_arm32_ar
|
|
cc = cros_nacl_helper_arm32_cc
|
|
cxx = cros_nacl_helper_arm32_cxx
|
|
ld = cros_nacl_helper_arm32_ld
|
|
# Avoid accidental use of Arm64 sysroot because of SYSROOT
|
|
# env variable set in ChromeOS builds.
|
|
toolchain_args.sysroot = cros_nacl_helper_arm32_sysroot
|
|
}
|
|
}
|
|
|
|
# This is a special toolchain needed just for the nacl_helper target for
|
|
# building an Arm32 nacl_helper binary on Arm64 ChromeOS targets.
|
|
cros_toolchain("nacl_helper_arm32") {
|
|
toolchain_args = {
|
|
current_cpu = "arm"
|
|
current_os = "chromeos"
|
|
use_debug_fission = false
|
|
use_gold = false
|
|
sysroot = cros_nacl_helper_arm32_sysroot
|
|
|
|
# Disable some uses of libraries that this build does not require. The
|
|
# sysroot for this build does not provide them, and they would be pulled in
|
|
# by indirect dependencies of nacl_helper otherwise.
|
|
use_cras = false
|
|
use_nss_certs = false
|
|
use_system_libdrm = false
|
|
use_system_libsync = false
|
|
}
|
|
ar = cros_nacl_helper_arm32_ar
|
|
cc = cros_nacl_helper_arm32_cc
|
|
cxx = cros_nacl_helper_arm32_cxx
|
|
ld = cros_nacl_helper_arm32_ld
|
|
readelf = cros_nacl_helper_arm32_readelf
|
|
|
|
extra_cflags = ""
|
|
extra_cppflags = ""
|
|
extra_cxxflags = ""
|
|
extra_ldflags = ""
|
|
|
|
if (!lacros_use_chromium_toolchain) {
|
|
toolchain_args.needs_gomacc_path_arg = true
|
|
}
|
|
}
|
|
|
|
cros_toolchain("host") {
|
|
toolchain_args = {
|
|
current_cpu = host_cpu
|
|
current_os = "linux"
|
|
sysroot = cros_host_sysroot
|
|
}
|
|
|
|
if (!lacros_use_chromium_toolchain) {
|
|
# These are args for the template.
|
|
ar = cros_host_ar
|
|
cc = cros_host_cc
|
|
cxx = cros_host_cxx
|
|
ld = cros_host_ld
|
|
|
|
if (cros_host_nm != "") {
|
|
nm = cros_host_nm
|
|
}
|
|
if (cros_host_readelf != "") {
|
|
readelf = cros_host_readelf
|
|
}
|
|
extra_cflags = cros_host_extra_cflags
|
|
extra_cppflags = cros_host_extra_cppflags
|
|
extra_cxxflags = cros_host_extra_cxxflags
|
|
extra_ldflags = cros_host_extra_ldflags
|
|
|
|
toolchain_args.needs_gomacc_path_arg = false
|
|
}
|
|
}
|
|
|
|
cros_toolchain("v8_snapshot") {
|
|
toolchain_args = {
|
|
if (target_cpu == "x86" || target_cpu == "arm" || target_cpu == "mipsel") {
|
|
current_cpu = "x86"
|
|
} else {
|
|
current_cpu = "x64"
|
|
}
|
|
v8_current_cpu = v8_target_cpu
|
|
current_os = "linux"
|
|
sysroot = cros_v8_snapshot_sysroot
|
|
}
|
|
|
|
if (!lacros_use_chromium_toolchain) {
|
|
# These are args for the template.
|
|
ar = cros_v8_snapshot_ar
|
|
cc = cros_v8_snapshot_cc
|
|
cxx = cros_v8_snapshot_cxx
|
|
ld = cros_v8_snapshot_ld
|
|
|
|
if (cros_v8_snapshot_nm != "") {
|
|
nm = cros_v8_snapshot_nm
|
|
}
|
|
if (cros_v8_snapshot_readelf != "") {
|
|
readelf = cros_v8_snapshot_readelf
|
|
}
|
|
extra_cflags = cros_v8_snapshot_extra_cflags
|
|
extra_cppflags = cros_v8_snapshot_extra_cppflags
|
|
extra_cxxflags = cros_v8_snapshot_extra_cxxflags
|
|
extra_ldflags = cros_v8_snapshot_extra_ldflags
|
|
|
|
toolchain_args.needs_gomacc_path_arg = false
|
|
}
|
|
}
|
|
|
|
# This toolchain is used when we want to build Lacros using alternate toolchain.
|
|
# To use this, you need to set gn arg 'also_build_lacros_chrome_for_architecture'.
|
|
# See build/config/chromeos/ui_mode.gni
|
|
if (also_build_lacros_chrome_for_architecture != "") {
|
|
cros_toolchain("lacros_clang") {
|
|
if (also_build_lacros_chrome_for_architecture == "amd64") {
|
|
lacros_args =
|
|
read_file("//build/args/chromeos/amd64-generic-crostoolchain.gni",
|
|
"scope")
|
|
} else if (also_build_lacros_chrome_for_architecture == "arm") {
|
|
lacros_args =
|
|
read_file("//build/args/chromeos/arm-generic-crostoolchain.gni",
|
|
"scope")
|
|
} else {
|
|
assert(false,
|
|
"also_build_lacros_chrome_for_architecture is not " +
|
|
"one of the supported architectures.")
|
|
}
|
|
|
|
toolchain_args = {
|
|
forward_variables_from(lacros_args, "*")
|
|
|
|
# TODO(crbug.com/1298821) Change to a better way to set gn args.
|
|
# The following gn args are present in ash config like
|
|
# //build/args/chromeos/atlas.gni but not in
|
|
# //build/args/chromeos/amd64-generic-crostoolchain.gni.
|
|
# So we need to reset them to the default value where Lacros needs.
|
|
# Starts from here.
|
|
ozone_auto_platforms = true
|
|
ozone_platform = ""
|
|
ozone_platform_gbm = -1
|
|
ozone_platform_headless = false
|
|
|
|
# Ends here.
|
|
|
|
current_os = "chromeos"
|
|
target_os = "chromeos"
|
|
current_cpu = current_cpu
|
|
also_build_lacros_chrome_for_architecture = ""
|
|
chromeos_is_browser_only = true
|
|
use_clang_coverage = false
|
|
}
|
|
if (!lacros_use_chromium_toolchain) {
|
|
# These are args for the template.
|
|
ar = lacros_args.cros_target_ar
|
|
cc = lacros_args.cros_target_cc
|
|
cxx = lacros_args.cros_target_cxx
|
|
ld = lacros_args.cros_target_ld
|
|
|
|
if (defined(lacros_args.cros_target_nm) &&
|
|
lacros_args.cros_target_nm != "") {
|
|
nm = lacros_args.cros_target_nm
|
|
}
|
|
if (defined(lacros_args.cros_target_readelf) &&
|
|
lacros_args.cros_target_readelf != "") {
|
|
readelf = lacros_args.cros_target_readelf
|
|
}
|
|
extra_cflags = lacros_args.cros_target_extra_cflags
|
|
extra_cppflags = lacros_args.cros_target_extra_cppflags
|
|
extra_cxxflags = lacros_args.cros_target_extra_cxxflags
|
|
extra_ldflags = lacros_args.cros_target_extra_ldflags
|
|
|
|
toolchain_args.needs_gomacc_path_arg = true
|
|
}
|
|
}
|
|
}
|