# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# 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"

import("//build/config/clang/clang.gni")
import("//build/config/compiler/compiler.gni")

declare_args() {
  # These must be specified for a board-specific build.
  cros_target_ar = "ar"
  cros_target_cc = "gcc"
  cros_target_cxx = "g++"
  cros_target_nm = ""
  cros_target_readelf = ""

  # These can be optionally set. The "_cppflags"  will be applied to *both*
  # C and C++ files; use "_cxxflags" for C++-only flags.
  cros_target_extra_cflags = ""
  cros_target_extra_cppflags = ""
  cros_target_extra_cxxflags = ""
  cros_target_extra_ldflags = ""

  cros_host_ar = "${clang_base_path}/bin/llvm-ar"
  cros_host_cc = "${clang_base_path}/bin/clang"
  cros_host_cxx = "${clang_base_path}/bin/clang++"
  cros_host_nm = ""
  cros_host_readelf = ""
  cros_host_extra_cflags = ""
  cros_host_extra_cppflags = ""
  cros_host_extra_cxxflags = ""
  cros_host_extra_ldflags = ""
  cros_host_sysroot = ""

  cros_v8_snapshot_ar = "${clang_base_path}/bin/llvm-ar"
  cros_v8_snapshot_cc = "${clang_base_path}/bin/clang"
  cros_v8_snapshot_cxx = "${clang_base_path}/bin/clang++"
  cros_v8_snapshot_nm = ""
  cros_v8_snapshot_readelf = ""
  cros_v8_snapshot_extra_cflags = ""
  cros_v8_snapshot_extra_cppflags = ""
  cros_v8_snapshot_extra_cxxflags = ""
  cros_v8_snapshot_extra_ldflags = ""
  cros_v8_snapshot_sysroot = ""

  cros_nacl_bootstrap_extra_cflags = ""
  cros_nacl_bootstrap_extra_cppflags = ""
  cros_nacl_bootstrap_extra_cxxflags = ""
  cros_nacl_bootstrap_extra_ldflags = ""

  cros_nacl_helper_arm32_ar = "ar"
  cros_nacl_helper_arm32_cc = "gcc"
  cros_nacl_helper_arm32_cxx = "g++"
  cros_nacl_helper_arm32_readelf = ""
  cros_nacl_helper_arm32_sysroot = ""
}

declare_args() {
  cros_target_ld = cros_target_cxx
  cros_host_ld = cros_host_cxx
  cros_v8_snapshot_ld = cros_v8_snapshot_cxx
  cros_nacl_helper_arm32_ld = cros_nacl_helper_arm32_cxx
}
