name: Build Wownero LWS (Mac Linker Fix) on: push: branches: [ master, main ] tags: [ 'v*' ] workflow_dispatch: env: NODE_TLS_REJECT_UNAUTHORIZED: '0' CORE_TAG: 'v0.11.4.2' jobs: # ================================================================== # JOB 1: LINUX JOBS - DISABLED (Focusing on Mac) # ================================================================== # linux-native: ... # linux-cross: ... # windows: ... # ================================================================== # JOB: MACOS - RT DUMMY + LINKER PATH FIX # ================================================================== macos: runs-on: macos-latest env: NODE_TLS_REJECT_UNAUTHORIZED: '0' strategy: fail-fast: false matrix: include: - target: x86_64-apple-darwin11 arch: x86_64 build_arch: "x86-64" platform: macos-x64 - target: aarch64-apple-darwin11 arch: arm64 build_arch: "armv8-a" platform: macos-arm64 steps: - name: Manual Checkout env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | rm -rf * git init git config --global url."http://oauth2:${GITHUB_TOKEN}@git.such.software:3000/Builds/RandomWOW.git".insteadOf "https://codeberg.org/wownero/RandomWOW" git config --global url."http://oauth2:${GITHUB_TOKEN}@git.such.software:3000/Builds/wownero.git".insteadOf "https://codeberg.org/wownero/wownero.git" git remote add origin http://oauth2:${GITHUB_TOKEN}@git.such.software:3000/${{ github.repository }}.git git fetch origin ${{ github.sha }} git checkout ${{ github.sha }} git submodule update --init --recursive - name: Patch Source run: | perl -pi -e 's/handler_loop\s+final/handler_loop/g' src/rest_server.cpp perl -pi -e 's/find_library\(ICU/# find_library(ICU/g' external/monero/CMakeLists.txt perl -pi -e 's/locale//g' external/monero/CMakeLists.txt - name: Install CMake run: brew install cmake - name: Download SDK run: | curl -L -k -o sdk.tar.gz "https://git.such.software/Builds/wownero/releases/download/${{ env.CORE_TAG }}/wownero-core-${{ matrix.target }}.tar.gz" if [ $(stat -f%z sdk.tar.gz) -lt 1000000 ]; then exit 1; fi mkdir -p wownero-sdk tar -xf sdk.tar.gz -C wownero-sdk # --- FIX: CREATE DUMMY LIBRT.A --- - name: Create Dummy RT Library run: | echo "Creating dummy librt.a to trick the linker..." mkdir -p wownero-sdk/lib echo "void dummy_rt_func() {}" > dummy.c cc -c dummy.c -o dummy.o ar cr wownero-sdk/lib/librt.a dummy.o ranlib wownero-sdk/lib/librt.a ls -l wownero-sdk/lib/librt.a - name: Build run: | mkdir build && cd build SDK_DIR="$(pwd)/../wownero-sdk" # FIX 1: Pass -L$SDK_DIR/lib in CMAKE_EXE_LINKER_FLAGS so 'ld' finds librt.a # FIX 2: Pass ARCH to handle x86 cross-compile on M2 cmake .. -DCMAKE_BUILD_TYPE=Release \ -DBUILD_STATIC=ON \ -DBoost_USE_STATIC_RUNTIME=OFF \ -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} \ -DCMAKE_SYSTEM_PROCESSOR=${{ matrix.arch }} \ -DARCH="${{ matrix.build_arch }}" \ -DCMAKE_PREFIX_PATH="$SDK_DIR" \ -DBOOST_ROOT="$SDK_DIR" \ -DOPENSSL_ROOT_DIR="$SDK_DIR" \ -DOPENSSL_USE_STATIC_LIBS=TRUE \ -DUNBOUND_INCLUDE_DIR="$SDK_DIR/include" \ -DUNBOUND_LIBRARY="$SDK_DIR/lib/libunbound.a" \ -DZMQ_INCLUDE_DIR="$SDK_DIR/include" \ -DZMQ_LIBRARY="$SDK_DIR/lib/libzmq.a" \ -DSodium_INCLUDE_DIR="$SDK_DIR/include" \ -DSodium_LIBRARY_RELEASE="$SDK_DIR/lib/libsodium.a" \ -DLIBUSB_INCLUDE_DIR="$SDK_DIR/include" \ -DLIBUSB_LIBRARY="$SDK_DIR/lib/libusb-1.0.a" \ -DHIDAPI_INCLUDE_DIR="$SDK_DIR/include" \ -DHIDAPI_LIBRARY="$SDK_DIR/lib/libhidapi.a" \ -DZSTD_LIBRARY="$SDK_DIR/lib/libzstd.a" \ -DZSTD_INCLUDE_DIR="$SDK_DIR/include" \ -DZLIB_LIBRARY="$SDK_DIR/lib/libz.a" \ -DZLIB_INCLUDE_DIR="$SDK_DIR/include" \ -DLIBEVENT_LIBRARY=$SDK_DIR/lib/libevent.a \ -DLIBEVENT_INCLUDE_DIR=$SDK_DIR/include \ -DRT_LIBRARY="$SDK_DIR/lib/librt.a" \ -DUSE_READLINE=OFF \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-L$SDK_DIR/lib" make -j$(sysctl -n hw.ncpu) - name: Package run: | mkdir release zip -j release/wownero-lws-${{ matrix.platform }}.zip build/src/wownero-lws-daemon build/src/wownero-lws-admin - name: Upload uses: actions/upload-artifact@v3 with: name: wownero-lws-${{ matrix.platform }} path: release/*.zip