1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-25 15:29:32 -05:00

Use include_bytes! instead of incbin. (#1182)

This commit is contained in:
Ryan Dahl 2018-11-12 17:17:30 -08:00 committed by GitHub
parent 0c740ff85d
commit 92e404706b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 49 deletions

View file

@ -143,40 +143,12 @@ rust_executable("deno") {
}
source_set("snapshot") {
sources = [
"src/snapshot.cc",
]
configs += [ ":deno_config" ]
inputs = [
"$target_gen_dir/snapshot_deno.bin",
]
deps = [
":create_snapshot_deno",
]
# snapshot.cc doesn't need to depend on libdeno, it just needs deno_buf.
include_dirs = [ "libdeno/" ]
# src/snapshot.cc uses an assembly '.incbin' directive to embed the snapshot.
# This causes trouble when using sccache: since the snapshot file is not
# inlined by the c preprocessor, sccache doesn't take its contents into
# consideration, leading to false-positive cache hits.
# Maybe other caching tools have this issue too, but ccache is unaffected.
# Therefore, if a cc_wrapper is used that isn't ccache, include a generated
# header file that contains the the sha256 hash of the snapshot.
if (cc_wrapper != "" && cc_wrapper != "ccache") {
hash_h = "$target_gen_dir/bundle/hash.h"
inputs += [ hash_h ]
deps += [ ":bundle_hash_h" ]
if (is_win) {
cflags = [ "/FI" + rebase_path(hash_h, target_out_dir) ]
} else {
cflags = [
"-include",
rebase_path(hash_h, target_out_dir),
]
}
}
}
rust_executable("hyper_hello") {

View file

@ -139,7 +139,7 @@ impl Isolate {
});
let shared = empty(); // TODO Use shared for message passing.
let libdeno_isolate = unsafe {
libdeno::deno_new(snapshot::deno_snapshot.clone(), shared, pre_dispatch)
libdeno::deno_new(snapshot::deno_snapshot(), shared, pre_dispatch)
};
// This channel handles sending async messages back to the runtime.
let (tx, rx) = mpsc::channel::<(i32, Buf)>();

View file

@ -1,18 +0,0 @@
// Copyright 2018 the Deno authors. All rights reserved. MIT license.
#include "deno.h"
extern "C" {
extern const char snapshot_start asm("snapshot_start");
extern const char snapshot_end asm("snapshot_end");
asm(".data\n"
"snapshot_start: .incbin \"gen/snapshot_deno.bin\"\n"
"snapshot_end:\n"
".globl snapshot_start;\n"
".globl snapshot_end;");
extern const deno_buf deno_snapshot = {
nullptr, 0, reinterpret_cast<uint8_t*>(const_cast<char*>(&snapshot_start)),
static_cast<size_t>(&snapshot_end - &snapshot_start)};
}

View file

@ -1,5 +1,19 @@
// Copyright 2018 the Deno authors. All rights reserved. MIT license.
use libdeno::deno_buf;
extern "C" {
pub static deno_snapshot: deno_buf;
use std;
pub fn deno_snapshot() -> deno_buf {
let data =
include_bytes!(concat!(env!("GN_OUT_DIR"), "/gen/snapshot_deno.bin"));
let ptr = data.as_ptr();
// TODO The transmute is not necessary here. deno_buf specifies mutable
// pointers when it doesn't necessarally need mutable. So maybe the deno_buf
// type should be broken into a mutable and non-mutable version?
let ptr_mut = unsafe { std::mem::transmute::<*const u8, *mut u8>(ptr) };
deno_buf {
alloc_ptr: std::ptr::null_mut(),
alloc_len: 0,
data_ptr: ptr_mut,
data_len: data.len(),
}
}