From 365c444b05d19c210ff10cdb71b80040b04bbcef Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto Date: Mon, 1 Apr 2024 08:51:37 +0200 Subject: [PATCH] feat: macos host builds --- .gitmodules | 3 ++ build_single.sh | 62 ++++++++++++++++++++++++-- external/polyseed | 1 + monero_libwallet2_api_c/CMakeLists.txt | 11 ++++- 4 files changed, 71 insertions(+), 6 deletions(-) create mode 160000 external/polyseed diff --git a/.gitmodules b/.gitmodules index cfba43e..991dc74 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "wownero"] path = wownero url = https://git.wownero.com/wownero/wownero +[submodule "external/polyseed"] + path = external/polyseed + url = https://github.com/tevador/polyseed diff --git a/build_single.sh b/build_single.sh index c1aa747..a6e318d 100755 --- a/build_single.sh +++ b/build_single.sh @@ -1,4 +1,10 @@ #!/bin/bash + +function verbose_copy() { + echo "==> cp $1 $2" + cp $1 $2 +} + set -e repo=$1 if [[ "x$repo" == "x" ]]; @@ -93,6 +99,10 @@ case "$HOST_ABI" in export CC="clang -stdlib=libc++ -target arm64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot $WDIR/$repo/contrib/depends/aarch64-apple-darwin11/native/SDK/ -mlinker-version=609 -B$WDIR/$repo/contrib/depends/aarch64-apple-darwin11/native/bin/aarch64-apple-darwin11-" export CXX="clang++ -stdlib=libc++ -target arm64-apple-darwin11 -mmacosx-version-min=10.8 --sysroot $WDIR/$repo/contrib/depends/aarch64-apple-darwin11/native/SDK/ -mlinker-version=609 -B$WDIR/$repo/contrib/depends/aarch64-apple-darwin11/native/bin/aarch64-apple-darwin11-" ;; + "host-apple-darwin") + export CC="clang" + export CXX="clang++" + ;; esac if [[ "x$CC" == "x" ]]; @@ -106,10 +116,51 @@ then echo "No C++ compiler found for abi: '$HOST_ABI'. Adjust the switch case in $0" exit 1 fi - - pushd $repo/contrib/depends - CC=gcc CXX=g++ make HOST="$HOST_ABI" "$NPROC" + case "$HOST_ABI" in + "x86_64-linux-gnu" | "i686-linux-gnu" | "aarch64-linux-gnu" | "x86_64-linux-android" | "i686-linux-android" | "aarch64-linux-android" | "arm-linux-androideabi" | "i686-w64-mingw32" | "x86_64-w64-mingw32" | "x86_64-apple-darwin11" | "aarch64-apple-darwin11") + CC=gcc CXX=g++ make HOST="$HOST_ABI" "$NPROC" + ;; + "host-apple-darwin") + echo "====================================" + echo "= =" + echo "= CHECK README.md IF BUILD FAILS =" + echo "= =" + echo "====================================" + echo "WARN: using host dependencies on macos." + POLYSEED_DIR=../../../external/polyseed/build/${HOST_ABI} + rm -rf ${POLYSEED_DIR} + mkdir -p ${POLYSEED_DIR} + pushd ${POLYSEED_DIR} + CC="${CC}" CXX="${CXX}" cmake ../.. + make $NPROC + popd + MACOS_LIBS_DIR="${PWD}/host-apple-darwin" + rm -rf ${MACOS_LIBS_DIR} + mkdir -p ${MACOS_LIBS_DIR}/lib + export HOMEBREW_PREFIX=/opt/homebrew + verbose_copy "${HOMEBREW_PREFIX}/lib/libunbound.a" ${MACOS_LIBS_DIR}/lib/libunbound.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libboost_chrono-mt.a" ${MACOS_LIBS_DIR}/lib/libboost_chrono-mt.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libboost_locale-mt.a" ${MACOS_LIBS_DIR}/lib/libboost_locale-mt.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libboost_date_time-mt.a" ${MACOS_LIBS_DIR}/lib/libboost_date_time-mt.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libboost_filesystem-mt.a" ${MACOS_LIBS_DIR}/lib/libboost_filesystem-mt.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libboost_program_options-mt.a" ${MACOS_LIBS_DIR}/lib/libboost_program_options-mt.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libboost_regex-mt.a" ${MACOS_LIBS_DIR}/lib/libboost_regex-mt.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libboost_serialization-mt.a" ${MACOS_LIBS_DIR}/lib/libboost_serialization-mt.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libboost_system-mt.a" ${MACOS_LIBS_DIR}/lib/libboost_system-mt.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libboost_thread-mt.a" ${MACOS_LIBS_DIR}/lib/libboost_thread-mt.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libboost_wserialization-mt.a" ${MACOS_LIBS_DIR}/lib/libboost_wserialization-mt.a + verbose_copy "${POLYSEED_DIR}/libpolyseed.a" ${MACOS_LIBS_DIR}/lib/libpolyseed.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libssl.a" ${MACOS_LIBS_DIR}/lib/libssl.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libcrypto.a" ${MACOS_LIBS_DIR}/lib/libcrypto.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libsodium.a" ${MACOS_LIBS_DIR}/lib/libsodium.a + verbose_copy "${HOMEBREW_PREFIX}/lib/libevent.a" ${MACOS_LIBS_DIR}/lib/libevent.a + ;; + *) + echo "Unable to build dependencies for '$HOST_ABI'." + exit 1 + ;; + esac popd buildType=Release @@ -151,6 +202,9 @@ pushd $repo/build/${HOST_ABI} "aarch64-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="armv8-a" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=$buildType -D BUILD_TAG="mac-armv8" ../.. ;; + "host-apple-darwin") + env CC="${CC}" CXX="${CXX}" cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D STATIC=ON -D BUILD_64=ON -D CMAKE_BUILD_TYPE=$buildType ../.. + ;; *) echo "we don't know how to compile monero for '$HOST_ABI'" exit 1 @@ -183,7 +237,7 @@ pushd release/$repo cp ../../$repo/build/${HOST_ABI}/external/polyseed/libpolyseed.${APPENDIX} ${HOST_ABI}_libpolyseed.${APPENDIX} rm ${HOST_ABI}_libpolyseed.${APPENDIX}.xz || true xz -e ${HOST_ABI}_libpolyseed.${APPENDIX} - elif [[ "${HOST_ABI}" == "x86_64-apple-darwin11" || "${HOST_ABI}" == "aarch64-apple-darwin11" ]]; + elif [[ "${HOST_ABI}" == "x86_64-apple-darwin11" || "${HOST_ABI}" == "aarch64-apple-darwin11" || "${HOST_ABI}" == "host-apple-darwin" ]]; then APPENDIX="${APPENDIX}dylib" else diff --git a/external/polyseed b/external/polyseed new file mode 160000 index 0000000..b7c35bb --- /dev/null +++ b/external/polyseed @@ -0,0 +1 @@ +Subproject commit b7c35bb3c6b91e481ecb04fc235eaff69c507fa1 diff --git a/monero_libwallet2_api_c/CMakeLists.txt b/monero_libwallet2_api_c/CMakeLists.txt index 175cc9e..72bab3c 100644 --- a/monero_libwallet2_api_c/CMakeLists.txt +++ b/monero_libwallet2_api_c/CMakeLists.txt @@ -256,6 +256,10 @@ add_library(hidapi STATIC IMPORTED) set_target_properties(hidapi PROPERTIES IMPORTED_LOCATION ${EXTERNAL_LIBS_DIR}/lib/libhidapi.a) +add_library(event STATIC IMPORTED) +set_target_properties(event PROPERTIES IMPORTED_LOCATION + ${EXTERNAL_LIBS_DIR}/lib/libevent.a) + ############# # System ############# @@ -276,6 +280,8 @@ endif() if (${HOST_ABI} STREQUAL "x86_64-apple-darwin11" OR ${HOST_ABI} STREQUAL "aarch64-apple-darwin11") set(EXTRA_LIBS_APPLE "-framework IOKit" "-framework CoreFoundation" "-framework Cocoa" hidapi) # set_target_properties(wallet2_api_c PROPERTIES LINK_FLAGS "-Wl,-F/Library/Frameworks") +elseif(${HOST_ABI} STREQUAL "host-apple-darwin") + set(EXTRA_LIBS_APPLE "-framework IOKit" "-framework CoreFoundation" "-framework Cocoa" apple_nghttp2 event) endif() # target_compile_options(wallet2_api_c PRIVATE -static-libstdc++) @@ -286,7 +292,7 @@ if(${HOST_ABI} STREQUAL "x86_64-w64-mingw32" OR ${HOST_ABI} STREQUAL "i686-w64-m set(EXTRA_LIBS_WINDOWS wsock32 ws2_32 iconv iphlpapi crypt32 hidapi) endif() -if(${HOST_ABI} STREQUAL "x86_64-apple-darwin11" OR ${HOST_ABI} STREQUAL "aarch64-apple-darwin11") +if(${HOST_ABI} STREQUAL "x86_64-apple-darwin11" OR ${HOST_ABI} STREQUAL "aarch64-apple-darwin11" OR ${HOST_ABI} STREQUAL "host-apple-darwin") set_target_properties(wallet2_api_c PROPERTIES SUFFIX ".dylib") set_target_properties(wallet2_api_c PROPERTIES NO_SONAME 1) @@ -298,9 +304,10 @@ elseif(${MONERO_FLAVOR} STREQUAL "wownero") target_compile_definitions(wallet2_api_c PRIVATE FLAVOR_WOWNERO) endif() -if(NOT ${HOST_ABI} STREQUAL "x86_64-apple-darwin11" AND NOT ${HOST_ABI} STREQUAL "aarch64-apple-darwin11") +if(NOT ${HOST_ABI} STREQUAL "x86_64-apple-darwin11" AND NOT ${HOST_ABI} STREQUAL "aarch64-apple-darwin11" AND NOT ${HOST_ABI} STREQUAL "host-apple-darwin") set_target_properties(wallet2_api_c PROPERTIES LINK_FLAGS "-Wl,--exclude-libs,ALL") endif() + target_link_libraries( wallet2_api_c wallet_api