Skip to content

Commit a56ffc2

Browse files
committed
build: support per-arch musl output
1 parent 1560ff4 commit a56ffc2

3 files changed

Lines changed: 53 additions & 13 deletions

File tree

CMakeLists.txt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,18 @@ set(CMAKE_DEPENDS_USE_COMPILER FALSE)
3333
set(CMAKE_SKIP_DEPENDENCY_TRACKING TRUE)
3434

3535
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
36-
target_link_libraries(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/toolchain/musl/lib/libc.a)
36+
set(MUSL_LIBC_PATH $ENV{MUSL_LIBC_PATH})
37+
if(NOT MUSL_LIBC_PATH)
38+
message(FATAL_ERROR "MUSL_LIBC_PATH environment variable is not set")
39+
endif()
40+
if(NOT EXISTS "${MUSL_LIBC_PATH}")
41+
message(FATAL_ERROR "musl libc archive not found at ${MUSL_LIBC_PATH}")
42+
endif()
43+
target_link_libraries(${PROJECT_NAME} ${MUSL_LIBC_PATH})
3744
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11")
3845
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++ -static")
3946
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fPIC")
4047
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_DEPENDS_NO_SHARED TRUE)
4148
else()
4249
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11 -stdlib=libc++")
4350
endif()
44-

build.sh

Lines changed: 44 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ HOMEBREW=$(brew --prefix)
1515

1616
# Configuration
1717
MUSL_VERSION="musl-1.2.5"
18-
ZIG_VERSION="zig-macos-aarch64-0.15.0-dev.471+369177f0b"
18+
ZIG_VERSION="zig-aarch64-macos-0.15.2"
1919

2020
# Directories
2121
TOOLCHAIN_DIR="$BASEPATH/toolchain"
@@ -94,6 +94,10 @@ ensure_dir() {
9494
install_musl() {
9595
print_section "Installing Musl libc"
9696

97+
local musl_target_dir="${MUSL_DIR:-$TOOLCHAIN_DIR/musl}"
98+
MUSL_DIR="$musl_target_dir"
99+
local musl_dir_name="$(basename "$MUSL_DIR")"
100+
97101
ensure_dir "$TOOLCHAIN_DIR"
98102

99103
# Check if musl is already installed
@@ -114,7 +118,7 @@ install_musl() {
114118
if [ ! -d "$MUSL_DIR" ]; then
115119
log_info "Extracting musl..."
116120
tar -xzf "$MUSL_FILE"
117-
mv "$MUSL_VERSION" musl
121+
mv "$MUSL_VERSION" "$musl_dir_name"
118122
else
119123
log_info "Musl is already extracted"
120124
fi
@@ -138,7 +142,7 @@ install_musl() {
138142

139143
log_info "Extracting Musl..."
140144
tar -xzf "$MUSL_FILE"
141-
mv "$MUSL_VERSION" musl
145+
mv "$MUSL_VERSION" "$musl_dir_name"
142146

143147
popd > /dev/null
144148
log_info "Musl installation complete"
@@ -224,9 +228,10 @@ build_for_linux() {
224228
export CMAKE_SYSTEM_NAME="Linux"
225229
export HOST="$CMAKE_SYSTEM_PROCESSOR-linux-musl"
226230

227-
# Set up toolchain
231+
# Set up toolchain directories per architecture
232+
export MUSL_DIR="$TOOLCHAIN_DIR/musl-$arch"
228233
export ZIG_PATH="$BASEPATH/toolchain/zig"
229-
export MUSL_LIBC_PATH="$BASEPATH/toolchain/musl/lib/libc.a"
234+
export MUSL_LIBC_PATH="$MUSL_DIR/lib/libc.a"
230235
export MUSL_CROSS_PATH="$HOMEBREW/opt/$CMAKE_SYSTEM_PROCESSOR-unknown-linux-musl/bin"
231236

232237
# Set up compiler and linker
@@ -241,14 +246,37 @@ build_for_linux() {
241246
export CFLAGS="-fPIC"
242247
export CXXFLAGS="-fPIC"
243248

249+
# Ensure Musl sources are ready
250+
install_musl
251+
244252
# Build RocketMQ C++ client
245253
log_info "Building RocketMQ C++ client..."
246254
./deps/rocketmq/build.sh
247255

248256
# Build Musl
249257
log_info "Building Musl libc..."
250-
pushd toolchain/musl
251-
./configure
258+
pushd "$MUSL_DIR"
259+
260+
local configure_needed=1
261+
if [[ -f config.mak ]]; then
262+
if grep -q "^ARCH = $arch" config.mak; then
263+
configure_needed=0
264+
fi
265+
fi
266+
267+
if [[ $configure_needed -eq 1 ]]; then
268+
log_info "Configuring Musl for $HOST"
269+
make distclean >/dev/null 2>&1 || true
270+
CC="$CC" \
271+
CXX="$CXX" \
272+
AR="$AR" \
273+
RANLIB="$RANLIB" \
274+
./configure --host="$HOST" --target="$HOST"
275+
else
276+
log_info "Musl already configured for $HOST"
277+
make clean >/dev/null 2>&1 || true
278+
fi
279+
252280
make -j
253281
popd
254282

@@ -333,8 +361,14 @@ clean() {
333361
find ./deps/rocketmq/tmp_down_dir -type d -name "zlib*" -exec rm -rf {} \; 2>/dev/null || true
334362

335363
log_info "Cleaning Musl build artifacts..."
336-
rm -rf ./toolchain/musl/obj
337-
rm -rf ./toolchain/musl/*.o 2>/dev/null || true
364+
if compgen -G "./toolchain/musl*" > /dev/null; then
365+
for dir in ./toolchain/musl*; do
366+
if [ -d "$dir" ]; then
367+
rm -rf "$dir/obj"
368+
rm -rf "$dir"/*.o 2>/dev/null || true
369+
fi
370+
done
371+
fi
338372

339373
log_info "Clean complete"
340374
}
@@ -480,7 +514,6 @@ parse_args() {
480514

481515
# Build for all supported Linux architectures
482516
build_linux_targets() {
483-
install_musl
484517
install_zig
485518

486519
if [[ -n "$ARCH" ]]; then
@@ -506,6 +539,7 @@ build_linux_targets() {
506539

507540
# Build for macOS (Darwin)
508541
build_darwin_target() {
542+
export MUSL_DIR="$TOOLCHAIN_DIR/musl-darwin"
509543
install_musl
510544
install_zig
511545

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rocketmq-nodejs",
3-
"version": "1.0.2",
3+
"version": "1.0.3",
44
"description": "Apache RocketMQ Client for Node.js",
55
"main": "index.js",
66
"types": "index.d.ts",

0 commit comments

Comments
 (0)