diff options
Diffstat (limited to 'deno.gni')
-rw-r--r-- | deno.gni | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/deno.gni b/deno.gni new file mode 100644 index 000000000..367a7f450 --- /dev/null +++ b/deno.gni @@ -0,0 +1,189 @@ +template("run_node") { + action(target_name) { + forward_variables_from(invoker, "*") + script = "src/js/run_node.py" + } +} + +# Template to generate different V8 snapshots based on different runtime flags. +# Can be invoked with run_mksnapshot(<name>). The target will resolve to +# run_mksnapshot_<name>. If <name> is "default", no file suffixes will be used. +# Otherwise files are suffixed, e.g. embedded_<name>.cc and +# snapshot_blob_<name>.bin. +# +# The template exposes the variables: +# args: additional flags for mksnapshots +# embedded_suffix: a camel case suffix for method names in the embedded +# snapshot. +template("create_snapshot") { + name = target_name + suffix = "_$name" + action("create_snapshot_" + name) { + forward_variables_from(invoker, + [ + "testonly", + "deps", + ]) + visibility = [ ":*" ] # Only targets in this file can depend on this. + deps += [ ":snapshot_creator" ] + script = "v8/tools/run.py" + data = [] + exe = rebase_path(get_label_info(":snapshot_creator", "root_out_dir") + + "/snapshot_creator") + snapshot_out_cc = "$target_gen_dir/snapshot${suffix}.cc" + sources = [ + invoker.js, + ] + outputs = [ + snapshot_out_cc, + ] + args = [ + exe, + rebase_path(invoker.js, root_build_dir), + rebase_path(snapshot_out_cc, root_build_dir), + ] + + # To debug snapshotting problems: + # args += ["--trace-serializer"] + data = [ + invoker.js, + ] + } +} + +template("rust_crate") { + action(target_name) { + forward_variables_from(invoker, + [ + "cfg", + "crate_type", + "source_root", + "deps", + "rust_deps", + ]) + sources = [ + source_root, + ] + outputs = [] + depfile = "$target_gen_dir/$target_name.d" + script = "v8/tools/run.py" + + args = [ + "rustc", + rebase_path(source_root, root_build_dir), + "--crate-name=$target_name", + "--crate-type=$crate_type", + "--emit=dep-info=" + rebase_path(depfile, root_build_dir), + ] + + # We only use staticlib for the special "empty" lib. + if (crate_type == "staticlib") { + staticlib = "$target_out_dir/$target_name.a" + outputs += [ staticlib ] + args += [ "--emit=link=" + rebase_path(staticlib, root_build_dir) ] + } + + if (crate_type == "rlib" || crate_type == "bin") { + obj = "$target_out_dir/$target_name.o" + outputs += [ obj ] + args += [ "--emit=obj=" + rebase_path(obj, root_build_dir) ] + } + + if (crate_type == "rlib") { + rlib = "$target_out_dir/$target_name.rlib" + outputs += [ rlib ] + args += [ "--emit=link=" + rebase_path(rlib, root_build_dir) ] + } + + if (is_debug) { + args += [ "-g" ] + } + + if (is_official_build) { + args += [ "-O" ] + } + + if (defined(cfg)) { + foreach(c, cfg) { + args += [ + "--cfg", + c, + ] + } + } + + if (!defined(deps)) { + deps = [] + } + + if (defined(rust_deps)) { + deps += rust_deps + foreach(dep_label, rust_deps) { + dep_name = get_label_info(dep_label, "name") + dep_dir = get_label_info(dep_label, "target_out_dir") + dep_rlib = "$dep_dir/$dep_name.rlib" + args += [ + "--extern", + "$dep_name=" + rebase_path(dep_rlib, root_build_dir), + ] + } + } + } +} + +template("rust_library") { + rust_crate(target_name) { + crate_type = "rlib" + forward_variables_from(invoker, "*") + } +} + +template("rust_executable") { + bin_target = target_name + "_bin" + rust_crate(bin_target) { + crate_type = "bin" + forward_variables_from(invoker, "*") + } + + # By compiling an empty file as crate-type=staticlib we get all the code + # for the rust stdlib, which are not included in the object file outputs + # of other libs. + stdlib_target = target_name + "_stdlib" + rust_crate(stdlib_target) { + crate_type = "staticlib" + source_root = "src/empty.rs" + } + + executable(target_name) { + forward_variables_from(invoker, "*") + + if (!defined(deps)) { + deps = [] + } + + deps += [ + ":" + bin_target, + ":" + stdlib_target, + ] + + libs = get_target_outputs(":" + bin_target) + + get_target_outputs(":" + stdlib_target) + + if (defined(rust_deps)) { + deps += rust_deps + foreach(dep_label, rust_deps) { + dep_name = get_label_info(dep_label, "name") + dep_dir = get_label_info(dep_label, "target_out_dir") + dep_obj = "$dep_dir/$dep_name.o" + libs += [ dep_obj ] + } + } + + if (current_os == "mac") { + libs += [ "resolv" ] + } + if (current_os == "win") { + libs += [ "userenv.lib" ] + } + } +} |