From f64511ca468acf946625c55ae18ddd699aa2a3ab Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto Date: Sun, 10 Mar 2024 02:22:11 +0100 Subject: use new build system --- .woodpecker/linux.yaml | 121 ++++++++++++++++++----------------------------- build_single.sh | 87 +++++++++++++++++++++++++++++++--- libbridge/CMakeLists.txt | 35 ++++++++++---- 3 files changed, 151 insertions(+), 92 deletions(-) diff --git a/.woodpecker/linux.yaml b/.woodpecker/linux.yaml index f874610..b171fe9 100644 --- a/.woodpecker/linux.yaml +++ b/.woodpecker/linux.yaml @@ -3,90 +3,59 @@ clone: image: woodpeckerci/plugin-git settings: partial: false -matrix: - include: - # - image: git.mrcyjanek.net/mrcyjanek/debian:bookworm - # platform: linux/amd64 - # make_steps: depends_host monero_linux_amd64 moneroc_linux_host64 - # prepare_cmd: echo ok - # prepare_cmd_depends: echo ok - # triplet: x86_64-linux-gnu - # cc: clang - # cxx: clang++ - # host: - # boost_toolset: clang - - image: git.mrcyjanek.net/mrcyjanek/debian:bookworm - platform: linux/aarch64 - make_steps: depends_host monero_linux_arm64 moneroc_linux_host64 - prepare_cmd: echo ok - prepare_cmd_depends: echo ok - triplet: aarch64-linux-gnu - cc: clang - cxx: clang++ - host: - boost_toolset: clang - - image: alpine:3.19.1 - platform: linux/amd64 - make_steps: alpine_fix_libexecinfo depends_host monero_linux_amd64 moneroc_linux_host64 - prepare_cmd: echo ok - prepare_cmd_depends: apk add make git curl g++ linux-headers perl libtool autoconf automake pkgconfig cmake bash bison abuild - triplet: x86_64-alpine-linux-musl - cc: gcc - cxx: g++ - host: - boost_toolset: gcc - # - image: alpine:3.19.1 - # platform: linux/aarch64 - # make_steps: alpine_fix_libexecinfo depends_host monero_linux_arm64 moneroc_linux_host64 - # prepare_cmd: echo ok - # prepare_cmd_depends: apk add make git curl g++ linux-headers perl libtool autoconf automake pkgconfig cmake bash bison abuild - # triplet: aarch64-alpine-linux-musl - # cc: gcc - # cxx: g++ - - image: git.mrcyjanek.net/mrcyjanek/sailfishos:4.5.0.18_aarch64 - platform: linux/aarch64 - make_steps: depends_host monero_linux_arm64 moneroc_linux_host64 - prepare_cmd: zypper in -y git clang libxkbcommon-devel wayland-protocols-devel wayland-client wayland-egl-devel make glibc-static byacc - prepare_cmd_depends: make host_tool_perl - triplet: aarch64-linux-sailfishos - cc: clang - cxx: clang++ - host: - boost_toolset: clang - - image: git.mrcyjanek.net/mrcyjanek/osxcross:14_bookworm - platform: linux/amd64 - make_steps: depends_host monero_linux_arm64 moneroc_linux_host64 - prepare_cmd: echo ok - prepare_cmd_depends: echo ok - triplet: x86_64-apple-darwin23 - cc: x86_64-apple-darwin23-clang - cxx: x86_64-apple-darwin23-clang++ - host: x86_64-apple-darwin23 - boost_toolset: clang - openssl_target: darwin64-x86_64 + labels: - platform: ${platform} + platform: linux/amd64 steps: - - name: clone repositories + - name: clone monero and cache depends image: git.mrcyjanek.net/mrcyjanek/debian:bookworm commands: - - git fetch + - git clone https://git.mrcyjanek.net/mrcyjanek/monero --recursive --depth=1 --branch=release-v0.18.3.2-legacy + - cd monero/contrib/depends - make download - - name: build depends - image: ${image} + - name: x86_64-linux-gnu + image: git.mrcyjanek.net/mrcyjanek/debian:bookworm + commands: + - apt update + - apt install -y gcc g++ gperf + - ./build_single.sh x86_64-linux-gnu -j$(nproc) + - name: i686-linux-gnu + image: git.mrcyjanek.net/mrcyjanek/debian:bookworm + commands: + - apt update + - apt install -y gcc-i686-linux-gnu g++-i686-linux-gnu gperf + - ./build_single.sh i686-linux-gnu -j$(nproc) + - name: aarch64-linux-gnu + image: git.mrcyjanek.net/mrcyjanek/debian:bookworm + commands: + - apt update + - apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu gperf + - ./build_single.sh aarch64-linux-gnu -j$(nproc) + - name: x86_64-linux-android + image: git.mrcyjanek.net/mrcyjanek/debian:bookworm + commands: + - apt update + - apt install -y python-is-python3 libtinfo5 gperf + - ./build_single.sh x86_64-linux-android -j$(nproc) + - name: i686-linux-android + image: git.mrcyjanek.net/mrcyjanek/debian:bookworm commands: - - ${prepare_cmd} - - ${prepare_cmd_depends} - - CC=${cc} CXX=${cxx} HOST=${host} BOOST_TOOLSET=${boost_toolset} OPENSSL_TARGET=${openssl_target} make ${make_steps} - - name: info + - apt update + - apt install -y python-is-python3 libtinfo5 gperf + - ./build_single.sh i686-linux-android -j$(nproc) + # - name: aarch64-linux-android + # image: git.mrcyjanek.net/mrcyjanek/debian:bookworm + # commands: + # - apt update + # - apt install -y python-is-python3 libtinfo5 gperf + # - ./build_single.sh aarch64-linux-android -j$(nproc) + - name: arm-linux-androideabi image: git.mrcyjanek.net/mrcyjanek/debian:bookworm commands: - - ls -lah libbridge/build/libwallet2_api_c.so - - file libbridge/build/libwallet2_api_c.so - - md5sum libbridge/build/libwallet2_api_c.so - - sha256sum libbridge/build/libwallet2_api_c.so - - sha512sum libbridge/build/libwallet2_api_c.so + - apt update + - apt install -y python-is-python3 libtinfo5 gperf + - ./build_single.sh arm-linux-androideabi -j$(nproc) - name: upload artifact image: git.mrcyjanek.net/mrcyjanek/debian:bookworm commands: @@ -96,5 +65,5 @@ steps: - chmod 700 ~/.ssh - chmod 600 ~/.ssh/id_rsa - xz -e libbridge/build/libwallet2_api_c.so - - rsync --mkpath -e "ssh -o StrictHostKeyChecking=no" -raz libbridge/build/libwallet2_api_c.so.xz $${SSH_HOST}:"$${SSH_BASE_PATH}/$(git describe --tags)/$${triplet}_libwallet2_api_c.so.xz" + - rsync --mkpath -e "ssh -o StrictHostKeyChecking=no" -raz release/* $${SSH_HOST}:"$${SSH_BASE_PATH}/$(git describe --tags)/" secrets: [ ssh_privkey, ssh_host, ssh_base_path ] \ No newline at end of file diff --git a/build_single.sh b/build_single.sh index 653b07d..0ad4dbb 100755 --- a/build_single.sh +++ b/build_single.sh @@ -15,13 +15,14 @@ then echo "Usage: $0 $(gcc -dumpmachine) -j$(nproc)" exit 1 fi - +cd $(dirname $0) +WDIR=$PWD CC="" CXX="" case "$HOST_ABI" in "x86_64-linux-gnu") export CC="x86_64-linux-gnu-gcc" - export CC="x86_64-linux-gnu-g++" + export CXX="x86_64-linux-gnu-g++" ;; "i686-linux-gnu") export CC="i686-linux-gnu-gcc" @@ -31,6 +32,43 @@ case "$HOST_ABI" in export CC="aarch64-linux-gnu-gcc" export CXX="aarch64-linux-gnu-g++" ;; + "x86_64-linux-android") + export PATH="$WDIR/monero/contrib/depends/x86_64-linux-android/native/bin/:$PATH" + export CC=x86_64-linux-android-clang + export CXX=x86_64-linux-android-clang++ + ;; + "i686-linux-android") + export PATH="$WDIR/monero/contrib/depends/i686-linux-android/native/bin/:$PATH" + export CC=i686-linux-android-clang + export CXX=i686-linux-android-clang++ + ;; + "aarch64-linux-android") + export PATH="$WDIR/monero/contrib/depends/aarch64-linux-android/native/bin/:$PATH" + export CC=aarch64-linux-android-clang + export CXX=aarch64-linux-android-clang++ + ;; + "arm-linux-androideabi") + export PATH="$WDIR/monero/contrib/depends/arm-linux-androideabi/native/bin/:$PATH" + export CC=arm-linux-androideabi-clang + export CXX=arm-linux-androideabi-clang++ + ;; + "i686-w64-mingw32") + update-alternatives --set i686-w64-mingw32-gcc /usr/bin/i686-w64-mingw32-gcc-posix + update-alternatives --set i686-w64-mingw32-g++ /usr/bin/i686-w64-mingw32-g++-posix + export CC=i686-w64-mingw32-gcc-posix + export CXX=i686-w64-mingw32-g++-posix + ;; + "x86_64-w64-mingw32") + update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix + update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix + export CC=x86_64-w64-mingw32-gcc-posix + export CXX=x86_64-w64-mingw32-g++-posix + ;; + "x86_64-apple-darwin11") + export PATH="$WDIR/contrib/depends/x86_64-apple-darwin11/native/bin:$PATH" + export CC="clang -stdlib=libc++ -target x86_64-apple-darwin11 -mmacosx-version-min=10.7 --sysroot /build/monero/contrib/depends/x86_64-apple-darwin11/native/SDK/ -mlinker-version=609 -B/build/monero/contrib/depends/x86_64-apple-darwin11/native/bin/x86_64-apple-darwin11-" + export CXX="clang++ -stdlib=libc++ -target x86_64-apple-darwin11 -mmacosx-version-min=10.7 --sysroot /build/monero/contrib/depends/x86_64-apple-darwin11/native/SDK/ -mlinker-version=609 -B/build/monero/contrib/depends/x86_64-apple-darwin11/native/bin/x86_64-apple-darwin11-" + ;; esac if [[ "x$CC" == "x" ]]; @@ -45,7 +83,7 @@ then exit 1 fi -cd $(dirname $0) + pushd monero/contrib/depends make HOST="$HOST_ABI" "$NPROC" popd @@ -53,16 +91,51 @@ popd rm -rf monero/build/${HOST_ABI} 2>/dev/null || true mkdir -p monero/build/${HOST_ABI} pushd monero/build/${HOST_ABI} - env CC=${CC} CXX=${CXX} cmake -DCMAKE_TOOLCHAIN_FILE=$PWD/../../contrib/depends/${HOST_ABI}/share/toolchain.cmake ../.. - env CC=${CC} CXX=${CXX} make wallet_api $NPROC + case "$HOST_ABI" in + "x86_64-linux-gnu") + env CC="${CC}" CXX="${CXX}" cmake -DCMAKE_TOOLCHAIN_FILE=$PWD/../../contrib/depends/${HOST_ABI}/share/toolchain.cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH="x86-64" -D STATIC=ON -D BUILD_64="ON" -D CMAKE_BUILD_TYPE=release -D ANDROID=false -D BUILD_TAG="linux-x64" -D CMAKE_SYSTEM_NAME="Linux" ../.. + ;; + "i686-linux-gnu") + env CC="${CC}" CXX="${CXX}" cmake -DCMAKE_TOOLCHAIN_FILE=$PWD/../../contrib/depends/${HOST_ABI}/share/toolchain.cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH="i686" -D STATIC=ON -D BUILD_64="OFF" -D CMAKE_BUILD_TYPE=release -D ANDROID=false -D BUILD_TAG="linux-x86" -D CMAKE_SYSTEM_NAME="Linux" ../.. + ;; + "aarch64-linux-gnu") + env CC="${CC}" CXX="${CXX}" cmake -DCMAKE_TOOLCHAIN_FILE=$PWD/../../contrib/depends/${HOST_ABI}/share/toolchain.cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH="armv8-a" -D STATIC=ON -D BUILD_64="ON" -D CMAKE_BUILD_TYPE=release -D ANDROID=false -D BUILD_TAG="linux-armv8" -D CMAKE_SYSTEM_NAME="Linux" ../.. + ;; + "x86_64-linux-android") + env CC="${CC}" CXX="${CXX}" cmake -DCMAKE_TOOLCHAIN_FILE=$PWD/../../contrib/depends/${HOST_ABI}/share/toolchain.cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH="x86-64" -D STATIC=ON -D BUILD_64="ON" -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D BUILD_TAG="android-x86_64" -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_ARCH_ABI="x86_64" ../.. + ;; + "i686-linux-android") + env CC="${CC}" CXX="${CXX}" cmake -DCMAKE_TOOLCHAIN_FILE=$PWD/../../contrib/depends/${HOST_ABI}/share/toolchain.cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH="x86" -D STATIC=ON -D BUILD_64="OFF" -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D BUILD_TAG="android-x86" -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_ARCH_ABI="x86" ../.. + ;; + "aarch64-linux-android") + env CC="${CC}" CXX="${CXX}" cmake -DCMAKE_TOOLCHAIN_FILE=$PWD/../../contrib/depends/${HOST_ABI}/share/toolchain.cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH="armv8-a" -D STATIC=ON -D BUILD_64="ON" -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D BUILD_TAG="android-armv8" -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_ARCH_ABI="arm64-v8a" ../.. + ;; + "arm-linux-androideabi") + env CC="${CC}" CXX="${CXX}" cmake -DCMAKE_TOOLCHAIN_FILE=$PWD/../../contrib/depends/${HOST_ABI}/share/toolchain.cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D STATIC=ON -D BUILD_64="OFF" -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D BUILD_TAG="android-armv7" -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_ARCH_ABI="armeabi-v7a" ../.. + ;; + "x86_64-w64-mingw32") + env CC="${CC}" CXX="${CXX}" cmake -DCMAKE_TOOLCHAIN_FILE=$PWD/../../contrib/depends/${HOST_ABI}/share/toolchain.cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="win-x64" ../.. + ;; + "i686-w64-mingw32") + env CC="${CC}" CXX="${CXX}" cmake -DCMAKE_TOOLCHAIN_FILE=$PWD/../../contrib/depends/${HOST_ABI}/share/toolchain.cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D STATIC=ON -D ARCH="i686" -D BUILD_64=OFF -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="win-x32" ../.. + ;; + "x86_64-apple-darwin11") + env CC="${CC}" CXX="${CXX}" cmake -DCMAKE_TOOLCHAIN_FILE=$PWD/../../contrib/depends/${HOST_ABI}/share/toolchain.cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="mac-x64" ../.. + ;; + *) + echo "we don't know how to compile monero for '$HOST_ABI'" + exit 1 + ;; + esac + CC=gcc CXX=g++ make wallet_api $NPROC popd pushd libbridge rm -rf build/${HOST_ABI} || true mkdir -p build/${HOST_ABI} -p cd build/${HOST_ABI} - env CC=${CC} CXX=${CXX} cmake -DHOST_ABI=${HOST_ABI} ../.. - env CC=${CC} CXX=${CXX} make $NPROC + env CC="${CC}" CXX="${CXX}" cmake -DHOST_ABI=${HOST_ABI} ../.. + env CC="${CC}" CXX="${CXX}" make $NPROC popd mkdir release 2>/dev/null || true diff --git a/libbridge/CMakeLists.txt b/libbridge/CMakeLists.txt index e340bef..30a454b 100644 --- a/libbridge/CMakeLists.txt +++ b/libbridge/CMakeLists.txt @@ -36,41 +36,58 @@ set_target_properties(ssl PROPERTIES IMPORTED_LOCATION # Boost ############ +if(${HOST_ABI} STREQUAL "x86_64-linux-android" OR ${HOST_ABI} STREQUAL "aarch64-linux-android" OR ${HOST_ABI} STREQUAL "arm-linux-androideabi" OR ${HOST_ABI} STREQUAL "i686-linux-android") + set(BOOST_WTF "-mt-s") + set(BOOST_WTF_PART "") +elseif(${HOST_ABI} STREQUAL "x86_64-w64-mingw32") + set(BOOST_WTF "-mt-s") + set(BOOST_WTF_PART "_win32") +else() + set(BOOST_WTF "-mt") + set(BOOST_WTF_PART "") +endif() + +if(${HOST_ABI} STREQUAL "x86_64-w64-mingw32") + set(CMAKE_SYSTEM_NAME "Windows") + set(CMAKE_LINKER "x86_64-w64-mingw32-ld") + set(TARGET "x86_64-w64-mingw32") +endif() + add_library(boost_chrono STATIC IMPORTED) set_target_properties(boost_chrono PROPERTIES IMPORTED_LOCATION - ${EXTERNAL_LIBS_DIR}/lib/libboost_chrono-mt-d.a) + ${EXTERNAL_LIBS_DIR}/lib/libboost_chrono${BOOST_WTF}.a) add_library(boost_date_time STATIC IMPORTED) set_target_properties(boost_date_time PROPERTIES IMPORTED_LOCATION - ${EXTERNAL_LIBS_DIR}/lib/libboost_date_time-mt.a) + ${EXTERNAL_LIBS_DIR}/lib/libboost_date_time${BOOST_WTF}.a) add_library(boost_filesystem STATIC IMPORTED) set_target_properties(boost_filesystem PROPERTIES IMPORTED_LOCATION - ${EXTERNAL_LIBS_DIR}/lib/libboost_filesystem-mt.a) + ${EXTERNAL_LIBS_DIR}/lib/libboost_filesystem${BOOST_WTF}.a) add_library(boost_program_options STATIC IMPORTED) set_target_properties(boost_program_options PROPERTIES IMPORTED_LOCATION - ${EXTERNAL_LIBS_DIR}/lib/libboost_program_options-mt.a) + ${EXTERNAL_LIBS_DIR}/lib/libboost_program_options${BOOST_WTF}.a) add_library(boost_regex STATIC IMPORTED) set_target_properties(boost_regex PROPERTIES IMPORTED_LOCATION - ${EXTERNAL_LIBS_DIR}/lib/libboost_regex-mt.a) + ${EXTERNAL_LIBS_DIR}/lib/libboost_regex${BOOST_WTF}.a) add_library(boost_serialization STATIC IMPORTED) set_target_properties(boost_serialization PROPERTIES IMPORTED_LOCATION - ${EXTERNAL_LIBS_DIR}/lib/libboost_serialization-mt.a) + ${EXTERNAL_LIBS_DIR}/lib/libboost_serialization${BOOST_WTF}.a) add_library(boost_system STATIC IMPORTED) set_target_properties(boost_system PROPERTIES IMPORTED_LOCATION - ${EXTERNAL_LIBS_DIR}/lib/libboost_system-mt.a) + ${EXTERNAL_LIBS_DIR}/lib/libboost_system${BOOST_WTF}.a) add_library(boost_thread STATIC IMPORTED) set_target_properties(boost_thread PROPERTIES IMPORTED_LOCATION - ${EXTERNAL_LIBS_DIR}/lib/libboost_thread-mt.a) + ${EXTERNAL_LIBS_DIR}/lib/libboost_thread${BOOST_WTF_PART}${BOOST_WTF}.a) add_library(boost_wserialization STATIC IMPORTED) set_target_properties(boost_wserialization PROPERTIES IMPORTED_LOCATION - ${EXTERNAL_LIBS_DIR}/lib/libboost_wserialization-mt.a) + ${EXTERNAL_LIBS_DIR}/lib/libboost_wserialization${BOOST_WTF}.a) ############# # Polyseed -- cgit v1.2.3