Skip to content

Commit

Permalink
build: Factor out common code into core/build_util.rs (denoland#8756)
Browse files Browse the repository at this point in the history
  • Loading branch information
ry committed Dec 14, 2020
1 parent b2bda57 commit 502c77a
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 100 deletions.
47 changes: 3 additions & 44 deletions cli/build.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.

use deno_core::build_util::create_snapshot;
use deno_core::build_util::get_js_files;
use deno_core::error::custom_error;
use deno_core::json_op_sync;
use deno_core::serde_json;
Expand All @@ -13,35 +15,6 @@ use std::env;
use std::path::Path;
use std::path::PathBuf;

// TODO(bartlomieju): this module contains a lot of duplicated
// logic with `runtime/build.rs`, factor out to `deno_core`.
fn create_snapshot(
mut js_runtime: JsRuntime,
snapshot_path: &Path,
files: Vec<PathBuf>,
) {
// TODO(nayeemrmn): https://github.com/rust-lang/cargo/issues/3946 to get the
// workspace root.
let display_root = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap();
for file in files {
println!("cargo:rerun-if-changed={}", file.display());
let display_path = file.strip_prefix(display_root).unwrap();
let display_path_str = display_path.display().to_string();
js_runtime
.execute(
&("deno:".to_string() + &display_path_str.replace('\\', "/")),
&std::fs::read_to_string(&file).unwrap(),
)
.unwrap();
}

let snapshot = js_runtime.snapshot();
let snapshot_slice: &[u8] = &*snapshot;
println!("Snapshot size: {}", snapshot_slice.len());
std::fs::write(&snapshot_path, snapshot_slice).unwrap();
println!("Snapshot written to: {} ", snapshot_path.display());
}

#[derive(Debug, Deserialize)]
struct LoadArgs {
/// The fully qualified specifier that should be loaded.
Expand Down Expand Up @@ -258,7 +231,7 @@ fn main() {
// Main snapshot
let compiler_snapshot_path = o.join("COMPILER_SNAPSHOT.bin");

let js_files = get_js_files("tsc");
let js_files = get_js_files(&c.join("tsc"));
create_compiler_snapshot(&compiler_snapshot_path, js_files, &c);

#[cfg(target_os = "windows")]
Expand All @@ -272,17 +245,3 @@ fn main() {
res.compile().unwrap();
}
}

fn get_js_files(d: &str) -> Vec<PathBuf> {
let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
let mut js_files = std::fs::read_dir(d)
.unwrap()
.map(|dir_entry| {
let file = dir_entry.unwrap();
manifest_dir.join(file.path())
})
.filter(|path| path.extension().unwrap_or_default() == "js")
.collect::<Vec<PathBuf>>();
js_files.sort();
js_files
}
44 changes: 44 additions & 0 deletions core/build_util.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
//! Helper module used in cli/build.rs and runtime/build.rs
use crate::JsRuntime;
use std::path::Path;
use std::path::PathBuf;

pub fn create_snapshot(
mut js_runtime: JsRuntime,
snapshot_path: &Path,
files: Vec<PathBuf>,
) {
// TODO(nayeemrmn): https://github.com/rust-lang/cargo/issues/3946 to get the
// workspace root.
let display_root = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap();
for file in files {
println!("cargo:rerun-if-changed={}", file.display());
let display_path = file.strip_prefix(display_root).unwrap();
let display_path_str = display_path.display().to_string();
js_runtime
.execute(
&("deno:".to_string() + &display_path_str.replace('\\', "/")),
&std::fs::read_to_string(&file).unwrap(),
)
.unwrap();
}

let snapshot = js_runtime.snapshot();
let snapshot_slice: &[u8] = &*snapshot;
println!("Snapshot size: {}", snapshot_slice.len());
std::fs::write(&snapshot_path, snapshot_slice).unwrap();
println!("Snapshot written to: {} ", snapshot_path.display());
}

pub fn get_js_files(d: &Path) -> Vec<PathBuf> {
let mut js_files = std::fs::read_dir(d)
.unwrap()
.map(|dir_entry| {
let file = dir_entry.unwrap();
d.join(file.path())
})
.filter(|path| path.extension().unwrap_or_default() == "js")
.collect::<Vec<PathBuf>>();
js_files.sort();
js_files
}
1 change: 1 addition & 0 deletions core/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ extern crate log;
mod async_cancel;
mod async_cell;
mod bindings;
pub mod build_util;
pub mod error;
mod flags;
mod gotham_state;
Expand Down
68 changes: 12 additions & 56 deletions runtime/build.rs
Original file line number Diff line number Diff line change
@@ -1,51 +1,12 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.

use deno_core::build_util::create_snapshot;
use deno_core::build_util::get_js_files;
use deno_core::JsRuntime;
use deno_core::RuntimeOptions;
use std::env;
use std::path::Path;
use std::path::PathBuf;

// TODO(bartlomieju): this module contains a lot of duplicated
// logic with `cli/build.rs`, factor out to `deno_core`.
fn create_snapshot(
mut js_runtime: JsRuntime,
snapshot_path: &Path,
files: Vec<PathBuf>,
) {
deno_web::init(&mut js_runtime);
deno_fetch::init(&mut js_runtime);
deno_crypto::init(&mut js_runtime);
// TODO(nayeemrmn): https://github.com/rust-lang/cargo/issues/3946 to get the
// workspace root.
let display_root = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap();
for file in files {
println!("cargo:rerun-if-changed={}", file.display());
let display_path = file.strip_prefix(display_root).unwrap();
let display_path_str = display_path.display().to_string();
js_runtime
.execute(
&("deno:".to_string() + &display_path_str.replace('\\', "/")),
&std::fs::read_to_string(&file).unwrap(),
)
.unwrap();
}

let snapshot = js_runtime.snapshot();
let snapshot_slice: &[u8] = &*snapshot;
println!("Snapshot size: {}", snapshot_slice.len());
std::fs::write(&snapshot_path, snapshot_slice).unwrap();
println!("Snapshot written to: {} ", snapshot_path.display());
}

fn create_runtime_snapshot(snapshot_path: &Path, files: Vec<PathBuf>) {
let js_runtime = JsRuntime::new(RuntimeOptions {
will_snapshot: true,
..Default::default()
});
create_snapshot(js_runtime, snapshot_path, files);
}

fn main() {
// Don't build V8 if "cargo doc" is being run. This is to support docs.rs.
if env::var_os("RUSTDOCFLAGS").is_some() {
Expand All @@ -62,20 +23,15 @@ fn main() {
// Main snapshot
let runtime_snapshot_path = o.join("CLI_SNAPSHOT.bin");

let js_files = get_js_files("rt");
create_runtime_snapshot(&runtime_snapshot_path, js_files);
}
let c = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap());
let js_files = get_js_files(&c.join("rt"));

fn get_js_files(d: &str) -> Vec<PathBuf> {
let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
let mut js_files = std::fs::read_dir(d)
.unwrap()
.map(|dir_entry| {
let file = dir_entry.unwrap();
manifest_dir.join(file.path())
})
.filter(|path| path.extension().unwrap_or_default() == "js")
.collect::<Vec<PathBuf>>();
js_files.sort();
js_files
let mut js_runtime = JsRuntime::new(RuntimeOptions {
will_snapshot: true,
..Default::default()
});
deno_web::init(&mut js_runtime);
deno_fetch::init(&mut js_runtime);
deno_crypto::init(&mut js_runtime);
create_snapshot(js_runtime, &runtime_snapshot_path, js_files);
}

0 comments on commit 502c77a

Please sign in to comment.