0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-01 09:24:20 -04:00
denoland-deno/deno2/BUILD.gn

217 lines
5.1 KiB
Text
Raw Normal View History

import("//third_party/protobuf/proto_library.gni")
import("//v8/gni/v8.gni")
import("//v8/snapshot_toolchain.gni")
2018-06-10 08:24:39 -04:00
executable("deno") {
sources = [
"main.cc",
]
deps = [
":libdeno",
]
}
2018-06-11 11:01:35 -04:00
executable("mock_runtime_test") {
2018-06-10 08:24:39 -04:00
testonly = true
sources = [
2018-06-11 11:01:35 -04:00
"from_snapshot.cc",
"mock_runtime_test.cc",
2018-06-10 08:24:39 -04:00
]
deps = [
2018-06-11 11:01:35 -04:00
":create_snapshot_mock_runtime",
":deno_nosnapshot",
2018-06-10 08:24:39 -04:00
"//testing/gtest:gtest",
]
2018-06-11 11:01:35 -04:00
include_dirs = [ target_gen_dir ]
defines = [ "DENO_MOCK_RUNTIME" ]
2018-06-10 08:24:39 -04:00
}
component("libdeno") {
2018-06-11 11:01:35 -04:00
sources = [
"from_snapshot.cc",
]
2018-06-10 08:24:39 -04:00
deps = [
2018-06-11 11:01:35 -04:00
":create_snapshot_deno",
":deno_nosnapshot",
2018-06-10 08:24:39 -04:00
]
2018-06-11 11:01:35 -04:00
include_dirs = [ target_gen_dir ]
2018-06-10 08:24:39 -04:00
}
source_set("deno_nosnapshot") {
sources = [
"deno.cc",
"deno_internal.h",
"include/deno.h",
]
include_dirs = [ "include/" ]
deps = [
":msg_proto",
"v8:v8",
"v8:v8_libbase",
"v8:v8_libplatform",
"v8:v8_libsampler",
]
}
executable("snapshot_creator") {
sources = [
"snapshot_creator.cc",
]
deps = [
":deno_nosnapshot",
]
}
proto_library("msg_proto") {
sources = [
"msg.proto",
]
}
2018-06-11 21:54:55 -04:00
template("run_node") {
action(target_name) {
forward_variables_from(invoker, "*")
script = "js/run_node.py"
}
}
run_node("bundle") {
out_dir = "$target_gen_dir/bundle/"
sources = [
"$target_gen_dir/tsc_dist/main.js", # Not real input. See run_tsc comment.
"js/main.ts",
]
outputs = [
out_dir + "main.js",
2018-06-11 21:54:55 -04:00
]
deps = [
":run_tsc",
]
2018-06-11 21:54:55 -04:00
args = [
"./node_modules/parcel-bundler/bin/cli.js",
"build",
"--no-minify",
"--out-dir",
rebase_path(out_dir, root_build_dir),
rebase_path("js/main.ts", root_build_dir),
2018-06-11 21:54:55 -04:00
]
}
# Due to bugs in Parcel we must run TSC independently in order to catch errors.
# https://github.com/parcel-bundler/parcel/issues/954
2018-06-11 21:54:55 -04:00
run_node("run_tsc") {
main = "js/main.ts"
tsconfig = "js/tsconfig.json"
out_dir = "$target_gen_dir/tsc_dist/"
2018-06-11 21:54:55 -04:00
sources = [
"js/msg.pb.d.ts",
"js/msg.pb.js",
main,
tsconfig,
2018-06-11 21:54:55 -04:00
]
outputs = [
out_dir + "/main.js",
out_dir + "/main.map",
]
deps = [
":protobufjs",
2018-06-11 21:54:55 -04:00
]
args = [
2018-06-12 16:05:49 -04:00
"./node_modules/typescript/bin/tsc",
"--project",
rebase_path(tsconfig, root_build_dir),
2018-06-11 21:54:55 -04:00
"--outDir",
rebase_path(out_dir, root_build_dir),
]
}
# Generates protobufjs code.
# TODO(ry) Ideally protobufjs output files should be written into
# target_gen_dir, but its difficult to get this working in a way that the
# bundler can resolve their location. (The bundler does not support NODE_PATH?)
# Therefore this hack: write the generated msg.pb.js and msg.pb.d.ts outputs
# into the js/ folder, and we check them into the repo. Hopefully this hack can
# be removed at some point. If msg.proto is changed, commit changes to the
# generated JS files. The stamp file is just to make gn work.
action("protobufjs") {
script = "js/pbjs_hack.py"
2018-06-11 21:54:55 -04:00
sources = [
"msg.proto",
]
outputs = [
"$target_gen_dir/pbjs_hack.stamp",
2018-06-11 21:54:55 -04:00
]
args = [
rebase_path(sources[0], root_build_dir),
rebase_path(outputs[0], root_build_dir),
2018-06-11 21:54:55 -04:00
]
}
# 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) {
2018-06-11 11:01:35 -04:00
forward_variables_from(invoker,
[
"testonly",
"deps",
])
visibility = [ ":*" ] # Only targets in this file can depend on this.
2018-06-11 11:01:35 -04:00
deps += [ ":snapshot_creator" ]
script = "v8/tools/run.py"
data = []
exe = rebase_path(get_label_info(":snapshot_creator", "root_out_dir") +
"/snapshot_creator")
natives_in_bin = "$root_out_dir/natives_blob.bin"
snapshot_in_bin = "$root_out_dir/snapshot_blob.bin"
natives_out_cc = "$target_gen_dir/natives${suffix}.cc"
snapshot_out_cc = "$target_gen_dir/snapshot${suffix}.cc"
sources = [
invoker.js,
]
outputs = [
natives_out_cc,
snapshot_out_cc,
]
args = [
exe,
rebase_path(invoker.js, root_build_dir),
rebase_path(natives_in_bin, root_build_dir),
rebase_path(snapshot_in_bin, root_build_dir),
rebase_path(natives_out_cc, root_build_dir),
rebase_path(snapshot_out_cc, root_build_dir),
]
2018-06-12 00:36:01 -04:00
# To debug snapshotting problems:
# args += ["--trace-serializer"]
data = [
invoker.js,
]
}
}
2018-06-11 11:01:35 -04:00
# Generates $target_gen_dir/snapshot_deno.cc
create_snapshot("deno") {
2018-06-11 21:54:55 -04:00
js = "$target_gen_dir/bundle/main.js"
deps = [
2018-06-11 21:54:55 -04:00
":bundle",
]
}
2018-06-11 11:01:35 -04:00
# Generates $target_gen_dir/snapshot_mock_runtime.cc
create_snapshot("mock_runtime") {
testonly = true
js = "js/mock_runtime.js"
deps = []
}