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

import("//build/config/jumbo.gni")
import("//testing/test.gni")

cc_remove_configs = []
cc_add_configs = [
  "//build/config:precompiled_headers",
  "//build/config/compiler:wexit_time_destructors",
]

if (!is_debug) {
  cc_remove_configs += [ "//build/config/compiler:default_optimization" ]
  cc_add_configs += [ "//build/config/compiler:optimize_max" ]
}

template("cc_component") {
  jumbo_component(target_name) {
    forward_variables_from(invoker, "*", [ "configs" ])
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }
    configs -= cc_remove_configs
    configs += cc_add_configs
  }
}

template("cc_test_static_library") {
  jumbo_static_library(target_name) {
    forward_variables_from(invoker, "*", [ "configs" ])
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }
    configs -= cc_remove_configs
    configs += cc_add_configs

    # Not needed in test code.
    configs -= [ "//build/config/compiler:wexit_time_destructors" ]
  }
}

template("cc_test") {
  test(target_name) {
    forward_variables_from(invoker, "*", [ "configs" ])
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }
    configs -= cc_remove_configs
    configs += cc_add_configs

    # Not needed in test code.
    configs -= [ "//build/config/compiler:wexit_time_destructors" ]
  }
}
