# Copyright (c) 2014 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.

import("//build/toolchain/goma.gni")
import("//build/toolchain/rbe.gni")

# Defines the configuration of cc wrapper
# ccache: a c/c++ compiler cache which can greatly reduce recompilation times.
# icecc, distcc: it takes compile jobs from a build and distributes them among
#                remote machines allowing a parallel build.
#
# TIPS
#
# 1) ccache
# Set clang_use_chrome_plugins=false if using ccache 3.1.9 or earlier, since
# these versions don't support -Xclang.  (3.1.10 and later will silently
# ignore -Xclang, so it doesn't matter if you disable clang_use_chrome_plugins
# or not).
#
# Use ccache 3.2 or later to avoid clang unused argument warnings:
# https://bugzilla.samba.org/show_bug.cgi?id=8118
#
# To avoid -Wparentheses-equality clang warnings, at some cost in terms of
# speed, you can do:
# export CCACHE_CPP2=yes
#
# 2) icecc
# Set clang_use_chrome_plugins=false because icecc cannot distribute custom
# clang libraries.
#
# To use icecc and ccache together, set cc_wrapper = "ccache" with
# export CCACHE_PREFIX=icecc

declare_args() {
  # Set to "ccache", "icecc" or "distcc".  Probably doesn't work on windows.
  cc_wrapper = ""

  if (is_starboard) {
    enable_sccache = getenv("SCCACHE") == "1"
  }
}

if (is_starboard && getenv("SCCACHE") == "") {
  enable_sccache = host_os == "win" && cobalt_fastbuild
}

if (is_starboard && enable_sccache) {
  _set_sccache_gcs_bucket = getenv("SCCACHE_GCS_BUCKET") != ""
  _set_sccache_gcs_key_path = getenv("SCCACHE_GCS_KEY_PATH") != ""
  _set_sccache_gcs_oauth_url = getenv("SCCACHE_GCS_OAUTH_URL") != ""
  _set_sccache_gcs_rw_mode = getenv("SCCACHE_GCS_RW_MODE") != ""
  _set_sccache_dir = getenv("SCCACHE_DIR") != ""
  assert((_set_sccache_dir) || (_set_sccache_gcs_bucket &&
             (_set_sccache_gcs_key_path || _set_sccache_gcs_oauth_url) &&
             _set_sccache_gcs_rw_mode),
         "Set Sccache environment variables before use.")
}

if (is_starboard && cc_wrapper == "") {
  # TODO(https://crbug.com/gn/273): Use sccache locally as well.
  if (enable_sccache) {
    cc_wrapper = "sccache"
  } else if (host_os != "win") {
    cc_wrapper = "ccache"
  }
  print("Build Accelerator: " + cc_wrapper)
}

assert(!use_goma || cc_wrapper == "",
       "use_goma and cc_wrapper can not be used together.")
assert(!use_rbe || cc_wrapper == "",
       "use_rbe and cc_wrapper can not be used together.")
