summaryrefslogtreecommitdiff
path: root/BUILD.gn
diff options
context:
space:
mode:
Diffstat (limited to 'BUILD.gn')
-rw-r--r--BUILD.gn185
1 files changed, 185 insertions, 0 deletions
diff --git a/BUILD.gn b/BUILD.gn
new file mode 100644
index 000000000..fcc10b98d
--- /dev/null
+++ b/BUILD.gn
@@ -0,0 +1,185 @@
+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 = [
+ "src/js/main.ts",
+ "src/js/msg.pb.d.ts",
+ "src/js/msg.pb.js",
+ "src/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("src/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 = "src/js/main.ts"
+ tsconfig = "src/js/tsconfig.json"
+ out_dir = "$target_gen_dir/tsc_dist/"
+ sources = [
+ "src/js/msg.pb.d.ts",
+ "src/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 = "src/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 = "src/js/mock_runtime.js"
+ deps = []
+}