initial commit
Some checks failed
sgraves/cpp-build-system_mac/pipeline/head There was a failure building this commit
sgraves/cpp-build-system/pipeline/head There was a failure building this commit

This commit is contained in:
2025-10-17 07:44:16 -05:00
parent 933c973c79
commit 92e3e495ce
1099 changed files with 102722 additions and 0 deletions

16
cmake/arch.cmake Normal file
View File

@@ -0,0 +1,16 @@
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
message(FATAL_ERROR "32-bit compilation is not supported")
endif()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)")
set(IS_ARM_SYSTEM 1)
endif()
if(PROJECT_IS_ARM64 AND NOT IS_ARM_SYSTEM AND NOT PROJECT_REQUIRE_ALPINE)
message(FATAL_ERROR "aarch64 cross-compile is not supported")
endif()
string(REPLACE "_" "-" PROJECT_MARCH ${PROJECT_BUILD_ARCH})
if("${PROJECT_BUILD_ARCH}" STREQUAL "aarch64")
set(PROJECT_MARCH armv8-a)
endif()

123
cmake/flags.cmake Normal file
View File

@@ -0,0 +1,123 @@
list(APPEND PROJECT_COMMON_FLAG_LIST
-D_FILE_OFFSET_BITS=64
-D_GNU_SOURCE
-D_LARGEFILE64_SOURCE
-D_LARGEFILE_SOURCE
-D_TIME_BITS=64
-march=${PROJECT_MARCH}
-mtune=generic
)
if(PROJECT_IS_MINGW)
list(APPEND PROJECT_COMMON_FLAG_LIST
${PROJECT_COMMON_FLAG_LIST}
-Wa,-mbig-obj
-flarge-source-files
)
endif()
list(APPEND PROJECT_DEBUG_FLAG_LIST
-DDEBUG
-D_DEBUG
-Og
-fno-omit-frame-pointer
-g
)
list(APPEND PROJECT_RELEASE_FLAG_LIST
-DNDEBUG
-D_NDEBUG
-O3
)
list(APPEND PROJECT_CXXFLAGS_LIST
-Wall
-Wcast-align
-Wconversion
-Wdouble-promotion
-Wextra
-Wformat=2
-Wmisleading-indentation
-Wnon-virtual-dtor
-Wnull-dereference
-Wold-style-cast
-Woverloaded-virtual
-Wpedantic
-Wshadow
-Wsign-conversion
-Wunused
)
if (NOT PROJECT_IS_DARWIN)
list(APPEND PROJECT_CXXFLAGS_LIST
-Wduplicated-branches
-Wduplicated-cond
-Wlogical-op
-Wno-useless-cast
)
endif()
list(APPEND PROJECT_CFLAGS_LIST
${PROJECT_COMMON_FLAG_LIST}
-std=c${CMAKE_C_STANDARD}
)
list(APPEND PROJECT_CXXFLAGS_LIST
${PROJECT_COMMON_FLAG_LIST}
-std=gnu++${CMAKE_CXX_STANDARD}
)
if(NOT PROJECT_IS_DARWIN AND PROJECT_STATIC_LINK)
list(APPEND PROJECT_CMAKE_EXE_LINKER_FLAGS
-static-libgcc
-static-libstdc++
-static
)
endif()
list(JOIN PROJECT_COMMON_FLAG_LIST " " PROJECT_COMMON_FLAG_LIST)
list(JOIN PROJECT_DEBUG_FLAG_LIST " " PROJECT_DEBUG_FLAG_LIST)
list(JOIN PROJECT_RELEASE_FLAG_LIST " " PROJECT_RELEASE_FLAG_LIST)
list(JOIN PROJECT_CFLAGS_LIST " " PROJECT_CFLAGS_LIST)
list(JOIN PROJECT_CXXFLAGS_LIST " " PROJECT_CXXFLAGS_LIST)
list(JOIN PROJECT_CMAKE_EXE_LINKER_FLAGS " " PROJECT_CMAKE_EXE_LINKER_FLAGS)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PROJECT_CFLAGS_LIST}")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${PROJECT_DEBUG_FLAG_LIST}")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${PROJECT_RELEASE_FLAG_LIST}")
set(CMAKE_CXX_FLAGS "-include cstdint -include utility ${CMAKE_CXX_FLAGS} ${PROJECT_CXXFLAGS_LIST}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${PROJECT_DEBUG_FLAG_LIST}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${PROJECT_RELEASE_FLAG_LIST}")
set(CMAKE_EXE_LINKER_FLAGS "${PROJECT_CMAKE_EXE_LINKER_FLAGS}")
set(EXTERNAL_CMAKE_CXX_FLAGS "-include cstdint -include utility ${PROJECT_COMMON_FLAG_LIST}")
if (NOT PROJECT_IS_DARWIN)
set(EXTERNAL_CMAKE_CXX_FLAGS "-fext-numeric-literals ${EXTERNAL_CMAKE_CXX_FLAGS}")
endif()
list(APPEND PROJECT_EXTERNAL_CMAKE_FLAGS
-DCMAKE_BUILD_TYPE=${PROJECT_CMAKE_BUILD_TYPE}
-DCMAKE_COLOR_MAKEFILE=${CMAKE_COLOR_MAKEFILE}
-DCMAKE_CXX_FLAGS=${EXTERNAL_CMAKE_CXX_FLAGS}
-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
-DCMAKE_C_FLAGS=${PROJECT_COMMON_FLAG_LIST}
-DCMAKE_C_STANDARD=${CMAKE_C_STANDARD}
-DCMAKE_GENERATOR=${CMAKE_GENERATOR}
-DCMAKE_INSTALL_PREFIX=${PROJECT_EXTERNAL_BUILD_ROOT}
-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}
)
if(CMAKE_TOOLCHAIN_FILE)
list(APPEND PROJECT_EXTERNAL_CMAKE_FLAGS
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
)
endif()
string(REPLACE ";" "|" CMAKE_PREFIX_PATH_ALT_SEP "${CMAKE_PREFIX_PATH}")
list(APPEND PROJECT_EXTERNAL_CMAKE_FLAGS
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}
)

188
cmake/functions.cmake Normal file
View File

