# Copyright 2019 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.

# This file introduces a template that allows you to compile a given JavaScript
# source file for use with quickjs.
#
# Parameters
#
#   source (required)
#        A JS file to compile.
#
#   module
#        Set to true if quickjs should treat this source as a JavaScript module.

import("//build/compiled_action.gni")

template("compiled_js") {
  generate_target = "${target_name}_gen"
  generated_file = "${target_gen_dir}/${target_name}.c"

  compiled_action(generate_target) {
    tool = "//third_party/quickjs:qjsc"
    inputs = [
      invoker.source,
    ]
    outputs = [
      generated_file,
    ]
    args = [
      "-c",
      "-o",
      rebase_path(generated_file),
    ]
    if (defined(invoker.module) && invoker.module) {
      args += [ "-m" ]
    }
    if (defined(invoker.extra_args)) {
      args += invoker.extra_args
    }

    args += [ rebase_path(invoker.source) ]
  }

  source_set(target_name) {
    sources = [
      generated_file,
    ]
    deps = [
      ":${generate_target}",
    ]
  }
}
