From 9412c22166c67424fb700ea2217e8f7b563251bb Mon Sep 17 00:00:00 2001 From: Snider Date: Sun, 28 Sep 2025 14:35:11 +0100 Subject: [PATCH] Add CPack packaging and update build system Introduces CPack-based packaging with a new CPackConfig.cmake and related configuration variables. Updates Makefile and CMakeLists.txt to support packaging, renames project to Lethean, and adjusts workflow files to use unified 'release' build and artifact upload. Also adds install rules for main binaries and comments out install steps in libmdbx submodules. --- .github/workflows/build-macos-arm64.yml | 24 ++++-- .github/workflows/build-windows.yml | 21 +++-- CMakeLists.txt | 6 +- LICENSE => LICENSE.txt | 0 Makefile | 5 +- cmake/CPackConfig.cmake | 79 +++++++++++++++++++ cmake/config-vars.cmake | 16 ++++ .../db/libmdbx/packages/rpm/CMakeLists.txt | 6 +- contrib/db/libmdbx/src/CMakeLists.txt | 12 +-- contrib/db/libmdbx/src/tools/CMakeLists.txt | 4 +- src/CMakeLists.txt | 3 + 11 files changed, 146 insertions(+), 30 deletions(-) rename LICENSE => LICENSE.txt (100%) create mode 100644 cmake/CPackConfig.cmake diff --git a/.github/workflows/build-macos-arm64.yml b/.github/workflows/build-macos-arm64.yml index e1ac7e3a..d718ac43 100644 --- a/.github/workflows/build-macos-arm64.yml +++ b/.github/workflows/build-macos-arm64.yml @@ -28,13 +28,21 @@ jobs: home: ${{ github.workspace }}/build/sdk cache_packages: true - - name: Compile Release - run: make apple-clang-armv8 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} +# - name: Compile Release +# run: make apple-clang-armv8 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} - - name: CLI Artifacts - uses: ./.github/actions/upload-artifacts + - name: Compile Release + run: make release TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} + + - uses: actions/upload-artifact@v4 with: - chain-network: ${{ inputs.chain-network }} - assets: lethean-* - asset-type: 'cli' - asset-directory: ${{ github.workspace }}/build/apple-clang-armv8/src \ No newline at end of file + name: "${{ inputs.chain-network == 'testnet' && 'testnet-' || '' }}apple-clang-armv8" + path: ${{ github.workspace }}/build/release/packages/lethean-* + +# - name: CLI Artifacts +# uses: ./.github/actions/upload-artifacts +# with: +# chain-network: ${{ inputs.chain-network }} +# assets: lethean-* +# asset-type: 'cli' +# asset-directory: ${{ github.workspace }}/build/apple-clang-armv8/src \ No newline at end of file diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index c3f4b173..75c5b2b5 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -28,12 +28,19 @@ jobs: cache_packages: true - name: Compile Release - run: make msvc-194-x86_64 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} + run: make release TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} +# +# - name: Compile Release +# run: make msvc-194-x86_64 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} - - name: CLI Artifacts - uses: ./.github/actions/upload-artifacts + - uses: actions/upload-artifact@v4 with: - chain-network: ${{ inputs.chain-network }} - assets: lethean-* - asset-type: 'cli' - asset-directory: ${{ github.workspace }}/build/msvc-194-x86_64/src/Release + name: "${{ inputs.chain-network == 'testnet' && 'testnet-' || '' }}cli-msvc-194-x86_64" + path: ${{ github.workspace }}/build/release/packages/lethean-* +# - name: CLI Artifacts +# uses: ./.github/actions/upload-artifacts +# with: +# chain-network: ${{ inputs.chain-network }} +# assets: lethean-* +# asset-type: 'cli' +# asset-directory: ${{ github.workspace }}/build/release/packages diff --git a/CMakeLists.txt b/CMakeLists.txt index e72515a9..9ac781f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16) set(DISABLE_TOR TRUE CACHE BOOL "Disable TOR library(and related tor-connect submodule)") -PROJECT(Zano) +PROJECT(Lethean) set(VERSION "1.0") message("OPENSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}") @@ -297,7 +297,7 @@ else() endif() endif() -set(BUILD_TESTS FALSE CACHE BOOL "Build Zano tests") +set(BUILD_TESTS FALSE CACHE BOOL "Build Lethean tests") set(DISABLE_MDBX FALSE CACHE BOOL "Exclude mdbx from build(need for a first time)") if(NOT DISABLE_MDBX) add_definitions(-DENABLED_ENGINE_MDBX) @@ -310,3 +310,5 @@ add_subdirectory(src) if (BUILD_TESTS) add_subdirectory(tests) endif() + +include(CPackConfig) \ No newline at end of file diff --git a/LICENSE b/LICENSE.txt similarity index 100% rename from LICENSE rename to LICENSE.txt diff --git a/Makefile b/Makefile index 53b0f495..12acefab 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ # Default to “unknown” – will be overwritten below. CPU_CORES := 1 -TESTNET ?= 0 +TESTNET:= 0 BUILD_TYPE ?=Release # ----------------------------------------------------------------- @@ -80,10 +80,11 @@ CC_DOCKER_FILE?=utils/docker/images/lthn-chain/Dockerfile all: help release: conan-profile-detect - @echo "Building profile: release" + @echo "Building profile: release $(TESTNET)" CONAN_HOME=$(CONAN_CACHE) conan install . --output-folder=build/release --build=missing -s build_type=$(BUILD_TYPE) cmake -S . -B build/release -DCMAKE_TOOLCHAIN_FILE=build/release/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) -DTESTNET=$(TESTNET) cmake --build build/release --config=$(BUILD_TYPE) --parallel=$(CPU_CORES) + (cd build/release && cpack) debug: conan-profile-detect @echo "Building profile: debug" diff --git a/cmake/CPackConfig.cmake b/cmake/CPackConfig.cmake new file mode 100644 index 00000000..08a4ab4c --- /dev/null +++ b/cmake/CPackConfig.cmake @@ -0,0 +1,79 @@ +include(${CMAKE_SOURCE_DIR}/cmake/config-vars.cmake) + +if(CMAKE_BUILD_TYPE STREQUAL "Release") + set(CPACK_PACKAGE_NAME "${package_name}") + set(CPACK_PACKAGE_VENDOR "${package_vendor}") + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${package_description}") + set(CPACK_PACKAGE_VERSION "${package_version}") + set(CPACK_PACKAGE_CONTACT "${package_contact}") + set(CPACK_PACKAGE_HOMEPAGE_URL "${package_website}") + +# set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/local") # Linux/macOS default +# if(WIN32) +# set(CPACK_PACKAGING_INSTALL_PREFIX "C:/Program Files/${PROJECT_NAME}") +# endif() + + if(APPLE) + if("${package_macos_installer}" STREQUAL "DMG") + set(CPACK_GENERATOR "DragNDrop") +# set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/resources/dmg_background.png") + set(CPACK_DMG_VOLUME_NAME "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}") + message("Registered CPACK_GENERATOR: DragNDrop") + else () + set(CPACK_GENERATOR "productbuild") + set(CPACK_PRODUCTBUILD_IDENTIFIER "${package_macos_pkg_productbuild_identifier}") +# set(CPACK_PRODUCTBUILD_SIGNING_IDENTITY "Developer ID Installer: Your Company (TEAMID)") + message("Registered CPACK_GENERATOR: productbuild") + endif () + elseif(WIN32) + set(CPACK_GENERATOR "WIX") + message("Registered CPACK_GENERATOR: WIX") +# set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/resources/windows_icon.ico") +# set(CPACK_WIX_LICENSE_RTF "${CMAKE_SOURCE_DIR}/LICENSE.rtf") +# set(CPACK_WIX_UPGRADE_GUID "D3F5A9C1-4B2E-4F5A-9C71-123456789ABC") # change once per major version + else() + set(CPACK_GENERATOR "DEB") + message("Registered CPACK_GENERATOR: deb") + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "${package_contact}") + set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.28)") + set(CPACK_DEBIAN_PACKAGE_SECTION "utils") + set(CPACK_DEBIAN_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") + # post‑install script (e.g., to register a systemd service) +# set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA +# "${CMAKE_SOURCE_DIR}/scripts/postinstall.sh") + endif() + + list(APPEND CPACK_GENERATOR "TXZ" "ZIP") + message( "Registered CPACK_GENERATOR: tgz") + message( "Registered CPACK_GENERATOR: zip") + set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF) + set(CPACK_ARCHIVE_COMPONENT_INSTALL OFF) + set(CPACK_COMPONENTS_ALL) + set(CPACK_GENERATE_SHASUM ON) + set(CPACK_SHASUM_ALGORITHM SHA256) + message( "Using SHA256 Checksums") + + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt") +# set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md") + + set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/packages") + + install(FILES README.md LICENSE.txt + DESTINATION . + ) + + set(_arch "${CMAKE_SYSTEM_PROCESSOR}") + + if(_arch MATCHES "AMD64|x86_64") + set(_arch "x86_64") + elseif(_arch MATCHES "arm64|aarch64") + set(_arch "arm64") + endif() + + string(TOLOWER "${CMAKE_SYSTEM_NAME}" _sys_name_lc) + + set(CPACK_PACKAGE_FILE_NAME + "${package_name}-${CPACK_PACKAGE_VERSION}-${_sys_name_lc}-${_arch}") + + include(CPack) +endif() \ No newline at end of file diff --git a/cmake/config-vars.cmake b/cmake/config-vars.cmake index fd96c731..5b48dce0 100644 --- a/cmake/config-vars.cmake +++ b/cmake/config-vars.cmake @@ -10,6 +10,8 @@ set(currency_display_decimal_point 12 CACHE STRING "CURRENCY_DISPLAY_DECIMAL_POI set(currency_name_abr "LTHN" CACHE STRING "CURRENCY_NAME_ABR" ) set(currency_name_base "Lethean" CACHE STRING "CURRENCY_NAME_BASE" ) set(currency_name_short_base "Lethean" CACHE STRING "CURRENCY_NAME_SHORT_BASE" ) + + # prefix is 'iT', non auditable wallets then use 'H', auditable wallets use 'h'; 'N' is a base addr, 'n' is a sub address, set(address_prefix 0x1eaf7 CACHE STRING "CURRENCY_PUBLIC_ADDRESS_BASE58_PREFIX" ) # addresses start with 'iTHN' set(address_prefix_integrated 0xdeaf7 CACHE STRING "CURRENCY_PUBLIC_INTEG_ADDRESS_V2_BASE58_PREFIX" ) # integrated addresses start with 'iTHn' @@ -29,8 +31,22 @@ if (TESTNET) set(p2p_default_port 36942 CACHE STRING "P2P_DEFAULT_PORT" ) set(rpc_default_port 36941 CACHE STRING "RPC_DEFAULT_PORT" ) set(stratum_default_port 36940 CACHE STRING "STRATUM_DEFAULT_PORT" ) + set(package_name "lethean-testnet-cli" CACHE STRING "CPACK_PACKAGE_NAME" ) else () + message(CHECK_FAIL "bad") set(p2p_default_port 36942 CACHE STRING "P2P_DEFAULT_PORT" ) set(rpc_default_port 36941 CACHE STRING "RPC_DEFAULT_PORT" ) set(stratum_default_port 36940 CACHE STRING "STRATUM_DEFAULT_PORT" ) + set(package_name "lethean-cli" CACHE STRING "CPACK_PACKAGE_NAME" ) endif () +# installer config +set(package_vendor "Lethean Community" CACHE STRING "CPACK_PACKAGE_VENDOR" ) +set(package_description "A privacy‑preserving blockchain node" CACHE STRING "CPACK_PACKAGE_DESCRIPTION_SUMMARY" ) +set(package_version "1.0.0" CACHE STRING "CPACK_PACKAGE_VERSION" ) +set(package_contact "support@lt.hn" CACHE STRING "CPACK_PACKAGE_CONTACT" ) +set(package_website "https://github.com/letheanVPN/blockchain" CACHE STRING "CPACK_PACKAGE_HOMEPAGE_URL" ) +set(package_macos_installer "PKG" CACHE STRING "CPACK_GENERATOR" ) +set(package_macos_dmg_background "DMG" CACHE STRING "CPACK_DMG_BACKGROUND_IMAGE" ) +set(package_macos_pkg_productbuild_identifier "com.lethean.blockchainnode" CACHE STRING "CPACK_PRODUCTBUILD_IDENTIFIER" ) +set(package_macos_pkg_productbuild_signer "Developer ID Installer: Your Company (TEAMID)" CACHE STRING "CPACK_PRODUCTBUILD_SIGNING_IDENTITY" ) + diff --git a/contrib/db/libmdbx/packages/rpm/CMakeLists.txt b/contrib/db/libmdbx/packages/rpm/CMakeLists.txt index 5949e9f0..39befcb7 100644 --- a/contrib/db/libmdbx/packages/rpm/CMakeLists.txt +++ b/contrib/db/libmdbx/packages/rpm/CMakeLists.txt @@ -126,9 +126,9 @@ if(UNIX AND NOT APPLE) target_link_libraries(${TARGET}_SHARED rt) endif() -install(TARGETS ${TARGET}_STATIC DESTINATION ${CMAKE_INSTALL_PREFIX}/lib64 COMPONENT mdbx) -install(TARGETS ${TARGET}_SHARED DESTINATION ${CMAKE_INSTALL_PREFIX}/lib64 COMPONENT mdbx) -install(FILES mdbx.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include COMPONENT mdbx-devel) +#install(TARGETS ${TARGET}_STATIC DESTINATION ${CMAKE_INSTALL_PREFIX}/lib64 COMPONENT mdbx) +#install(TARGETS ${TARGET}_SHARED DESTINATION ${CMAKE_INSTALL_PREFIX}/lib64 COMPONENT mdbx) +#install(FILES mdbx.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include COMPONENT mdbx-devel) add_subdirectory(src/tools) add_subdirectory(test) diff --git a/contrib/db/libmdbx/src/CMakeLists.txt b/contrib/db/libmdbx/src/CMakeLists.txt index 7dfc94aa..5e39f344 100644 --- a/contrib/db/libmdbx/src/CMakeLists.txt +++ b/contrib/db/libmdbx/src/CMakeLists.txt @@ -61,12 +61,12 @@ if(CC_HAS_VISIBILITY) target_compile_options(mdbx PRIVATE "-fvisibility=hidden") endif() -install(TARGETS mdbx - LIBRARY DESTINATION lib COMPONENT runtime - RUNTIME DESTINATION bin COMPONENT runtime - ARCHIVE DESTINATION lib/static COMPONENT devel - PUBLIC_HEADER DESTINATION include - INCLUDES DESTINATION include COMPONENT devel) +#install(TARGETS mdbx +# LIBRARY DESTINATION lib COMPONENT runtime +# RUNTIME DESTINATION bin COMPONENT runtime +# ARCHIVE DESTINATION lib/static COMPONENT devel +# PUBLIC_HEADER DESTINATION include +# INCLUDES DESTINATION include COMPONENT devel) ################################################################################ # diff --git a/contrib/db/libmdbx/src/tools/CMakeLists.txt b/contrib/db/libmdbx/src/tools/CMakeLists.txt index 01ecd7dd..fe5197b0 100644 --- a/contrib/db/libmdbx/src/tools/CMakeLists.txt +++ b/contrib/db/libmdbx/src/tools/CMakeLists.txt @@ -32,8 +32,8 @@ foreach(TOOL ${MDBX_TOOLS}) C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON INTERPROCEDURAL_OPTIMIZATION $) - install(TARGETS ${TOOL} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin COMPONENT mdbx) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../man1/${TOOL}.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/man/man1 COMPONENT mdbx) +# install(TARGETS ${TOOL} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin COMPONENT mdbx) +# install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../man1/${TOOL}.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/man/man1 COMPONENT mdbx) endforeach() if(LIB_MATH) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4cfb615f..e98dab7a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -189,3 +189,6 @@ else () set_property(TARGET connectivity_tool PROPERTY OUTPUT_NAME "lethean-testnet-chain-tool") endif () +install(TARGETS daemon simplewallet + RUNTIME DESTINATION bin) +