diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index 4edab11..062ee38 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -1,4 +1,4 @@ -name: Build Wownero LWS (Split Jobs) +name: Build Wownero LWS (Final) on: push: branches: [ master, main ] @@ -7,7 +7,8 @@ on: env: NODE_TLS_REJECT_UNAUTHORIZED: '0' - CORE_TAG: 'v0.11.4.0' + # The "God Build" of Core + CORE_TAG: 'v0.11.4.1' jobs: # ================================================================== @@ -21,6 +22,8 @@ jobs: steps: - name: Fix DNS run: echo "192.168.88.230 git.such.software" >> /etc/hosts + - name: Install Static System Libs + run: apt-get update && apt-get install -y libc6-dev - name: Checkout env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -34,43 +37,24 @@ jobs: - name: Patch Source run: | - perl -pi -e 's/struct\s+rest_server::handler_loop\s+final/struct rest_server::handler_loop/g' src/rest_server.cpp + 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/-Werror//g' CMakeLists.txt perl -pi -e 's/-Werror//g' external/monero/CMakeLists.txt - - name: Build Static Deps (ZLIB/ZSTD) - run: | - mkdir -p deps/lib deps/include - cd deps - - # ZLIB - curl -L -o zlib.tar.gz https://zlib.net/zlib-1.3.1.tar.gz - tar -xf zlib.tar.gz && cd zlib-1.3.1 - ./configure --static --prefix=$(pwd)/.. - make install - cd .. - - # ZSTD - 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 - # Simple make for static lib - 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: Fix Libraries + - name: Normalize SDK run: | - if [ -f /opt/wownero-sdk/lib/libhidapi-libusb.a ] && [ ! -f /opt/wownero-sdk/lib/libhidapi.a ]; then - cp /opt/wownero-sdk/lib/libhidapi-libusb.a /opt/wownero-sdk/lib/libhidapi.a - fi + # Ensure strict naming for CMake + cd /opt/wownero-sdk/lib + find . -name "libzstd*.a" -exec cp {} libzstd.a \; || true + find . -name "libz*.a" -exec cp {} libz.a \; || true + find . -name "libhidapi*.a" -exec cp {} libhidapi.a \; || true - name: Install Modern CMake run: | @@ -82,14 +66,14 @@ 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;$DEPS_DIR" \ + -DCMAKE_PREFIX_PATH="$SDK_DIR" \ -DBOOST_ROOT="$SDK_DIR" \ -DBoost_NO_SYSTEM_PATHS=ON \ -DBoost_NO_BOOST_CMAKE=ON \ + -DBoost_USE_STATIC_RUNTIME=ON \ -DOPENSSL_ROOT_DIR="$SDK_DIR" \ -DOPENSSL_USE_STATIC_LIBS=TRUE \ -DUNBOUND_INCLUDE_DIR="$SDK_DIR/include" \ @@ -102,14 +86,13 @@ 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="$DEPS_DIR/lib/libzstd.a" \ - -DZSTD_INCLUDE_DIR="$DEPS_DIR/include" \ - -DZLIB_LIBRARY="$DEPS_DIR/lib/libz.a" \ - -DZLIB_INCLUDE_DIR="$DEPS_DIR/include" \ + -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 \ -DUSE_READLINE=OFF \ - -DCMAKE_CXX_FLAGS="-D_GNU_SOURCE" \ -DCMAKE_EXE_LINKER_FLAGS="-static" make -j$(nproc) @@ -153,48 +136,29 @@ jobs: rm -rf * git config --global --add safe.directory '*' 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 clone http://oauth2:$GITHUB_TOKEN@git.such.software:3000/${{ github.repository }}.git . git submodule update --init --recursive - name: Patch Source run: | - perl -pi -e 's/struct\s+rest_server::handler_loop\s+final/struct rest_server::handler_loop/g' src/rest_server.cpp + 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/-Werror//g' CMakeLists.txt perl -pi -e 's/-Werror//g' external/monero/CMakeLists.txt - - name: Build Static Deps (ZLIB/ZSTD) Cross - run: | - mkdir -p deps/lib deps/include - cd deps - - # ZLIB Cross - curl -L -o zlib.tar.gz https://zlib.net/zlib-1.3.1.tar.gz - tar -xf zlib.tar.gz && cd zlib-1.3.1 - CC=${{ matrix.target }}-gcc ./configure --static --prefix=$(pwd)/.. - make install - cd .. - - # ZSTD Cross - 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 - # Set CC/CXX for cross compilation - 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" mkdir -p /opt/wownero-sdk tar -xf sdk.tar.gz -C /opt/wownero-sdk - - name: Fix Libraries + - name: Normalize SDK run: | - if [ -f /opt/wownero-sdk/lib/libhidapi-libusb.a ] && [ ! -f /opt/wownero-sdk/lib/libhidapi.a ]; then - cp /opt/wownero-sdk/lib/libhidapi-libusb.a /opt/wownero-sdk/lib/libhidapi.a - fi + cd /opt/wownero-sdk/lib + find . -name "libhidapi*.a" -exec cp {} libhidapi.a \; || true + find . -name "libzstd*.a" -exec cp {} libzstd.a \; || true + find . -name "libz*.a" -exec cp {} libz.a \; || true - name: Install Modern CMake run: | @@ -209,10 +173,11 @@ jobs: set(CMAKE_SYSTEM_PROCESSOR ${{ matrix.proc }}) set(CMAKE_C_COMPILER ${{ matrix.target }}-gcc) set(CMAKE_CXX_COMPILER ${{ matrix.target }}-g++) - # Explicitly set CFLAGS to fix strptime issue - 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) @@ -224,16 +189,15 @@ jobs: run: | mkdir build && cd build SDK_DIR="/opt/wownero-sdk" - DEPS_DIR="$(pwd)/../deps" - # -lrt needs to be explicit for cross builds sometimes cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross.cmake \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_STATIC=ON \ - -DCMAKE_PREFIX_PATH="$SDK_DIR;$DEPS_DIR" \ + -DCMAKE_PREFIX_PATH="$SDK_DIR" \ -DBOOST_ROOT="$SDK_DIR" \ -DBoost_NO_SYSTEM_PATHS=ON \ -DBoost_NO_BOOST_CMAKE=ON \ + -DBoost_USE_STATIC_RUNTIME=ON \ -DOPENSSL_ROOT_DIR="$SDK_DIR" \ -DOPENSSL_USE_STATIC_LIBS=TRUE \ -DUNBOUND_INCLUDE_DIR="$SDK_DIR/include" \ @@ -246,10 +210,10 @@ 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="$DEPS_DIR/lib/libzstd.a" \ - -DZSTD_INCLUDE_DIR="$DEPS_DIR/include" \ - -DZLIB_LIBRARY="$DEPS_DIR/lib/libz.a" \ - -DZLIB_INCLUDE_DIR="$DEPS_DIR/include" \ + -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=rt \ @@ -291,17 +255,15 @@ jobs: - name: Patch Source run: | - perl -pi -e 's/struct\s+rest_server::handler_loop\s+final/struct rest_server::handler_loop/g' src/rest_server.cpp + 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/find_library\(ICONV/# find_library(ICONV/g' external/monero/CMakeLists.txt perl -pi -e 's/-Werror//g' CMakeLists.txt perl -pi -e 's/-Werror//g' external/monero/CMakeLists.txt - # FORCE PATCH STRPTIME for Windows - # This replaces #include with #include \n#include - # And effectively forces the compiler to ignore the strptime missing error by providing a dummy or relying on other headers - # Actually, easiest hack for Windows builds in Monero deps is usually defining it away or using a polyfill. - # We will try defining _GNU_SOURCE globally first. + # Windows strptime hack + 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 - name: Download SDK run: | @@ -309,14 +271,17 @@ jobs: mkdir -p /opt/wownero-sdk tar -xf sdk.tar.gz -C /opt/wownero-sdk - - name: Fix Libraries & Dummy RT + - name: Normalize SDK & Dummy RT run: | - if [ -f /opt/wownero-sdk/lib/libhidapi-libusb.a ] && [ ! -f /opt/wownero-sdk/lib/libhidapi.a ]; then - cp /opt/wownero-sdk/lib/libhidapi-libusb.a /opt/wownero-sdk/lib/libhidapi.a - fi + cd /opt/wownero-sdk/lib + find . -name "libzstd*.a" -exec cp {} libzstd.a \; || true + find . -name "libz*.a" -exec cp {} libz.a \; || true + find . -name "libhidapi*.a" -exec cp {} libhidapi.a \; || true + find . -name "libiconv*.a" -exec cp {} libiconv.a \; || true + echo "" > dummy.c x86_64-w64-mingw32-gcc -c dummy.c -o dummy.o - x86_64-w64-mingw32-ar rcs /opt/wownero-sdk/lib/librt.a dummy.o + x86_64-w64-mingw32-ar rcs librt.a dummy.o - name: Install Modern CMake run: | @@ -333,9 +298,6 @@ jobs: set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) - # Fix for strptime: - set(CMAKE_CXX_FLAGS "-DWIN32_LEAN_AND_MEAN" 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) @@ -350,18 +312,6 @@ jobs: mkdir build && cd build SDK_DIR="/opt/wownero-sdk" - # Windows has ZLIB in SDK, we found that out. - LIBZ=$(find $SDK_DIR -name libz.a | head -n 1) - if [ -z "$LIBZ" ]; then LIBZ="$SDK_DIR/lib/libz.a"; fi - - # ZSTD too - LIBZSTD=$(find $SDK_DIR -name libzstd.a | head -n 1) - if [ -z "$LIBZSTD" ]; then LIBZSTD="$SDK_DIR/lib/libzstd.a"; fi - - # ICONV too - LIBICONV=$(find $SDK_DIR -name libiconv.a | head -n 1) - if [ -z "$LIBICONV" ]; then LIBICONV="$SDK_DIR/lib/libiconv.a"; fi - cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross.cmake \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_STATIC=ON \ @@ -369,6 +319,7 @@ jobs: -DBOOST_ROOT="$SDK_DIR" \ -DBoost_NO_SYSTEM_PATHS=ON \ -DBoost_NO_BOOST_CMAKE=ON \ + -DBoost_USE_STATIC_RUNTIME=ON \ -DOPENSSL_ROOT_DIR="$SDK_DIR" \ -DOPENSSL_USE_STATIC_LIBS=TRUE \ -DUNBOUND_INCLUDE_DIR="$SDK_DIR/include" \ @@ -381,13 +332,13 @@ 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="$LIBZSTD" \ - -DZSTD_INCLUDE_DIR=$SDK_DIR/include \ + -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 \ - -DICONV_LIBRARY="$LIBICONV" \ + -DICONV_LIBRARY="$SDK_DIR/lib/libiconv.a" \ -DICONV_INCLUDE_DIR=$SDK_DIR/include \ - -DICONV_LIBRARIES="$LIBICONV" \ + -DICONV_LIBRARIES="$SDK_DIR/lib/libiconv.a" \ -DRT_LIBRARY=$SDK_DIR/lib/librt.a \ -DUSE_READLINE=OFF \ -DCMAKE_EXE_LINKER_FLAGS="-static -Wl,--allow-multiple-definition" @@ -436,8 +387,10 @@ jobs: - name: Patch Source run: | - perl -pi -e 's/struct\s+rest_server::handler_loop\s+final/struct rest_server::handler_loop/g' src/rest_server.cpp + 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 + # Nuke locale requirement for Mac, since we removed it from Core builds + perl -pi -e 's/locale//g' external/monero/CMakeLists.txt - name: Install CMake run: brew install cmake @@ -454,8 +407,10 @@ jobs: mkdir build && cd build SDK_DIR="$(pwd)/../wownero-sdk" + # CRITICAL: We set Boost_USE_STATIC_RUNTIME=OFF because our Mac artifacts use shared runtime cmake .. -DCMAKE_BUILD_TYPE=Release \ -DBUILD_STATIC=ON \ + -DBoost_USE_STATIC_RUNTIME=OFF \ -DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} \ -DCMAKE_PREFIX_PATH="$SDK_DIR" \ -DBOOST_ROOT="$SDK_DIR" \