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