@@ -0,0 +1,188 @@
if (PROJECT_MACOS_ICNS_NAME)
set(PROJECT_MACOS_ICNS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/assets/${PROJECT_MACOS_ICNS_NAME}")
endif()
function(set_common_target_options name)
target_compile_definitions(${name} PUBLIC
${PROJECT_DEFINITIONS}
${${name}_DEFINITIONS}
)
target_include_directories(${name} BEFORE PUBLIC
${PROJECT_EXTERNAL_BUILD_ROOT}/include
)
target_link_directories(${name} BEFORE PUBLIC
${PROJECT_EXTERNAL_BUILD_ROOT}/lib
)
if (PROJECT_STATIC_LINK)
target_compile_definitions(${name} PRIVATE U_STATIC_IMPLEMENTATION)
endif()
target_link_libraries(${name} PRIVATE
ICU::io
ICU::i18n
ICU::uc
ICU::data
)
target_include_directories(${name} AFTER PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include
${name}_INCLUDES
)
if(PROJECT_DEPENDENCIES)
add_dependencies(${name} ${PROJECT_DEPENDENCIES})
endif()
if(PROJECT_STATIC_LINK)
set_property(TARGET ${name} PROPERTY LINK_SEARCH_START_STATIC 1)
endif()
endfunction(set_common_target_options)
function(add_project_executable2 name dependencies libraries headers sources is_win32)
if (PROJECT_WINDOWS_VERSION_RC)
list(APPEND sources ${PROJECT_WINDOWS_VERSION_RC})
endif()
if (PROJECT_IS_DARWIN AND PROJECT_MACOS_ICNS_SOURCE AND "${name}" STREQUAL "${PROJECT_NAME}")
set_source_files_properties(${PROJECT_MACOS_ICNS_SOURCE} PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources"
)
add_executable(${name}
MACOSX_BUNDLE
${headers}
${sources}
${PROJECT_MACOS_ICNS_SOURCE}
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp
)
set_target_properties(${name} PROPERTIES
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_ICON_FILE "${PROJECT_MACOS_ICNS_NAME}"
RESOURCE "${PROJECT_MACOS_ICNS_SOURCE}"
)
else()
add_executable(${name}
${headers}
${sources}
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp
)
endif()
foreach(dependency ${dependencies})
set_common_target_options(${dependency})
endforeach()
set_common_target_options(${name})
if(dependencies)
add_dependencies(${name} ${dependencies})
endif()
target_link_libraries(${name} PRIVATE ${libraries})
if(PROJECT_ENABLE_SDL AND PROJECT_IS_MINGW)
target_link_libraries(${name} PRIVATE SDL2::SDL2main)
endif ()
if (is_win32 AND PROJECT_IS_MINGW)
target_link_options(${name} PRIVATE -mwindows)
endif()
endfunction(add_project_executable2)
function(add_project_executable name dependencies libraries)
file(GLOB_RECURSE headers
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hxx
)
file(GLOB_RECURSE sources
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx
)
if(PROJECT_ENABLE_WXWIDGETS OR PROJECT_ENABLE_SDL OR PROJECT_ENABLE_SFML OR PROJECT_ENABLE_NANA)
set(IS_WIN32 ON)
endif()
add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}" "${IS_WIN32}")
if(PROJECT_ENABLE_WXWIDGETS)
target_link_libraries(${name} PRIVATE ${wxWidgets_LIBRARIES})
endif()
endfunction(add_project_executable)
function(add_project_library name dependencies libraries additional_sources)
file(GLOB_RECURSE headers
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/${name}/include/*.hxx
)
file(GLOB_RECURSE sources
${additional_sources}
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx
)
add_library(${name} STATIC
${headers}
${sources}
)
set_common_target_options(${name})
set_target_properties(${name} PROPERTIES PREFIX "")
target_link_libraries(${name} PRIVATE ${libraries})
endfunction(add_project_library)
function(add_project_test_executable name dependencies libraries)
if(PROJECT_ENABLE_TESTING)
find_package(GTest ${GTEST_VERSION} REQUIRED)
enable_testing()
file(GLOB_RECURSE headers
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/${name}/include/*.hxx
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh
${PROJECT_SUPPORT_DIR}/test/include/*.hpp
)
file(GLOB_RECURSE sources
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx
${PROJECT_SUPPORT_DIR}/test/src/*.cpp
${additional_sources}
)
add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}" OFF)
target_compile_definitions(${name} PRIVATE -DPROJECT_TESTING)
target_include_directories(${name} SYSTEM BEFORE
${GTEST_INCLUDE_DIRS}
)
target_include_directories(${name} AFTER PRIVATE
${PROJECT_SUPPORT_DIR}/test/include
)
target_link_libraries(${name} PRIVATE
GTest::gtest
GTest::gmock
)
endif()
endfunction()

43
cmake/hashes.cmake Normal file
View File

@@ -0,0 +1,43 @@
set(BINUTILS_HASH ce2017e059d63e67ddb9240e9d4ec49c2893605035cd60e92ad53177f4377237)
set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca)
set(BOOST_HASH 9de758db755e8330a01d995b0a24d09798048400ac25c03fc5ea9be364b13c93)
set(CLI11_HASH 17e02b4cddc2fa348e5dbdbb582c59a3486fa2b2433e70a0c3bacb871334fd55)
set(CPP_HTTPLIB_HASH a66f908f50ccb119769adce44fe1eac75f81b6ffab7c4ac0211bb663ffeb2688)
set(CURL_HASH d4d9a5001b491f5726efe9b50bc4aad03029506e73c9261272e809c64b05e814)
set(CXXOPTS_HASH 3bfc70542c521d4b55a46429d808178916a579b28d048bd8c727ee76c39e2072)
set(EXPAT_HASH 85372797ff0673a8fc4a6be16466bb5a0ca28c0dcf3c6f7ac1686b4a3ba2aabb)
set(FLAC_HASH aea54ed186ad07a34750399cb27fc216a2b62d0ffcd6dc2e3064a3518c3146f8)
set(FMT_HASH aa3e8fbb6a0066c03454434add1f1fc23299e85758ceec0d7d2d974431481e40)
set(FONTCONFIG_HASH 6a33dc555cc9ba8b10caf7695878ef134eeb36d0af366041f639b1da9b6ed220)
set(FREETYPE2_HASH 174d9e53402e1bf9ec7277e22ec199ba3e55a6be2c0740cb18c0ee9850fc8c34)
set(GCC_HASH 7294d65cc1a0558cb815af0ca8c7763d86f7a31199794ede3f630c0d1b0a5723)
set(GTEST_HASH 65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c)
set(ICU_HASH a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2)
set(INNOSETUP_HASH fa73bf47a4da250d185d07561c2bfda387e5e20db77e4570004cf6a133cc10b1)
set(JSON_HASH 4b92eb0c06d10683f7447ce9406cb97cd4b453be18d7279320f7b2f025c10187)
set(LIBDSM_HASH 747c4563d6291303d9b085c9e7dc96ac44f91871dcac3e20480fdcc066eee88a)
set(LIBEVENT_HASH 7180a979aaa7000e1264da484f712d403fcf7679b1e9212c4e3d09f5c93efc24)
set(LIBICONV_HASH 3b08f5f4f9b4eb82f151a7040bfd6fe6c6fb922efe4b1659c66ea933276965e8)
set(LIBJPEG_TURBO_HASH 560f6338b547544c4f9721b18d8b87685d433ec78b3c644c70d77adad22c55e6)
set(LIBPNG_HASH 71158e53cfdf2877bc99bcab33641d78df3f48e6e0daad030afe9cb8c031aa46)
set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1)
set(LIBTASN_HASH 1613f0ac1cf484d6ec0ce3b8c06d56263cc7242f1c23b30d82d23de345a63f7a)
set(MINGW_HASH 5afe822af5c4edbf67daaf45eec61d538f49eef6b19524de64897c6b95828caf)
set(NANA_HASH 56f7b1ed006c750fccf8ef15ab1e83f96751f2dfdcb68d93e5f712a6c9b58bcb)
set(NUSPELL_HASH 5d4baa1daf833a18dc06ae0af0571d9574cc849d47daff6b9ce11dac0a5ded6a)
set(OGG_HASH 83e6704730683d004d20e21b8f7f55dcb3383cdf84c0daedf30bde175f774638)
set(OPENAL_HASH 7e1fecdeb45e7f78722b776c5cf30bd33934b961d7fd2a11e0494e064cc631ce)
set(OPENSSL_HASH b6a5f44b7eb69e3fa35dbf15524405b44837a481d43d81daddde3ff21fcbb8e9)
set(PKG_CONFIG_HASH 6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591)
set(PUGIXML_HASH 655ade57fa703fb421c2eb9a0113b5064bddb145d415dd1f88c79353d90d511a)
set(ROCKSDB_HASH 7ec942baab802b2845188d02bc5d4e42c29236e61bcbc08f5b3a6bdd92290c22)
set(SDL_HASH f50e59da0d383b2c84d43db625c6e23aae58f8f90eabd2944e2138ccc253744b)
set(SECP256K1_HASH 61583939f1f25b92e6401e5b819e399da02562de663873df3056993b40148701)
set(SFML_HASH 15ff4d608a018f287c6a885db0a2da86ea389e516d2323629e4d4407a7ce047f)
set(SPDLOG_HASH 15a04e69c222eb6c01094b5c7ff8a249b36bb22788d72519646fb85feb267e67)
set(SQLITE_HASH 1d3049dd0f830a025a53105fc79fd2ab9431aea99e137809d064d8ee8356b032)
set(STDUUID_HASH b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3)
set(VORBIS_HASH 270c76933d0934e42c5ee0a54a36280e2d87af1de3cc3e584806357e237afd13)
set(WINFSP_HASH 073a70e00f77423e34bed98b86e600def93393ba5822204fac57a29324db9f7a)
set(WXWIDGETS_HASH f936c8d694f9c49a367a376f99c751467150a4ed7cbf8f4723ef19b2d2d9998d)
set(ZLIB_HASH 17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c)

100
cmake/libraries.cmake Normal file
View File

@@ -0,0 +1,100 @@
find_package(PkgConfig REQUIRED)
set(Boost_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
set(CURL_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
set(OPENSSL_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
set(SFML_STATIC_LIBRARIES ${PROJECT_STATIC_LINK})
if (PROJECT_IS_DARWIN)
set(ZLIB_USE_STATIC_LIBS OFF)
else()
set(ZLIB_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
endif()
set(wxWidgets_USE_STATIC ${PROJECT_STATIC_LINK})
set(ICU_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
include(cmake/libraries/icu.cmake)
include(cmake/libraries/openssl.cmake)
include(cmake/libraries/boost.cmake)
include(cmake/libraries/backward_cpp.cmake)
include(cmake/libraries/cli11.cmake)
include(cmake/libraries/cpp_httplib.cmake)
include(cmake/libraries/curl.cmake)
include(cmake/libraries/cxxopts.cmake)
include(cmake/libraries/dtl.cmake)
include(cmake/libraries/flac.cmake)
include(cmake/libraries/fmt.cmake)
include(cmake/libraries/fontconfig.cmake)
include(cmake/libraries/freetype2.cmake)
include(cmake/libraries/fuse.cmake)
include(cmake/libraries/fzf.cmake)
include(cmake/libraries/gtkmm.cmake)
include(cmake/libraries/json.cmake)
include(cmake/libraries/libbitcoin_system.cmake)
include(cmake/libraries/libdsm.cmake)
include(cmake/libraries/libevent.cmake)
include(cmake/libraries/libiconv.cmake)
include(cmake/libraries/libjpeg_turbo.cmake)
include(cmake/libraries/libpng.cmake)
include(cmake/libraries/libsodium.cmake)
include(cmake/libraries/libtasn.cmake)
include(cmake/libraries/nana.cmake)
include(cmake/libraries/nuspell.cmake)
include(cmake/libraries/ogg.cmake)
include(cmake/libraries/openal.cmake)
include(cmake/libraries/pugixml.cmake)
include(cmake/libraries/rocksdb.cmake)
include(cmake/libraries/sago_platform_folders.cmake)
include(cmake/libraries/sdl.cmake)
include(cmake/libraries/secp256k1.cmake)
include(cmake/libraries/sfml.cmake)
include(cmake/libraries/spdlog.cmake)
include(cmake/libraries/sqlite.cmake)
include(cmake/libraries/stduuid.cmake)
include(cmake/libraries/testing.cmake)
include(cmake/libraries/tpl.cmake)
include(cmake/libraries/vlc.cmake)
include(cmake/libraries/vorbis.cmake)
include(cmake/libraries/winfsp.cmake)
include(cmake/libraries/wxwidgets.cmake)
if(PROJECT_BUILD)
find_package(Threads REQUIRED)
find_package(ZLIB REQUIRED)
include_directories(BEFORE SYSTEM ${ZLIB_INCLUDE_DIRS})
link_libraries(${ZLIB_LIBRARIES})
if(PROJECT_IS_MINGW)
link_libraries(
advapi32
bcrypt
comdlg32
crypt32
dbghelp
gdi32
httpapi
iphlpapi
kernel32
mswsock
ncrypt
ole32
oleaut32
rpcrt4
secur32
shell32
shlwapi
user32
userenv
uuid
version
winhttp
wininet
winspool
ws2_32
)
elseif(NOT PROJECT_IS_DARWIN)
link_libraries(
uring
)
endif()
endif()

View File

@@ -0,0 +1,11 @@
if(PROJECT_ENABLE_BACKWARD_CPP AND PROJECT_BUILD)
if(PROJECT_IS_MINGW)
add_definitions(-DPROJECT_ENABLE_BACKWARD_CPP)
link_libraries(msvcr90)
else()
add_definitions(-DBACKWARD_HAS_BFD)
link_libraries(bfd)
endif()
endif()

152
cmake/libraries/boost.cmake Normal file
View File

@@ -0,0 +1,152 @@
if(PROJECT_ENABLE_BOOST)
if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
set(BOOST_MAJOR_VERSION ${BOOST2_MAJOR_VERSION})
set(BOOST_MINOR_VERSION ${BOOST2_MINOR_VERSION})
set(BOOST_PATCH_VERSION ${BOOST2_PATCH_VERSION})
endif()
set(BOOST_ROOT ${PROJECT_EXTERNAL_BUILD_ROOT})
set(BOOST_INCLUDE_DIR ${BOOST_ROOT}/include/boost-${BOOST_MINOR_VERSION}_${BOOST_MINOR_VERSION})
set(PROJECT_EXTERNAL_CMAKE_FLAGS
${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBOOST_INCLUDE_DIR=${BOOST_INCLUDE_DIR}
-DBOOST_ROOT=${BOOST_ROOT}
)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_BOOST)
if (PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
find_package(Boost ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_PATCH_VERSION} EXACT
REQUIRED
COMPONENTS
atomic
chrono
date_time
filesystem
iostreams
locale
log
log_setup
program_options
random
regex
serialization
system
thread
wserialization
)
else()
if(PROJECT_IS_DARWIN)
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_USE_PTHREADS_INIT 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(THREADS_PREFER_PTHREAD_FLAG ON)
endif()
find_package(Boost ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_PATCH_VERSION}
REQUIRED
COMPONENTS
atomic
chrono
date_time
filesystem
iostreams
locale
log
log_setup
program_options
random
regex
serialization
thread
wserialization
)
endif()
include_directories(BEFORE SYSTEM
${Boost_INCLUDE_DIRS}
)
link_libraries(
${Boost_LIBRARIES}
)
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
if (PROJECT_ENABLE_LIBBITCOIN_SYSTEM OR NOT CMAKE_HOST_WIN32)
if(PROJECT_CMAKE_BUILD_TYPE STREQUAL "Debug")
set(BOOST_BUILD_TYPE_LOWER debug)
else()
set(BOOST_BUILD_TYPE_LOWER release)
endif()
if(PROJECT_IS_ARM64)
set(BOOST_ARCH arm)
else()
set(BOOST_ARCH x86)
endif()
if(PROJECT_STATIC_LINK)
set(BOOST_LINK static)
else()
set(BOOST_LINK "static,shared")
endif()
set(BOOST_BUILD_ARGS
--openssldir=$ENV{OPENSSL_ROOT_DIR}
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
address-model=64
architecture=${BOOST_ARCH}
cxxstd=20
cxxstd-dialect=gnu
cxxflags=-std=gnu++${CMAKE_CXX_STANDARD}
cxxstd=${CMAKE_CXX_STANDARD}
define=BOOST_ASIO_HAS_STD_STRING_VIEW
define=BOOST_SYSTEM_NO_DEPRECATED
link=${BOOST_LINK}
linkflags=-std=gnu++${CMAKE_CXX_STANDARD}
threading=multi
variant=${BOOST_BUILD_TYPE_LOWER}
)
if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
set(BOOST_URL_HASH SHA256=${BOOST2_HASH})
else()
set(BOOST_URL_HASH SHA256=${BOOST_HASH})
endif()
ExternalProject_Add(boost_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/boost_${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_PATCH_VERSION}.tar.gz
URL_HASH ${BOOST_URL_HASH}
BUILD_IN_SOURCE 1
LIST_SEPARATOR |
CONFIGURE_COMMAND ./bootstrap.sh
--with-libraries=atomic,chrono,date_time,filesystem,iostreams,locale,log,program_options,random,regex,serialization,system,test,thread
BUILD_COMMAND
./b2
-sNO_BZIP2=1
-j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
${BOOST_BUILD_ARGS}
INSTALL_COMMAND
./b2
-sNO_BZIP2=1
-j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
${BOOST_BUILD_ARGS}
install
)
list(APPEND PROJECT_DEPENDENCIES boost_project)
if(PROJECT_IS_DARWIN OR PROJECT_REQUIRE_ALPINE)
add_dependencies(boost_project icu_project)
endif()
if (NOT CMAKE_HOST_WIN32)
add_dependencies(boost_project openssl_project)
endif()
endif()
endif()
endif()

View File

@@ -0,0 +1,26 @@
if(PROJECT_ENABLE_CLI11)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_CLI11)
find_package(CLI11 ${CLI11_VERSION} REQUIRED)
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(cli11_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/CLI11-${CLI11_VERSION}.tar.gz
URL_HASH SHA256=${CLI11_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DCLI11_WARNINGS_AS_ERRORS=OFF
-DCLI11_SINGLE_FILE=ON
-DCLI11_BUILD_DOCS=OFF
-DCLI11_BUILD_TESTS=OFF
-DCLI11_BUILD_EXAMPLES=OFF
-DCLI11_INSTALL=ON
)
list(APPEND PROJECT_DEPENDENCIES cli11_project)
endif()
endif()

View File

@@ -0,0 +1,36 @@
if(PROJECT_ENABLE_CPP_HTTPLIB)
if(PROJECT_BUILD)
add_definitions(
-DCPPHTTPLIB_OPENSSL_SUPPORT
-DCPPHTTPLIB_TCP_NODELAY=true
-DCPPHTTPLIB_ZLIB_SUPPORT
-DPROJECT_ENABLE_CPP_HTTPLIB
)
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
ExternalProject_Add(cpphttplib_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/cpp-httplib-${CPP_HTTPLIB_VERSION}.tar.gz
URL_HASH SHA256=${CPP_HTTPLIB_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DHTTPLIB_REQUIRE_BROTLI=OFF
-DHTTPLIB_REQUIRE_OPENSSL=ON
-DHTTPLIB_REQUIRE_ZLIB=ON
-DHTTPLIB_TEST=OFF
-DHTTPLIB_USE_BROTLI_IF_AVAILABLE=OFF
-DHTTPLIB_USE_OPENSSL_IF_AVAILABLE=ON
-DHTTPLIB_USE_ZLIB_IF_AVAILABLE=ON
-DOPENSSL_USE_STATIC_LIBS=${OPENSSL_USE_STATIC_LIBS}
)
list(APPEND PROJECT_DEPENDENCIES cpphttplib_project)
add_dependencies(cpphttplib_project curl_project)
if (NOT CMAKE_HOST_WIN32)
add_dependencies(cpphttplib_project openssl_project)
endif()
endif()
endif()

View File

@@ -0,0 +1,56 @@
if(PROJECT_ENABLE_CURL)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_CURL)
find_package(CURL ${CURL_VERSION} REQUIRED)
include_directories(BEFORE SYSTEM ${CURL_INCLUDE_DIRS})
link_libraries(CURL::libcurl)
if (EXISTS ${PROJECT_DIST_DIR}/cacert.pem)
file(REMOVE ${PROJECT_DIST_DIR}/cacert.pem)
endif()
file(DOWNLOAD https://curl.haxx.se/ca/cacert.pem ${PROJECT_DIST_DIR}/cacert.pem)
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
ExternalProject_Add(curl_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/curl-${CURL_VERSION}.tar.gz
URL_HASH SHA256=${CURL_HASH}
LIST_SEPARATOR |
BUILD_COMMAND
${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_CURL_EXE=OFF
-DBUILD_LIBCURL_DOCS=OFF
-DBUILD_MISC_DOCS=OFF
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_CURL=ON
-DBUILD_STATIC_LIBS=ON
-DBUILD_TESTING=OFF
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DCURL_BROTLI=OFF
-DCURL_CA_BUNDLE=./cacert.pem
-DCURL_CA_FALLBACK=ON
-DCURL_DISABLE_LDAP=ON
-DCURL_USE_LIBPSL=OFF
-DCURL_USE_LIBSSH2=OFF
-DCURL_USE_OPENSSL=${PROJECT_ENABLE_OPENSSL}
-DCURL_ZLIB=ON
-DCURL_ZSTD=OFF
-DENABLE_CURL_MANUAL=OFF
-DENABLE_THREADED_RESOLVER=ON
-DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
-DOPENSSL_USE_STATIC_LIBS=${OPENSSL_USE_STATIC_LIBS}
-DUSE_LIBIDN2=OFF
-DUSE_NGHTTP2=OFF
-DZLIB_USE_STATIC_LIBS=${ZLIB_USE_STATIC_LIBS}
)
list(APPEND PROJECT_DEPENDENCIES curl_project)
if (NOT CMAKE_HOST_WIN32)
add_dependencies(curl_project openssl_project)
endif()
endif()
endif()

View File

@@ -0,0 +1,23 @@
if(PROJECT_ENABLE_CXXOPTS)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_CXXOPTS)
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
ExternalProject_Add(cxxopts_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/cxxopts-v${CXXOPTS_VERSION}.tar.gz
URL_HASH SHA256=${CXXOPTS_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DCXXOPTS_BUILD_EXAMPLES=OFF
-DCXXOPTS_BUILD_TESTS=OFF
-DCXXOPTS_ENABLE_INSTALL=ON
-DCXXOPTS_ENABLE_WARNINGS=OFF
-DCXXOPTS_USE_UNICODE_HELP=ON
)
list(APPEND PROJECT_DEPENDENCIES cxxopts_project)
endif()
endif()

18
cmake/libraries/dtl.cmake Normal file
View File

@@ -0,0 +1,18 @@
if(PROJECT_ENABLE_DTL)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_DTL)
else()
ExternalProject_Add(dtl_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/dtl-v${DTL_VERSION}.tar.gz
URL_HASH SHA256=d6dcc7834b4117b5c14456ea73b907d0e2bafa5058e3a06b2c504d53517438c5
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
)
list(APPEND PROJECT_DEPENDENCIES dtl_project)
endif()
endif()

View File

@@ -0,0 +1,31 @@
if(PROJECT_ENABLE_FLAC)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_FLAC)
find_package(FLAC ${FLAC_VERSION} REQUIRED)
include_directories(BEFORE SYSTEM ${FLAC_INCLUDE_DIRS})
link_libraries(FLAC::FLAC)
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(flac_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/flac-${FLAC_VERSION}.tar.gz
URL_HASH SHA256=${FLAC_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DBUILD_EXAMPLES=OFF
-DBUILD_PROGRAMS=OFF
-DBUILD_TESTING=OFF
-DBUILD_DOCS=OFF
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DINSTALL_MANPAGES=OFF
)
list(APPEND PROJECT_DEPENDENCIES flac_project)
add_dependencies(flac_project libiconv_project vorbis_project)
endif()
endif()

26
cmake/libraries/fmt.cmake Normal file
View File

@@ -0,0 +1,26 @@
if(PROJECT_ENABLE_FMT)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_FMT)
find_package(fmt ${FMT_VERSION} REQUIRED)
include_directories(BEFORE SYSTEM ${FMT_INCLUDE_DIRS})
link_libraries(fmt::fmt)
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
ExternalProject_Add(fmt_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/fmt-${FMT_VERSION}.tar.gz
URL_HASH SHA256=${FMT_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DFMT_DOC=OFF
-DFMT_TEST=OFF
)
list(APPEND PROJECT_DEPENDENCIES fmt_project)
endif()
endif()

View File

@@ -0,0 +1,38 @@
if(PROJECT_ENABLE_FONTCONFIG)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_FONTCONFIG)
find_package(Fontconfig ${FONTCONFIG_VERSION} REQUIRED)
include_directories(BEFORE SYSTEM ${FONTCONFIG_INCLUDE_DIRS})
link_libraries(Fontconfig::Fontconfig)
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(fontconfig_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/fontconfig-${FONTCONFIG_VERSION}.tar.xz
URL_HASH SHA256=${FONTCONFIG_HASH}
BUILD_IN_SOURCE 1
LIST_SEPARATOR |
CONFIGURE_COMMAND meson
setup
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
_build
BUILD_COMMAND meson
compile
-C _build
INSTALL_COMMAND meson
install
-C _build
)
list(APPEND PROJECT_DEPENDENCIES fontconfig_project)
add_dependencies(fontconfig_project
freetype2_project
libjpeg_turbo_project
libpng_project
)
endif()
endif()

View File

@@ -0,0 +1,32 @@
if(PROJECT_ENABLE_FREETYPE2)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_FREETYPE2)
find_package(Freetype ${FREETYPE2_VERSION} REQUIRED)
include_directories(BEFORE SYSTEM ${FREETYPE_INCLUDE_DIRS})
link_libraries(Freetype::Freetype)
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(freetype2_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/freetype-${FREETYPE2_VERSION}.tar.gz
URL_HASH SHA256=${FREETYPE2_HASH}
BUILD_IN_SOURCE 1
LIST_SEPARATOR |
CONFIGURE_COMMAND meson
setup
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
_build
BUILD_COMMAND meson
compile
-C _build
INSTALL_COMMAND meson
install
-C _build
)
list(APPEND PROJECT_DEPENDENCIES freetype2_project)
endif()
endif()

View File

@@ -0,0 +1,45 @@
if(PROJECT_ENABLE_FUSE AND NOT PROJECT_IS_MINGW)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_FUSE)
include_directories(BEFORE SYSTEM ${PROJECT_FUSE_INCLUDE_DIRS})
if(PROJECT_FUSE STREQUAL "fuse3")
add_definitions(-DFUSE_USE_VERSION=30)
if(PROJECT_STATIC_LINK)
link_libraries(libfuse3.a)
else()
link_libraries(fuse3)
endif()
elseif(PROJECT_FUSE STREQUAL "fuse2")
add_definitions(-DFUSE_USE_VERSION=29)
if(PROJECT_STATIC_LINK)
link_libraries(libfuse.a)
else()
link_libraries(fuse)
endif()
endif()
else()
if (PROJECT_IS_DARWIN)
find_library(OSXFUSE NO_CACHE NAMES OSXFUSE)
if (NOT OSXFUSE)
message(FATAL_ERROR "FUSE for macOS not found (https://macfuse.github.io)")
endif ()
set(PROJECT_FUSE fuse2)
else()
pkg_check_modules(LIBFUSE3 fuse3>=3.0.0)
if(LIBFUSE3_FOUND)
set(PROJECT_FUSE fuse3)
set(PROJECT_FUSE_INCLUDE_DIRS ${LIBFUSE3_INCLUDE_DIRS})
else()
pkg_check_modules(LIBFUSE2 fuse>=2.9.0)
if(LIBFUSE2_FOUND)
set(PROJECT_FUSE fuse2)
set(PROJECT_FUSE_INCLUDE_DIRS ${LIBFUSE2_INCLUDE_DIRS})
else()
message(FATAL_ERROR "fuse library not found")
endif()
endif()
endif()
endif()
endif()

View File

@@ -0,0 +1,3 @@
if(PROJECT_ENABLE_FZF AND PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_FZF)
endif()

View File

@@ -0,0 +1,23 @@
if(PROJECT_ENABLE_GTKMM)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_GTKMM)
find_package(PNG REQUIRED)
pkg_check_modules(GTKMM REQUIRED gtkmm-${GTKMM_VERSION})
add_definitions(${GTKMM_DEFINITIONS})
include_directories(
${GTKMM_INCLUDE_DIRS}
${PNG_INCLUDE_DIRS}
)
link_directories(${GTKMM_LIBRARY_DIRS})
link_libraries(
${GTKMM_LIBRARIES}
${PNG_LIBRARIES}
)
endif()
endif()

24
cmake/libraries/icu.cmake Normal file
View File

@@ -0,0 +1,24 @@
if((PROJECT_IS_DARWIN OR PROJECT_REQUIRE_ALPINE) AND NOT PROJECT_IS_MINGW AND NOT PROJECT_BUILD)
if(PROJECT_BUILD_SHARED_LIBS)
set(ICU_ENABLE_SHARED yes)
else()
set(ICU_ENABLE_SHARED no)
endif()
ExternalProject_Add(icu_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/mingw64/icu-release-${ICU_VERSION}.tar.gz
URL_HASH SHA256=${ICU_HASH}
BUILD_IN_SOURCE 1
LIST_SEPARATOR |
PATCH_COMMAND chmod +x ${PROJECT_3RD_PARTY_DIR}/icu_configure.sh
CONFIGURE_COMMAND cd icu4c/source && ${PROJECT_3RD_PARTY_DIR}/icu_configure.sh
${PROJECT_MARCH}
${PROJECT_EXTERNAL_BUILD_ROOT}
${ICU_ENABLE_SHARED}
BUILD_COMMAND cd icu4c/source && make -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
INSTALL_COMMAND cd icu4c/source && make install
)
list(APPEND PROJECT_DEPENDENCIES icu_project)
endif()

View File

@@ -0,0 +1,29 @@
if(PROJECT_ENABLE_JSON)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_JSON)
find_package(nlohmann_json ${JSON_VERSION} REQUIRED)
if(PROJECT_IS_MINGW AND PROJECT_IS_MINGW_UNIX)
include_directories(BEFORE SYSTEM /mingw64/include/nlohmann)
else()
include_directories(BEFORE SYSTEM ${PROJECT_EXTERNAL_BUILD_ROOT}/include/nlohmann)
endif()
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
ExternalProject_Add(json_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/json-${JSON_VERSION}.tar.gz
URL_HASH SHA256=${JSON_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DJSON_BuildTests=OFF
-DJSON_Install=ON
-DJSON_MultipleHeaders=OFF
)
list(APPEND PROJECT_DEPENDENCIES json_project)
endif()
endif()

View File

@@ -0,0 +1,51 @@
if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
if(PROJECT_BUILD)
add_definitions(
-DPROJECT_ENABLE_LIBBITCOIN_SYSTEM
-DBC_STATIC
-DECMULT_GEN_PREC_BITS=4
-DECMULT_WINDOW_SIZE=15
-DWITH_ICU
)
set(LIBBITCOIN_SYSTEM_ROOT ${PROJECT_BUILD_DIR}/external/src/libbitcoin_system_project)
include_directories(SYSTEM BEFORE ${LIBBITCOIN_SYSTEM_ROOT}/include)
set(PROJECT_ADDITIONAL_SOURCES
${PROJECT_ADDITIONAL_SOURCES}
${LIBBITCOIN_SYSTEM_ROOT}/src/config/*.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/error.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/formats/*.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/math/*.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/math/external/*.c
${LIBBITCOIN_SYSTEM_ROOT}/src/message/network_address.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/unicode/*.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/utility/istream_reader.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/utility/ostream_writer.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/utility/string.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/dictionary.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/electrum.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/electrum_dictionary.cpp
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/mnemonic.cpp
)
else()
ExternalProject_Add(libbitcoin_system_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/libbitcoin-system-${LIBBITCOIN_SYSTEM_VERSION}.tar.gz
URL_HASH SHA256=0d10d79472e914620223f1ddb9396b0fa92ae5eb0b31acc14b9aa634a01d78b6
CONFIGURE_COMMAND echo "No configure"
BUILD_COMMAND echo "No build"
INSTALL_COMMAND echo "No install"
)
list(APPEND PROJECT_DEPENDENCIES libbitcoin_system_project)
if(NOT PROJECT_IS_MINGW_UNIX)
add_dependencies(libbitcoin_system_project
boost_project
secp256k1_project
)
endif()
endif()
endif()

View File

@@ -0,0 +1,87 @@
if(PROJECT_ENABLE_LIBDSM)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_LIBDSM)
find_library(libdsm_LIBRARIES NAMES libdsm.a)
link_libraries(${libdsm_LIBRARIES})
elseif(NOT PROJECT_IS_MINGW)
set(_meson_c_args "-I${PROJECT_EXTERNAL_BUILD_ROOT}/deps/include")
set(_meson_c_link_args "-L${PROJECT_EXTERNAL_BUILD_ROOT}/deps/lib -L${PROJECT_EXTERNAL_BUILD_ROOT}/deps/lib64")
set(_meson_host_arg "")
set(_meson_host_file "${PROJECT_EXTERNAL_BUILD_ROOT}/libdsm_host_machine.ini")
if(PROJECT_IS_DARWIN)
set(_mac_arch_raw "${CMAKE_OSX_ARCHITECTURES}")
string(TOLOWER "${_mac_arch_raw}" _mac_arch)
if(_mac_arch MATCHES ";")
set(_meson_c_args "${_meson_c_args}|-arch|arm64|-arch|x86_64")
set(_meson_c_link_args "${_meson_c_link_args}|-arch|arm64|-arch|x86_64")
else()
if(_mac_arch STREQUAL "arm64")
set(_meson_cpu_family "aarch64")
set(_meson_cpu "arm64")
set(_meson_c_args "${_meson_c_args}|-arch|arm64")
set(_meson_c_link_args "${_meson_c_link_args}|-arch|arm64")
elseif(_mac_arch STREQUAL "x86_64")
set(_meson_cpu_family "x86_64")
set(_meson_cpu "x86_64")
set(_meson_c_args "${_meson_c_args}|-arch|x86_64")
set(_meson_c_link_args "${_meson_c_link_args}|-arch|x86_64")
endif()
if(DEFINED _meson_cpu_family AND DEFINED _meson_cpu)
file(WRITE "${_meson_host_file}"
"[binaries]
c = 'clang'
cpp = 'clang++'
[host_machine]
system = 'darwin'
cpu_family = '${_meson_cpu_family}'
cpu = '${_meson_cpu}'
endian = 'little'
"
)
set(_meson_host_arg "--native-file=${_meson_host_file}")
endif()
endif()
endif()
ExternalProject_Add(libdsm_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/libdsm-${LIBDSM_VERSION}.tar.gz
URL_HASH SHA256=${LIBDSM_HASH}
BUILD_IN_SOURCE 1
LIST_SEPARATOR |
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/libdsm_patch.sh
${PROJECT_3RD_PARTY_DIR}
${CMAKE_BINARY_DIR}/external/src/libdsm_project
CONFIGURE_COMMAND meson
setup
-Dc_args="${_meson_c_args}"
-Dcpp_args="${_meson_c_args}"
-Dc_link_args="${_meson_c_link_args}"
-Dcpp_link_args="${_meson_c_link_args}"
${_meson_host_arg}
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
-Dbinaries=false
-Ddefault_library=static
_build
BUILD_COMMAND meson
compile -C _build
INSTALL_COMMAND meson
install -C _build
)
list(APPEND PROJECT_DEPENDENCIES libdsm_project)
add_dependencies(libdsm_project
libiconv_project
libtasn1_project
openssl_project
)
endif()
endif()

View File

@@ -0,0 +1,49 @@
if(PROJECT_ENABLE_LIBEVENT)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_LIBEVENT)
if(PROJECT_IS_MINGW AND NOT PROJECT_IS_MINGW_UNIX)
pkg_check_modules(LIBEVENT REQUIRED libevent>=${LIBEVENT_VERSION})
else()
set(LIBEVENT_STATIC_LINK ${PROJECT_STATIC_LINK})
find_package(Libevent ${LIBEVENT_VERSION} REQUIRED)
endif()
include_directories(BEFORE SYSTEM ${LIBEVENT_INCLUDE_DIRS})
if (PROJECT_IS_MINGW_UNIX)
unset(LIBEVENT_LIBRARIES)
set(LIBEVENT_LIBRARIES
/mingw64/lib/libevent.dll.a
/mingw64/lib/libevent_core.dll.a
/mingw64/lib/libevent_extra.dll.a
)
endif()
link_libraries(${LIBEVENT_LIBRARIES})
elseif(NOT PROJECT_IS_MINGW)
if(PROJECT_BUILD_SHARED_LIBS)
set(LIBEVENT_LIBRARY_TYPE BOTH)
else()
set(LIBEVENT_LIBRARY_TYPE STATIC)
endif()
ExternalProject_Add(libevent_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/libevent-${LIBEVENT_VERSION}-stable.tar.gz
URL_HASH SHA256=${LIBEVENT_HASH}
LIST_SEPARATOR |
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/libevent_patch.sh
${PROJECT_3RD_PARTY_DIR}
${CMAKE_BINARY_DIR}/external/src/libevent_project
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DEVENT__DISABLE_OPENSSL=ON
-DEVENT__DISABLE_SAMPLES=ON
-DEVENT__DISABLE_TESTS=ON
-DEVENT__LIBRARY_TYPE=${LIBEVENT_LIBRARY_TYPE}
)
list(APPEND PROJECT_DEPENDENCIES libevent_project)
endif()
endif()

View File

@@ -0,0 +1,25 @@
if(PROJECT_ENABLE_LIBICONV)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_LIBICONV)
find_library(libiconv_LIBRARIES NAMES libiconv.a)
link_libraries(${libiconv_LIBRARIES})
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(libiconv_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/libiconv-${LIBICONV_VERSION}.tar.gz
URL_HASH SHA256=${LIBICONV_HASH}
BUILD_IN_SOURCE 1
LIST_SEPARATOR |
CONFIGURE_COMMAND ./configure
--enable-shared=no
--enable-static=yes
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
BUILD_COMMAND make -j1
INSTALL_COMMAND make install
)
list(APPEND PROJECT_DEPENDENCIES libiconv_project)
endif()
endif()

View File

@@ -0,0 +1,27 @@
if(PROJECT_ENABLE_LIBJPEG_TURBO)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_LIBJPEG_TURBO)
find_package(JPEG ${LIBJPEG_TURBO_VERSION} REQUIRED)
include_directories(${JPEG_INCLUDE_DIRS})
link_libraries(JPEG::JPEG)
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(libjpeg_turbo_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/libjpeg_turbo-${LIBJPEG_TURBO_VERSION}.tar.gz
URL_HASH SHA256=${LIBJPEG_TURBO_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DENABLE_SHARED=${PROJECT_BUILD_SHARED_LIBS}
-DENABLE_STATIC=ON
)
list(APPEND PROJECT_DEPENDENCIES libjpeg_turbo_project)
endif()
endif()

View File

@@ -0,0 +1,30 @@
if(PROJECT_ENABLE_LIBPNG)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_PNG)
find_package(PNG ${LIBPNG_VERSION} REQUIRED )
include_directories(${PNG_INCLUDE_DIRS})
link_libraries(PNG::PNG)
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(libpng_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/libpng-v${LIBPNG_VERSION}.tar.gz
URL_HASH SHA256=${LIBPNG_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DENABLE_SHARED=${PROJECT_BUILD_SHARED_LIBS}
-DPNG_SHARED=ON
-DPNG_STATIC=ON
-DPNG_TESTS=OFF
-DPNG_TOOLS=OFF
)
list(APPEND PROJECT_DEPENDENCIES libpng_project)
endif()
endif()

View File

@@ -0,0 +1,48 @@
if(PROJECT_ENABLE_LIBSODIUM)
if(PROJECT_BUILD)
pkg_check_modules(SODIUM libsodium>=${LIBSODIUM_VERSION} REQUIRED)
add_definitions(-DPROJECT_ENABLE_LIBSODIUM)
include_directories(BEFORE SYSTEM ${SODIUM_INCLUDE_DIRS})
if(PROJECT_IS_MINGW_UNIX)
if(PROJECT_STATIC_LINK)
link_libraries(/mingw64/lib/libsodium.a)
else()
link_libraries(/mingw64/lib/libsodium.dll.a)
endif()
else()
link_libraries(${SODIUM_LIBRARIES})
endif()
elseif(NOT PROJECT_IS_MINGW)
if(PROJECT_IS_MINGW)
set(LIBSODIUM_TYPE mingw64)
else()
set(LIBSODIUM_TYPE linux)
endif()
if(PROJECT_BUILD_SHARED_LIBS)
set(LIBSODIUM_ENABLE_SHARED yes)
else()
set(LIBSODIUM_ENABLE_SHARED no)
endif()
ExternalProject_Add(libsodium_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/libsodium-${LIBSODIUM_VERSION}.tar.gz
URL_HASH SHA256=${LIBSODIUM_HASH}
BUILD_IN_SOURCE 1
LIST_SEPARATOR |
CONFIGURE_COMMAND ${PROJECT_3RD_PARTY_DIR}/libsodium_configure.sh
${LIBSODIUM_TYPE}
${PROJECT_MARCH}
${PROJECT_EXTERNAL_BUILD_ROOT}
${LIBSODIUM_ENABLE_SHARED}
BUILD_COMMAND make -j1
INSTALL_COMMAND make install
)
list(APPEND PROJECT_DEPENDENCIES libsodium_project)
endif()
endif()

View File

@@ -0,0 +1,30 @@
if(PROJECT_ENABLE_LIBTASN)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_LIBTASN)
find_library(libtasn1_LIBRARIES NAMES libtasn1.a)
link_libraries(${libtasn1_LIBRARIES})
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(libtasn1_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/libtasn1-${LIBTASN_VERSION}.tar.gz
URL_HASH SHA256=${LIBTASN_HASH}
BUILD_IN_SOURCE 1
LIST_SEPARATOR |
CONFIGURE_COMMAND ./configure
--disable-doc
--enable-shared=no
--enable-static=yes
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
BUILD_COMMAND make -j1
INSTALL_COMMAND make install
)
list(APPEND PROJECT_DEPENDENCIES libtasn1_project)
if (PROJECT_ENABLE_OPENSSL)
add_dependencies(libtasn1_project openssl_project)
endif()
endif()
endif()

View File

@@ -0,0 +1,48 @@
if(PROJECT_ENABLE_NANA)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_NANA)
find_library(NANA_LIBRARIES NAMES nana REQUIRED)
if (NOT PROJECT_IS_MINGW)
find_package(X11 REQUIRED)
endif()
include_directories(SYSTEM ${X11_INCLUDE_DIR})
link_libraries(
${NANA_LIBRARIES}
${X11_LIBRARIES}
)
if (NOT PROJECT_IS_MINGW)
link_libraries(
X11::Xft
X11::Xcursor
)
endif()
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(nana_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/nana-v${NANA_VERSION}.tar.gz
URL_HASH SHA256=${NANA_HASH}
LIST_SEPARATOR |
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/nana_patch.sh
${PROJECT_3RD_PARTY_DIR}
${CMAKE_BINARY_DIR}/external/src/nana_project
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${PROJECT_EXTERNAL_BUILD_ROOT}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DNANA_CMAKE_ENABLE_AUDIO=OFF
-DNANA_CMAKE_ENABLE_JPEG=ON
-DNANA_CMAKE_ENABLE_PNG=ON
-DNANA_CMAKE_INSTALL=ON
)
list(APPEND PROJECT_DEPENDENCIES nana_project)
add_dependencies(nana_project libjpeg_turbo_project libpng_project)
endif()
endif()

View File

@@ -0,0 +1,27 @@
if(PROJECT_ENABLE_NUSPELL)
if(PROJECT_BUILD)
find_package(Nuspell ${NUSPELL_VERSION} REQUIRED)
add_definitions(-DPROJECT_ENABLE_NUSPELL)
include_directories(BEFORE SYSTEM ${NUSPELL_INCLUDE_DIRS})
link_libraries(Nuspell::nuspell)
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(nuspell_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/nuspell-v${NUSPELL_VERSION}.tar.gz
URL_HASH SHA256=${NUSPELL_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_DOCS=OFF
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DBUILD_TESTING=OFF
-DBUILD_TOOLS=OFF
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
)
list(APPEND PROJECT_DEPENDENCIES nuspell_project)
endif()
endif()

24
cmake/libraries/ogg.cmake Normal file
View File

@@ -0,0 +1,24 @@
if(PROJECT_ENABLE_OGG)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_OGG)
find_package(Ogg ${OGG_VERSION} REQUIRED)
include_directories(BEFORE SYSTEM ${OGG_INCLUDE_DIRS})
link_libraries(Ogg::ogg)
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(ogg_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/ogg-v${OGG_VERSION}.tar.gz
URL_HASH SHA256=${OGG_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
)
list(APPEND PROJECT_DEPENDENCIES ogg_project)
endif()
endif()

View File

@@ -0,0 +1,24 @@
if(PROJECT_ENABLE_OPENAL)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_OPENAL)
find_package(OpenAL ${OPENAL_VERSION} REQUIRED)
include_directories(BEFORE SYSTEM ${OPENAL_INCLUDE_DIR})
link_libraries(${OPENAL_LIBRARY})
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(openal_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/openal-${OPENAL_VERSION}.tar.gz
URL_HASH SHA256=${OPENAL_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
)
list(APPEND PROJECT_DEPENDENCIES openal_project)
endif()
endif()

View File

@@ -0,0 +1,59 @@
set(OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT_DIR})
if(PROJECT_ENABLE_OPENSSL)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_OPENSSL)
find_package(OpenSSL ${OPENSSL_VERSION} REQUIRED)
include_directories(BEFORE SYSTEM ${OPENSSL_INCLUDE_DIR})
link_libraries(
OpenSSL::Crypto
OpenSSL::SSL
)
elseif(NOT PROJECT_IS_MINGW)
if(PROJECT_IS_MINGW)
set(OPENSSL_COMPILE_TYPE mingw64)
elseif(PROJECT_IS_DARWIN)
if(PROJECT_IS_ARM64)
set(OPENSSL_COMPILE_TYPE darwin64-arm64)
else()
set(OPENSSL_COMPILE_TYPE darwin64-x86_64)
endif()
elseif(PROJECT_IS_ARM64)
set(OPENSSL_COMPILE_TYPE linux-aarch64)
else()
set(OPENSSL_COMPILE_TYPE linux-x86_64)
endif()
if(PROJECT_IS_MINGW_UNIX)
set(OPENSSL_CROSS_PREFIX "--cross-compile-prefix=x86_64-w64-mingw32-")
endif()
if(PROJECT_BUILD_SHARED_LIBS)
set(OPENSSL_NO_SHARED shared)
else()
set(OPENSSL_NO_SHARED no-shared)
endif()
ExternalProject_Add(openssl_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/openssl-${OPENSSL_VERSION}.tar.gz
URL_HASH SHA256=${OPENSSL_HASH}
BUILD_IN_SOURCE 1
LIST_SEPARATOR |
CONFIGURE_COMMAND ./Configure
${OPENSSL_COMPILE_TYPE}
${OPENSSL_CROSS_PREFIX}
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
no-apps
no-docs
${OPENSSL_NO_SHARED}
BUILD_COMMAND make -j1
INSTALL_COMMAND make install
)
list(APPEND PROJECT_DEPENDENCIES openssl_project)
endif()
endif()

View File

@@ -0,0 +1,28 @@
if(PROJECT_ENABLE_PUGIXML)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_PUGIXML)
find_package(pugixml ${PUGIXML_VERSION} REQUIRED)
include_directories(BEFORE SYSTEM ${PUGIXML_INCLUDE_DIR})
if(PROJECT_STATIC_LINK)
link_libraries(pugixml::static)
else()
link_libraries(pugixml::pugixml)
endif()
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(pugixml_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/pugixml-${PUGIXML_VERSION}.tar.gz
URL_HASH SHA256=${PUGIXML_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
)
list(APPEND PROJECT_DEPENDENCIES pugixml_project)
endif()
endif()

View File

@@ -0,0 +1,38 @@
if(PROJECT_ENABLE_ROCKSDB)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_ROCKSDB)
find_library(ROCKSDB_LIBRARY NAMES librocksdb.a REQUIRED)
link_libraries(${ROCKSDB_LIBRARY})
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
ExternalProject_Add(rocksdb_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/rocksdb-${ROCKSDB_VERSION}.tar.gz
URL_HASH SHA256=${ROCKSDB_HASH}
LIST_SEPARATOR |
BUILD_COMMAND
${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=OFF
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DFAIL_ON_WARNINGS=OFF
-DPORTABLE=1
-DROCKSDB_BUILD_SHARED=OFF
-DROCKSDB_INSTALL_ON_WINDOWS=ON
-DWITH_BENCHMARK=OFF
-DWITH_BENCHMARK_TOOLS=OFF
-DWITH_BZ2=OFF
-DWITH_CORE_TOOLS=OFF
-DWITH_EXAMPLES=OFF
-DWITH_GFLAGS=OFF
-DWITH_IOSTATS_CONTEXT=OFF
-DWITH_PERF_CONTEXT=OFF
-DWITH_TESTS=OFF
-DWITH_TOOLS=OFF
-DWITH_TRACE_TOOLS=OFF
-DWITH_ZLIB=ON
)
list(APPEND PROJECT_DEPENDENCIES rocksdb_project)
endif()
endif()

View File

@@ -0,0 +1,3 @@
if(PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS AND PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_SAGO_PLATFORM_FOLDERS)
endif()

33
cmake/libraries/sdl.cmake Normal file
View File

@@ -0,0 +1,33 @@
if(PROJECT_ENABLE_SDL)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_SDL)
set(SDL2_NO_MWINDOWS ON)
find_package(SDL2 ${SDL_VERSION} REQUIRED)
include_directories(SYSTEM ${SDL2_INCLUDE_DIRS})
link_libraries(SDL2::SDL2)
elseif(NOT PROJECT_IS_MINGW)
if(PROJECT_BUILD_SHARED_LIBS)
set(SDL_CONFIGURE_OPTS --enable-shared=yes --enable-static=yes)
else()
set(SDL_CONFIGURE_OPTS --enable-shared=no --enable-static=yes)
endif()
ExternalProject_Add(sdl_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/sdl-${SDL_VERSION}.tar.gz
URL_HASH SHA256=${SDL_HASH}
BUILD_IN_SOURCE 1
LIST_SEPARATOR |
CONFIGURE_COMMAND ./configure
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
${SDL_CONFIGURE_OPTS}
BUILD_COMMAND make -j1
INSTALL_COMMAND make install
)
list(APPEND PROJECT_DEPENDENCIES sdl_project)
endif()
endif()

View File

@@ -0,0 +1,35 @@
if(PROJECT_ENABLE_SECP256K1)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_SECP256K1)
pkg_check_modules(SECP256K1 libsecp256k1=${SECP256K1_VERSION} REQUIRED)
include_directories(BEFORE SYSTEM ${SECP256K1_INCLUDE_DIRS})
link_libraries(${SECP256K1_LINK_LIBRARIES})
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
if(PROJECT_BUILD_SHARED_LIBS)
set(SECP256K1_ENABLE_SHARED yes)
else()
set(SECP256K1_ENABLE_SHARED no)
endif()
ExternalProject_Add(secp256k1_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/secp256k1-${SECP256K1_VERSION}.tar.gz
URL_HASH SHA256=${SECP256K1_HASH}
BUILD_IN_SOURCE 1
LIST_SEPARATOR |
CONFIGURE_COMMAND ./autogen.sh && ./configure
--enable-shared=${SECP256K1_ENABLE_SHARED}
--enable-static=yes
--enable-module-ecdh
--enable-module-recovery
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
BUILD_COMMAND make -j1
INSTALL_COMMAND make install
)
list(APPEND PROJECT_DEPENDENCIES secp256k1_project)
endif()
endif()

View File

@@ -0,0 +1,59 @@
if(PROJECT_ENABLE_SFML)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_SFML)
find_package(OpenGL REQUIRED)
find_package(X11 REQUIRED)
find_package(SFML ${SFML_VERSION}
COMPONENTS
audio
graphics
network
system
window
REQUIRED
)
if(NOT PROJECT_BUILD_SHARED_LIBS)
set(SFML_STATIC_LIB_APPEND "-s")
endif()
link_libraries(
${X11_LIBRARIES}
sfml-audio${SFML_STATIC_LIB_APPEND}
sfml-graphics${SFML_STATIC_LIB_APPEND}
sfml-network${SFML_STATIC_LIB_APPEND}
sfml-system${SFML_STATIC_LIB_APPEND}
sfml-window${SFML_STATIC_LIB_APPEND}
)
include_directories(BEFORE SYSTEM
${X11_INCLUDE_DIR}
${SFML_INCLUDE_DIR}
)
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(sfml_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/SFML-${SFML_VERSION}.tar.gz
URL_HASH SHA256=${SFML_HASH}
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/SFML_patch.sh
LIST_SEPARATOR |
BUILD_COMMAND
${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
)
list(APPEND PROJECT_DEPENDENCIES sfml_project)
add_dependencies(sfml_project
flac_project
fontconfig_project
freetype2_project
openal_project
)
endif()
endif()

View File

@@ -0,0 +1,26 @@
if(PROJECT_ENABLE_SPDLOG)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_SPDLOG)
find_package(spdlog ${SPDLOG_VERSION} REQUIRED)
include_directories(BEFORE SYSTEM ${SPDLOG_INCLUDE_DIRS})
link_libraries(spdlog::spdlog)
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
ExternalProject_Add(spdlog_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/spdlog-${SPDLOG_VERSION}.tar.gz
URL_HASH SHA256=${SPDLOG_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DSPDLOG_BUILD_EXAMPLE=OFF
-DSPDLOG_FMT_EXTERNAL=OFF
-DSPDLOG_FMT_EXTERNAL_HO=OFF
)
list(APPEND PROJECT_DEPENDENCIES spdlog_project)
endif()
endif()

View File

@@ -0,0 +1,29 @@
if(PROJECT_ENABLE_SQLITE)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_SQLITE)
if (PROJECT_IS_MINGW AND NOT PROJECT_IS_MINGW_UNIX)
pkg_check_modules(SQLITE3 REQUIRED sqlite3)
include_directories(SYSTEM BEFORE ${SQLITE3_INCLUDE_DIRS})
link_libraries(${SQLITE3_LIBRARIES})
else()
set(SQLITE_SYSTEM_ROOT ${PROJECT_BUILD_DIR}/external/src/sqlite_project)
include_directories(SYSTEM BEFORE ${SQLITE_SYSTEM_ROOT})
list(APPEND PROJECT_ADDITIONAL_SOURCES
${SQLITE_SYSTEM_ROOT}/sqlite3.c
)
endif()
elseif(NOT PROJECT_IS_MINGW OR PROJECT_IS_MINGW_UNIX)
ExternalProject_Add(sqlite_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/sqlite-amalgamation-${SQLITE_VERSION}.zip
URL_HASH SHA256=${SQLITE_HASH}
CONFIGURE_COMMAND echo "No configure"
BUILD_COMMAND echo "No build"
INSTALL_COMMAND echo "No install"
)
list(APPEND PROJECT_DEPENDENCIES sqlite_project)
endif()
endif()

View File

@@ -0,0 +1,27 @@
if(PROJECT_ENABLE_STDUUID)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_STDUUID)
find_package(stduuid REQUIRED)
include_directories(BEFORE SYSTEM ${stduuid_INCLUDE_DIRS})
link_libraries(${stduuid_LIBRARIES})
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
ExternalProject_Add(stduuid_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/stduuid-${STDUUID_VERSION}.tar.gz
URL_HASH SHA256=${STDUUID_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DUUID_BUILD_TESTS=OFF
-DUUID_ENABLE_INSTALL=ON
-DUUID_USING_CXX20_SPAN=ON
)
list(APPEND PROJECT_DEPENDENCIES stduuid_project)
endif()
endif()

View File

@@ -0,0 +1,18 @@
if (PROJECT_ENABLE_TESTING)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_TESTING)
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(gtest_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/googletest-${GTEST_VERSION}.tar.gz
URL_HASH SHA256=${GTEST_HASH}
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
)
list(APPEND PROJECT_DEPENDENCIES gtest_project)
endif()
endif()

24
cmake/libraries/tpl.cmake Normal file
View File

@@ -0,0 +1,24 @@
if(PROJECT_ENABLE_TPL)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_TPL)
find_package(tiny-process-library REQUIRED)
link_libraries(tiny-process-library::tiny-process-library)
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
ExternalProject_Add(tpl_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/tiny-process-library.tar.gz
URL_HASH SHA256=82e46657e697aff5bf980387c86ef3aa05bb184622abbd75663a4df549c68f73
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DBUILD_TESTING=OFF
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
)
list(APPEND PROJECT_DEPENDENCIES tpl_project)
endif()
endif()

16
cmake/libraries/vlc.cmake Normal file
View File

@@ -0,0 +1,16 @@
if(PROJECT_ENABLE_VLC AND PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_VLC)
if (PROJECT_IS_MINGW)
set(libvlc_INCLUDE_DIRS ${PROJECT_3RD_PARTY_DIR}/vlc/sdk/include)
set(libvlc_LIBRARIES
${PROJECT_3RD_PARTY_DIR}/vlc/sdk/lib/libvlc.lib
${PROJECT_3RD_PARTY_DIR}/vlc/sdk/lib/libvlccore.lib
)
else()
pkg_check_modules(libvlc REQUIRED libvlc>=${VLC_VERSION})
endif()
include_directories(BEFORE SYSTEM ${libvlc_INCLUDE_DIRS})
link_libraries(${libvlc_LIBRARIES})
endif()

View File

@@ -0,0 +1,34 @@
if(PROJECT_ENABLE_VORBIS)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_VORBIS)
if(PROJECT_IS_MINGW AND NOT PROJECT_IS_MINGW_UNIX)
pkg_check_modules(VORBIS REQUIRED vorbis>=${VORBIS_VERSION})
link_libraries(${VORBIS_LINK_LIBRARIES})
else()
find_package(Vorbis ${VORBIS_VERSION} REQUIRED)
link_libraries(Vorbis::vorbis)
endif()
include_directories(BEFORE SYSTEM ${VORBIS_INCLUDE_DIRS})
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(vorbis_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/vorbis-v${VORBIS_VERSION}.tar.gz
URL_HASH SHA256=${VORBIS_HASH}
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/vorbis_patch.sh
${PROJECT_3RD_PARTY_DIR}
${CMAKE_BINARY_DIR}/external/src/vorbis_project
LIST_SEPARATOR |
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
)
list(APPEND PROJECT_DEPENDENCIES vorbis_project)
add_dependencies(vorbis_project ogg_project)
endif()
endif()

View File

@@ -0,0 +1,15 @@
if(PROJECT_ENABLE_WINFSP AND PROJECT_IS_MINGW)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_WINFSP)
include_directories(BEFORE SYSTEM ${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/inc)
link_directories(BEFORE ${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/lib)
if(PROJECT_IS_ARM64)
link_libraries(winfsp-a64)
else()
link_libraries(winfsp-x64)
endif()
endif()
endif()

View File

@@ -0,0 +1,51 @@
if(PROJECT_ENABLE_WXWIDGETS)
if(PROJECT_BUILD)
add_definitions(-DPROJECT_ENABLE_WXWIDGETS)
find_package(OpenGL REQUIRED)
set(wxWidgets_USE_WINDOWS OFF)
find_package(wxWidgets ${WXWIDGETS_VERSION} REQUIRED
COMPONENTS
net
core
base
gl
adv
xml
aui
html
media
propgrid
qa
ribbon
richtext
stc
webview
xrc
)
if(wxWidgets_USE_FILE)
include(${wxWidgets_USE_FILE})
endif()
elseif(NOT PROJECT_IS_MINGW)
ExternalProject_Add(wxwidgets_project
PREFIX external
URL ${PROJECT_3RD_PARTY_DIR}/wxWidgets-${WXWIDGETS_VERSION}.tar.bz2
URL_HASH SHA256=${WXWIDGETS_HASH}
LIST_SEPARATOR |
BUILD_COMMAND
${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
-DBUILD_STATIC_LIBS=ON
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
-DwxBUILD_MONOLITHIC=OFF
-DwxBUILD_SHARED=${PROJECT_BUILD_SHARED_LIBS}
)
list(APPEND PROJECT_DEPENDENCIES wxwidgets_project)
add_dependencies(wxwidgets_project curl_project)
endif()
endif()

40
cmake/options.cmake Normal file
View File

@@ -0,0 +1,40 @@
option(PROJECT_ENABLE_BACKWARD_CPP "Enable backward-cpp" OFF)
option(PROJECT_ENABLE_BOOST "Enable boost libraries" OFF)
option(PROJECT_ENABLE_CLI11 "Enable CLI11 library" OFF)
option(PROJECT_ENABLE_CPP_HTTPLIB "Enable cpp-httplib" OFF)
option(PROJECT_ENABLE_CURL "Enable curl library" OFF)
option(PROJECT_ENABLE_CXXOPTS "Enable cxxopts library" OFF)
option(PROJECT_ENABLE_DTL "Enable DTL" OFF)
option(PROJECT_ENABLE_FLAC "Enable FLAC library" OFF)
option(PROJECT_ENABLE_FMT "Enable fmt library" OFF)
option(PROJECT_ENABLE_FONTCONFIG "Enable fontconfig library" OFF)
option(PROJECT_ENABLE_FREETYPE2 "Enable freetype2 library" OFF)
option(PROJECT_ENABLE_FUSE "Enable FUSE" OFF)
option(PROJECT_ENABLE_FZF "Enable fzf" OFF)
option(PROJECT_ENABLE_GTKMM "Enable gtkmm" OFF)
option(PROJECT_ENABLE_JSON "Enable JSON for Modern C++ library" OFF)
option(PROJECT_ENABLE_LIBBITCOIN_SYSTEM "Enable libbitcoin-system library" OFF)
option(PROJECT_ENABLE_LIBDSM "Enable dsm library" OFF)
option(PROJECT_ENABLE_LIBEVENT "Enable libevent library" OFF)
option(PROJECT_ENABLE_LIBJPEG_TURBO "Enable libjpeg-turbo library" OFF)
option(PROJECT_ENABLE_LIBPNG "Enable libpng library" OFF)
option(PROJECT_ENABLE_LIBSODIUM "Enable libsodium library" OFF)
option(PROJECT_ENABLE_NANA "Enable nana library" OFF)
option(PROJECT_ENABLE_NUSPELL "Enable nuspell" OFF)
option(PROJECT_ENABLE_OGG "Enable OGG library" OFF)
option(PROJECT_ENABLE_OPENAL "Enable OpenAL" OFF)
option(PROJECT_ENABLE_OPENSSL "Enable OpenSSL library" OFF)
option(PROJECT_ENABLE_PUGIXML "Enable PugiXML library" OFF)
option(PROJECT_ENABLE_ROCKSDB "Enable RocksDB library" OFF)
option(PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS "Enable Sago platform folders" OFF)
option(PROJECT_ENABLE_SECP256K1 "Enable secp256k1 library" OFF)
option(PROJECT_ENABLE_SFML "Enable SFML" OFF)
option(PROJECT_ENABLE_SPDLOG "Enable spdlog library" OFF)
option(PROJECT_ENABLE_SQLITE "Enable SQLite" OFF)
option(PROJECT_ENABLE_STDUUID "Enable stduuid library" OFF)
option(PROJECT_ENABLE_TESTING "Enable building unit tests" OFF)
option(PROJECT_ENABLE_TPL "Enable tiny process library" OFF)
option(PROJECT_ENABLE_VLC "Enable VLC" OFF)
option(PROJECT_ENABLE_VORBIS "Enable Vorbis library" OFF)
option(PROJECT_ENABLE_WINFSP "Enable WinFSP" OFF)
option(PROJECT_ENABLE_WXWIDGETS "Enable wxWidgets library" OFF)

23
cmake/os.cmake Normal file
View File

@@ -0,0 +1,23 @@
if(MSVC)
message(FATAL_ERROR "MSVC will not be supported")
endif()
if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
message(FATAL_ERROR "FreeBSD is not currently supported")
endif()
if(PROJECT_REQUIRE_ALPINE AND NOT PROJECT_IS_ALPINE AND PROJECT_IS_MINGW AND PROJECT_IS_MINGW_UNIX)
message(FATAL_ERROR "Project requires Alpine Linux to build")
endif()
if (PROJECT_IS_DARWIN)
if (PROJECT_IS_ARM64)
set(CMAKE_OSX_ARCHITECTURES "arm64")
else()
set(CMAKE_OSX_ARCHITECTURES "x86_64")
endif()
endif()
if (PROJECT_IS_DARWIN AND NOT PROJECT_MACOS_BUNDLE_ID)
message(FATAL_ERROR "'PROJECT_MACOS_BUNDLE_ID' is not set in 'config.sh'")
endif()

51
cmake/settings.cmake Normal file
View File

@@ -0,0 +1,51 @@
set(CMAKE_COLOR_MAKEFILE OFF)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(PROJECT_STATIC_LINK)
set(CMAKE_POSITION_INDEPENDENT_CODE OFF)
else()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
set(CMAKE_BUILD_TYPE ${PROJECT_CMAKE_BUILD_TYPE})
file(MAKE_DIRECTORY ${PROJECT_EXTERNAL_BUILD_ROOT}/lib)
file(CREATE_LINK ${PROJECT_EXTERNAL_BUILD_ROOT}/lib ${PROJECT_EXTERNAL_BUILD_ROOT}/lib64 SYMBOLIC)
list(PREPEND CMAKE_PREFIX_PATH
${PROJECT_EXTERNAL_BUILD_ROOT}
${PROJECT_EXTERNAL_BUILD_ROOT}/share
)
if(PROJECT_IS_MINGW)
list(PREPEND CMAKE_PREFIX_PATH
/mingw64
)
include_directories(BEFORE
/mingw64/include
)
link_directories(BEFORE
/mingw64/lib
/mingw64/lib64
)
endif()
include_directories(BEFORE SYSTEM
${PROJECT_SUPPORT_DIR}/include
${PROJECT_EXTERNAL_BUILD_ROOT}/include
)
link_directories(BEFORE
${PROJECT_EXTERNAL_BUILD_ROOT}/lib
${PROJECT_EXTERNAL_BUILD_ROOT}/lib64
)