![electron-roller[bot]](/assets/img/avatar_default.png)
* chore: bump node in DEPS to v22.13.0 * chore: bump node in DEPS to v22.13.1 * src: move evp stuff to ncrypto https://github.com/nodejs/node/pull/54911 * crypto: add Date fields for validTo and validFrom https://github.com/nodejs/node/pull/54159 * module: fix discrepancy between .ts and .js https://github.com/nodejs/node/pull/54461 * esm: do not interpret "main" as a URL https://github.com/nodejs/node/pull/55003 * src: modernize likely/unlikely hints https://github.com/nodejs/node/pull/55155 * chore: update patch indices * crypto: add validFromDate and validToDate fields to X509Certificate https://github.com/nodejs/node/pull/54159 * chore: fixup perfetto patch * fix: clang warning in simdjson * src: add receiver to fast api callback methods https://github.com/nodejs/node/pull/54408 * chore: fixup revert patch * fixup! esm: do not interpret "main" as a URL * fixup! crypto: add Date fields for validTo and validFrom * fix: move ArrayBuffer test patch * src: fixup Error.stackTraceLimit during snapshot building https://github.com/nodejs/node/pull/55121 * fix: bad rebase * chore: fixup amaro * chore: address feedback from review * src: revert filesystem::path changes https://github.com/nodejs/node/pull/55015 * chore: fixup GN build file * https://github.com/nodejs/node/pull/55529 * https://github.com/nodejs/node/pull/55798 * https://github.com/nodejs/node/pull/55530 * module: simplify --inspect-brk handling https://github.com/nodejs/node/pull/55679 * src: fix outdated js2c.cc references https://github.com/nodejs/node/pull/56133 * crypto: include openssl/rand.h explicitly https://github.com/nodejs/node/pull/55425 * build: use variable for crypto dep path https://github.com/nodejs/node/pull/55928 * crypto: fix RSA_PKCS1_PADDING error message https://github.com/nodejs/node/pull/55629 * build: use variable for simdutf path https://github.com/nodejs/node/pull/56196 * test,crypto: make crypto tests work with BoringSSL https://github.com/nodejs/node/pull/55491 * fix: suppress clang -Wdeprecated-declarations in libuv https://github.com/libuv/libuv/pull/4486 * deps: update libuv to 1.49.1 https://github.com/nodejs/node/pull/55114 * test: make test-node-output-v8-warning more flexible https://github.com/nodejs/node/pull/55401 * [v22.x] Revert "v8: enable maglev on supported architectures" https://github.com/nodejs/node/pull/54384 * fix: potential WIN32_LEAN_AND_MEAN redefinition https://github.com/c-ares/c-ares/pull/869 * deps: update nghttp2 to 1.64.0 https://github.com/nodejs/node/pull/55559 * src: provide workaround for container-overflow https://github.com/nodejs/node/pull/55591 * build: use variable for simdutf path https://github.com/nodejs/node/pull/56196 * chore: fixup patch indices * fixup! module: simplify --inspect-brk handling * lib: fix fs.readdir recursive async https://github.com/nodejs/node/pull/56041 * lib: avoid excluding symlinks in recursive fs.readdir with filetypes https://github.com/nodejs/node/pull/55714/ This doesn't currently play well with ASAR - this should be fixed in a follow up * test: disable CJS permission test for config.main This has diverged as a result of our revert of src,lb: reducing C++ calls of esm legacy main resolve * fixup! lib: fix fs.readdir recursive async * deps: update libuv to 1.49.1 https://github.com/nodejs/node/pull/55114 --------- Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
414 lines
14 KiB
Diff
414 lines
14 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jeremy Apthorp <nornagon@nornagon.net>
|
|
Date: Tue, 26 Feb 2019 17:07:45 -0800
|
|
Subject: build: add GN build files
|
|
|
|
This adds GN build files for Node, so we don't have to build with GYP.
|
|
|
|
Note that there always GN files in upstream Node in 20/21 branches,
|
|
however those files were cherry-picked from main branch and do not
|
|
really in 20/21. We have to wait until 22 is released to be able to
|
|
build with upstream GN files.
|
|
|
|
diff --git a/deps/simdjson/unofficial.gni b/deps/simdjson/unofficial.gni
|
|
index d6909b95886f4de3f0b953c2a2992f69066b7434..972955f9144aafcd3a3fe278b7aaad401cadddda 100644
|
|
--- a/deps/simdjson/unofficial.gni
|
|
+++ b/deps/simdjson/unofficial.gni
|
|
@@ -18,5 +18,6 @@ template("simdjson_gn_build") {
|
|
forward_variables_from(invoker, "*")
|
|
public_configs = [ ":simdjson_config" ]
|
|
sources = gypi_values.simdjson_sources
|
|
+ cflags_c = [ "-Wdeprecated-literal-operator" ]
|
|
}
|
|
}
|
|
diff --git a/node.gni b/node.gni
|
|
index a2123cc6c6d21c53fafc8934203b3720393e7b11..245a43920c7baf000ba63192a84a4c3fd219be7d 100644
|
|
--- a/node.gni
|
|
+++ b/node.gni
|
|
@@ -5,10 +5,10 @@
|
|
# Embedder options.
|
|
declare_args() {
|
|
# The location of Node.js in source code tree.
|
|
- node_path = "//node"
|
|
+ node_path = "//third_party/electron_node"
|
|
|
|
# The location of V8 - use the one from node's deps by default.
|
|
- node_v8_path = "$node_path/deps/v8"
|
|
+ node_v8_path = "//v8"
|
|
|
|
# The location of OpenSSL - use the one from node's deps by default.
|
|
node_openssl_path = "$node_path/deps/openssl"
|
|
@@ -44,7 +44,7 @@ declare_args() {
|
|
node_openssl_system_ca_path = ""
|
|
|
|
# Initialize v8 platform during node.js startup.
|
|
- node_use_v8_platform = true
|
|
+ node_use_v8_platform = false
|
|
|
|
# Custom build tag.
|
|
node_tag = ""
|
|
@@ -64,10 +64,16 @@ declare_args() {
|
|
# TODO(zcbenz): There are few broken things for now:
|
|
# 1. cross-os compilation is not supported.
|
|
# 2. node_mksnapshot crashes when cross-compiling for x64 from arm64.
|
|
- node_use_node_snapshot = (host_os == target_os) && !(host_cpu == "arm64" && target_cpu == "x64")
|
|
+ node_use_node_snapshot = false
|
|
|
|
# Build with Amaro (TypeScript utils).
|
|
node_use_amaro = true
|
|
+
|
|
+ # Allows downstream packagers (eg. Linux distributions) to build against system shared libraries.
|
|
+ use_system_cares = false
|
|
+ use_system_nghttp2 = false
|
|
+ use_system_llhttp = false
|
|
+ use_system_histogram = false
|
|
}
|
|
|
|
assert(!node_enable_inspector || node_use_openssl,
|
|
diff --git a/src/node_builtins.cc b/src/node_builtins.cc
|
|
index 9aaf5626fcfe4a9b168e069df0265df7b535b76e..ece9c4656919d8dc408112142367791628dd5f8b 100644
|
|
--- a/src/node_builtins.cc
|
|
+++ b/src/node_builtins.cc
|
|
@@ -779,6 +779,7 @@ void BuiltinLoader::RegisterExternalReferences(
|
|
registry->Register(GetNatives);
|
|
|
|
RegisterExternalReferencesForInternalizedBuiltinCode(registry);
|
|
+ EmbedderRegisterExternalReferencesForInternalizedBuiltinCode(registry);
|
|
}
|
|
|
|
} // namespace builtins
|
|
diff --git a/src/node_builtins.h b/src/node_builtins.h
|
|
index a73de23a1debfdac66873e0baccf882e383bfc36..7ac5291be093773ee7efd39e77e01bf5d5ce5247 100644
|
|
--- a/src/node_builtins.h
|
|
+++ b/src/node_builtins.h
|
|
@@ -74,6 +74,8 @@ using BuiltinCodeCacheMap =
|
|
// Generated by tools/js2c.cc as node_javascript.cc
|
|
void RegisterExternalReferencesForInternalizedBuiltinCode(
|
|
ExternalReferenceRegistry* registry);
|
|
+void EmbedderRegisterExternalReferencesForInternalizedBuiltinCode(
|
|
+ ExternalReferenceRegistry* registry);
|
|
|
|
// Handles compilation and caching of built-in JavaScript modules and
|
|
// bootstrap scripts, whose source are bundled into the binary as static data.
|
|
diff --git a/tools/install.py b/tools/install.py
|
|
index 17515720ba9c85d533465365188021074a8d30f4..7232be863d517c8445059a57c5938c2cbdeaf81b 100755
|
|
--- a/tools/install.py
|
|
+++ b/tools/install.py
|
|
@@ -291,6 +291,7 @@ def headers(options, action):
|
|
'include/v8-promise.h',
|
|
'include/v8-proxy.h',
|
|
'include/v8-regexp.h',
|
|
+ 'include/v8-sandbox.h',
|
|
'include/v8-script.h',
|
|
'include/v8-snapshot.h',
|
|
'include/v8-source-location.h',
|
|
diff --git a/tools/js2c.cc b/tools/js2c.cc
|
|
old mode 100644
|
|
new mode 100755
|
|
index 21992cbe894a880e3223c379326b62db22f2f12d..1296a5457422099035ba34f2b02624f2e9dfb0f0
|
|
--- a/tools/js2c.cc
|
|
+++ b/tools/js2c.cc
|
|
@@ -28,6 +28,7 @@ namespace js2c {
|
|
int Main(int argc, char* argv[]);
|
|
|
|
static bool is_verbose = false;
|
|
+static bool only_js = false;
|
|
|
|
void Debug(const char* format, ...) {
|
|
va_list arguments;
|
|
@@ -175,6 +176,7 @@ const char* kTemplate = R"(
|
|
#include "node_builtins.h"
|
|
#include "node_external_reference.h"
|
|
#include "node_internals.h"
|
|
+#include "node_threadsafe_cow-inl.h"
|
|
|
|
namespace node {
|
|
|
|
@@ -190,7 +192,11 @@ const ThreadsafeCopyOnWrite<BuiltinSourceMap> global_source_map {
|
|
} // anonymous namespace
|
|
|
|
void BuiltinLoader::LoadJavaScriptSource() {
|
|
- source_ = global_source_map;
|
|
+ BuiltinSourceMap map = *source_.read();
|
|
+ BuiltinSourceMap new_map = *global_source_map.read();
|
|
+
|
|
+ map.merge(new_map);
|
|
+ source_ = ThreadsafeCopyOnWrite<BuiltinSourceMap>(map);
|
|
}
|
|
|
|
void RegisterExternalReferencesForInternalizedBuiltinCode(
|
|
@@ -207,6 +213,45 @@ UnionBytes BuiltinLoader::GetConfig() {
|
|
} // namespace node
|
|
)";
|
|
|
|
+const char* kEmbedderTemplate = R"(
|
|
+#include "env-inl.h"
|
|
+#include "node_builtins.h"
|
|
+#include "node_external_reference.h"
|
|
+#include "node_internals.h"
|
|
+#include "node_threadsafe_cow-inl.h"
|
|
+
|
|
+namespace node {
|
|
+
|
|
+namespace builtins {
|
|
+
|
|
+%.*s
|
|
+namespace {
|
|
+const ThreadsafeCopyOnWrite<BuiltinSourceMap> global_source_map {
|
|
+ BuiltinSourceMap {
|
|
+%.*s
|
|
+ } // BuiltinSourceMap
|
|
+
|
|
+}; // ThreadsafeCopyOnWrite
|
|
+} // anonymous namespace
|
|
+
|
|
+void BuiltinLoader::LoadEmbedderJavaScriptSource() {
|
|
+ BuiltinSourceMap map = *source_.read();
|
|
+ BuiltinSourceMap new_map = *global_source_map.read();
|
|
+
|
|
+ map.merge(new_map);
|
|
+ source_ = ThreadsafeCopyOnWrite<BuiltinSourceMap>(map);
|
|
+}
|
|
+
|
|
+void EmbedderRegisterExternalReferencesForInternalizedBuiltinCode(
|
|
+ ExternalReferenceRegistry* registry) {
|
|
+%.*s
|
|
+}
|
|
+
|
|
+} // namespace builtins
|
|
+
|
|
+} // namespace node
|
|
+)";
|
|
+
|
|
Fragment Format(const Fragments& definitions,
|
|
const Fragments& initializers,
|
|
const Fragments& registrations) {
|
|
@@ -216,13 +261,12 @@ Fragment Format(const Fragments& definitions,
|
|
size_t init_size = init_buf.size();
|
|
std::vector<char> reg_buf = Join(registrations, "\n");
|
|
size_t reg_size = reg_buf.size();
|
|
-
|
|
- size_t result_size =
|
|
- def_size + init_size + reg_size + strlen(kTemplate) + 100;
|
|
+ size_t result_size = def_size + init_size + reg_size +
|
|
+ strlen(only_js ? kEmbedderTemplate: kTemplate) + 300;
|
|
std::vector<char> result(result_size, 0);
|
|
int r = snprintf(result.data(),
|
|
result_size,
|
|
- kTemplate,
|
|
+ only_js ? kEmbedderTemplate: kTemplate,
|
|
static_cast<int>(def_buf.size()),
|
|
def_buf.data(),
|
|
static_cast<int>(init_buf.size()),
|
|
@@ -846,12 +890,15 @@ int JS2C(const FileList& js_files,
|
|
}
|
|
}
|
|
|
|
+ if (!only_js) {
|
|
assert(FilenameIsConfigGypi(config));
|
|
// "config.gypi" -> config_raw.
|
|
int r = AddGypi("config", config, &definitions);
|
|
if (r != 0) {
|
|
return r;
|
|
}
|
|
+ }
|
|
+
|
|
Fragment out = Format(definitions, initializers, registrations);
|
|
return WriteIfChanged(out, dest);
|
|
}
|
|
@@ -877,6 +924,8 @@ int Main(int argc, char* argv[]) {
|
|
std::string arg(argv[i]);
|
|
if (arg == "--verbose") {
|
|
is_verbose = true;
|
|
+ } else if (arg == "--only-js") {
|
|
+ only_js = true;
|
|
} else if (arg == "--root") {
|
|
if (i == argc - 1) {
|
|
fprintf(stderr, "--root must be followed by a path\n");
|
|
@@ -925,6 +974,14 @@ int Main(int argc, char* argv[]) {
|
|
}
|
|
}
|
|
|
|
+ if (only_js) {
|
|
+ auto js_it = file_map.find(".js");
|
|
+
|
|
+ assert(file_map.size() == 1);
|
|
+ assert(js_it != file_map.end());
|
|
+
|
|
+ return JS2C(js_it->second, FileList(), std::string(), output);
|
|
+ } else {
|
|
// Should have exactly 3 types: `.js`, `.mjs` and `.gypi`.
|
|
assert(file_map.size() == 3);
|
|
auto gypi_it = file_map.find(".gypi");
|
|
@@ -951,6 +1008,7 @@ int Main(int argc, char* argv[]) {
|
|
std::sort(mjs_it->second.begin(), mjs_it->second.end());
|
|
|
|
return JS2C(js_it->second, mjs_it->second, gypi_it->second[0], output);
|
|
+ }
|
|
}
|
|
} // namespace js2c
|
|
} // namespace node
|
|
diff --git a/tools/search_files.py b/tools/search_files.py
|
|
index 65d0e1be42f0a85418491ebb548278cf431aa6a0..d4a31342f1c6107b029394c6e1d00a1d1e877e03 100755
|
|
--- a/tools/search_files.py
|
|
+++ b/tools/search_files.py
|
|
@@ -14,6 +14,7 @@ if __name__ == '__main__':
|
|
try:
|
|
files = SearchFiles(*sys.argv[2:])
|
|
files = [ os.path.relpath(x, sys.argv[1]) for x in files ]
|
|
+ files = [os.path.normpath(x).replace(os.sep, '/') for x in files]
|
|
print('\n'.join(files))
|
|
except Exception as e:
|
|
print(str(e))
|
|
diff --git a/unofficial.gni b/unofficial.gni
|
|
index 9e496d99d7141bf42ef7374a3c676c7b333eeeab..3632d5bd21e277fcbd8d62dc65598a7f7c87f00e 100644
|
|
--- a/unofficial.gni
|
|
+++ b/unofficial.gni
|
|
@@ -145,6 +145,7 @@ template("node_gn_build") {
|
|
public_deps = [
|
|
"deps/ada",
|
|
"deps/uv",
|
|
+ "//electron:electron_js2c",
|
|
"deps/simdjson",
|
|
"$node_v8_path",
|
|
]
|
|
@@ -156,7 +157,6 @@ template("node_gn_build") {
|
|
"deps/llhttp",
|
|
"deps/nbytes",
|
|
"deps/nghttp2",
|
|
- "deps/ngtcp2",
|
|
"deps/postject",
|
|
"deps/sqlite",
|
|
"deps/uvwasi",
|
|
@@ -165,7 +165,11 @@ template("node_gn_build") {
|
|
"$node_v8_path:v8_libplatform",
|
|
]
|
|
|
|
+ cflags_cc = [ "-Wno-unguarded-availability-new" ]
|
|
+
|
|
sources = [
|
|
+ "src/node_snapshot_stub.cc",
|
|
+ "$root_gen_dir/electron_natives.cc",
|
|
"$target_gen_dir/node_javascript.cc",
|
|
] + gypi_values.node_sources
|
|
|
|
@@ -185,7 +189,7 @@ template("node_gn_build") {
|
|
}
|
|
if (node_use_openssl) {
|
|
deps += [ "deps/ncrypto" ]
|
|
- public_deps += [ "$node_openssl_path" ]
|
|
+ public_deps += [ "//third_party/boringssl" ]
|
|
sources += gypi_values.node_crypto_sources
|
|
}
|
|
if (node_enable_inspector) {
|
|
@@ -282,6 +286,7 @@ template("node_gn_build") {
|
|
}
|
|
|
|
executable("node_js2c") {
|
|
+ defines = []
|
|
deps = [
|
|
"deps/uv",
|
|
"$node_simdutf_path",
|
|
@@ -292,26 +297,75 @@ template("node_gn_build") {
|
|
"src/embedded_data.cc",
|
|
"src/embedded_data.h",
|
|
]
|
|
- include_dirs = [ "src" ]
|
|
+ include_dirs = [ "src", "tools" ]
|
|
+
|
|
+ if (!is_win) {
|
|
+ defines += [ "NODE_JS2C_USE_STRING_LITERALS" ]
|
|
+ }
|
|
+ }
|
|
+
|
|
+ node_deps_files = gypi_values.deps_files + node_builtin_shareable_builtins
|
|
+ node_library_files = exec_script("./tools/search_files.py",
|
|
+ [ rebase_path(".", root_build_dir),
|
|
+ rebase_path("lib", root_build_dir),
|
|
+ "js" ],
|
|
+ "list lines")
|
|
+
|
|
+ fs_files = [
|
|
+ "lib/internal/fs/cp/cp-sync.js",
|
|
+ "lib/internal/fs/cp/cp.js",
|
|
+ "lib/internal/fs/dir.js",
|
|
+ "lib/internal/fs/glob.js",
|
|
+ "lib/internal/fs/promises.js",
|
|
+ "lib/internal/fs/read/context.js",
|
|
+ "lib/internal/fs/recursive_watch.js",
|
|
+ "lib/internal/fs/rimraf.js",
|
|
+ "lib/internal/fs/streams.js",
|
|
+ "lib/internal/fs/sync_write_stream.js",
|
|
+ "lib/internal/fs/utils.js",
|
|
+ "lib/internal/fs/watchers.js",
|
|
+ "lib/fs.js",
|
|
+ "lib/fs/promises.js"
|
|
+ ]
|
|
+
|
|
+ original_fs_files = []
|
|
+ foreach(file, fs_files) {
|
|
+ original_fs_files += [string_replace(string_replace(string_replace(file, "internal/fs/", "internal/original-fs/"), "lib/fs.js", "lib/original-fs.js"), "lib/fs/", "lib/original-fs/")]
|
|
+ }
|
|
+
|
|
+ copy("node_js2c_inputs") {
|
|
+ sources = node_deps_files + node_library_files
|
|
+ outputs = [
|
|
+ "$target_gen_dir/js2c_inputs/{{source_target_relative}}",
|
|
+ ]
|
|
+ }
|
|
+
|
|
+ action("node_js2c_original_fs") {
|
|
+ script = "//electron/script/node/generate_original_fs.py"
|
|
+ inputs = fs_files
|
|
+ deps = [ ":node_js2c_inputs" ]
|
|
+
|
|
+ outputs = []
|
|
+ foreach(file, original_fs_files) {
|
|
+ outputs += ["$target_gen_dir/js2c_inputs/$file"]
|
|
+ }
|
|
+
|
|
+ args = [rebase_path("$target_gen_dir/js2c_inputs")] + fs_files
|
|
}
|
|
|
|
action("run_node_js2c") {
|
|
- script = "$node_v8_path/tools/run.py"
|
|
+ script = "//electron/build/run-in-dir.py"
|
|
deps = [
|
|
+ ":node_js2c_original_fs",
|
|
":node_js2c($host_toolchain)",
|
|
":generate_config_gypi",
|
|
]
|
|
|
|
- node_deps_files = gypi_values.deps_files + node_builtin_shareable_builtins
|
|
- node_library_files = exec_script("./tools/search_files.py",
|
|
- [ rebase_path(".", root_build_dir),
|
|
- rebase_path("lib", root_build_dir),
|
|
- "js" ],
|
|
- "list lines")
|
|
-
|
|
+ config_gypi = [ "$target_gen_dir/config.gypi" ]
|
|
inputs = node_library_files +
|
|
node_deps_files +
|
|
- [ "$target_gen_dir/config.gypi" ]
|
|
+ get_target_outputs(":node_js2c_original_fs") +
|
|
+ config_gypi
|
|
outputs = [ "$target_gen_dir/node_javascript.cc" ]
|
|
|
|
# Get the path to node_js2c executable of the host toolchain.
|
|
@@ -325,11 +379,11 @@ template("node_gn_build") {
|
|
get_label_info(":node_js2c($host_toolchain)", "name") +
|
|
host_executable_suffix
|
|
|
|
- args = [ rebase_path(node_js2c_path),
|
|
- rebase_path("$target_gen_dir/node_javascript.cc"),
|
|
- "--root", rebase_path("."),
|
|
- "lib", rebase_path("$target_gen_dir/config.gypi") ] +
|
|
- node_deps_files
|
|
+ args = [ rebase_path("$target_gen_dir/js2c_inputs"),
|
|
+ rebase_path(node_js2c_path),
|
|
+ rebase_path("$target_gen_dir/node_javascript.cc")] +
|
|
+ rebase_path(config_gypi) + node_deps_files +
|
|
+ original_fs_files + node_library_files
|
|
}
|
|
|
|
executable("node_cctest") {
|