summaryrefslogtreecommitdiff
path: root/runtime/build.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-02-20 21:45:34 +0100
committerGitHub <noreply@github.com>2023-02-20 21:45:34 +0100
commit914b08fc19e5c7268e7b04a216337e765d6a06e8 (patch)
tree39f73f4e046346f358d74ff10f62cb2d5f7078a8 /runtime/build.rs
parent4d1a14ca7fa9496f36470a7771448a9b006b0204 (diff)
build: add "include_js_files_for_snapshotting" Cargo feature (#17826)
This allows to not include source code into the binary (because it will already be included in the V8 snapshot). Nothing changes for the embedders - everything should still build the same. This commit brings the binary size from 87Mb to 82Mb on M1. Alternative to https://github.com/denoland/deno/pull/17820 and https://github.com/denoland/deno/pull/17653 --------- Co-authored-by: Leo Kettmeir <crowlkats@toaxl.com>
Diffstat (limited to 'runtime/build.rs')
-rw-r--r--runtime/build.rs33
1 files changed, 19 insertions, 14 deletions
diff --git a/runtime/build.rs b/runtime/build.rs
index a813d63cb..4678eab99 100644
--- a/runtime/build.rs
+++ b/runtime/build.rs
@@ -1,24 +1,25 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
-use deno_core::include_js_files;
use std::env;
use std::path::PathBuf;
-// This is a shim that allows to generate documentation on docs.rs
-mod not_docs {
+#[cfg(all(
+ not(feature = "docsrs"),
+ not(feature = "dont_create_runtime_snapshot")
+))]
+mod startup_snapshot {
use std::path::Path;
use super::*;
- use deno_cache::SqliteBackedCache;
- use deno_core::snapshot_util::*;
- use deno_core::Extension;
-
use deno_ast::MediaType;
use deno_ast::ParseParams;
use deno_ast::SourceTextInfo;
+ use deno_cache::SqliteBackedCache;
use deno_core::error::AnyError;
+ use deno_core::include_js_files;
+ use deno_core::snapshot_util::*;
+ use deno_core::Extension;
use deno_core::ExtensionFileSource;
- use deno_core::ExtensionFileSourceCode;
fn transpile_ts_for_snapshotting(
file_source: &ExtensionFileSource,
@@ -34,16 +35,15 @@ mod not_docs {
file_source.specifier
),
};
-
- let ExtensionFileSourceCode::IncludedInBinary(code) = file_source.code;
+ let code = file_source.code.load()?;
if !should_transpile {
- return Ok(code.to_string());
+ return Ok(code);
}
let parsed = deno_ast::parse_module(ParseParams {
specifier: file_source.specifier.to_string(),
- text_info: SourceTextInfo::from_string(code.to_string()),
+ text_info: SourceTextInfo::from_string(code),
media_type,
capture_tokens: false,
scope_analysis: false,
@@ -281,6 +281,7 @@ mod not_docs {
#[cfg(not(feature = "snapshot_from_snapshot"))]
{
+ use deno_core::ExtensionFileSourceCode;
maybe_additional_extension = Some(
Extension::builder("runtime_main")
.dependencies(vec!["runtime"])
@@ -314,9 +315,13 @@ fn main() {
// doesn't actually compile on docs.rs
if env::var_os("DOCS_RS").is_some() {
let snapshot_slice = &[];
+ #[allow(clippy::needless_borrow)]
std::fs::write(&runtime_snapshot_path, snapshot_slice).unwrap();
}
- #[cfg(not(feature = "docsrs"))]
- not_docs::build_snapshot(runtime_snapshot_path)
+ #[cfg(all(
+ not(feature = "docsrs"),
+ not(feature = "dont_create_runtime_snapshot")
+ ))]
+ startup_snapshot::build_snapshot(runtime_snapshot_path)
}