From 54633ca86121ab31d6fc0720111365bdc6f35705 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Fri, 27 Mar 2026 08:34:08 -0700 Subject: [PATCH 1/4] Use precompiled liblbug for Node.js builds --- CMakeLists.txt | 21 +++++++++++++++++++++ build.js | 15 +++++++++++++++ install.js | 13 +++++++++++++ 3 files changed, 49 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f156dac..3d581a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,6 +79,27 @@ file(GLOB JS_SOURCE_FILES # Copy all JS/TS files to build directory file(COPY ${JS_SOURCE_FILES} DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/build") +if(NOT TARGET lbug) + if(NOT LBUG_NODEJS_USE_PRECOMPILED_LIB) + message(FATAL_ERROR "The Node.js addon requires the lbug target or LBUG_NODEJS_USE_PRECOMPILED_LIB=TRUE.") + endif() + if(NOT LBUG_NODEJS_PRECOMPILED_LIB_PATH) + message(FATAL_ERROR "LBUG_NODEJS_PRECOMPILED_LIB_PATH must point to a precompiled static liblbug archive.") + endif() + if(NOT EXISTS "${LBUG_NODEJS_PRECOMPILED_LIB_PATH}") + message(FATAL_ERROR "Precompiled liblbug archive not found: ${LBUG_NODEJS_PRECOMPILED_LIB_PATH}") + endif() + add_library(lbug STATIC IMPORTED GLOBAL) + set_target_properties(lbug PROPERTIES IMPORTED_LOCATION "${LBUG_NODEJS_PRECOMPILED_LIB_PATH}") + target_include_directories(lbug INTERFACE + "${PROJECT_SOURCE_DIR}/src/include" + "${PROJECT_BINARY_DIR}/src/include") + target_link_libraries(lbug INTERFACE lbug_link_deps) + if(WIN32) + target_compile_definitions(lbug INTERFACE LBUG_STATIC_DEFINE) + endif() +endif() + add_library(lbugjs SHARED ${CPP_SOURCE_FILES}) if(CMAKE_JS_SRC) target_sources(lbugjs PRIVATE "${CMAKE_JS_SRC}") diff --git a/build.js b/build.js index d326300..2c7c29f 100644 --- a/build.js +++ b/build.js @@ -7,8 +7,23 @@ const THREADS = require("os").cpus().length; console.log(`Using ${THREADS} threads to build Lbug.`); +const env = { ...process.env }; +const precompiledLibPath = env.LBUG_NODEJS_PRECOMPILED_LIB_PATH; +if (precompiledLibPath) { + const extraFlags = [ + env.EXTRA_CMAKE_FLAGS, + "-DBUILD_LBUG=FALSE", + "-DBUILD_SHELL=FALSE", + "-DLBUG_NODEJS_USE_PRECOMPILED_LIB=TRUE", + `-DLBUG_NODEJS_PRECOMPILED_LIB_PATH=${precompiledLibPath}`, + ].filter(Boolean).join(" "); + env.EXTRA_CMAKE_FLAGS = extraFlags; + console.log(`Using precompiled liblbug from ${precompiledLibPath}.`); +} + execSync("npm run clean", { stdio: "inherit" }); execSync(`make nodejs NUM_THREADS=${THREADS}`, { cwd: SRC_PATH, + env, stdio: "inherit", }); diff --git a/install.js b/install.js index 4e095e3..3385524 100644 --- a/install.js +++ b/install.js @@ -126,6 +126,19 @@ if (process.platform === "win32") { ); } +if (env.LBUG_NODEJS_PRECOMPILED_LIB_PATH) { + env.EXTRA_CMAKE_FLAGS = [ + env.EXTRA_CMAKE_FLAGS, + "-DBUILD_LBUG=FALSE", + "-DBUILD_SHELL=FALSE", + "-DLBUG_NODEJS_USE_PRECOMPILED_LIB=TRUE", + `-DLBUG_NODEJS_PRECOMPILED_LIB_PATH=${env.LBUG_NODEJS_PRECOMPILED_LIB_PATH}`, + ].filter(Boolean).join(" "); + console.log( + `Using precompiled liblbug from '${env.LBUG_NODEJS_PRECOMPILED_LIB_PATH}'.` + ); +} + childProcess.execSync("make nodejs NUM_THREADS=" + THREADS, { env, cwd: path.join(__dirname, "lbug-source"), From 93bd386eb3f5a1732232081bcf90042eb9564df7 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Fri, 27 Mar 2026 10:05:17 -0700 Subject: [PATCH 2/4] Fix Node.js precompiled link dependencies --- CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d581a2..42de264 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,6 +79,7 @@ file(GLOB JS_SOURCE_FILES # Copy all JS/TS files to build directory file(COPY ${JS_SOURCE_FILES} DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/build") +set(NODEJS_LBUG_LINK_DEPS "") if(NOT TARGET lbug) if(NOT LBUG_NODEJS_USE_PRECOMPILED_LIB) message(FATAL_ERROR "The Node.js addon requires the lbug target or LBUG_NODEJS_USE_PRECOMPILED_LIB=TRUE.") @@ -94,10 +95,10 @@ if(NOT TARGET lbug) target_include_directories(lbug INTERFACE "${PROJECT_SOURCE_DIR}/src/include" "${PROJECT_BINARY_DIR}/src/include") - target_link_libraries(lbug INTERFACE lbug_link_deps) if(WIN32) target_compile_definitions(lbug INTERFACE LBUG_STATIC_DEFINE) endif() + set(NODEJS_LBUG_LINK_DEPS "$") endif() add_library(lbugjs SHARED ${CPP_SOURCE_FILES}) @@ -115,4 +116,4 @@ if(APPLE) else() target_link_options(lbugjs PRIVATE -Wl,--export-dynamic) endif() -target_link_libraries(lbugjs PRIVATE lbug ${CMAKE_JS_LIB}) +target_link_libraries(lbugjs PRIVATE lbug ${NODEJS_LBUG_LINK_DEPS} ${CMAKE_JS_LIB}) From 938ef3739b6e2095784b18b3cf819201201bd555 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Fri, 27 Mar 2026 10:20:42 -0700 Subject: [PATCH 3/4] Add macOS Intel Node.js package target --- package.js | 1 + 1 file changed, 1 insertion(+) diff --git a/package.js b/package.js index 3ed46f1..41d5252 100644 --- a/package.js +++ b/package.js @@ -14,6 +14,7 @@ const PLATFORM_MAP = { "lbugjs-linux-x64.node": { os: "linux", cpu: "x64" }, "lbugjs-linux-arm64.node": { os: "linux", cpu: "arm64" }, "lbugjs-darwin-arm64.node": { os: "darwin", cpu: "arm64" }, + "lbugjs-darwin-x64.node": { os: "darwin", cpu: "x64" }, "lbugjs-win32-x64.node": { os: "win32", cpu: "x64" }, }; From 5edb16605cfbb747b2adbde1c954c5e9b7c5f568 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Fri, 27 Mar 2026 10:26:56 -0700 Subject: [PATCH 4/4] Preserve precompiled lib path on Windows --- install.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/install.js b/install.js index 3385524..358239f 100644 --- a/install.js +++ b/install.js @@ -115,8 +115,10 @@ if (process.platform === "win32") { ); for (let key in env) { + const lowerKey = key.toLowerCase(); if ( - key.toLowerCase().includes("node" || key.toLowerCase().includes("npm")) + (lowerKey.includes("node") || lowerKey.includes("npm")) && + lowerKey !== "lbug_nodejs_precompiled_lib_path" ) { delete env[key]; }