| # 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", |
| ] |
| } |
| } |