build: allow unbundling of Node.js dependencies (#44754)
This commit is contained in:
parent
8223ebc111
commit
eba0edf81e
2 changed files with 84 additions and 0 deletions
|
@ -44,3 +44,4 @@ fix_remove_harmony-import-assertions_from_node_cc.patch
|
||||||
win_almost_fix_race_detecting_esrch_in_uv_kill.patch
|
win_almost_fix_race_detecting_esrch_in_uv_kill.patch
|
||||||
chore_disable_deprecation_ftbfs_in_simdjson_header.patch
|
chore_disable_deprecation_ftbfs_in_simdjson_header.patch
|
||||||
src_provide_workaround_for_container-overflow.patch
|
src_provide_workaround_for_container-overflow.patch
|
||||||
|
build_allow_unbundling_of_node_js_dependencies.patch
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Shelley Vohr <shelley.vohr@gmail.com>
|
||||||
|
Date: Sun, 17 Nov 2024 22:33:19 +0100
|
||||||
|
Subject: build: allow unbundling of Node.js dependencies
|
||||||
|
|
||||||
|
Linux distributions have guidelines on using distro-provided dependencies,
|
||||||
|
rather than compiling them in statically.
|
||||||
|
|
||||||
|
This PR this enables downstream packagers to unbundle these dependencies.
|
||||||
|
We don't need to do this for zlib, as the existing gn workflow uses the same
|
||||||
|
//third_party/zlib, so unbundling zlib with Chromium tools in
|
||||||
|
//build/linux/unbundle works already. This adds support for some of the others.
|
||||||
|
|
||||||
|
Upstreamed at https://github.com/nodejs/node/pull/55903
|
||||||
|
|
||||||
|
diff --git a/node.gni b/node.gni
|
||||||
|
index 18d58591e3d0f1f3512db00033c3410a65702864..99ec540ec41ddf5682eed7618ba87d6935b3b982 100644
|
||||||
|
--- a/node.gni
|
||||||
|
+++ b/node.gni
|
||||||
|
@@ -61,6 +61,12 @@ declare_args() {
|
||||||
|
# 1. cross-os compilation is not supported.
|
||||||
|
# 2. node_mksnapshot crashes when cross-compiling for x64 from arm64.
|
||||||
|
node_use_node_snapshot = false
|
||||||
|
+
|
||||||
|
+ # 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/unofficial.gni b/unofficial.gni
|
||||||
|
index 3d8b7957e791ce2fa2a8d0937a87b6010087803d..c23922a301a721662ff34bf6e54fd26b41f25ccc 100644
|
||||||
|
--- a/unofficial.gni
|
||||||
|
+++ b/unofficial.gni
|
||||||
|
@@ -147,7 +147,6 @@ template("node_gn_build") {
|
||||||
|
":run_node_js2c",
|
||||||
|
"deps/cares",
|
||||||
|
"deps/histogram",
|
||||||
|
- "deps/llhttp",
|
||||||
|
"deps/nbytes",
|
||||||
|
"deps/nghttp2",
|
||||||
|
"deps/postject",
|
||||||
|
@@ -178,7 +177,17 @@ template("node_gn_build") {
|
||||||
|
configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
|
||||||
|
configs += [ "//build/config/gcc:symbol_visibility_default" ]
|
||||||
|
}
|
||||||
|
-
|
||||||
|
+ if (use_system_llhttp) {
|
||||||
|
+ libs += [ "llhttp" ]
|
||||||
|
+ } else {
|
||||||
|
+ deps += [ "deps/llhttp" ]
|
||||||
|
+ }
|
||||||
|
+ if (use_system_histogram) {
|
||||||
|
+ libs += [ "hdr_histogram" ]
|
||||||
|
+ include_dirs += [ "/usr/include/hdr" ]
|
||||||
|
+ } else {
|
||||||
|
+ deps += [ "deps/histogram" ]
|
||||||
|
+ }
|
||||||
|
if (v8_enable_i18n_support) {
|
||||||
|
deps += [ "//third_party/icu" ]
|
||||||
|
}
|
||||||
|
@@ -205,6 +214,19 @@ template("node_gn_build") {
|
||||||
|
sources += node_inspector.node_inspector_sources +
|
||||||
|
node_inspector.node_inspector_generated_sources
|
||||||
|
}
|
||||||
|
+ if (is_linux) {
|
||||||
|
+ import("//build/config/linux/pkg_config.gni")
|
||||||
|
+ if (use_system_cares) {
|
||||||
|
+ pkg_config("cares") {
|
||||||
|
+ packages = [ "libcares" ]
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (use_system_nghttp2) {
|
||||||
|
+ pkg_config("nghttp2") {
|
||||||
|
+ packages = [ "libnghttp2" ]
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
executable(target_name) {
|
Loading…
Add table
Add a link
Reference in a new issue