blob: 969309076dc5c46b2ad41d9e6737c1ce9bc33bb5 [file] [log] [blame]
# Copyright 2023 The Tint Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build_overrides/build.gni")
import("../../scripts/tint_overrides_with_defaults.gni")
template("libtint_source_set") {
source_set(target_name) {
forward_variables_from(invoker, "*", [ "configs" ])
if (!defined(invoker.deps)) {
deps = []
}
if (defined(invoker.configs)) {
configs += invoker.configs
}
configs += [ "${tint_src_dir}:tint_common_config" ]
if (build_with_chromium) {
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
}
if (!defined(invoker.public_configs)) {
public_configs = []
}
public_configs += [ "${tint_src_dir}:tint_public_config" ]
}
}
###############################################################################
# Executables - only built when tint_build_cmds is enabled
###############################################################################
template("tint_executable") {
if (tint_build_cmds) {
executable(target_name) {
forward_variables_from(invoker, "*")
}
}
}
###############################################################################
# Unit tests - only built when tint_build_unittests is enabled
###############################################################################
template("tint_unittests_source_set") {
if (tint_build_unittests) {
source_set(target_name) {
forward_variables_from(invoker, "*", [ "configs" ])
testonly = true
if (defined(invoker.configs)) {
configs += invoker.configs
}
configs += [ "${tint_src_dir}:tint_unittests_config" ]
if (build_with_chromium) {
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
}
if (!defined(invoker.deps)) {
deps = []
}
deps += [ "${tint_src_dir}:gmock_and_gtest" ]
}
}
}
###############################################################################
# Fuzzers - only built when tint_has_fuzzers is enabled
###############################################################################
if (tint_has_fuzzers) {
import("//testing/libfuzzer/fuzzer_test.gni")
fuzzer_corpus_wgsl_dir = "${root_gen_dir}/fuzzers/wgsl_corpus"
fuzzer_corpus_wgsl_stamp = "${fuzzer_corpus_wgsl_dir}.stamp"
template("tint_fuzz_source_set") {
source_set(target_name) {
forward_variables_from(invoker, "*", [ "configs" ])
testonly = true
if (!defined(invoker.deps)) {
deps = []
}
if (defined(invoker.configs)) {
configs += invoker.configs
}
configs += [ "${tint_src_dir}:tint_common_config" ]
if (build_with_chromium) {
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
}
if (!defined(invoker.public_configs)) {
public_configs = []
}
public_configs += [ "${tint_src_dir}:tint_public_config" ]
}
}
template("tint_fuzzer_test") {
fuzzer_test(target_name) {
forward_variables_from(invoker, "*")
exclude_main = false
if (target_name == "wgsl") {
dict = "dictionary.txt"
libfuzzer_options = [
"only_ascii=1", # TODO(bclayton): Remove this to fuzz unicode?
"max_len=10000",
]
seed_corpus = fuzzer_corpus_wgsl_dir
seed_corpus_deps = [ "${tint_src_dir}:tint_generate_wgsl_corpus" ]
} else {
assert(false, "unsupported tint fuzzer target")
}
}
}
} else {
template("tint_fuzz_source_set") {
}
template("tint_fuzzer_test") {
}
}