From eba0edf81e3fd77f943d7715f95acc153653f4a9 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Wed, 20 Nov 2024 17:34:37 +0100 Subject: [PATCH] build: allow unbundling of Node.js dependencies (#44754) --- patches/node/.patches | 1 + ...w_unbundling_of_node_js_dependencies.patch | 83 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 patches/node/build_allow_unbundling_of_node_js_dependencies.patch diff --git a/patches/node/.patches b/patches/node/.patches index adec61684b79..aa438c8dae11 100644 --- a/patches/node/.patches +++ b/patches/node/.patches @@ -44,3 +44,4 @@ fix_remove_harmony-import-assertions_from_node_cc.patch win_almost_fix_race_detecting_esrch_in_uv_kill.patch chore_disable_deprecation_ftbfs_in_simdjson_header.patch src_provide_workaround_for_container-overflow.patch +build_allow_unbundling_of_node_js_dependencies.patch diff --git a/patches/node/build_allow_unbundling_of_node_js_dependencies.patch b/patches/node/build_allow_unbundling_of_node_js_dependencies.patch new file mode 100644 index 000000000000..d5a2357c0945 --- /dev/null +++ b/patches/node/build_allow_unbundling_of_node_js_dependencies.patch @@ -0,0 +1,83 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Shelley Vohr +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) {