diff options
Diffstat (limited to 'BUILD.gn')
-rw-r--r-- | BUILD.gn | 185 |
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 = [] +} |