summaryrefslogtreecommitdiff
path: root/deno.gni
diff options
context:
space:
mode:
Diffstat (limited to 'deno.gni')
-rw-r--r--deno.gni189
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" ]
+ }
+ }
+}