From 32c3e55b1aebf964190a5dccdfd4dc95fb4c9c5b Mon Sep 17 00:00:00 2001 From: lucarin91 Date: Fri, 3 Oct 2025 13:53:55 +0200 Subject: [PATCH 1/4] feat: support arm64 macos --- .gitignore | 3 ++- deps/build_libs.sh | 42 +++++++++++++++++++++++------------------- scripts/build_mac.sh | 20 ++++++++++++++++++++ 3 files changed, 45 insertions(+), 20 deletions(-) create mode 100755 scripts/build_mac.sh diff --git a/.gitignore b/.gitignore index 2ccbe46..b38db2f 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -/node_modules/ +node_modules/ +build/ diff --git a/deps/build_libs.sh b/deps/build_libs.sh index f176c8e..4a5d67f 100755 --- a/deps/build_libs.sh +++ b/deps/build_libs.sh @@ -3,7 +3,10 @@ true # Dummy command required to prevent first ShellCheck directive from having global scope. # shellcheck disable=SC2153 # Fix false positive of ShellCheck rule SC2153. -export PREFIX=/opt/lib/${CROSS_COMPILE} + +LIB_PATH=${LIB_PATH:-/opt/lib} +NPROC=${NPROC:-"$(nproc)"} +export PREFIX=${PREFIX:-/opt/lib/${CROSS_COMPILE}} if [ "$CROSS_COMPILER" == "" ]; then CROSS_COMPILER=${CROSS_COMPILE}-gcc @@ -15,13 +18,13 @@ else CROSS_COMPILER=$CC # CROSS_COMPILER_CXX=$CXX fi -cd /opt/lib/libusb-1.0.28 +cd ${LIB_PATH}/libusb-1.0.28 LIBUSB_DIR=$(pwd) export LIBUSB_DIR ./configure --prefix="${PREFIX}" --with-pic --disable-udev --enable-static --disable-shared --host="${CROSS_COMPILE}" make distclean ./configure --prefix="${PREFIX}" --with-pic --disable-udev --enable-static --disable-shared --host="${CROSS_COMPILE}" -make -j"$(nproc)" +make -j${NPROC} make install export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig @@ -30,16 +33,16 @@ if [[ $CROSS_COMPILE == "x86_64-apple-darwin13" ]]; then export LIBUSB_1_0_CFLAGS=-I${PREFIX}/include/libusb-1.0 export LIBUSB_1_0_LIBS="-L${PREFIX}/lib -lusb-1.0" fi -cd /opt/lib/libusb-compat-0.1.8 +cd ${LIB_PATH}/libusb-compat-0.1.8 LIBUSB0_DIR=$(pwd) export LIBUSB0_DIR PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig" ./configure --prefix="${PREFIX}" --enable-static --disable-shared --host="${CROSS_COMPILE}" make distclean PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig" ./configure --prefix="${PREFIX}" --enable-static --disable-shared --host="${CROSS_COMPILE}" -make -j"$(nproc)" +make -j${NPROC} make install -cd /opt/lib/libftdi1-1.4 +cd ${LIB_PATH}/libftdi1-1.4 rm -rf build && mkdir build && cd build CMAKE_EXTRA_FLAG="-DSHAREDLIBS=OFF -DBUILD_TESTS=OFF -DPYTHON_BINDINGS=OFF -DEXAMPLES=OFF -DFTDI_EEPROM=OFF" @@ -57,13 +60,13 @@ fi #make -j"$(nproc)" #make install -cd /opt/lib/libelf-0.8.13 +cd ${LIB_PATH}/libelf-0.8.13 LIBELF_DIR=$(pwd) export LIBELF_DIR ./configure --disable-shared --host="$CROSS_COMPILE" --prefix="${PREFIX}" make distclean ./configure --disable-shared --host="$CROSS_COMPILE" --prefix="${PREFIX}" -make -j"$(nproc)" +make -j${NPROC} make install echo "*****************" @@ -72,47 +75,48 @@ echo "*****************" export CPPFLAGS="-P" -cd /opt/lib/ncurses-6.3 +cd ${LIB_PATH}/ncurses-6.3 NCURSES_DIR=$(pwd) export NCURSES_DIR ./configure "$EXTRAFLAGS" --target="$CROSS_COMPILE" --without-pthread --enable-database --enable-sp-funcs --enable-term-driver --without-shared --without-debug --without-ada --enable-termcap --without-manpages --without-progs --without-tests --host="$CROSS_COMPILE" --prefix="${PREFIX}" make distclean ./configure "$EXTRAFLAGS" --target="$CROSS_COMPILE" --without-pthread --enable-database --enable-sp-funcs --enable-term-driver --without-shared --without-debug --without-ada --enable-termcap --without-manpages --without-progs --without-tests --host="$CROSS_COMPILE" --prefix="${PREFIX}" -make -j"$(nproc)" +make -j${NPROC} make install.libs -cd /opt/lib/readline-8.0 +cd ${LIB_PATH}/readline-8.0 READLINE_DIR=$(pwd) export READLINE_DIR ./configure --prefix="$PREFIX" --disable-shared --host="$CROSS_COMPILE" make distclean ./configure --prefix="$PREFIX" --disable-shared --host="$CROSS_COMPILE" -make -j"$(nproc)" +make -j${NPROC} make install-static -if [[ $CROSS_COMPILE != "i686-w64-mingw32" && $CROSS_COMPILE != "x86_64-apple-darwin13" ]]; then - cd /opt/lib/eudev-3.2.10 +if [[ $CROSS_COMPILE != "i686-w64-mingw32" && $CROSS_COMPILE != "x86_64-apple-darwin13" && $CROSS_COMPILE != "aarch64-apple-darwin" ]]; then + cd ${LIB_PATH}/eudev-3.2.10 ./autogen.sh ./configure --enable-static --disable-gudev --disable-introspection --disable-shared --disable-blkid --disable-kmod --disable-manpages --prefix="$PREFIX" --host="${CROSS_COMPILE}" make distclean ./autogen.sh ./configure --enable-static --disable-gudev --disable-introspection --disable-shared --disable-blkid --disable-kmod --disable-manpages --prefix="$PREFIX" --host="${CROSS_COMPILE}" - make -j"$(nproc)" + make -j${NPROC} make install fi -cd /opt/lib/hidapi-0.12.0 +cd ${LIB_PATH}/hidapi-0.12.0 export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig +libtoolize ./bootstrap ./configure --prefix="$PREFIX" --enable-static --disable-shared --host="$CROSS_COMPILE" make distclean ./bootstrap ./configure --prefix="$PREFIX" --enable-static --disable-shared --host="$CROSS_COMPILE" -make -j"$(nproc)" +make -j${NPROC} make install -tar -xzf /opt/lib/libxml2-2.14.3.tar.gz -C /tmp && cd /tmp/libxml2-2.14.3 +tar -xzf ${LIB_PATH}/libxml2-2.14.3.tar.gz -C /tmp && cd /tmp/libxml2-2.14.3 ./autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --without-python --without-iconv --host="$CROSS_COMPILE" -make -j"$(nproc)" +make -j${NPROC} make install diff --git a/scripts/build_mac.sh b/scripts/build_mac.sh new file mode 100755 index 0000000..7dfcb3d --- /dev/null +++ b/scripts/build_mac.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +set -ex + +SCRIPT_PATH="$(cd "$(dirname "$0")" && pwd)" +BASE_PATH=$(cd "${SCRIPT_PATH}/.." && pwd) +cd ${BASE_PATH} + +mkdir -p ${BASE_PATH}/build/macos +rm -rf ${BASE_PATH}/build/macos/* +cp -r ${BASE_PATH}/deps ${BASE_PATH}/build/macos/deps +mkdir -p ${BASE_PATH}/build/macos/dist + +LIB_PATH=${BASE_PATH}/build/macos/deps \ +PREFIX=${BASE_PATH}/build/macos/dist \ +CROSS_COMPILER=cc \ +CROSS_COMPILE=aarch64-apple-darwin \ +NPROC=8 \ +./deps/build_libs.sh + From 64c01b0561637c650f89b70b225f67851c09982b Mon Sep 17 00:00:00 2001 From: lucarin91 Date: Fri, 3 Oct 2025 16:20:55 +0200 Subject: [PATCH 2/4] fix build --- deps/build_libs.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/deps/build_libs.sh b/deps/build_libs.sh index 4a5d67f..3de9a3a 100755 --- a/deps/build_libs.sh +++ b/deps/build_libs.sh @@ -29,7 +29,7 @@ make install export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig -if [[ $CROSS_COMPILE == "x86_64-apple-darwin13" ]]; then +if [[ $CROSS_COMPILE == "x86_64-apple-darwin13" || $CROSS_COMPILE == "aarch64-apple-darwin" ]]; then export LIBUSB_1_0_CFLAGS=-I${PREFIX}/include/libusb-1.0 export LIBUSB_1_0_LIBS="-L${PREFIX}/lib -lusb-1.0" fi @@ -51,7 +51,7 @@ if [[ $CROSS_COMPILE == "i686-w64-mingw32" ]]; then CMAKE_EXTRA_FLAG="$CMAKE_EXTRA_FLAG -DCMAKE_TOOLCHAIN_FILE=./cmake/Toolchain-i686-w64-mingw32.cmake" fi -if [[ $CROSS_COMPILE == "x86_64-apple-darwin13" ]]; then +if [[ $CROSS_COMPILE == "x86_64-apple-darwin13" || $CROSS_COMPILE == "aarch64-apple-darwin" ]]; then CMAKE_EXTRA_FLAG="$CMAKE_EXTRA_FLAG -DCMAKE_AR=$AR -DCMAKE_RANLIB=$RANLIB" fi @@ -107,7 +107,6 @@ fi cd ${LIB_PATH}/hidapi-0.12.0 export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig -libtoolize ./bootstrap ./configure --prefix="$PREFIX" --enable-static --disable-shared --host="$CROSS_COMPILE" make distclean From 1e05dfae1a424966a59cf968167f783f7dfa58b9 Mon Sep 17 00:00:00 2001 From: lucarin91 Date: Fri, 3 Oct 2025 18:09:26 +0200 Subject: [PATCH 3/4] make shellcheck happy --- deps/build_libs.sh | 34 +++++++++++++++++----------------- scripts/build_mac.sh | 10 +++++----- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/deps/build_libs.sh b/deps/build_libs.sh index 3de9a3a..30476b2 100755 --- a/deps/build_libs.sh +++ b/deps/build_libs.sh @@ -18,13 +18,13 @@ else CROSS_COMPILER=$CC # CROSS_COMPILER_CXX=$CXX fi -cd ${LIB_PATH}/libusb-1.0.28 +cd "${LIB_PATH}/libusb-1.0.28" LIBUSB_DIR=$(pwd) export LIBUSB_DIR ./configure --prefix="${PREFIX}" --with-pic --disable-udev --enable-static --disable-shared --host="${CROSS_COMPILE}" make distclean ./configure --prefix="${PREFIX}" --with-pic --disable-udev --enable-static --disable-shared --host="${CROSS_COMPILE}" -make -j${NPROC} +make -j"${NPROC}" make install export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig @@ -33,16 +33,16 @@ if [[ $CROSS_COMPILE == "x86_64-apple-darwin13" || $CROSS_COMPILE == "aarch64-ap export LIBUSB_1_0_CFLAGS=-I${PREFIX}/include/libusb-1.0 export LIBUSB_1_0_LIBS="-L${PREFIX}/lib -lusb-1.0" fi -cd ${LIB_PATH}/libusb-compat-0.1.8 +cd "${LIB_PATH}/libusb-compat-0.1.8" LIBUSB0_DIR=$(pwd) export LIBUSB0_DIR PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig" ./configure --prefix="${PREFIX}" --enable-static --disable-shared --host="${CROSS_COMPILE}" make distclean PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig" ./configure --prefix="${PREFIX}" --enable-static --disable-shared --host="${CROSS_COMPILE}" -make -j${NPROC} +make -j"${NPROC}" make install -cd ${LIB_PATH}/libftdi1-1.4 +cd "${LIB_PATH}/libftdi1-1.4" rm -rf build && mkdir build && cd build CMAKE_EXTRA_FLAG="-DSHAREDLIBS=OFF -DBUILD_TESTS=OFF -DPYTHON_BINDINGS=OFF -DEXAMPLES=OFF -DFTDI_EEPROM=OFF" @@ -60,13 +60,13 @@ fi #make -j"$(nproc)" #make install -cd ${LIB_PATH}/libelf-0.8.13 +cd "${LIB_PATH}/libelf-0.8.13" LIBELF_DIR=$(pwd) export LIBELF_DIR ./configure --disable-shared --host="$CROSS_COMPILE" --prefix="${PREFIX}" make distclean ./configure --disable-shared --host="$CROSS_COMPILE" --prefix="${PREFIX}" -make -j${NPROC} +make -j"${NPROC}" make install echo "*****************" @@ -75,47 +75,47 @@ echo "*****************" export CPPFLAGS="-P" -cd ${LIB_PATH}/ncurses-6.3 +cd "${LIB_PATH}/ncurses-6.3" NCURSES_DIR=$(pwd) export NCURSES_DIR ./configure "$EXTRAFLAGS" --target="$CROSS_COMPILE" --without-pthread --enable-database --enable-sp-funcs --enable-term-driver --without-shared --without-debug --without-ada --enable-termcap --without-manpages --without-progs --without-tests --host="$CROSS_COMPILE" --prefix="${PREFIX}" make distclean ./configure "$EXTRAFLAGS" --target="$CROSS_COMPILE" --without-pthread --enable-database --enable-sp-funcs --enable-term-driver --without-shared --without-debug --without-ada --enable-termcap --without-manpages --without-progs --without-tests --host="$CROSS_COMPILE" --prefix="${PREFIX}" -make -j${NPROC} +make -j"${NPROC}" make install.libs -cd ${LIB_PATH}/readline-8.0 +cd "${LIB_PATH}/readline-8.0" READLINE_DIR=$(pwd) export READLINE_DIR ./configure --prefix="$PREFIX" --disable-shared --host="$CROSS_COMPILE" make distclean ./configure --prefix="$PREFIX" --disable-shared --host="$CROSS_COMPILE" -make -j${NPROC} +make -j"${NPROC}" make install-static if [[ $CROSS_COMPILE != "i686-w64-mingw32" && $CROSS_COMPILE != "x86_64-apple-darwin13" && $CROSS_COMPILE != "aarch64-apple-darwin" ]]; then - cd ${LIB_PATH}/eudev-3.2.10 + cd "${LIB_PATH}/eudev-3.2.10" ./autogen.sh ./configure --enable-static --disable-gudev --disable-introspection --disable-shared --disable-blkid --disable-kmod --disable-manpages --prefix="$PREFIX" --host="${CROSS_COMPILE}" make distclean ./autogen.sh ./configure --enable-static --disable-gudev --disable-introspection --disable-shared --disable-blkid --disable-kmod --disable-manpages --prefix="$PREFIX" --host="${CROSS_COMPILE}" - make -j${NPROC} + make -j"${NPROC}" make install fi -cd ${LIB_PATH}/hidapi-0.12.0 +cd "${LIB_PATH}/hidapi-0.12.0" export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig ./bootstrap ./configure --prefix="$PREFIX" --enable-static --disable-shared --host="$CROSS_COMPILE" make distclean ./bootstrap ./configure --prefix="$PREFIX" --enable-static --disable-shared --host="$CROSS_COMPILE" -make -j${NPROC} +make -j"${NPROC}" make install -tar -xzf ${LIB_PATH}/libxml2-2.14.3.tar.gz -C /tmp && cd /tmp/libxml2-2.14.3 +tar -xzf "${LIB_PATH}/libxml2-2.14.3.tar.gz" -C /tmp && cd /tmp/libxml2-2.14.3 ./autogen.sh --prefix="$PREFIX" --disable-shared --enable-static --without-python --without-iconv --host="$CROSS_COMPILE" -make -j${NPROC} +make -j"${NPROC}" make install diff --git a/scripts/build_mac.sh b/scripts/build_mac.sh index 7dfcb3d..6e3abb7 100755 --- a/scripts/build_mac.sh +++ b/scripts/build_mac.sh @@ -4,12 +4,12 @@ set -ex SCRIPT_PATH="$(cd "$(dirname "$0")" && pwd)" BASE_PATH=$(cd "${SCRIPT_PATH}/.." && pwd) -cd ${BASE_PATH} +cd "${BASE_PATH}" -mkdir -p ${BASE_PATH}/build/macos -rm -rf ${BASE_PATH}/build/macos/* -cp -r ${BASE_PATH}/deps ${BASE_PATH}/build/macos/deps -mkdir -p ${BASE_PATH}/build/macos/dist +mkdir -p "${BASE_PATH}/build/macos" +rm -rf "${BASE_PATH}/build/macos/*" +cp -r "${BASE_PATH}/deps" "${BASE_PATH}/build/macos/deps" +mkdir -p "${BASE_PATH}/build/macos/dist" LIB_PATH=${BASE_PATH}/build/macos/deps \ PREFIX=${BASE_PATH}/build/macos/dist \ From 798bd69e528e2127314bafda01f5a605a5b42291 Mon Sep 17 00:00:00 2001 From: lucarin91 Date: Fri, 3 Oct 2025 18:13:10 +0200 Subject: [PATCH 4/4] make shfmt happy --- scripts/build_mac.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/scripts/build_mac.sh b/scripts/build_mac.sh index 6e3abb7..43becfb 100755 --- a/scripts/build_mac.sh +++ b/scripts/build_mac.sh @@ -12,9 +12,8 @@ cp -r "${BASE_PATH}/deps" "${BASE_PATH}/build/macos/deps" mkdir -p "${BASE_PATH}/build/macos/dist" LIB_PATH=${BASE_PATH}/build/macos/deps \ -PREFIX=${BASE_PATH}/build/macos/dist \ -CROSS_COMPILER=cc \ -CROSS_COMPILE=aarch64-apple-darwin \ -NPROC=8 \ -./deps/build_libs.sh - + PREFIX=${BASE_PATH}/build/macos/dist \ + CROSS_COMPILER=cc \ + CROSS_COMPILE=aarch64-apple-darwin \ + NPROC=8 \ + ./deps/build_libs.sh