summaryrefslogtreecommitdiff
path: root/cli/BUILD.gn
diff options
context:
space:
mode:
Diffstat (limited to 'cli/BUILD.gn')
-rw-r--r--cli/BUILD.gn270
1 files changed, 270 insertions, 0 deletions
diff --git a/cli/BUILD.gn b/cli/BUILD.gn
new file mode 100644
index 000000000..f6000a08f
--- /dev/null
+++ b/cli/BUILD.gn
@@ -0,0 +1,270 @@
+# Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
+import("//build/toolchain/cc_wrapper.gni")
+import("//build_extra/flatbuffers/flatbuffer.gni")
+import("//build_extra/flatbuffers/rust/rust_flatbuffer.gni")
+import("//build_extra/rust/rust.gni")
+import("//third_party/v8/gni/v8.gni")
+import("//third_party/v8/snapshot_toolchain.gni")
+import("../deno.gni")
+
+main_extern = [
+ "../core:deno_core",
+
+ "$rust_build:ansi_term",
+ "$rust_build:atty",
+ "$rust_build:dirs",
+ "$rust_build:flatbuffers",
+ "$rust_build:futures",
+ "$rust_build:getopts",
+ "$rust_build:http",
+ "$rust_build:hyper",
+ "$rust_build:hyper_rustls",
+ "$rust_build:lazy_static",
+ "$rust_build:libc",
+ "$rust_build:log",
+ "$rust_build:rand",
+ "$rust_build:regex",
+ "$rust_build:remove_dir_all",
+ "$rust_build:ring",
+ "$rust_build:rustyline",
+ "$rust_build:serde_json",
+ "$rust_build:source_map_mappings",
+ "$rust_build:tempfile",
+ "$rust_build:tokio",
+ "$rust_build:tokio_executor",
+ "$rust_build:tokio_fs",
+ "$rust_build:tokio_io",
+ "$rust_build:tokio_process",
+ "$rust_build:tokio_threadpool",
+ "$rust_build:url",
+]
+if (is_win) {
+ main_extern += [ "$rust_build:winapi" ]
+}
+
+ts_sources = [
+ "../js/assets.ts",
+ "../js/blob.ts",
+ "../js/buffer.ts",
+ "../js/build.ts",
+ "../js/chmod.ts",
+ "../js/console_table.ts",
+ "../js/compiler.ts",
+ "../js/console.ts",
+ "../js/copy_file.ts",
+ "../js/core.ts",
+ "../js/custom_event.ts",
+ "../js/deno.ts",
+ "../js/dir.ts",
+ "../js/dispatch.ts",
+ "../js/dom_types.ts",
+ "../js/errors.ts",
+ "../js/event.ts",
+ "../js/event_target.ts",
+ "../js/fetch.ts",
+ "../js/format_error.ts",
+ "../js/dom_file.ts",
+ "../js/file_info.ts",
+ "../js/files.ts",
+ "../js/flatbuffers.ts",
+ "../js/form_data.ts",
+ "../js/globals.ts",
+ "../js/headers.ts",
+ "../js/io.ts",
+ "../js/lib.web_assembly.d.ts",
+ "../js/location.ts",
+ "../js/main.ts",
+ "../js/make_temp_dir.ts",
+ "../js/metrics.ts",
+ "../js/mkdir.ts",
+ "../js/mock_builtin.js",
+ "../js/net.ts",
+ "../js/os.ts",
+ "../js/permissions.ts",
+ "../js/plugins.d.ts",
+ "../js/process.ts",
+ "../js/read_dir.ts",
+ "../js/read_file.ts",
+ "../js/read_link.ts",
+ "../js/remove.ts",
+ "../js/rename.ts",
+ "../js/repl.ts",
+ "../js/resources.ts",
+ "../js/stat.ts",
+ "../js/symlink.ts",
+ "../js/text_encoding.ts",
+ "../js/timers.ts",
+ "../js/truncate.ts",
+ "../js/types.ts",
+ "../js/url.ts",
+ "../js/url_search_params.ts",
+ "../js/util.ts",
+ "../js/window.ts",
+ "../js/workers.ts",
+ "../js/write_file.ts",
+ "../js/performance.ts",
+ "../js/version.ts",
+ "../tsconfig.json",
+
+ # Listing package.json and yarn.lock as sources ensures the bundle is rebuilt
+ # when npm packages are added/removed or their contents changes.
+ "../package.json",
+ "../third_party/yarn.lock",
+]
+
+# When Cargo is driving the build, GN/Ninja are used to produce these non-Rust
+# targets. Cargo handles all Rust source files and the final linking step.
+group("deno_deps") {
+ deps = [
+ ":msg_rs",
+ ":snapshot_compiler",
+ ":snapshot_deno",
+ ]
+}
+
+# Optimized dependencies for cross compiled builds.
+# This can be removed once we get snapshots into cross compiled builds.
+group("deno_deps_cross") {
+ testonly = true
+ deps = [
+ ":compiler_bundle",
+ ":main_bundle",
+ ":msg_rs",
+ ]
+}
+
+# Reads the cargo info from Cargo.toml
+deno_cargo_info = exec_script(
+ "../build_extra/rust/get_cargo_info.py",
+ [ rebase_path("Cargo.toml", root_build_dir) ], "json")
+
+rust_executable("deno") {
+ source_root = "main.rs"
+ extern = main_extern
+ deps = [
+ ":deno_deps",
+ ]
+
+ # Extract version from Cargo.toml
+ # TODO integrate this into rust.gni by allowing the rust_executable template
+ # to specify a cargo.toml from which it will extract a version.
+ crate_version = deno_cargo_info.version
+ inputs = [
+ "Cargo.toml",
+ ]
+}
+
+rust_test("test_rs") {
+ source_root = "main.rs"
+ extern = main_extern
+ deps = [
+ ":deno_deps",
+ ]
+
+ # Extract version from Cargo.toml
+ crate_version = deno_cargo_info.version
+ inputs = [
+ "Cargo.toml",
+ ]
+}
+
+
+# Generates the core TypeScript type library for deno that will be
+# included in the runtime bundle
+run_node("deno_runtime_declaration") {
+ out_dir = target_gen_dir
+ sources = ts_sources
+ outputs = [
+ "$out_dir/lib/lib.deno_runtime.d.ts",
+ ]
+ deps = [
+ ":msg_ts",
+ ]
+ inputs = ts_sources + [
+ "//tools/ts_library_builder/tsconfig.json",
+ "//tools/ts_library_builder/main.ts",
+ "//tools/ts_library_builder/build_library.ts",
+ "//tools/ts_library_builder/ast_util.ts",
+ ]
+ args = [
+ rebase_path("//node_modules/ts-node/dist/bin.js", root_build_dir),
+ "--project",
+ rebase_path("//tools/ts_library_builder/tsconfig.json"),
+ "--skip-ignore",
+ rebase_path("//tools/ts_library_builder/main.ts", root_build_dir),
+ "--basePath",
+ rebase_path("//", root_build_dir),
+ "--inline",
+ rebase_path("//js/lib.web_assembly.d.ts", root_build_dir),
+ "--buildPath",
+ rebase_path(root_build_dir, root_build_dir),
+ "--outFile",
+ rebase_path(outputs[0], root_build_dir),
+ "--silent",
+ ]
+ if (is_debug) {
+ args += [ "--debug" ]
+ }
+}
+
+bundle("main_bundle") {
+ out_dir = "$target_gen_dir/bundle/"
+ out_name = "main"
+ deps = [
+ ":deno_runtime_declaration",
+ ":msg_ts",
+ ":write_gn_args",
+ ]
+ data = [
+ "$target_gen_dir/gn_args.txt",
+ ]
+}
+
+bundle("compiler_bundle") {
+ out_dir = "$target_gen_dir/bundle/"
+ out_name = "compiler"
+ deps = [
+ ":deno_runtime_declaration",
+ ":msg_ts",
+ ":write_gn_args",
+ ]
+ data = [
+ "$target_gen_dir/gn_args.txt",
+ ]
+}
+
+ts_flatbuffer("msg_ts") {
+ sources = [
+ "msg.fbs",
+ ]
+}
+
+rust_flatbuffer("msg_rs") {
+ sources = [
+ "msg.fbs",
+ ]
+}
+
+# Generates $target_gen_dir/snapshot_deno.bin
+snapshot("snapshot_deno") {
+ source_root = "$target_gen_dir/bundle/main.js"
+ deps = [
+ ":main_bundle",
+ ]
+}
+
+# Generates $target_gen_dir/snapshot_compiler.bin
+snapshot("snapshot_compiler") {
+ source_root = "$target_gen_dir/bundle/compiler.js"
+ deps = [
+ ":compiler_bundle",
+ ]
+}
+
+action("write_gn_args") {
+ script = "//tools/write_gn_args.py"
+ outputs = [
+ "$target_gen_dir/gn_args.txt",
+ ]
+ args = [ rebase_path(outputs[0], root_build_dir) ]
+}