deno/BUILD.gn
2018-07-01 17:22:36 +02:00

185 lines
3.9 KiB
Text

import("//third_party/protobuf/proto_library.gni")
import("//v8/gni/v8.gni")
import("//v8/snapshot_toolchain.gni")
import("deno.gni")
config("deno_config") {
include_dirs = [ "v8" ] # This allows us to v8/src/base/ libraries.
configs = [ "v8:external_config" ]
}
rust_executable("deno") {
source_root = "src/main.rs"
rust_deps = [ ":libc" ]
deps = [
":libdeno",
]
}
rust_library("libc") {
source_root = "third_party/rust_crates/libc/src/lib.rs"
cfg = [
"feature=\"default\"",
"feature=\"use_std\"",
]
}
executable("mock_main") {
sources = [
"src/mock_main.cc",
]
deps = [
":libdeno",
":msg_proto",
"//third_party/protobuf:protoc_lib",
]
configs += [ ":deno_config" ]
}
executable("mock_runtime_test") {
testonly = true
sources = [
"src/file_util_test.cc",
"src/from_snapshot.cc",
"src/mock_runtime_test.cc",
]
deps = [
":create_snapshot_mock_runtime",
":deno_nosnapshot",
"//testing/gtest:gtest",
]
defines = [ "DENO_MOCK_RUNTIME" ]
configs += [ ":deno_config" ]
}
static_library("libdeno") {
complete_static_lib = true
sources = [
"src/from_snapshot.cc",
]
deps = [
":create_snapshot_deno",
":deno_nosnapshot",
]
configs += [ ":deno_config" ]
}
v8_source_set("deno_nosnapshot") {
sources = [
"src/deno.cc",
"src/deno_internal.h",
"src/file_util.cc",
"src/file_util.h",
"src/include/deno.h",
]
deps = [
"v8:v8_monolith",
]
configs = [ ":deno_config" ]
}
executable("snapshot_creator") {
sources = [
"src/snapshot_creator.cc",
]
deps = [
":deno_nosnapshot",
]
configs += [ ":deno_config" ]
}
proto_library("msg_proto") {
sources = [
"src/msg.proto",
]
generate_python = false
}
run_node("bundle") {
out_dir = "$target_gen_dir/bundle/"
sources = [
"js/main.ts",
"js/msg.pb.d.ts",
"js/msg.pb.js",
"js/package.json", # The `browserslist` field controls Babel behavior.
]
outputs = [
out_dir + "main.js",
]
deps = [
":protobufjs",
":run_tsc",
]
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),
]
}
# Due to bugs in Parcel we must run TSC independently in order to catch errors.
# https://github.com/parcel-bundler/parcel/issues/954
run_node("run_tsc") {
main = "js/main.ts"
tsconfig = "tsconfig.json"
out_dir = "$target_gen_dir/tsc_dist/"
sources = [
"js/msg.pb.d.ts",
"js/msg.pb.js",
main,
tsconfig,
]
outputs = [
out_dir + "/main.js",
]
deps = [
":protobufjs",
]
args = [
"./node_modules/typescript/bin/tsc",
"--project",
rebase_path(tsconfig, root_build_dir),
"--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"
sources = [
"src/msg.proto",
]
outputs = [
"$target_gen_dir/pbjs_hack.stamp",
]
args = [
rebase_path(sources[0], root_build_dir),
rebase_path(outputs[0], root_build_dir),
]
}
# Generates $target_gen_dir/snapshot_deno.cc
create_snapshot("deno") {
js = "$target_gen_dir/bundle/main.js"
deps = [
":bundle",
]
}
# Generates $target_gen_dir/snapshot_mock_runtime.cc
create_snapshot("mock_runtime") {
testonly = true
js = "js/mock_runtime.js"
deps = []
}