blob: ce03df58ea5fa42a385feba44779a83d365d098c [file] [log] [blame]
# Copyright 2022 The Dawn & Tint Authors
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# Note: This file is intentionally not used by any other BUILD.gn in Dawn.
# Instead, Chromium depends directly on this file to build the WebGPU CTS.
# Scripts called from this file assume Dawn is checked out inside Chromium.
import("../../../scripts/dawn_overrides_with_defaults.gni")
group("webgpu-cts") {
public_deps = [
":compile_src",
":copy_resources",
":verify_gen_ts_dep_list",
]
data = [ "test_list.txt" ]
}
list_from_ts_sources_txt = read_file("ts_sources.txt", "list lines")
ts_source_inputs = [ "../../webgpu-cts/tsconfig.json" ]
foreach(file, list_from_ts_sources_txt) {
ts_source_inputs += [ "../../webgpu-cts/$file" ]
}
js_outputs = []
foreach(ts_file, filter_exclude(list_from_ts_sources_txt, [ "*.d.ts" ])) {
js_file = string_replace(ts_file, ".ts", ".js")
js_node_file = string_replace(js_file, "src/", "src-node/", 1)
js_outputs += [ "$target_gen_dir/../../webgpu-cts/$js_file" ]
if (js_node_file != "src-node/common/runtime/wpt.js" &&
js_node_file != "src-node/common/runtime/standalone.js" &&
js_node_file != "src-node/common/runtime/helper/test_worker.js" &&
js_node_file !=
"src-node/webgpu/web_platform/worker/worker_launcher.js") {
js_outputs += [ "$target_gen_dir/../../webgpu-cts/$js_node_file" ]
}
}
foreach(ts_file,
filter_include(list_from_ts_sources_txt, [ "src/webgpu/*.spec.ts" ])) {
worker_js_file =
string_replace(string_replace(ts_file, ".spec.ts", ".as_worker.js"),
"src/webgpu/",
"src/webgpu/webworker/",
1)
js_outputs += [ "$target_gen_dir/../../webgpu-cts/$worker_js_file" ]
}
action("compile_src") {
script = "${dawn_root}/webgpu-cts/scripts/compile_src.py"
inputs = [
"//third_party/node/node_modules/typescript/lib/tsc.js",
"//third_party/node/node.py",
"${dawn_root}/webgpu-cts/scripts/tsc_ignore_errors.py",
# If the only change is that a file is deleted, we still need to
# rebuild so that listing.js gets updated.
"ts_sources.txt",
] + ts_source_inputs
outputs = js_outputs
data = js_outputs
args = [ rebase_path("$target_gen_dir/../../webgpu-cts", root_build_dir) ]
}
list_from_resource_files_txt = read_file("resource_files.txt", "list lines")
resource_file_inputs = []
foreach(file, list_from_resource_files_txt) {
resource_file_inputs += [ "$file" ]
}
action("copy_resources") {
# Note: We use a python script to perform the copy here instead of a "copy"
# action because of limitations of source expansions. This copy needs to:
# * move files to outside the target's directory
# * remove '/src/' from within the path
# * copy subdirectories.
# It does not seem possible to do all of these things with a source expansion.
src_dir = "../../webgpu-cts/src/resources/"
dst_dir = "$target_gen_dir/../../webgpu-cts/resources/"
inputs = []
outputs = [ "$target_out_dir/run_$target_name.stamp" ]
foreach(resource_file, resource_file_inputs) {
inputs += [ "$src_dir/$resource_file" ]
outputs += [ "$dst_dir/$resource_file" ]
}
data = outputs
script = "${dawn_root}/webgpu-cts/scripts/copy_files.py"
args = [
"--src_dir",
rebase_path(src_dir, root_build_dir),
"--dst_dir",
rebase_path(dst_dir, root_build_dir),
"--file_list",
rebase_path("resource_files.txt", root_build_dir),
"--stamp",
rebase_path(outputs[0], root_build_dir),
]
}
action("verify_gen_ts_dep_list") {
script = "${dawn_root}/webgpu-cts/scripts/gen_ts_dep_lists.py"
inputs = [
"../../../DEPS",
"resource_files.txt",
"ts_sources.txt",
]
outputs = [ "$target_out_dir/run_$target_name.stamp" ]
args = [
"--check",
"--stamp",
rebase_path(outputs[0], root_build_dir),
]
}