# Copyright 2016 The Chromium Authors. All rights reserved.
# 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 = ""

  # is_clang is used instead of cros_target_is_clang
  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_is_clang = true
  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_is_clang = true
  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 = ""
}

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