import("//third_party/protobuf/proto_library.gni") import("//v8/gni/v8.gni") import("//v8/snapshot_toolchain.gni") import("deno.gni") rust_executable("deno_rs") { source_root = "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("deno") { sources = [ "main.cc", ] deps = [ ":libdeno", ":msg_proto", "//third_party/protobuf:protoc_lib", ] public_configs = [ ":public_v8_base_config" ] } executable("mock_runtime_test") { testonly = true sources = [ "file_util_test.cc", "from_snapshot.cc", "mock_runtime_test.cc", ] deps = [ ":create_snapshot_mock_runtime", ":deno_nosnapshot", "//testing/gtest:gtest", ] include_dirs = [ target_gen_dir ] defines = [ "DENO_MOCK_RUNTIME" ] } static_library("libdeno") { complete_static_lib = true sources = [ "from_snapshot.cc", ] deps = [ ":create_snapshot_deno", ":deno_nosnapshot", ] public_configs = [ "v8:libplatform_config", ":public_v8_base_config", ] } source_set("deno_nosnapshot") { sources = [ "deno.cc", "deno_internal.h", "file_util.cc", "file_util.h", "include/deno.h", ] deps = [ "v8:v8", "v8:v8_libbase", "v8:v8_libplatform", "v8:v8_libsampler", ] public_configs = [ "v8:libplatform_config", ":public_v8_base_config", ] } # This allows us to v8/src/base/ libraries. config("public_v8_base_config") { include_dirs = [ "v8", "$target_gen_dir/v8", ] } executable("snapshot_creator") { sources = [ "snapshot_creator.cc", ] deps = [ ":deno_nosnapshot", ] } proto_library("msg_proto") { sources = [ "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 = "js/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 = [ "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 = [] }