@@ -15,7 +15,7 @@ HOMEBREW=$(brew --prefix)
1515
1616# Configuration
1717MUSL_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
2121TOOLCHAIN_DIR=" $BASEPATH /toolchain"
@@ -94,6 +94,10 @@ ensure_dir() {
9494install_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
482516build_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)
508541build_darwin_target () {
542+ export MUSL_DIR=" $TOOLCHAIN_DIR /musl-darwin"
509543 install_musl
510544 install_zig
511545
0 commit comments