# 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("//testing/test.gni")

cc_remove_configs = []
cc_add_configs = [
  "//build/config:precompiled_headers",
  "//build/config/compiler:noshadowing",
  "//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") {
  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") {
  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" ]
  }
}
