forked from lthn/blockchain
Merge branch 'dev' into dev-build-cache
This commit is contained in:
commit
f45c40723c
16 changed files with 279 additions and 92 deletions
28
.github/workflows/_on-pr-fast.yml
vendored
28
.github/workflows/_on-pr-fast.yml
vendored
|
|
@ -1,28 +0,0 @@
|
|||
name: PR Fast
|
||||
permissions:
|
||||
contents: write
|
||||
on:
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- synchronize
|
||||
- reopened
|
||||
branches:
|
||||
- dev
|
||||
- main
|
||||
- dev-*
|
||||
paths-ignore:
|
||||
- '**.md'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-macos-arm64:
|
||||
name: Compile
|
||||
uses: ./.github/workflows/build-macos-arm64.yml
|
||||
with:
|
||||
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
|
||||
41
.github/workflows/_on-pr.yml
vendored
41
.github/workflows/_on-pr.yml
vendored
|
|
@ -7,7 +7,9 @@ on:
|
|||
pull_request_review:
|
||||
pull_request:
|
||||
types:
|
||||
- review_requested
|
||||
- opened
|
||||
- synchronize
|
||||
- reopened
|
||||
- closed
|
||||
|
||||
concurrency:
|
||||
|
|
@ -38,50 +40,39 @@ jobs:
|
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
build-linux-intel:
|
||||
name: Chain
|
||||
if: |
|
||||
(github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') ||
|
||||
(github.event.review.state == 'approved' && !github.event.pull_request.draft)
|
||||
name: Linux
|
||||
if: ${{!github.event.pull_request.draft}}
|
||||
uses: ./.github/workflows/build-linux-intel.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
|
||||
|
||||
build-linux-arm:
|
||||
name: Chain
|
||||
if: |
|
||||
(github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') ||
|
||||
(github.event.review.state == 'approved' && !github.event.pull_request.draft)
|
||||
name: Linux
|
||||
if: ${{!github.event.pull_request.draft}}
|
||||
uses: ./.github/workflows/build-linux-arm64.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
|
||||
|
||||
build-windows-intel:
|
||||
name: Chain
|
||||
if: |
|
||||
(github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') ||
|
||||
(github.event.review.state == 'approved' && !github.event.pull_request.draft)
|
||||
name: Windows
|
||||
if: ${{!github.event.pull_request.draft}}
|
||||
uses: ./.github/workflows/build-windows-intel.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
|
||||
|
||||
build-macos-arm64:
|
||||
name: Chain
|
||||
if: |
|
||||
(github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') ||
|
||||
(github.event.review.state == 'approved' && !github.event.pull_request.draft)
|
||||
name: MacOS
|
||||
uses: ./.github/workflows/build-macos-arm64.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
|
||||
|
||||
build-macos-intel:
|
||||
name: Chain
|
||||
if: |
|
||||
(github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') ||
|
||||
(github.event.review.state == 'approved' && !github.event.pull_request.draft)
|
||||
name: MacOS
|
||||
if: ${{!github.event.pull_request.draft}}
|
||||
uses: ./.github/workflows/build-macos-intel.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
|
|
@ -89,9 +80,7 @@ jobs:
|
|||
|
||||
build-docker:
|
||||
name: Docker
|
||||
if: |
|
||||
(github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') ||
|
||||
(github.event.review.state == 'approved' && !github.event.pull_request.draft)
|
||||
if: ${{!github.event.pull_request.draft}}
|
||||
uses: ./.github/workflows/build-docker.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
|
|
@ -99,7 +88,5 @@ jobs:
|
|||
|
||||
build-docs:
|
||||
name: Docs
|
||||
if: |
|
||||
(github.actor == 'Snider' && github.event.pull_request.user.login == 'Snider') ||
|
||||
(github.event.review.state == 'approved' && !github.event.pull_request.draft)
|
||||
if: ${{!github.event.pull_request.draft}}
|
||||
uses: ./.github/workflows/build-docs.yml
|
||||
|
|
|
|||
10
.github/workflows/_on-push.yml
vendored
10
.github/workflows/_on-push.yml
vendored
|
|
@ -16,31 +16,31 @@ concurrency:
|
|||
|
||||
jobs:
|
||||
build-linux-intel:
|
||||
name: Chain
|
||||
name: Linux
|
||||
uses: ./.github/workflows/build-linux-intel.yml
|
||||
with:
|
||||
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
|
||||
|
||||
build-linux-arm:
|
||||
name: Chain
|
||||
name: Linux
|
||||
uses: ./.github/workflows/build-linux-arm64.yml
|
||||
with:
|
||||
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
|
||||
|
||||
build-windows-intel:
|
||||
name: Chain
|
||||
name: Windows
|
||||
uses: ./.github/workflows/build-windows-intel.yml
|
||||
with:
|
||||
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
|
||||
|
||||
build-macos-arm64:
|
||||
name: Chain
|
||||
name: MacOS
|
||||
uses: ./.github/workflows/build-macos-arm64.yml
|
||||
with:
|
||||
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
|
||||
|
||||
build-macos-intel:
|
||||
name: Chain
|
||||
name: MacOS
|
||||
uses: ./.github/workflows/build-macos-intel.yml
|
||||
with:
|
||||
chain-network: ${{ github.ref_name == 'main' && 'mainnet' || 'testnet' }}
|
||||
|
|
|
|||
32
.github/workflows/build-docs.yml
vendored
32
.github/workflows/build-docs.yml
vendored
|
|
@ -1,6 +1,6 @@
|
|||
name: docs
|
||||
permissions:
|
||||
contents: read
|
||||
contents: write
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
|
|
@ -17,16 +17,13 @@ jobs:
|
|||
with:
|
||||
python-version: 3.x
|
||||
|
||||
- name: Install Conan
|
||||
uses: conan-io/setup-conan@v1
|
||||
- name: Cache SDK Folder
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
home: ${{ github.workspace }}/build/sdk
|
||||
cache_packages: true
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
key: ${{ github.ref }}
|
||||
path: .cache
|
||||
path: |
|
||||
${{ github.workspace }}/build/sdk
|
||||
${{ github.workspace }}/build/bin
|
||||
key: ${{ runner.os }}-${{ runner.arch }}-sdk
|
||||
|
||||
- run: sudo apt-get install -y libcairo2-dev libfreetype6-dev libffi-dev libjpeg-dev libpng-dev libz-dev pngquant
|
||||
- run: pip install mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin mkdocs-material[imaging]
|
||||
|
|
@ -34,13 +31,10 @@ jobs:
|
|||
- name: Build Offline Version
|
||||
run: make docs
|
||||
|
||||
- name: Zip Build
|
||||
run: |
|
||||
cd build/docs
|
||||
zip -qq -r ../documentation.zip *
|
||||
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v4.6.2
|
||||
- name: CLI Artifacts
|
||||
uses: ./.github/actions/upload-artifacts
|
||||
with:
|
||||
name: Documentation
|
||||
path: build/documentation.zip
|
||||
chain-network: ${{ inputs.chain-network }}
|
||||
assets: "*"
|
||||
asset-type: 'docs'
|
||||
asset-directory: ${{ github.workspace }}/build/docs
|
||||
|
|
|
|||
1
.github/workflows/build-linux-arm64.yml
vendored
1
.github/workflows/build-linux-arm64.yml
vendored
|
|
@ -49,6 +49,7 @@ jobs:
|
|||
make build-deps CPU_CORES=4 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} CONAN_USER=ci-user CONAN_PASSWORD=${{ secrets.CONAN_PASSWORD }}
|
||||
make upload-conan-cache
|
||||
|
||||
|
||||
build:
|
||||
name: compile-arm64
|
||||
needs: cache
|
||||
|
|
|
|||
1
.github/workflows/build-linux-intel.yml
vendored
1
.github/workflows/build-linux-intel.yml
vendored
|
|
@ -50,6 +50,7 @@ jobs:
|
|||
make upload-conan-cache
|
||||
|
||||
|
||||
|
||||
build:
|
||||
name: compile-x86_64
|
||||
needs: cache
|
||||
|
|
|
|||
1
.github/workflows/build-macos-arm64.yml
vendored
1
.github/workflows/build-macos-arm64.yml
vendored
|
|
@ -47,6 +47,7 @@ jobs:
|
|||
make build-deps CPU_CORES=3 TESTNET=${{ inputs.chain-network == 'testnet' && '1' || '0' }} CONAN_USER=ci-user CONAN_PASSWORD=${{ secrets.CONAN_PASSWORD }}
|
||||
make upload-conan-cache
|
||||
|
||||
|
||||
build:
|
||||
name: compile-armv8
|
||||
needs: cache
|
||||
|
|
|
|||
|
|
@ -6,15 +6,11 @@ set(DISABLE_TOR TRUE CACHE BOOL "Disable TOR library(and related tor-connect sub
|
|||
PROJECT(Lethean)
|
||||
|
||||
set(VERSION "1.0" CACHE STRING "Build version")
|
||||
|
||||
|
||||
message("OPENSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}")
|
||||
message("OPENSSL_CRYPTO_LIBRARY: ${OPENSSL_CRYPTO_LIBRARY}")
|
||||
message("OPENSSL_SSL_LIBRARY: ${OPENSSL_SSL_LIBRARY}")
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
list(INSERT CMAKE_MODULE_PATH 0
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
include(DocBuilder)
|
||||
|
||||
if(POLICY CMP0043)
|
||||
cmake_policy(SET CMP0043 NEW)
|
||||
|
|
@ -22,6 +18,9 @@ endif()
|
|||
if(POLICY CMP0043)
|
||||
cmake_policy(SET CMP0074 NEW)
|
||||
endif()
|
||||
if(POLICY CMP0091)
|
||||
cmake_policy(SET CMP0091 NEW)
|
||||
endif()
|
||||
if(POLICY CMP0144)
|
||||
cmake_policy(SET CMP0144 NEW)
|
||||
endif()
|
||||
|
|
@ -29,6 +28,14 @@ if(POLICY CMP0167)
|
|||
cmake_policy(SET CMP0167 OLD)
|
||||
endif()
|
||||
|
||||
include(DocBuilder)
|
||||
option (USE_CCACHE "Use ccache if a usable instance is found" ON)
|
||||
if (USE_CCACHE)
|
||||
include(FindCcache)
|
||||
else()
|
||||
message(STATUS "ccache deselected")
|
||||
endif()
|
||||
|
||||
#option (USE_CCACHE "Use ccache if a usable instance is found" ON)
|
||||
#if (USE_CCACHE)
|
||||
# include(FindCcache) # Has to be included after the project() macro, to be able to read the CXX variable.
|
||||
|
|
@ -36,8 +43,7 @@ endif()
|
|||
# message(STATUS "ccache deselected")
|
||||
#endif()
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "iOS" OR CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
|||
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")
|
||||
set(CPACK_PACKAGE_DIRECTORY "${CMAKE_SOURCE_DIR}/build/packages")
|
||||
|
||||
install(FILES README.md LICENSE.txt
|
||||
DESTINATION "share/doc/${PROJECT_NAME}"
|
||||
|
|
|
|||
58
cmake/CleanBuild.cmake
Normal file
58
cmake/CleanBuild.cmake
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
# cmake/CleanBuild.cmake
|
||||
|
||||
# Function to selectively clean the build directory.
|
||||
#
|
||||
# This function will remove most of the generated build files from the build
|
||||
# directory, while preserving specific directories that contain downloaded
|
||||
# tools or generated documentation.
|
||||
#
|
||||
# Golden Rules:
|
||||
# - never delete build/
|
||||
# - never delete build/bin
|
||||
# - never delete build/docs
|
||||
# - never delete build/sdk (non cache)
|
||||
#
|
||||
# It will:
|
||||
# - purge build files
|
||||
# - clean up conan build files, cached sources can always remain.
|
||||
function(selective_clean_build_dir)
|
||||
if(EXISTS "${CMAKE_SOURCE_DIR}/build")
|
||||
message(STATUS "Selectively cleaning build directory: ${CMAKE_SOURCE_DIR}/build")
|
||||
|
||||
# List of top-level items in the build directory to keep.
|
||||
set(golden_items
|
||||
"${CMAKE_SOURCE_DIR}/build/.ccache"
|
||||
"${CMAKE_SOURCE_DIR}/build/bin"
|
||||
"${CMAKE_SOURCE_DIR}/build/docs"
|
||||
"${CMAKE_SOURCE_DIR}/build/sdk"
|
||||
)
|
||||
|
||||
# Get all top-level items in the build directory.
|
||||
file(GLOB top_level_items "${CMAKE_SOURCE_DIR}/build/*")
|
||||
|
||||
foreach(item ${top_level_items})
|
||||
list(FIND golden_items "${item}" is_golden)
|
||||
if(is_golden STREQUAL "-1")
|
||||
string(FIND "${item}" "${CMAKE_SOURCE_DIR}/build" is_prefixed)
|
||||
if(is_prefixed EQUAL 0)
|
||||
message(STATUS "Removing: ${item}")
|
||||
if(IS_DIRECTORY "${item}")
|
||||
file(REMOVE_RECURSE "${item}")
|
||||
else()
|
||||
file(REMOVE "${item}")
|
||||
endif()
|
||||
else()
|
||||
message(WARNING "Safety check failed: Will not remove '${item}' because it is not prefixed with CMAKE_SOURCE_DIR/build.")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Keeping golden item: ${item}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
message(STATUS "Selective clean complete.")
|
||||
else()
|
||||
message(STATUS "Build directory not found, skipping clean.")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
selective_clean_build_dir()
|
||||
38
cmake/ConanProfileSetup.cmake
Normal file
38
cmake/ConanProfileSetup.cmake
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
set(CONAN_HOME "${CMAKE_SOURCE_DIR}/build/sdk")
|
||||
set(DEFAULT_PROFILE "${CONAN_HOME}/profiles/default")
|
||||
if(WIN32)
|
||||
set(CONAN_EXECUTABLE "${CMAKE_SOURCE_DIR}/build/bin/conan.exe")
|
||||
else()
|
||||
set(CONAN_EXECUTABLE "${CMAKE_SOURCE_DIR}/build/bin/conan")
|
||||
endif()
|
||||
if(NOT EXISTS "${DEFAULT_PROFILE}")
|
||||
message(STATUS "Conan default profile not found. Detecting a new one...")
|
||||
set(ENV{CONAN_HOME} "${CONAN_HOME}")
|
||||
execute_process(
|
||||
COMMAND "${CONAN_EXECUTABLE}" profile detect --name=default --force
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
RESULT_VARIABLE return_code
|
||||
)
|
||||
unset(ENV{CONAN_HOME})
|
||||
|
||||
if(NOT return_code EQUAL 0)
|
||||
message(FATAL_ERROR "Conan profile detection failed with exit code: ${return_code}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
message(STATUS "Appending custom settings to Conan default profile...")
|
||||
|
||||
set(CUSTOM_SETTINGS "
|
||||
compiler.cppstd=17
|
||||
")
|
||||
|
||||
#if(WIN32)
|
||||
# message(STATUS "Windows detected. Appending static runtime setting.")
|
||||
# string(APPEND CUSTOM_SETTINGS "
|
||||
#compiler.runtime=static
|
||||
#")
|
||||
#endif()
|
||||
|
||||
file(APPEND "${DEFAULT_PROFILE}" "${CUSTOM_SETTINGS}")
|
||||
|
||||
message(STATUS "Conan profile setup is complete.")
|
||||
8
cmake/FindCcache.cmake
Normal file
8
cmake/FindCcache.cmake
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
find_program(CCACHE_FOUND ccache)
|
||||
if (CCACHE_FOUND)
|
||||
message(STATUS "Found usable ccache: ${CCACHE_FOUND}")
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_FOUND} cache_dir=${CMAKE_SOURCE_DIR}/build/.ccache")
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_FOUND} cache_dir=${CMAKE_SOURCE_DIR}/build/.ccache")
|
||||
else()
|
||||
message(STATUS "ccache NOT found! Please install it for faster rebuilds.")
|
||||
endif()
|
||||
102
cmake/GetConan.cmake
Normal file
102
cmake/GetConan.cmake
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
# cmake/GetConan.cmake
|
||||
|
||||
# This module downloads and installs Conan if it's not found.
|
||||
|
||||
# Set the Conan version
|
||||
set(CONAN_VERSION 2.21.0)
|
||||
|
||||
# Set the download URLs
|
||||
set(CONAN_URL_MACOS_ARM "https://github.com/conan-io/conan/releases/download/${CONAN_VERSION}/conan-${CONAN_VERSION}-macos-arm64.tgz")
|
||||
set(CONAN_URL_MACOS_INTEL "https://github.com/conan-io/conan/releases/download/${CONAN_VERSION}/conan-${CONAN_VERSION}-macos-x86_64.tgz")
|
||||
set(CONAN_URL_WINDOWS_X86_64 "https://github.com/conan-io/conan/releases/download/${CONAN_VERSION}/conan-${CONAN_VERSION}-windows-x86_64.zip")
|
||||
set(CONAN_URL_WINDOWS_ARM64 "https://github.com/conan-io/conan/releases/download/${CONAN_VERSION}/conan-${CONAN_VERSION}-windows-arm64.zip")
|
||||
set(CONAN_URL_LINUX_X86_64 "https://github.com/conan-io/conan/releases/download/${CONAN_VERSION}/conan-${CONAN_VERSION}-linux-x86_64.tgz")
|
||||
set(CONAN_URL_LINUX_AARCH64 "https://github.com/conan-io/conan/releases/download/${CONAN_VERSION}/conan-${CONAN_VERSION}-linux-aarch64.tgz")
|
||||
|
||||
# Set the installation directory
|
||||
if(NOT CMAKE_BINARY_DIR)
|
||||
set(CMAKE_BINARY_DIR "${CONAN_INSTALL_DIR}")
|
||||
endif()
|
||||
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
|
||||
set(CONAN_INSTALL_DIR "${CMAKE_SOURCE_DIR}/build/bin")
|
||||
set(CONAN_EXECUTABLE "${CMAKE_SOURCE_DIR}/build/bin/conan.exe")
|
||||
else ()
|
||||
set(CONAN_INSTALL_DIR "${CMAKE_SOURCE_DIR}/build")
|
||||
set(CONAN_EXECUTABLE "${CONAN_INSTALL_DIR}/bin/conan")
|
||||
endif ()
|
||||
# Check if Conan is already installed
|
||||
if(NOT EXISTS "${CONAN_EXECUTABLE}")
|
||||
message(STATUS "Conan not found. Downloading and installing...")
|
||||
|
||||
file(MAKE_DIRECTORY "${CONAN_INSTALL_DIR}")
|
||||
|
||||
# Determine the processor architecture, with a fallback
|
||||
if(CMAKE_HOST_SYSTEM_PROCESSOR)
|
||||
set(HOST_PROCESSOR ${CMAKE_HOST_SYSTEM_PROCESSOR})
|
||||
else()
|
||||
cmake_host_system_information(RESULT HOST_PROCESSOR QUERY OS_PLATFORM)
|
||||
endif()
|
||||
|
||||
# Detect the operating system and architecture
|
||||
message(STATUS "Detecting OS and architecture: ${HOST_PROCESSOR} on ${CMAKE_HOST_SYSTEM_NAME}")
|
||||
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
|
||||
if(HOST_PROCESSOR MATCHES "arm64")
|
||||
set(CONAN_URL ${CONAN_URL_MACOS_ARM})
|
||||
set(CONAN_ARCHIVE_TYPE "tgz")
|
||||
else()
|
||||
set(CONAN_URL ${CONAN_URL_MACOS_INTEL})
|
||||
set(CONAN_ARCHIVE_TYPE "tgz")
|
||||
endif()
|
||||
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
|
||||
if(HOST_PROCESSOR MATCHES "ARM64")
|
||||
set(CONAN_URL ${CONAN_URL_WINDOWS_ARM64})
|
||||
set(CONAN_ARCHIVE_TYPE "zip")
|
||||
else()
|
||||
set(CONAN_URL ${CONAN_URL_WINDOWS_X86_64})
|
||||
set(CONAN_ARCHIVE_TYPE "zip")
|
||||
endif()
|
||||
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
|
||||
if(HOST_PROCESSOR MATCHES "aarch64|arm64|ARM64")
|
||||
set(CONAN_URL ${CONAN_URL_LINUX_AARCH64})
|
||||
set(CONAN_ARCHIVE_TYPE "tgz")
|
||||
else()
|
||||
set(CONAN_URL ${CONAN_URL_LINUX_X86_64})
|
||||
set(CONAN_ARCHIVE_TYPE "tgz")
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Unsupported operating system: ${CMAKE_HOST_SYSTEM_NAME}")
|
||||
endif()
|
||||
|
||||
# Download and extract Conan
|
||||
set(CONAN_ARCHIVE "${CMAKE_BINARY_DIR}/conan.${CONAN_ARCHIVE_TYPE}")
|
||||
|
||||
message(STATUS "Downloading ${CONAN_URL} to ${CONAN_ARCHIVE}")
|
||||
file(DOWNLOAD "${CONAN_URL}" "${CONAN_ARCHIVE}" SHOW_PROGRESS)
|
||||
|
||||
message(STATUS "Extracting ${CONAN_ARCHIVE} to ${CONAN_INSTALL_DIR}")
|
||||
if(CONAN_ARCHIVE_TYPE STREQUAL "tgz")
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E tar xzf "${CONAN_ARCHIVE}"
|
||||
WORKING_DIRECTORY "${CONAN_INSTALL_DIR}"
|
||||
RESULT_VARIABLE result
|
||||
)
|
||||
elseif(CONAN_ARCHIVE_TYPE STREQUAL "zip")
|
||||
# CMake -E tar can handle zip files
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E tar xf "${CONAN_ARCHIVE}"
|
||||
WORKING_DIRECTORY "${CONAN_INSTALL_DIR}"
|
||||
RESULT_VARIABLE result
|
||||
)
|
||||
endif()
|
||||
|
||||
if(NOT result EQUAL 0)
|
||||
message(FATAL_ERROR "Failed to extract Conan archive.")
|
||||
endif()
|
||||
|
||||
# Clean up the archive
|
||||
file(REMOVE "${CONAN_ARCHIVE}")
|
||||
|
||||
message(STATUS "Conan installed successfully at ${CONAN_EXECUTABLE}")
|
||||
else()
|
||||
message(STATUS "Conan already installed at ${CONAN_EXECUTABLE}")
|
||||
endif()
|
||||
|
|
@ -565,7 +565,23 @@ macro(conan_provide_dependency method package_name)
|
|||
set_property(GLOBAL PROPERTY CONAN_PROVIDE_DEPENDENCY_INVOKED TRUE)
|
||||
get_property(_conan_install_success GLOBAL PROPERTY CONAN_INSTALL_SUCCESS)
|
||||
if(NOT _conan_install_success)
|
||||
find_program(CONAN_COMMAND "conan" REQUIRED)
|
||||
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
|
||||
set(CONAN_COMMAND "${CMAKE_SOURCE_DIR}/build/bin/conan.exe")
|
||||
else ()
|
||||
set(CONAN_COMMAND "${CMAKE_SOURCE_DIR}/build/bin/conan")
|
||||
endif ()
|
||||
if(NOT EXISTS ${CONAN_COMMAND})
|
||||
message(STATUS "CMake-Conan: Local conan not found, attempting to download it.")
|
||||
execute_process(COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_LIST_DIR}/GetConan.cmake"
|
||||
RESULT_VARIABLE result
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
|
||||
if(NOT result EQUAL 0)
|
||||
message(FATAL_ERROR "Failed to download conan.")
|
||||
endif()
|
||||
endif()
|
||||
if(NOT EXISTS ${CONAN_COMMAND})
|
||||
message(FATAL_ERROR "Conan executable not found at ${CONAN_COMMAND} after trying to download it. Also, make sure it has execution permissions.")
|
||||
endif()
|
||||
conan_get_version(${CONAN_COMMAND} CONAN_CURRENT_VERSION)
|
||||
conan_version_check(MINIMUM ${CONAN_MINIMUM_VERSION} CURRENT ${CONAN_CURRENT_VERSION})
|
||||
message(STATUS "CMake-Conan: first find_package() found. Installing dependencies with Conan")
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import os
|
||||
|
||||
from conan import ConanFile
|
||||
from conan.tools.cmake import cmake_layout, CMakeDeps, CMakeToolchain, CMake
|
||||
from conan.tools.cmake import CMakeDeps, CMakeToolchain, CMake
|
||||
|
||||
|
||||
class BlockchainConan(ConanFile):
|
||||
|
|
@ -15,9 +15,12 @@ class BlockchainConan(ConanFile):
|
|||
}
|
||||
default_options = {
|
||||
"static": False,
|
||||
"testnet": False
|
||||
"testnet": False,
|
||||
"boost/*:without_test": True
|
||||
}
|
||||
|
||||
tool_requires = "ccache/4.11"
|
||||
|
||||
requires = [
|
||||
"zlib/1.3.1",
|
||||
"boost/1.85.0",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ RUN apt install -y build-essential pkgconf \
|
|||
g++ llvm clang lld cmake python-is-python3 \
|
||||
git python3 python3-pip python3-dev xz-utils gperf
|
||||
|
||||
RUN pip3 install conan mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin mkdocs-material[imaging] --break-system-packages
|
||||
RUN pip3 install mkdocs-git-revision-date-localized-plugin mkdocs-git-committers-plugin-2 mkdocs-git-authors-plugin mkdocs-material[imaging] --break-system-packages
|
||||
|
||||
WORKDIR /
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue