From a59b143db601ac359e5170683486598ec8a56f74 Mon Sep 17 00:00:00 2001 From: Brandon Trussell Date: Fri, 14 Feb 2025 06:00:17 +0000 Subject: [PATCH 1/8] Allow building fat binaries for MacOS --- .gitignore | 3 + CMakeLists.txt | 31 +++-- README.md | 3 +- bin/build_libmonero_cpp.sh | 215 ++++++++++++++++++++++++++++++++--- bin/clean-depends-sources.sh | 3 + bin/clean.sh | 11 ++ 6 files changed, 245 insertions(+), 21 deletions(-) create mode 100755 bin/clean-depends-sources.sh create mode 100755 bin/clean.sh diff --git a/.gitignore b/.gitignore index 18920506..b16e504a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ /external-libs/ /log_cpp_scratchpad.txt +*.swp +*.log + diff --git a/CMakeLists.txt b/CMakeLists.txt index c8a84341..f9cdba66 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,20 +2,36 @@ list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/cmake") cmake_minimum_required(VERSION 3.4.1) +# if (NOT (${TARGET} STREQUAL CMAKE_HOST_SYSTEM_NAME)) + # set(DEPENDS TRUE) +# endif() + +project(MoneroCppLibrary) + if (WIN32) add_definitions( "-D_GLIBCXX_USE_NANOSLEEP=1" ) # "'sleep_for' is not a member of 'std::this_thread'" in gcc 4.7/4.8 add_definitions( "-DWIN32_LEAN_AND_MEAN" ) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,-mbig-obj -O2 -fPIC -std=c++14 -F/Library/Frameworks -pthread -lcrypto -lcrypt32 -lbcrypt") else() - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++14 -F/Library/Frameworks -pthread") + if (NOT (${MON_VERSION} MATCHES "linux") AND DEPENDS) + set(CMAKE_CXX_COMPILER_FORCED True) + endif() + message(STATUS "Target inside of cpp cmakelists is ${MON_VERSION}") + if (${MON_VERSION} MATCHES "darwin" AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + message(STATUS "Cross compiling from Linux to MacOS") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++14 -F${CMAKE_SOURCE_DIR}/external/monero-project/contrib/depends/${FRAMEWORK_DIR} -pthread") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++14 -F/Library/Frameworks -pthread") + message(STATUS "Setting default CFLAGS=${CMAKE_CXX_FLAGS}") + endif() endif() + #SET(CMAKE_C_COMPILER /path/to/c/compiler) #SET(CMAKE_CXX_COMPILER /path/to/cpp/compiler) #SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++14 -F/Library/Frameworks -pthread -fsanitize=address") # TODO: way to enable sanitize? get runtime error with this on -project(MoneroCppLibrary) set(BUILD_LIBRARY ON) set(BUILD_SAMPLE OFF) @@ -29,9 +45,6 @@ set(BUILD_TESTS OFF) set(MONERO_PROJECT "${CMAKE_SOURCE_DIR}/external/monero-project" CACHE STRING "Monero project source directory") set(MONERO_PROJECT_SRC "${MONERO_PROJECT}/src") -set(EXTERNAL_LIBS_DIR ${CMAKE_SOURCE_DIR}/external-libs) -message(STATUS EXTERNAL_LIBS_DIR : ${EXTERNAL_LIBS_DIR}) - #################### # Extra libraries #################### @@ -133,9 +146,8 @@ add_definitions(-DHAVE_HIDAPI) # Monero ############# -set(MONERO_PROJECT_BUILD "${MONERO_PROJECT}/build/release" CACHE STRING "Monero project build directory") +set(MONERO_PROJECT_BUILD "${CMAKE_SOURCE_DIR}/external-libs/${MON_VERSION}/monero-project/release" CACHE STRING "Monero project build directory") message(STATUS "Using monero-project build: " ${MONERO_PROJECT_BUILD}) - list(APPEND CMAKE_MODULE_PATH "${MONERO_PROJECT}/cmake") add_library(wallet STATIC IMPORTED) @@ -180,6 +192,10 @@ else() endif() endif() +############ +# Misc Libs +############ + add_library(rpc_base STATIC IMPORTED) set_target_properties(rpc_base PROPERTIES IMPORTED_LOCATION ${MONERO_PROJECT_BUILD}/src/rpc/librpc_base.a) @@ -279,6 +295,7 @@ set( src/wallet/monero_wallet_full.cpp ) + if (BUILD_LIBRARY) add_library(monero-cpp SHARED ${LIBRARY_SRC_FILES}) diff --git a/README.md b/README.md index e5756fbf..0fca6948 100644 --- a/README.md +++ b/README.md @@ -162,7 +162,8 @@ For example, [monero-java](https://github.com/woodser/monero-java) compiles this ### Linux 1. Clone the project repository if applicable: `git clone --recurse-submodules https://github.com/woodser/monero-cpp.git` -2. Update dependencies: `sudo apt update && sudo apt install build-essential cmake pkg-config libssl-dev libzmq3-dev libunbound-dev libsodium-dev libunwind8-dev liblzma-dev libreadline6-dev libexpat1-dev libpgm-dev qttools5-dev-tools libhidapi-dev libusb-1.0-0-dev libprotobuf-dev protobuf-compiler libudev-dev libboost-chrono-dev libboost-date-time-dev libboost-filesystem-dev libboost-locale-dev libboost-program-options-dev libboost-regex-dev libboost-serialization-dev libboost-system-dev libboost-thread-dev python3 ccache doxygen graphviz nettle-dev libevent-dev` +2. Update dependencies: `sudo apt update && sudo apt install build-essential cmake pkg-config libssl-dev libzmq3-dev libsodium-dev libunwind8-dev liblzma-dev libreadline6-dev libexpat1-dev libpgm-dev qttools5-dev-tools libhidapi-dev libusb-1.0-0-dev libprotobuf-dev protobuf-compiler libudev-dev libboost-chrono-dev libboost-date-time-dev libboost-filesystem-dev libboost-locale-dev libboost-program-options-dev libboost-regex-dev libboost-serialization-dev libboost-system-dev libboost-thread-dev +python3 ccache doxygen graphviz nettle-dev libevent-dev llvm clang` 3. Follow instructions to install [unbound](https://unbound.docs.nlnetlabs.nl/en/latest/getting-started/installation.html) for Linux to your home directory (e.g. `~/unbound-1.19.0`). For example, install expat: diff --git a/bin/build_libmonero_cpp.sh b/bin/build_libmonero_cpp.sh index c7b0a3ce..4fdaaf3b 100755 --- a/bin/build_libmonero_cpp.sh +++ b/bin/build_libmonero_cpp.sh @@ -1,25 +1,214 @@ -#!/bin/sh +#!/bin/bash + +CURRENT_ARCH=`uname -m` +CURRENT_OS=`uname -s` -# build monero-project dependencies cd ./external/monero-project/ || exit 1 git submodule update --init --force || exit 1 HOST_NCORES=$(nproc 2>/dev/null || shell nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 1) -if [[ $(uname -s) == "MINGW64_NT"* || $(uname -s) == "MSYS"* ]]; then +if [[ $CURRENT_OS == "MINGW64_NT"* || $CURRENT_OS == "MSYS"* ]]; then + VERSION="${CURRENT_ARCH}-W${bit}-${CURRENT_OS}" + + # monero-project bit=$(getconf LONG_BIT) + mkdir -p build/release if [ "$bit" == "64" ]; then make release-static-win64 -j$HOST_NCORES || exit 1 else make release-static-win32 -j$HOST_NCORES || exit 1 fi -else - # OS is not windows + mv build/release ../../external-libs/$VERSION/monero-project/ + + # monero-cpp + cd ../../ + mkdir -p build/$CURRENT_ARCH/release && + cd build/$CURRENT_ARCH/release && + cmake -DMON_VERSION=$VERSION ../../.. && + cmake --build . && + make -j$HOST_NCORES . + +elif [ $CURRENT_OS == "Darwin" ]; then + + VERSION="${CURRENT_ARCH}-apple-darwin11" + + # Build current architecture only. + # monero-project + printf "\nBuilding native release static version of monero-project for ${VERSION}\n" make release-static -j$HOST_NCORES || exit 1 + rm -rf ../../external-libs/$VERSION/monero-project + mkdir -p ../../external-libs/$VERSION/monero-project/ && + mv build/release ../../external-libs/$VERSION/monero-project/ + cd ../.. + + # monero-cpp + printf "\nBuilding native Monero-cpp for ${VERSION}\n" + rm -rf build/$VERSION/release && + mkdir -p build/$VERSION/release && + cd build/$VERSION/release && + cmake -D MON_VERSION=$VERSION ../../.. && + cmake --build . && + make -j$HOST_NCORES . + +else + # Running on Linux + # "OS" will be used as if it is called "WRAPPER" + + rm -rf build + BUILD_BOTH_ARCHS=0 + OS="" + VENDOR="" + + if [ "${TARGET}" == "darwin" ]; then + OS="darwin11" + VENDOR="apple" + if [ -z "${ARCH}" ]; then + BUILD_BOTH_ARCHS=1 + fi + elif [ "${TARGET}" == "MSYS" ] || [ "${TARGET}" == "MINGW64_NT" ]; then + OS="mingw32" + VENDOR="w64" + else + OS="gnu" + VENDOR="linux" + fi + + CPU="" + if [ -n "${ARCH}" ]; then + CPU="${ARCH}" + else + CPU=$CURRENT_ARCH + fi + + if [ $BUILD_BOTH_ARCHS == 1 ]; then + # The target is darwin. + printf "\nBuilding both Darwin architectures as a fat library\n" + + ARM64_TOOLCHAIN="contrib/depends/aarch64-apple-darwin11/share/toolchain.cmake" + X86_64_TOOLCHAIN="contrib/depends/x86_64-apple-darwin11/share/toolchain.cmake" + + if [ -z $SKIP_MP ]; then + printf "\nBuilding compilation dependencies for aarch64 Darwin\n" + CUR_VERSION="aarch64-apple-darwin11" + cd contrib/depends && + make HOST=$CUR_VERSION -j$HOST_NCORES && + echo \ + "set(FRAMEWORK_DIR \"contrib/depends/$CUR_VERSION/native/SDK/System/Library/Frameworks\")" \ + >> ../../$ARM64_TOOLCHAIN && + cd ../.. + + # build monero-project + printf "\nBuilding monero-project for aarch64 Darwin\n" + rm -rf build && + mkdir -p build/release && cd build/release && + cmake -j$HOST_NCORES -D STATIC=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=../../$ARM64_TOOLCHAIN ../.. && make -j$HOST_NCORES && + rm -rf ../../../../external-libs/$CUR_VERSION/monero-project + mkdir -p ../../../../external-libs/$CUR_VERSION/monero-project/ && + cd ../.. && mv build/release ../../external-libs/$CUR_VERSION/monero-project/ + + # build monero-x64_64 + # Make dependencies + printf "\nBuilding compilation dependencies for x86_64 Darwin\n" + CUR_VERSION="x86_64-apple-darwin11" + cd contrib/depends && + make HOST=$CUR_VERSION -j$HOST_NCORES && + echo \ + "set(FRAMEWORK_DIR \"contrib/depends/$CUR_VERSION/native/SDK/System/Library/Frameworks\")" \ + >> ../../$X86_64_TOOLCHAIN && + cd ../.. + + # build monero-project + printf "\nBuilding monero-project for x86_64 Darwin\n" + mkdir -p build/release && cd build/release && + cmake -j$HOST_NCORES -D STATIC=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=../../$X86_64_TOOLCHAIN ../.. && + make -j$HOST_NCORES && + rm -rf ../../../../external-libs/$CUR_VERSION/monero-project + mkdir -p ../../../../external-libs/$CUR_VERSION/monero-project/ + cd ../.. && mv build/release ../../external-libs/$CUR_VERSION/monero-project/ + fi + + # Build monero-cpp x86_64 + printf "\nBuilding x86_64 monero-cpp for Darwin\n" + cd ../../ && + rm -rf build/x86_64-apple-darwin11/release && + rm -rf build/aarch64-apple-darwin11/release && + rm -rf build/darwin && + mkdir -p build/x86_64-apple-darwin11/release && + mkdir -p build/aarch64-apple-darwin11/release && + mkdir -p build/darwin/release + + cd build/x86_64-apple-darwin11/release && + cmake -j$HOST_NCORES -D MON_VERSION=x86_64-apple-darwin11 -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/$X86_64_TOOLCHAIN ../../.. && + make -j$HOST_NCORES + + # Build monero-cpp arm64 + printf "\nBuilding aarch64 monero-cpp for Darwin\n" + cd ../../aarch64-apple-darwin11/release && + cmake -j$HOST_NCORES -D MON_VERSION=aarch64-apple-darwin11 -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/$ARM64_TOOLCHAIN ../../.. && + make -j$HOST_NCORES + + # lipo the two builds together + cd ../../.. + ./external/monero-project/contrib/depends/${CURRENT_ARCH}-apple-darwin11/native/bin/${CURRENT_ARCH}-apple-darwin11-lipo -create -output build/darwin/release/libmonero-cpp.dylib build/x86_64-apple-darwin11/release/libmonero-cpp.dylib build/aarch64-apple-darwin11/release/libmonero-cpp.dylib + + elif [ $CPU == $CURRENT_ARCH ] && [ $VENDOR == "linux" ]; then + # Fast native build / No Depends + + VERSION="${CPU}-linux-gnu" + + # Build current architecture only. + # monero-project + printf "\nBuilding native release static version of monero-project for ${VERSION}\n" + make release-static USE_SINGLE_BUILDDIR=1 -j$HOST_NCORES || exit 1 + rm -rf ../../external-libs/$VERSION/monero-project + mkdir -p ../../external-libs/$VERSION/monero-project/ && + mv build/release ../../external-libs/$VERSION/monero-project/ + cd ../.. + + # monero-cpp + printf "\nBuilding native Monero-cpp for ${VERSION}\n" + rm -rf build/$VERSION/release && + mkdir -p build/$VERSION/release && + cd build/$VERSION/release && + cmake -D MON_VERSION=$VERSION ../../.. && + cmake --build . && + make -j$HOST_NCORES . + + else + # Building 1 architecture for any platform + + # "OS" is used as if it is named "WRAPPER" + VERSION="${CPU}-${VENDOR}-${OS}" && + printf "\nBuilding for ${VERSION}\n" + + # Make dependencies. + if [ -z $SKIP_MP ]; then + printf "\nBuilding compilation dependencies\n" + cd contrib/depends && + make HOST=$VERSION -j$HOST_NCORES && + if [ $OS == "darwin11" ]; then + echo \ + "set(FRAMEWORK_DIR \"contrib/depends/$VERSION/native/SDK/System/Library/Frameworks\")" \ + >> $VERSION/share/toolchain.cmake + fi + cd ../.. + + # Build monero-project + printf "\nBuilding monero-project for ${VERSION}\n" + mkdir -p build/release && cd build/release && + cmake -j$HOST_NCORES -D STATIC=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=../../contrib/depends/$VERSION/share/toolchain.cmake ../.. && + make -j$HOST_NCORES && + rm -rf ../../../../external-libs/$VERSION/monero-project + mkdir -p ../../../../external-libs/$VERSION/monero-project/ && + cd ../.. && mv build/release ../../external-libs/$VERSION/monero-project/ + fi + + # Build monero-cpp + printf "\nBuilding monero-cpp for ${VERSION}\n" + rm -rf ../../build/$VERSION/release && + mkdir -p ../../build/$VERSION/release && + cd ../../build/$VERSION/release && + cmake -j$HOST_NCORES -D MON_VERSION=$VERSION -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/contrib/depends/$VERSION/share/toolchain.cmake ../../.. && + make -j$HOST_NCORES + fi fi -cd ../../ - -# build libmonero-cpp shared library -mkdir -p build && -cd build && -cmake .. && -cmake --build . && -make . \ No newline at end of file + diff --git a/bin/clean-depends-sources.sh b/bin/clean-depends-sources.sh new file mode 100755 index 00000000..e7072fcb --- /dev/null +++ b/bin/clean-depends-sources.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +rm -rf external/monero-project/contrib/depends/sources/* diff --git a/bin/clean.sh b/bin/clean.sh new file mode 100755 index 00000000..17a4c7be --- /dev/null +++ b/bin/clean.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +rm -rf external-libs/* +rm -rf external/monero-project/build/* +rm -rf external/monero-project/contrib/depends/x86* +rm -rf external/monero-project/contrib/depends/aarch* +rm -rf external/monero-project/contrib/depends/i68* +rm -rf external/monero-project/contrib/depends/work/* +rm -rf external/monero-project/contrib/depends/built/* +rm -rf build/* + From 9b40ce5e65f442a1ec47da72afbc367480f64d32 Mon Sep 17 00:00:00 2001 From: Brandon Trussell Date: Thu, 13 Mar 2025 18:24:02 -0500 Subject: [PATCH 2/8] Indentation fix --- CMakeLists.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f9cdba66..7b716b9c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -359,13 +359,13 @@ if (BUILD_LIBRARY) ${EXTRA_LIBRARIES} ) -if (WIN32) - target_link_options(monero-cpp PUBLIC "-Wl,--enable-auto-import,--export-all-symbols") -endif() - -if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - target_link_options(monero-cpp PRIVATE "-z" "noexecstack") -endif() + if (WIN32) + target_link_options(monero-cpp PUBLIC "-Wl,--enable-auto-import,--export-all-symbols") + endif() + + if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + target_link_options(monero-cpp PRIVATE "-z" "noexecstack") + endif() INSTALL(FILES src/daemon/monero_daemon.h src/daemon/monero_daemon_model.h From 4e905c145e4e85db36a3baadeff33108c17a2d38 Mon Sep 17 00:00:00 2001 From: Brandon Trussell Date: Sat, 15 Mar 2025 07:20:27 -0500 Subject: [PATCH 3/8] Clean up more when building --- bin/build_libmonero_cpp.sh | 45 ++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/bin/build_libmonero_cpp.sh b/bin/build_libmonero_cpp.sh index 4fdaaf3b..d33cb1ad 100755 --- a/bin/build_libmonero_cpp.sh +++ b/bin/build_libmonero_cpp.sh @@ -10,17 +10,22 @@ if [[ $CURRENT_OS == "MINGW64_NT"* || $CURRENT_OS == "MSYS"* ]]; then VERSION="${CURRENT_ARCH}-W${bit}-${CURRENT_OS}" # monero-project - bit=$(getconf LONG_BIT) - mkdir -p build/release - if [ "$bit" == "64" ]; then - make release-static-win64 -j$HOST_NCORES || exit 1 - else - make release-static-win32 -j$HOST_NCORES || exit 1 + if [ -z $SKIP_MP ]; then + bit=$(getconf LONG_BIT) + rm -rf build/release + rm -rf ../../external-libs/$VERSION/monero-project/ + mkdir ../../external-libs/$VERSION/monero-project/ + if [ "$bit" == "64" ]; then + make release-static-win64 -j$HOST_NCORES || exit 1 + else + make release-static-win32 -j$HOST_NCORES || exit 1 + fi + mv build/release ../../external-libs/$VERSION/monero-project/ fi - mv build/release ../../external-libs/$VERSION/monero-project/ # monero-cpp cd ../../ + rm -rf build/$CURRENT_ARCH/release mkdir -p build/$CURRENT_ARCH/release && cd build/$CURRENT_ARCH/release && cmake -DMON_VERSION=$VERSION ../../.. && @@ -33,21 +38,23 @@ elif [ $CURRENT_OS == "Darwin" ]; then # Build current architecture only. # monero-project - printf "\nBuilding native release static version of monero-project for ${VERSION}\n" - make release-static -j$HOST_NCORES || exit 1 - rm -rf ../../external-libs/$VERSION/monero-project - mkdir -p ../../external-libs/$VERSION/monero-project/ && - mv build/release ../../external-libs/$VERSION/monero-project/ - cd ../.. + if [ -z $SKIP_MP ]; then + printf "\nBuilding native release static version of monero-project for ${VERSION}\n" + rm -rf build/release + make release-static -j$HOST_NCORES || exit 1 + rm -rf ../../external-libs/$VERSION/monero-project + mkdir -p ../../external-libs/$VERSION/monero-project/ && + mv build/release ../../external-libs/$VERSION/monero-project/ + fi # monero-cpp + cd ../.. printf "\nBuilding native Monero-cpp for ${VERSION}\n" rm -rf build/$VERSION/release && mkdir -p build/$VERSION/release && cd build/$VERSION/release && cmake -D MON_VERSION=$VERSION ../../.. && - cmake --build . && - make -j$HOST_NCORES . + cmake --build . else # Running on Linux @@ -90,6 +97,7 @@ else printf "\nBuilding compilation dependencies for aarch64 Darwin\n" CUR_VERSION="aarch64-apple-darwin11" cd contrib/depends && + rm -rf "${CUR_VERSION}" make HOST=$CUR_VERSION -j$HOST_NCORES && echo \ "set(FRAMEWORK_DIR \"contrib/depends/$CUR_VERSION/native/SDK/System/Library/Frameworks\")" \ @@ -110,6 +118,7 @@ else printf "\nBuilding compilation dependencies for x86_64 Darwin\n" CUR_VERSION="x86_64-apple-darwin11" cd contrib/depends && + rm -rf "${CUR_VERSION}" make HOST=$CUR_VERSION -j$HOST_NCORES && echo \ "set(FRAMEWORK_DIR \"contrib/depends/$CUR_VERSION/native/SDK/System/Library/Frameworks\")" \ @@ -118,7 +127,7 @@ else # build monero-project printf "\nBuilding monero-project for x86_64 Darwin\n" - mkdir -p build/release && cd build/release && + rm -rf build/release && mkdir -p build/release && cd build/release && cmake -j$HOST_NCORES -D STATIC=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=../../$X86_64_TOOLCHAIN ../.. && make -j$HOST_NCORES && rm -rf ../../../../external-libs/$CUR_VERSION/monero-project @@ -158,6 +167,7 @@ else # Build current architecture only. # monero-project printf "\nBuilding native release static version of monero-project for ${VERSION}\n" + rm -rf build/release make release-static USE_SINGLE_BUILDDIR=1 -j$HOST_NCORES || exit 1 rm -rf ../../external-libs/$VERSION/monero-project mkdir -p ../../external-libs/$VERSION/monero-project/ && @@ -184,6 +194,7 @@ else if [ -z $SKIP_MP ]; then printf "\nBuilding compilation dependencies\n" cd contrib/depends && + rm -rf "${VERSION}" make HOST=$VERSION -j$HOST_NCORES && if [ $OS == "darwin11" ]; then echo \ @@ -194,7 +205,7 @@ else # Build monero-project printf "\nBuilding monero-project for ${VERSION}\n" - mkdir -p build/release && cd build/release && + rm -rf build/release && mkdir -p build/release && cd build/release && cmake -j$HOST_NCORES -D STATIC=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=../../contrib/depends/$VERSION/share/toolchain.cmake ../.. && make -j$HOST_NCORES && rm -rf ../../../../external-libs/$VERSION/monero-project From dab7887e8297d2fbe702196536196d5c796640fe Mon Sep 17 00:00:00 2001 From: Brandon Trussell Date: Sat, 15 Mar 2025 07:57:20 -0500 Subject: [PATCH 4/8] Mac static builds --- CMakeLists.txt | 7 ++++++- bin/build_libmonero_cpp.sh | 12 ++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b716b9c..d2ee93a0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -297,7 +297,12 @@ set( if (BUILD_LIBRARY) - add_library(monero-cpp SHARED ${LIBRARY_SRC_FILES}) + set(BUILD_TYPE "SHARED") + if (STATIC) + set(BUILD_TYPE "STATIC") + endif() + message(STATUS "The build type is: ${BUILD_TYPE}") + add_library(monero-cpp ${BUILD_TYPE} ${LIBRARY_SRC_FILES}) target_include_directories(monero-cpp PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include diff --git a/bin/build_libmonero_cpp.sh b/bin/build_libmonero_cpp.sh index d33cb1ad..60a6a717 100755 --- a/bin/build_libmonero_cpp.sh +++ b/bin/build_libmonero_cpp.sh @@ -53,7 +53,7 @@ elif [ $CURRENT_OS == "Darwin" ]; then rm -rf build/$VERSION/release && mkdir -p build/$VERSION/release && cd build/$VERSION/release && - cmake -D MON_VERSION=$VERSION ../../.. && + cmake -DSTATIC=$STATIC -D MON_VERSION=$VERSION ../../.. && cmake --build . else @@ -146,18 +146,22 @@ else mkdir -p build/darwin/release cd build/x86_64-apple-darwin11/release && - cmake -j$HOST_NCORES -D MON_VERSION=x86_64-apple-darwin11 -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/$X86_64_TOOLCHAIN ../../.. && + cmake -j$HOST_NCORES -D STATIC=$STATIC -D MON_VERSION=x86_64-apple-darwin11 -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/$X86_64_TOOLCHAIN ../../.. && make -j$HOST_NCORES # Build monero-cpp arm64 printf "\nBuilding aarch64 monero-cpp for Darwin\n" cd ../../aarch64-apple-darwin11/release && - cmake -j$HOST_NCORES -D MON_VERSION=aarch64-apple-darwin11 -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/$ARM64_TOOLCHAIN ../../.. && + cmake -j$HOST_NCORES -D STATIC=$STATIC -D MON_VERSION=aarch64-apple-darwin11 -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/$ARM64_TOOLCHAIN ../../.. && make -j$HOST_NCORES # lipo the two builds together cd ../../.. - ./external/monero-project/contrib/depends/${CURRENT_ARCH}-apple-darwin11/native/bin/${CURRENT_ARCH}-apple-darwin11-lipo -create -output build/darwin/release/libmonero-cpp.dylib build/x86_64-apple-darwin11/release/libmonero-cpp.dylib build/aarch64-apple-darwin11/release/libmonero-cpp.dylib + SUFFIX="dylib" + if [ -n STATIC ]; then + SUFFIX="a" + fi + ./external/monero-project/contrib/depends/${CURRENT_ARCH}-apple-darwin11/native/bin/${CURRENT_ARCH}-apple-darwin11-lipo -create -output build/darwin/release/libmonero-cpp.${SUFFIX} build/x86_64-apple-darwin11/release/libmonero-cpp.${SUFFIX} build/aarch64-apple-darwin11/release/libmonero-cpp.${SUFFIX} elif [ $CPU == $CURRENT_ARCH ] && [ $VENDOR == "linux" ]; then # Fast native build / No Depends From 615d57b4912c068fcb1c1c7e4ce6ab9004416078 Mon Sep 17 00:00:00 2001 From: Brandon Trussell Date: Sat, 15 Mar 2025 21:06:54 +0000 Subject: [PATCH 5/8] Enable static builds for linux --- bin/build_libmonero_cpp.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/build_libmonero_cpp.sh b/bin/build_libmonero_cpp.sh index 60a6a717..792bc7c0 100755 --- a/bin/build_libmonero_cpp.sh +++ b/bin/build_libmonero_cpp.sh @@ -183,7 +183,7 @@ else rm -rf build/$VERSION/release && mkdir -p build/$VERSION/release && cd build/$VERSION/release && - cmake -D MON_VERSION=$VERSION ../../.. && + cmake -D STATIC=$STATIC -D MON_VERSION=$VERSION ../../.. && cmake --build . && make -j$HOST_NCORES . @@ -222,7 +222,7 @@ else rm -rf ../../build/$VERSION/release && mkdir -p ../../build/$VERSION/release && cd ../../build/$VERSION/release && - cmake -j$HOST_NCORES -D MON_VERSION=$VERSION -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/contrib/depends/$VERSION/share/toolchain.cmake ../../.. && + cmake -j$HOST_NCORES -D STATIC=$STATIC -D MON_VERSION=$VERSION -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/contrib/depends/$VERSION/share/toolchain.cmake ../../.. && make -j$HOST_NCORES fi fi From a86824c672eddf5bafac3890e7e9dada374e313d Mon Sep 17 00:00:00 2001 From: Brandon Trussell Date: Sun, 16 Mar 2025 00:52:10 +0000 Subject: [PATCH 6/8] Change to new var name within CMakeLists that does not conflict with a system variable. --- CMakeLists.txt | 2 +- bin/build_libmonero_cpp.sh | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d2ee93a0..64a989a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -298,7 +298,7 @@ set( if (BUILD_LIBRARY) set(BUILD_TYPE "SHARED") - if (STATIC) + if (ARCHIVE) set(BUILD_TYPE "STATIC") endif() message(STATUS "The build type is: ${BUILD_TYPE}") diff --git a/bin/build_libmonero_cpp.sh b/bin/build_libmonero_cpp.sh index 792bc7c0..36018aec 100755 --- a/bin/build_libmonero_cpp.sh +++ b/bin/build_libmonero_cpp.sh @@ -28,7 +28,7 @@ if [[ $CURRENT_OS == "MINGW64_NT"* || $CURRENT_OS == "MSYS"* ]]; then rm -rf build/$CURRENT_ARCH/release mkdir -p build/$CURRENT_ARCH/release && cd build/$CURRENT_ARCH/release && - cmake -DMON_VERSION=$VERSION ../../.. && + cmake -DARCHIVE=$STATIC -DMON_VERSION=$VERSION ../../.. && cmake --build . && make -j$HOST_NCORES . @@ -53,7 +53,7 @@ elif [ $CURRENT_OS == "Darwin" ]; then rm -rf build/$VERSION/release && mkdir -p build/$VERSION/release && cd build/$VERSION/release && - cmake -DSTATIC=$STATIC -D MON_VERSION=$VERSION ../../.. && + cmake -DARCHIVE=$STATIC -D MON_VERSION=$VERSION ../../.. && cmake --build . else @@ -146,19 +146,19 @@ else mkdir -p build/darwin/release cd build/x86_64-apple-darwin11/release && - cmake -j$HOST_NCORES -D STATIC=$STATIC -D MON_VERSION=x86_64-apple-darwin11 -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/$X86_64_TOOLCHAIN ../../.. && + cmake -j$HOST_NCORES -D ARCHIVE=$STATIC -D MON_VERSION=x86_64-apple-darwin11 -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/$X86_64_TOOLCHAIN ../../.. && make -j$HOST_NCORES # Build monero-cpp arm64 printf "\nBuilding aarch64 monero-cpp for Darwin\n" cd ../../aarch64-apple-darwin11/release && - cmake -j$HOST_NCORES -D STATIC=$STATIC -D MON_VERSION=aarch64-apple-darwin11 -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/$ARM64_TOOLCHAIN ../../.. && + cmake -j$HOST_NCORES -D ARCHIVE=$STATIC -D MON_VERSION=aarch64-apple-darwin11 -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/$ARM64_TOOLCHAIN ../../.. && make -j$HOST_NCORES # lipo the two builds together cd ../../.. SUFFIX="dylib" - if [ -n STATIC ]; then + if [ -n "$STATIC" ]; then SUFFIX="a" fi ./external/monero-project/contrib/depends/${CURRENT_ARCH}-apple-darwin11/native/bin/${CURRENT_ARCH}-apple-darwin11-lipo -create -output build/darwin/release/libmonero-cpp.${SUFFIX} build/x86_64-apple-darwin11/release/libmonero-cpp.${SUFFIX} build/aarch64-apple-darwin11/release/libmonero-cpp.${SUFFIX} @@ -183,7 +183,7 @@ else rm -rf build/$VERSION/release && mkdir -p build/$VERSION/release && cd build/$VERSION/release && - cmake -D STATIC=$STATIC -D MON_VERSION=$VERSION ../../.. && + cmake -D ARCHIVE=$STATIC -D MON_VERSION=$VERSION ../../.. && cmake --build . && make -j$HOST_NCORES . @@ -222,7 +222,7 @@ else rm -rf ../../build/$VERSION/release && mkdir -p ../../build/$VERSION/release && cd ../../build/$VERSION/release && - cmake -j$HOST_NCORES -D STATIC=$STATIC -D MON_VERSION=$VERSION -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/contrib/depends/$VERSION/share/toolchain.cmake ../../.. && + cmake -j$HOST_NCORES -D ARCHIVE=$STATIC -D MON_VERSION=$VERSION -D CMAKE_TOOLCHAIN_FILE=../../../external/monero-project/contrib/depends/$VERSION/share/toolchain.cmake ../../.. && make -j$HOST_NCORES fi fi From 8c73cc97d8de2713d38f0f733a0d044f68196529 Mon Sep 17 00:00:00 2001 From: Brandon Trussell Date: Sun, 16 Mar 2025 01:39:47 +0000 Subject: [PATCH 7/8] Fix typo in a comment --- bin/build_libmonero_cpp.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bin/build_libmonero_cpp.sh b/bin/build_libmonero_cpp.sh index 36018aec..5527c458 100755 --- a/bin/build_libmonero_cpp.sh +++ b/bin/build_libmonero_cpp.sh @@ -60,7 +60,6 @@ else # Running on Linux # "OS" will be used as if it is called "WRAPPER" - rm -rf build BUILD_BOTH_ARCHS=0 OS="" VENDOR="" @@ -113,7 +112,7 @@ else mkdir -p ../../../../external-libs/$CUR_VERSION/monero-project/ && cd ../.. && mv build/release ../../external-libs/$CUR_VERSION/monero-project/ - # build monero-x64_64 + # build monero-x86_64 # Make dependencies printf "\nBuilding compilation dependencies for x86_64 Darwin\n" CUR_VERSION="x86_64-apple-darwin11" From 0dddc28701efbef5c743ced5f3c689e133a8e6a5 Mon Sep 17 00:00:00 2001 From: Brandon Trussell Date: Mon, 17 Mar 2025 07:14:58 +0000 Subject: [PATCH 8/8] Fixes for Windows targets --- bin/build_libmonero_cpp.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/bin/build_libmonero_cpp.sh b/bin/build_libmonero_cpp.sh index 5527c458..8fb402ac 100755 --- a/bin/build_libmonero_cpp.sh +++ b/bin/build_libmonero_cpp.sh @@ -7,14 +7,14 @@ cd ./external/monero-project/ || exit 1 git submodule update --init --force || exit 1 HOST_NCORES=$(nproc 2>/dev/null || shell nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 1) if [[ $CURRENT_OS == "MINGW64_NT"* || $CURRENT_OS == "MSYS"* ]]; then - VERSION="${CURRENT_ARCH}-W${bit}-${CURRENT_OS}" + bit=$(getconf LONG_BIT) + VERSION="${CURRENT_ARCH}-W${bit}-mingw32" # monero-project if [ -z $SKIP_MP ]; then - bit=$(getconf LONG_BIT) rm -rf build/release rm -rf ../../external-libs/$VERSION/monero-project/ - mkdir ../../external-libs/$VERSION/monero-project/ + mkdir -p ../../external-libs/$VERSION/monero-project/ if [ "$bit" == "64" ]; then make release-static-win64 -j$HOST_NCORES || exit 1 else @@ -25,12 +25,11 @@ if [[ $CURRENT_OS == "MINGW64_NT"* || $CURRENT_OS == "MSYS"* ]]; then # monero-cpp cd ../../ - rm -rf build/$CURRENT_ARCH/release - mkdir -p build/$CURRENT_ARCH/release && - cd build/$CURRENT_ARCH/release && + rm -rf build/$VERSION/release + mkdir -p build/$VERSION/release && + cd build/$VERSION/release && cmake -DARCHIVE=$STATIC -DMON_VERSION=$VERSION ../../.. && - cmake --build . && - make -j$HOST_NCORES . + cmake --build . elif [ $CURRENT_OS == "Darwin" ]; then @@ -70,9 +69,10 @@ else if [ -z "${ARCH}" ]; then BUILD_BOTH_ARCHS=1 fi - elif [ "${TARGET}" == "MSYS" ] || [ "${TARGET}" == "MINGW64_NT" ]; then + elif [ "${TARGET}" == "MSYS"* ] || [ "${TARGET}" == "MINGW64_NT"* ]; then + bit=$(getconf LONG_BIT) OS="mingw32" - VENDOR="w64" + VENDOR="W${bit}" else OS="gnu" VENDOR="linux"