Also remove spurious exports of internal functions bloating binary due to incorrectly building libnode with -fvisibility=default Both this and the unbundle flags should be upstreamed but probably separately. --- src/third_party/electron_node/node.gni.orig 2025-04-20 10:49:28.656330018 +0200 +++ src/third_party/electron_node/node.gni 2025-04-20 19:08:01.482693254 +0200 @@ -73,10 +73,12 @@ declare_args() { node_use_amaro = true # Allows downstream packagers (eg. Linux distributions) to build against system shared libraries. + use_system_ada = false use_system_cares = false use_system_nghttp2 = false use_system_llhttp = false use_system_histogram = false + use_system_simdjson = false } assert(!node_enable_inspector || node_use_openssl, --- src/third_party/electron_node/unofficial.gni.orig 2025-05-14 23:39:11.439896657 +0200 +++ src/third_party/electron_node/unofficial.gni 2025-05-15 00:49:20.743843435 +0200 @@ -9,6 +9,35 @@ import("$node_v8_path/gni/v8.gni") # The actual configurations are put inside a template in unofficial.gni to # prevent accidental edits from contributors. template("node_gn_build") { + if (is_linux) { + import("//build/config/linux/pkg_config.gni") + if (use_system_cares) { + pkg_config("system_cares") { + packages = [ "libcares" ] + } + } + if (use_system_histogram) { + pkg_config("system_histogram") { + packages = [ "hdr_histogram" ] + } + } + if (use_system_llhttp) { + pkg_config("system_llhttp") { + packages = [ "libllhttp" ] + } + } + if (use_system_nghttp2) { + pkg_config("system_nghttp2") { + packages = [ "libnghttp2" ] + } + } + if (use_system_simdjson) { + pkg_config("system_simdjson") { + packages = [ "simdjson" ] + } + } + } + config("node_features") { defines = [] if (is_component_build) { @@ -139,24 +168,20 @@ template("node_gn_build") { source_set("libnode") { configs += [ ":node_internal_config" ] + libs = [] public_configs = [ ":node_external_config", "deps/googletest:googletest_config", ":zstd_include_config" ] public_deps = [ - "deps/ada", "deps/uv", "//electron:electron_js2c", - "deps/simdjson", "$node_v8_path", ] deps = [ ":run_node_js2c", - "deps/cares", - "deps/histogram", "deps/nbytes", - "deps/nghttp2", "deps/postject", "deps/uvwasi", "//third_party/zlib", @@ -186,21 +211,36 @@ template("node_gn_build") { "Security.framework", ] } - if (is_posix) { - configs -= [ "//build/config/gcc:symbol_visibility_hidden" ] - configs += [ "//build/config/gcc:symbol_visibility_default" ] + if (use_system_ada) { + libs += ["ada"] + } else { + public_deps += [ "deps/ada" ] + } + if (use_system_cares) { + configs += [ ":system_cares" ] + } else { + deps += [ "deps/cares" ] } if (use_system_llhttp) { - libs += [ "llhttp" ] + configs += [ ":system_llhttp" ] } else { deps += [ "deps/llhttp" ] } if (use_system_histogram) { - libs += [ "hdr_histogram" ] - include_dirs += [ "/usr/include/hdr" ] + configs += [":system_histogram"] } else { deps += [ "deps/histogram" ] } + if (use_system_nghttp2) { + configs += [":system_nghttp2"] + } else { + deps += [ "deps/nghttp2" ] + } + if (use_system_simdjson) { + public_configs += [":system_simdjson"] + } else { + public_deps += [ "deps/simdjson" ] + } if (v8_enable_i18n_support) { deps += [ "//third_party/icu" ] } @@ -229,19 +269,6 @@ 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" ] - } - } - } } config("zstd_include_config") { @@ -435,11 +462,13 @@ template("node_gn_build") { ] sources = [ "src/node_snapshot_stub.cc" ] + if(false) { #Test only target, not sure why it breaks gn sources += exec_script("./tools/search_files.py", [ rebase_path(".", root_build_dir), rebase_path("test/cctest", root_build_dir), "cc" ], "list lines") + } if (node_use_openssl) { deps += [ "deps/ncrypto" ]