blob: 12e2561d0fa6d98ffd9b5d358fe0dafa1afc2178 [file] [log] [blame]
# Copyright 2020 The Fuchsia 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/compiled_action.gni")
import("//build/rust/config.gni")
cargo_bin_path =
rebase_path("//prebuilt/third_party/rust/${host_platform}/bin/cargo")
# Generates bindings for a WASM file.
#
# Parameters
#
# target (required)
# [label] The library target to create bindings for.
#
# target_output_name (optional)
# [string] The output name to expect, if different from the target label name.
#
# deps (optional)
# public_deps (optional)
# testonly (optional)
# visibility (optional)
# Standard GN meaning.
#
# Example of usage:
#
# wasm_bindings(format) {
# target = ":lib"
# }
template("wasm_bindings") {
compiled_action(target_name) {
forward_variables_from(invoker,
[
"deps",
"public_deps",
"testonly",
"visibility",
])
if (!defined(deps)) {
deps = []
}
target = invoker.target
deps += [ "${target}($unknown_wasm32_toolchain)" ]
dep_out_dir =
get_label_info("${target}($unknown_wasm32_toolchain)", "target_out_dir")
if (defined(invoker.target_output_name)) {
dep_name = invoker.target_output_name
} else {
dep_name = get_label_info(invoker.target, "name")
}
file_name = ""
if (dep_name == "lib") {
file_name = rebase_path("${dep_out_dir}/lib.wasm")
} else {
file_name = rebase_path("${dep_out_dir}/lib${dep_name}.wasm")
}
tool = "//src/diagnostics/wasm/bindgen:bin"
tool_output_name = "fx_wasm_bindgen"
output_dir = "$target_out_dir/$target_name"
args = [
file_name,
rebase_path(output_dir, root_build_dir),
]
output_file_name = get_path_info(file_name, "name")
outputs = [
"$target_out_dir/$target_name/${output_file_name}_bg.d.ts",
"$target_out_dir/$target_name/${output_file_name}_bg.wasm",
"$target_out_dir/$target_name/${output_file_name}.d.ts",
"$target_out_dir/$target_name/${output_file_name}.js",
]
}
}