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

viz_remove_configs = []
viz_add_configs = [ "//build/config:precompiled_headers" ]

if (!is_debug && (is_win || is_android)) {
  viz_remove_configs += [ "//build/config/compiler:default_optimization" ]
  viz_add_configs += [ "//build/config/compiler:optimize_max" ]
}

template("viz_source_set") {
  jumbo_source_set(target_name) {
    forward_variables_from(invoker, "*", [ "configs" ])
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }
    configs -= viz_remove_configs
    configs += viz_add_configs
  }
}

template("viz_component") {
  jumbo_component(target_name) {
    forward_variables_from(invoker, "*", [ "configs" ])
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }
    configs -= viz_remove_configs
    configs += viz_add_configs
  }
}

template("viz_static_library") {
  jumbo_static_library(target_name) {
    forward_variables_from(invoker, "*", [ "configs" ])
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }
    configs -= viz_remove_configs
    configs += viz_add_configs
  }
}

template("viz_test") {
  test(target_name) {
    forward_variables_from(invoker, "*", [ "configs" ])
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }
    configs -= viz_remove_configs
    configs += viz_add_configs
  }
}
