From 78fc048d869f60fc98feefa01a2a4c0d878171aa Mon Sep 17 00:00:00 2001 From: such-gitea Date: Wed, 4 Feb 2026 08:22:21 -0500 Subject: [PATCH] Update .gitea/workflows/build.yaml --- .gitea/workflows/build.yaml | 124 +++++++++++++++++++++++------------- 1 file changed, 80 insertions(+), 44 deletions(-) diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index cc1d1f1..d5d2e9e 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -1,4 +1,4 @@ -name: Build Wownero LWS (Debug & Force) +name: Build Wownero LWS (Systematic Fix) on: push: branches: [ master, main ] @@ -21,8 +21,11 @@ jobs: steps: - name: Fix DNS run: echo "192.168.88.230 git.such.software" >> /etc/hosts + + # Install system zstd just in case, but we will build static to be safe - name: Install Static System Libs - run: apt-get update && apt-get install -y libc6-dev + run: apt-get update && apt-get install -y libc6-dev libzstd-dev + - name: Checkout env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -41,33 +44,37 @@ jobs: perl -pi -e 's/-Werror//g' CMakeLists.txt perl -pi -e 's/-Werror//g' external/monero/CMakeLists.txt + # We MUST build ZSTD because logs proved it is missing from the Core artifact. + - name: Build Static ZSTD + run: | + mkdir -p deps/lib deps/include + cd deps + curl -L -o zstd.tar.gz https://github.com/facebook/zstd/releases/download/v1.5.5/zstd-1.5.5.tar.gz + tar -xf zstd.tar.gz && cd zstd-1.5.5 + make lib-release + cp lib/libzstd.a ../lib/ + cp lib/zstd.h ../include/ + cd .. + - name: Download SDK run: | curl -L -k -o sdk.tar.gz "https://git.such.software/Builds/wownero/releases/download/${{ env.CORE_TAG }}/wownero-core-x86_64-linux-gnu.tar.gz" mkdir -p /opt/wownero-sdk tar -xf sdk.tar.gz -C /opt/wownero-sdk - - name: Debug SDK Layout - run: | - echo "Listing SDK contents to find libzstd..." - find /opt/wownero-sdk -name "*zstd*" - find /opt/wownero-sdk -name "*libz*" - - - name: Normalize SDK (Force Mode) + - name: Normalize SDK run: | cd /opt/wownero-sdk/lib - # Force copy whatever zstd static lib we have to libzstd.a - # This handles 'libzstd.a', 'libzstd_static.a', etc. - cp $(find . -name "libzstd*.a" | head -n 1) libzstd.a || echo "ZSTD COPY FAILED" + # Safe Copy: Only if the source exists + [ -f libhidapi-libusb.a ] && cp -v libhidapi-libusb.a libhidapi.a || true - # Force copy libz (avoiding libzmq) - cp $(find . -name "libz.a" -o -name "libz_static.a" | head -n 1) libz.a || echo "ZLIB COPY FAILED" + # Fix ZLib: Look for libz.a, if missing try to find it, but avoid libzmq + if [ ! -f libz.a ]; then + find . -name "libz.a" -o -name "libz_static.a" | head -n 1 | xargs -I {} cp -v {} libz.a || true + fi - # Force copy hidapi - cp $(find . -name "libhidapi*.a" | head -n 1) libhidapi.a || echo "HIDAPI COPY FAILED" - - echo "State of /opt/wownero-sdk/lib:" - ls -l *.a + echo "SDK Lib content:" + ls -lh *.a - name: Install Modern CMake run: | @@ -79,10 +86,11 @@ jobs: run: | mkdir build && cd build SDK_DIR="/opt/wownero-sdk" + DEPS_DIR="$(pwd)/../deps" cmake .. -DCMAKE_BUILD_TYPE=Release \ -DBUILD_STATIC=ON \ - -DCMAKE_PREFIX_PATH="$SDK_DIR" \ + -DCMAKE_PREFIX_PATH="$SDK_DIR;$DEPS_DIR" \ -DBOOST_ROOT="$SDK_DIR" \ -DBoost_NO_SYSTEM_PATHS=ON \ -DBoost_NO_BOOST_CMAKE=ON \ @@ -99,8 +107,8 @@ jobs: -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" \ + -DZSTD_LIBRARY="$DEPS_DIR/lib/libzstd.a" \ + -DZSTD_INCLUDE_DIR="$DEPS_DIR/include" \ -DZLIB_LIBRARY="$SDK_DIR/lib/libz.a" \ -DZLIB_INCLUDE_DIR="$SDK_DIR/include" \ -DLIBEVENT_LIBRARY=$SDK_DIR/lib/libevent.a \ @@ -159,6 +167,17 @@ jobs: perl -pi -e 's/-Werror//g' CMakeLists.txt perl -pi -e 's/-Werror//g' external/monero/CMakeLists.txt + - name: Build Static ZSTD Cross + run: | + mkdir -p deps/lib deps/include + cd deps + curl -L -o zstd.tar.gz https://github.com/facebook/zstd/releases/download/v1.5.5/zstd-1.5.5.tar.gz + tar -xf zstd.tar.gz && cd zstd-1.5.5 + CC=${{ matrix.target }}-gcc CXX=${{ matrix.target }}-g++ AR=${{ matrix.target }}-ar make lib-release + cp lib/libzstd.a ../lib/ + cp lib/zstd.h ../include/ + cd .. + - 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" @@ -168,9 +187,10 @@ jobs: - name: Normalize SDK run: | cd /opt/wownero-sdk/lib - cp $(find . -name "libzstd*.a" | head -n 1) libzstd.a || true - cp $(find . -name "libz.a" -o -name "libz_static.a" | head -n 1) libz.a || true - cp $(find . -name "libhidapi*.a" | head -n 1) libhidapi.a || true + [ -f libhidapi-libusb.a ] && cp -v libhidapi-libusb.a libhidapi.a || true + if [ ! -f libz.a ]; then + find . -name "libz.a" -o -name "libz_static.a" | head -n 1 | xargs -I {} cp -v {} libz.a || true + fi - name: Install Modern CMake run: | @@ -185,11 +205,10 @@ jobs: set(CMAKE_SYSTEM_PROCESSOR ${{ matrix.proc }}) set(CMAKE_C_COMPILER ${{ matrix.target }}-gcc) set(CMAKE_CXX_COMPILER ${{ matrix.target }}-g++) + # Explicit CFLAGS + set(CMAKE_C_FLAGS "-D_GNU_SOURCE -D_XOPEN_SOURCE=700" CACHE STRING "" FORCE) + set(CMAKE_CXX_FLAGS "-D_GNU_SOURCE -D_XOPEN_SOURCE=700" CACHE STRING "" FORCE) - # Fix strptime on ARM - set(CMAKE_C_FLAGS "-D_GNU_SOURCE") - set(CMAKE_CXX_FLAGS "-D_GNU_SOURCE") - set(CMAKE_FIND_ROOT_PATH /opt/wownero-sdk) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) @@ -201,11 +220,12 @@ jobs: run: | mkdir build && cd build SDK_DIR="/opt/wownero-sdk" + DEPS_DIR="$(pwd)/../deps" cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross.cmake \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_STATIC=ON \ - -DCMAKE_PREFIX_PATH="$SDK_DIR" \ + -DCMAKE_PREFIX_PATH="$SDK_DIR;$DEPS_DIR" \ -DBOOST_ROOT="$SDK_DIR" \ -DBoost_NO_SYSTEM_PATHS=ON \ -DBoost_NO_BOOST_CMAKE=ON \ @@ -222,8 +242,8 @@ jobs: -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" \ + -DZSTD_LIBRARY="$DEPS_DIR/lib/libzstd.a" \ + -DZSTD_INCLUDE_DIR="$DEPS_DIR/include" \ -DZLIB_LIBRARY="$SDK_DIR/lib/libz.a" \ -DZLIB_INCLUDE_DIR="$SDK_DIR/include" \ -DLIBEVENT_LIBRARY=$SDK_DIR/lib/libevent.a \ @@ -277,12 +297,24 @@ jobs: HEADER="external/monero/contrib/epee/include/storages/portable_storage_val_converters.h" sed -i '1i #include \n#ifdef _WIN32\nchar* strptime(const char* s, const char* f, struct tm* tm) { return 0; }\n#endif' $HEADER - # FORCE FIX ZMQ ASYNC FOR WINDOWS - # We inject the header properly this time. - # Note: We must use a separate sed command for the include to ensure it's on a new line at the top. + # FIX ZMQ ASYNC FOR WINDOWS + # Inject Windows Header AND Replace Type + # Using separate seds for safety sed -i '1s/^/#include \n/' src/net/zmq_async.h sed -i 's/boost::asio::posix::stream_descriptor/boost::asio::windows::stream_handle/g' src/net/zmq_async.h + - name: Build Static ZSTD Windows + run: | + mkdir -p deps/lib deps/include + cd deps + curl -L -o zstd.tar.gz https://github.com/facebook/zstd/releases/download/v1.5.5/zstd-1.5.5.tar.gz + tar -xf zstd.tar.gz && cd zstd-1.5.5 + # Cross compile ZSTD + CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ AR=x86_64-w64-mingw32-ar make lib-release + cp lib/libzstd.a ../lib/ + cp lib/zstd.h ../include/ + cd .. + - name: Download SDK run: | curl -L -k -o sdk.tar.gz "https://git.such.software/Builds/wownero/releases/download/${{ env.CORE_TAG }}/wownero-core-x86_64-w64-mingw32.tar.gz" @@ -292,10 +324,11 @@ jobs: - name: Normalize SDK run: | cd /opt/wownero-sdk/lib - cp $(find . -name "libzstd*.a" | head -n 1) libzstd.a || true - cp $(find . -name "libz*.a" -o -name "libz_static.a" | head -n 1) libz.a || true - cp $(find . -name "libhidapi*.a" | head -n 1) libhidapi.a || true - cp $(find . -name "libiconv*.a" | head -n 1) libiconv.a || true + if [ ! -f libz.a ]; then + find . -name "libz.a" -o -name "libz_static.a" | head -n 1 | xargs -I {} cp -v {} libz.a || true + fi + [ -f libhidapi-libusb.a ] && cp -v libhidapi-libusb.a libhidapi.a || true + [ -f libiconv.a ] && cp -v libiconv.a libiconv.a || true echo "" > dummy.c x86_64-w64-mingw32-gcc -c dummy.c -o dummy.o @@ -316,6 +349,10 @@ jobs: set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) + # CRITICAL: Define windows versions to enable Boost Windows ASIO + set(CMAKE_C_FLAGS "-D_WIN32 -DWIN32 -D_WIN32_WINNT=0x0601" CACHE STRING "" FORCE) + set(CMAKE_CXX_FLAGS "-D_WIN32 -DWIN32 -D_WIN32_WINNT=0x0601" CACHE STRING "" FORCE) + set(CMAKE_FIND_ROOT_PATH /opt/wownero-sdk) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) @@ -329,11 +366,12 @@ jobs: run: | mkdir build && cd build SDK_DIR="/opt/wownero-sdk" + DEPS_DIR="$(pwd)/../deps" cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross.cmake \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_STATIC=ON \ - -DCMAKE_PREFIX_PATH="$SDK_DIR" \ + -DCMAKE_PREFIX_PATH="$SDK_DIR;$DEPS_DIR" \ -DBOOST_ROOT="$SDK_DIR" \ -DBoost_NO_SYSTEM_PATHS=ON \ -DBoost_NO_BOOST_CMAKE=ON \ @@ -350,10 +388,8 @@ jobs: -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" \ - -DLIBEVENT_LIBRARY=$SDK_DIR/lib/libevent.a \ - -DLIBEVENT_INCLUDE_DIR=$SDK_DIR/include \ + -DZSTD_LIBRARY="$DEPS_DIR/lib/libzstd.a" \ + -DZSTD_INCLUDE_DIR="$DEPS_DIR/include" \ -DICONV_LIBRARY="$SDK_DIR/lib/libiconv.a" \ -DICONV_INCLUDE_DIR=$SDK_DIR/include \ -DICONV_LIBRARIES="$SDK_DIR/lib/libiconv.a" \