diff --git a/.appveyor.yml b/.appveyor.yml index c636706189..8fb6971d09 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -13,6 +13,7 @@ environment: DENO_THIRD_PARTY_PATH: $(APPVEYOR_BUILD_FOLDER)\third_party MTIME_CACHE_DB: $(APPVEYOR_BUILD_FOLDER)\mtime_cache.xml CARGO_HOME: $(USERPROFILE)\.cargo + CARGO_TARGET_DIR: $(APPVEYOR_BUILD_FOLDER)\out\target RUSTUP_HOME: $(USERPROFILE)\.rustup RUST_BACKTRACE: 1 RELEASE_ARTIFACT: deno_win_x64.zip @@ -335,6 +336,8 @@ before_build: build_script: - python tools\build.py - ps: Set-FilesNeeded -Auto -Reason "Build finished" + - cargo check --release + - ps: Set-FilesNeeded -Auto -Reason "Cargo check finished" test_script: - python tools\lint.py diff --git a/.gitignore b/.gitignore index 98b064c7e6..ec7b964083 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ # build /out/ +/target/ *.pyc gclient_config.py_entries Cargo.lock diff --git a/.travis.yml b/.travis.yml index ff4e0c211d..5d494adcb3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,7 @@ env: - HOMEBREW_PATH=$HOME/homebrew/ - DENO_BUILD_ARGS="use_custom_libcxx=false use_sysroot=false" - DENO_BUILD_PATH=$HOME/out/Default + - CARGO_TARGET_DIR=$DENO_BUILD_PATH - DENO_BUILD_MODE=release - PATH=$TRAVIS_BUILD_DIR/third_party/llvm-build/Release+Asserts/bin:$CARGO_HOME/bin:$PATH - CCACHE_CPP2=yes @@ -88,8 +89,9 @@ before_script: script: - ./tools/lint.py - ./tools/test_format.py -- bash -c "sleep 2100; pkill ninja" & +- bash -c "sleep 2100; pkill ninja; pkill cargo" & - ./tools/build.py -j2 +- RUSTC_WRAPPER=sccache cargo check -j2 --release - ./tools/test.py $DENO_BUILD_PATH after_script: - ccache --show-stats diff --git a/BUILD.gn b/BUILD.gn index 37e89626eb..cc9850778e 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -124,9 +124,7 @@ rust_executable("deno") { source_root = "src/main.rs" extern = main_extern deps = [ - ":libdeno", - ":msg_rs", - ":snapshot", + ":deno_deps", ] } @@ -209,7 +207,6 @@ v8_executable("test_cc") { # Because snapshots are slow, it's important that snapshot_creator's # dependencies are minimal. static_library("libdeno") { - complete_static_lib = true sources = [ "libdeno/api.cc", "libdeno/binding.cc", @@ -224,6 +221,16 @@ static_library("libdeno") { configs += [ ":deno_config" ] } +static_library("deno_deps") { + complete_static_lib = true + public_deps = [ + ":libdeno", + ":msg_rs", + ":snapshot", + ] + configs += [ ":deno_config" ] +} + executable("snapshot_creator") { sources = [ "libdeno/snapshot_creator.cc", diff --git a/Cargo.toml b/Cargo.toml index 96499adbd7..a06dd54779 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,15 +13,21 @@ atty = "0.2.11" dirs = "1.0.4" flatbuffers = { path = "third_party/flatbuffers/rust/flatbuffers/" } futures = "0.1.25" +getopts = "0.2.18" hyper = "0.12.12" # The current version of hyper-rustls, 0.14.0, depends on tokio-core, which is # deprecated. hyper-rustls = { git = "https://github.com/ctz/hyper-rustls.git" } +lazy_static = "1.1.0" libc = "0.2.43" log = "0.4.5" rand = "0.4.3" +remove_dir_all = "0.5.1" ring = "0.13.2" tempfile = "3" tokio = "0.1.11" +tokio-executor = "0.1.5" +tokio-fs = "0.1.3" +tokio-io = "0.1.8" +tokio-threadpool = "0.1.6" url = "1.7.1" -getopts = "0.2.18" diff --git a/build.rs b/build.rs new file mode 100644 index 0000000000..489f9f9d26 --- /dev/null +++ b/build.rs @@ -0,0 +1,39 @@ +// Copyright 2018 the Deno authors. All rights reserved. MIT license. + +// Run "cargo build -vv" if you want to see gn output. +// TODO For the time being you must set an env var DENO_BUILD_PATH +// which might be `pwd`/out/debug or `pwd`/out/release. +// TODO Currently DENO_BUILD_PATH must be absolute. +// TODO Combine DENO_BUILD_PATH and OUT_DIR. + +use std::env; +use std::process::Command; + +fn main() { + let mode = env::var("PROFILE").unwrap(); + let deno_build_path = env::var("DENO_BUILD_PATH").unwrap(); + + let status = Command::new("python") + .env("DENO_BUILD_PATH", &deno_build_path) + .env("DENO_BUILD_MODE", &mode) + .arg("./tools/setup.py") + .status() + .expect("setup.py failed"); + assert!(status.success()); + + // These configurations must be outputted after tools/setup.py is run. + println!("cargo:rustc-link-search=native={}/obj", deno_build_path); + println!("cargo:rustc-link-lib=static=deno_deps"); + // TODO Remove this and only use OUT_DIR at some point. + println!("cargo:rustc-env=DENO_BUILD_PATH={}", deno_build_path); + + let status = Command::new("python") + .env("DENO_BUILD_PATH", &deno_build_path) + .env("DENO_BUILD_MODE", &mode) + .arg("./tools/build.py") + .arg("deno_deps") + .arg("-v") + .status() + .expect("build.py failed"); + assert!(status.success()); +} diff --git a/build_extra/rust/run.py b/build_extra/rust/run.py index 276e799cc3..0b1fa3dc9a 100644 --- a/build_extra/rust/run.py +++ b/build_extra/rust/run.py @@ -5,6 +5,9 @@ import subprocess import sys import os -os.environ["OUT_DIR"] = os.path.abspath(".") -assert os.path.isdir(os.environ["OUT_DIR"]) +# TODO This is for src/msg.rs to know where to find msg_generated.rs +# In the future we should use OUT_DIR here. +os.environ["DENO_BUILD_PATH"] = os.path.abspath(".") +assert os.path.isdir(os.environ["DENO_BUILD_PATH"]) + sys.exit(subprocess.call(sys.argv[1:], env=os.environ)) diff --git a/src/main.rs b/src/main.rs index 515f60f880..0defa68385 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,21 +23,21 @@ extern crate log; #[macro_use] extern crate futures; -mod deno_dir; -mod errors; -mod flags; +pub mod deno_dir; +pub mod errors; +pub mod flags; mod fs; mod http_util; -mod isolate; -mod libdeno; -mod msg; +pub mod isolate; +pub mod libdeno; +pub mod msg; pub mod ops; -mod permissions; -mod resources; -mod snapshot; +pub mod permissions; +pub mod resources; +pub mod snapshot; mod tokio_util; mod tokio_write; -mod version; +pub mod version; #[cfg(unix)] mod eager_unix; diff --git a/src/msg.rs b/src/msg.rs index 8b66704fc2..5c0244509c 100644 --- a/src/msg.rs +++ b/src/msg.rs @@ -1,4 +1,6 @@ #![allow(unused_imports)] #![allow(dead_code)] use flatbuffers; -include!(concat!(env!("OUT_DIR"), "/gen/msg_generated.rs")); +// TODO Replace DENO_BUILD_PATH with OUT_DIR. gn/ninja should generate into +// the same output directory as cargo uses. +include!(concat!(env!("DENO_BUILD_PATH"), "/gen/msg_generated.rs")); diff --git a/tools/format.py b/tools/format.py index 845e96228b..d1e8753d80 100755 --- a/tools/format.py +++ b/tools/format.py @@ -45,5 +45,5 @@ qrun(["node", prettier, "--write", "--loglevel=error"] + ["rollup.config.js"] + print "rustfmt" qrun([ "third_party/rustfmt/" + platform() + - "/rustfmt", "--config-path", rustfmt_config + "/rustfmt", "--config-path", rustfmt_config, "build.rs" ] + find_exts(["src"], [".rs"]))