2.0.0-rc (#9)
Some checks failed
BlockStorage/repertory_osx/pipeline/head This commit looks good
BlockStorage/repertory_windows/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
BlockStorage/repertory_linux_builds/pipeline/head This commit looks good
BlockStorage/repertory_osx_builds/pipeline/head There was a failure building this commit
Some checks failed
BlockStorage/repertory_osx/pipeline/head This commit looks good
BlockStorage/repertory_windows/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head There was a failure building this commit
BlockStorage/repertory_linux_builds/pipeline/head This commit looks good
BlockStorage/repertory_osx_builds/pipeline/head There was a failure building this commit
### Issues * \#1 \[bug\] Unable to mount S3 due to 'item_not_found' exception * \#2 Require bucket name for S3 mounts * \#3 \[bug\] File size is not being updated in S3 mount * \#4 Upgrade to libfuse-3.x.x * \#5 Switch to renterd for Sia support * \#6 Switch to cpp-httplib to further reduce dependencies * \#7 Remove global_data and calculate used disk space per provider * \#8 Switch to libcurl for S3 mount support ### Changes from v1.x.x * Added read-only encrypt provider * Pass-through mount point that transparently encrypts source data using `XChaCha20-Poly1305` * Added S3 encryption support via `XChaCha20-Poly1305` * Added replay protection to remote mounts * Added support base64 writes in remote FUSE * Created static linked Linux binaries for `amd64` and `aarch64` using `musl-libc` * Removed legacy Sia renter support * Removed Skynet support * Fixed multiple remote mount WinFSP API issues on \*NIX servers * Implemented chunked read and write * Writes for non-cached files are performed in chunks of 8Mib * Removed `repertory-ui` support * Removed `FreeBSD` support * Switched to `libsodium` over `CryptoPP` * Switched to `XChaCha20-Poly1305` for remote mounts * Updated `GoogleTest` to v1.14.0 * Updated `JSON for Modern C++` to v3.11.2 * Updated `OpenSSL` to v1.1.1w * Updated `RocksDB` to v8.5.3 * Updated `WinFSP` to 2023 * Updated `boost` to v1.78.0 * Updated `cURL` to v8.3.0 * Updated `zlib` to v1.3 * Use `upload_manager` for all providers * Adds a delay to uploads to prevent excessive API calls * Supports re-upload after mount restart for incomplete uploads * NOTE: Uploads for all providers are full file (no resume support) * Multipart upload support is planned for S3 Reviewed-on: #9
This commit is contained in:
581
CMakeLists.txt
581
CMakeLists.txt
@ -1,94 +1,34 @@
|
||||
cmake_minimum_required(VERSION 3.22)
|
||||
project(repertory)
|
||||
|
||||
include(CheckIncludeFiles)
|
||||
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0")
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
endif()
|
||||
|
||||
include(CheckIncludeFileCXX)
|
||||
include(CheckIncludeFiles)
|
||||
include(ExternalProject)
|
||||
|
||||
set(AWSCPP_VERSION 1.9.206)
|
||||
set(BOOST_MAJOR_VERSION 1)
|
||||
set(BOOST_MINOR_VERSION 78)
|
||||
set(BOOST_MSVC_TOOLSET msvc-14.2)
|
||||
set(BOOST_MSVC_TOOLSET_DLL 142)
|
||||
set(BOOST_REVISION 0)
|
||||
set(BOOST_VERSION ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_REVISION})
|
||||
set(BOOST_VERSION_DL ${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_REVISION})
|
||||
set(BOOST_VERSION_DLL ${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION})
|
||||
set(CRYPTOPP_VERSION 8_2_0)
|
||||
set(CURL_VERSION 7_81_0)
|
||||
set(GTEST_VERSION 1.11.0)
|
||||
set(LIBHTTPSERVER_VERSION 0.18.2)
|
||||
set(LIBMICROHTTPD_VERSION 0.9.73)
|
||||
set(LIBUUID_VERSION 1.6.2)
|
||||
set(OPENSSL_VERSION 1_1_1m)
|
||||
set(ROCKSDB_VERSION 6.27.3)
|
||||
set(WINFSP_VERSION 1.10)
|
||||
set(ZLIB_VERSION v1.2.11)
|
||||
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
option(REPERTORY_ENABLE_TESTING "Enable testing" ON)
|
||||
|
||||
option(REPERTORY_ENABLE_S3 "Enable S3 mount support" OFF)
|
||||
if (REPERTORY_ENABLE_S3)
|
||||
add_definitions(-DREPERTORY_ENABLE_S3)
|
||||
option(REPERTORY_ENABLE_S3_TESTING "Enable S3 unit tests" OFF)
|
||||
if (REPERTORY_ENABLE_S3_TESTING)
|
||||
add_definitions(-DREPERTORY_ENABLE_S3_TESTING)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
option(REPERTORY_ENABLE_SKYNET "Enable Skynet mount support" ON)
|
||||
if (REPERTORY_ENABLE_SKYNET)
|
||||
add_definitions(-DREPERTORY_ENABLE_SKYNET)
|
||||
option(REPERTORY_ENABLE_SKYNET_PREMIUM_TESTS "Enable Skynet premium portal unit tests" OFF)
|
||||
if (REPERTORY_ENABLE_SKYNET_PREMIUM_TESTS)
|
||||
add_definitions(-DREPERTORY_ENABLE_SKYNET_PREMIUM_TESTS)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
set(REPERTORY_MAJOR 2)
|
||||
set(REPERTORY_MINOR 0)
|
||||
set(REPERTORY_REV 0)
|
||||
set(REPERTORY_RELEASE_NUM 2000000)
|
||||
set(REPERTORY_RELEASE_NUM 0)
|
||||
set(REPERTORY_RELEASE_ITER rc)
|
||||
set(REPERTORY_VERSION ${REPERTORY_MAJOR}.${REPERTORY_MINOR}.${REPERTORY_REV}-${REPERTORY_RELEASE_ITER})
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||
set(IS_CLANG_COMPILER TRUE)
|
||||
endif()
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
|
||||
set(FREEBSD TRUE)
|
||||
else()
|
||||
set(LINUX TRUE)
|
||||
endif()
|
||||
elseif(UNIX AND APPLE)
|
||||
set(MACOS TRUE)
|
||||
set(CMAKE_OSX_ARCHITECTURES x86_64)
|
||||
endif()
|
||||
|
||||
if ("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
|
||||
message(FATAL_ERROR "32-bit compilation is not supported")
|
||||
else()
|
||||
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)")
|
||||
set(REPERTORY_UNIX_ARCH armv8-a)
|
||||
set(IS_ARM64 TRUE)
|
||||
add_definitions("-DIS_ARM64")
|
||||
else()
|
||||
set(REPERTORY_UNIX_ARCH x86-64)
|
||||
endif()
|
||||
|
||||
set(WINFSP_LIBRARY_BASENAME winfsp-x64)
|
||||
set(REPERTORY_LIB_DIR lib64)
|
||||
endif()
|
||||
include(cmake/arch_detection.cmake)
|
||||
include(cmake/os_detection.cmake)
|
||||
include(cmake/options.cmake)
|
||||
include(cmake/settings.cmake)
|
||||
include(cmake/flags.cmake)
|
||||
include(cmake/versions.cmake)
|
||||
|
||||
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cacert.pem")
|
||||
file(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cacert.pem)
|
||||
endif()
|
||||
file(DOWNLOAD https://curl.haxx.se/ca/cacert.pem ${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cacert.pem)
|
||||
|
||||
unset(REPERTORY_GIT_REV CACHE)
|
||||
execute_process(
|
||||
COMMAND git rev-parse --short HEAD
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
@ -97,269 +37,203 @@ execute_process(
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
if (NOT CMAKE_CXX_STANDARD)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
if (NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE Release)
|
||||
endif ()
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(DEBUG_EXTRA d)
|
||||
set(DEBUG_EXTRA2 -d)
|
||||
set(DEBUG_EXTRA3 _d)
|
||||
set(BOOST_DEBUG_EXTRA gd-)
|
||||
set(CMAKE_BUILD_TYPE_LOWER debug)
|
||||
else()
|
||||
set(CMAKE_BUILD_TYPE_LOWER release)
|
||||
endif()
|
||||
string(TOLOWER "${CMAKE_GENERATOR}" CMAKE_GENERATOR_LOWER)
|
||||
|
||||
set(EXTERNAL_BUILD_ROOT ${CMAKE_BINARY_DIR}/external)
|
||||
set(EXTERNAL_BUILD_TYPE ${CMAKE_BUILD_TYPE})
|
||||
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/common.cpp.in ${CMAKE_CURRENT_SOURCE_DIR}/src/common.cpp @ONLY)
|
||||
|
||||
link_directories(
|
||||
${EXTERNAL_BUILD_ROOT}/lib
|
||||
)
|
||||
|
||||
if (UNIX)
|
||||
set(STATIC_LIB_EXT a)
|
||||
|
||||
set(REPERTORY_C_FLAGS_LIST
|
||||
${REPERTORY_C_FLAGS_LIST}
|
||||
-march=${REPERTORY_UNIX_ARCH}
|
||||
-mtune=generic
|
||||
-D_FILE_OFFSET_BITS=64
|
||||
)
|
||||
|
||||
set(REPERTORY_CXX_FLAGS_LIST
|
||||
${REPERTORY_CXX_FLAGS_LIST}
|
||||
-march=${REPERTORY_UNIX_ARCH}
|
||||
-mtune=generic
|
||||
-D_FILE_OFFSET_BITS=64
|
||||
-std=c++${CMAKE_CXX_STANDARD}
|
||||
)
|
||||
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(REPERTORY_C_FLAGS_LIST
|
||||
${REPERTORY_C_FLAGS_LIST}
|
||||
-g
|
||||
-gdwarf-4
|
||||
-DDEBUG
|
||||
-O0
|
||||
-fno-omit-frame-pointer
|
||||
-D_DEBUG
|
||||
-Wall
|
||||
-Wextra
|
||||
-Wpedantic
|
||||
)
|
||||
|
||||
set(REPERTORY_CXX_FLAGS_LIST
|
||||
${REPERTORY_CXX_FLAGS_LIST}
|
||||
-g
|
||||
-gdwarf-4
|
||||
-DDEBUG
|
||||
-O0
|
||||
-fno-omit-frame-pointer
|
||||
-D_DEBUG
|
||||
-Wall
|
||||
-Wextra
|
||||
-Wpedantic
|
||||
)
|
||||
else ()
|
||||
set(REPERTORY_C_FLAGS_LIST
|
||||
${REPERTORY_C_FLAGS_LIST}
|
||||
-O3
|
||||
-DNDEBUG
|
||||
)
|
||||
|
||||
set(REPERTORY_CXX_FLAGS_LIST
|
||||
${REPERTORY_CXX_FLAGS_LIST}
|
||||
-O3
|
||||
-DNDEBUG
|
||||
)
|
||||
|
||||
if (NOT IS_CLANG_COMPILER)
|
||||
set(REPERTORY_C_FLAGS_LIST
|
||||
${REPERTORY_C_FLAGS_LIST}
|
||||
-s
|
||||
)
|
||||
|
||||
set(REPERTORY_CXX_FLAGS_LIST
|
||||
${REPERTORY_CXX_FLAGS_LIST}
|
||||
-s
|
||||
)
|
||||
endif ()
|
||||
check_include_files(sys/xattr.h HAS_SETXATTR)
|
||||
if (HAS_SETXATTR)
|
||||
set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DHAS_SETXATTR)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (LINUX)
|
||||
execute_process(COMMAND /bin/bash ${CMAKE_CURRENT_SOURCE_DIR}/detect_linux_build.sh OUTPUT_VARIABLE LINUX_DISTRO)
|
||||
string(REGEX REPLACE "\n$" "" LINUX_DISTRO "${LINUX_DISTRO}")
|
||||
if (LINUX_DISTRO STREQUAL "debian9")
|
||||
set(IS_DEBIAN9_DISTRO TRUE)
|
||||
add_definitions("-DIS_DEBIAN9_DISTRO")
|
||||
if (MSVC OR MINGW)
|
||||
set(WINFSP_LIBRARY_BASENAME winfsp-x64)
|
||||
|
||||
include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/3rd_party/winfsp-${WINFSP_VERSION}/inc)
|
||||
link_directories(${CMAKE_SOURCE_DIR}/3rd_party/winfsp-${WINFSP_VERSION}/lib)
|
||||
set(REPERTORY_LINK_LIBRARIES
|
||||
${REPERTORY_LINK_LIBRARIES}
|
||||
${WINFSP_LIBRARY_BASENAME}.lib
|
||||
)
|
||||
endif()
|
||||
|
||||
if (LINUX OR MINGW)
|
||||
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0)
|
||||
message(FATAL_ERROR "Require at least gcc-8.0")
|
||||
endif()
|
||||
|
||||
set(ENV{PKG_CONFIG_PATH} "${EXTERNAL_BUILD_ROOT}/lib/pkgconfig:${EXTERNAL_BUILD_ROOT}/${REPERTORY_LIB_DIR}/pkgconfig:$ENV{PKG_CONFIG_PATH}")
|
||||
set(ENV{PKG_CONFIG_PATH}
|
||||
"${EXTERNAL_BUILD_ROOT}/lib/pkgconfig:${EXTERNAL_BUILD_ROOT}/lib64/pkgconfig:$ENV{PKG_CONFIG_PATH}"
|
||||
)
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(LIBFUSE REQUIRED fuse>=2.9.0)
|
||||
|
||||
set(Boost_USE_STATIC_LIBS ON)
|
||||
|
||||
include_directories(/usr/local/include)
|
||||
|
||||
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.5)
|
||||
message(FATAL_ERROR "Require at least gcc-5.5")
|
||||
if (NOT MINGW)
|
||||
include_directories(/usr/local/include)
|
||||
link_directories(
|
||||
/usr/local/lib
|
||||
/usr/local/lib64
|
||||
)
|
||||
endif()
|
||||
|
||||
link_directories(
|
||||
${EXTERNAL_BUILD_ROOT}/${REPERTORY_LIB_DIR}
|
||||
/usr/local/lib
|
||||
/usr/local/${REPERTORY_LIB_DIR}
|
||||
)
|
||||
set(REPERTORY_LINK_LIBRARIES
|
||||
dl
|
||||
pthread
|
||||
)
|
||||
if (REPERTORY_MUSL)
|
||||
find_library(LIBFUSE3 NO_CACHE NAMES libfuse3.a)
|
||||
else()
|
||||
if (NOT MINGW)
|
||||
find_library(LIBDL_LIBRARY NO_CACHE NAMES dl)
|
||||
find_library(LIBFUSE3 NO_CACHE NAMES fuse3)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (REPERTORY_MUSL OR MINGW)
|
||||
find_library(LIBPTHREAD_LIBRARY NO_CACHE NAMES libpthread.a)
|
||||
else()
|
||||
find_library(LIBPTHREAD_LIBRARY NO_CACHE NAMES pthread)
|
||||
endif()
|
||||
|
||||
if (LIBFUSE3 AND NOT MINGW)
|
||||
pkg_check_modules(LIBFUSE3 REQUIRED fuse3>=3.0.0)
|
||||
set(LIBFUSE3_LIBRARIES ${LIBFUSE3})
|
||||
add_definitions(-DFUSE_USE_VERSION=30)
|
||||
endif()
|
||||
|
||||
if(NOT LIBFUSE3_LIBRARIES AND NOT MINGW)
|
||||
pkg_check_modules(LIBFUSE2 REQUIRED fuse>=2.9.0)
|
||||
add_definitions(-DFUSE_USE_VERSION=29)
|
||||
endif()
|
||||
|
||||
if (NOT LIBPTHREAD_LIBRARY)
|
||||
message(FATAL_ERROR "'libpthread' not found")
|
||||
endif()
|
||||
|
||||
if (REPERTORY_MUSL)
|
||||
if (LIBFUSE3_LIBRARIES)
|
||||
set(LIBFUSE3_LIBRARIES libfuse3.a)
|
||||
else()
|
||||
set(LIBFUSE2_LIBRARIES libfuse.a)
|
||||
endif()
|
||||
|
||||
set(REPERTORY_LINK_LIBRARIES
|
||||
${REPERTORY_LINK_LIBRARIES}
|
||||
${LIBPTHREAD_LIBRARY}
|
||||
)
|
||||
else()
|
||||
if (NOT MINGW AND NOT LIBDL_LIBRARY)
|
||||
message(FATAL_ERROR "'libdl' not found")
|
||||
endif()
|
||||
|
||||
set(REPERTORY_LINK_LIBRARIES
|
||||
${REPERTORY_LINK_LIBRARIES}
|
||||
${LIBPTHREAD_LIBRARY}
|
||||
${LIBDL_LIBRARY}
|
||||
)
|
||||
endif()
|
||||
elseif (FREEBSD)
|
||||
message(FATAL_ERROR "FreeBSD is no longer supported")
|
||||
message(FATAL_ERROR "FreeBSD is currently not supported")
|
||||
elseif (MACOS)
|
||||
add_definitions("-DBOOST_ASIO_HAS_STD_STRING_VIEW")
|
||||
set(CMAKE_OSX_ARCHITECTURES x86_64)
|
||||
|
||||
find_library(LIBDL_LIBRARY NO_CACHE NAMES dl)
|
||||
if (NOT LIBDL_LIBRARY)
|
||||
message(FATAL_ERROR "'libdl' not found")
|
||||
endif()
|
||||
|
||||
find_library(LIBPTHREAD_LIBRARY NO_CACHE NAMES pthread)
|
||||
if (NOT LIBPTHREAD_LIBRARY)
|
||||
message(FATAL_ERROR "'libpthread' not found")
|
||||
endif()
|
||||
|
||||
set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -DBOOST_ASIO_HAS_STD_STRING_VIEW)
|
||||
add_definitions(-DFUSE_USE_VERSION=29)
|
||||
|
||||
include_directories(/usr/local/include)
|
||||
find_library(OSXFUSE NAMES OSXFUSE)
|
||||
if (OSXFUSE-NOTFOUND)
|
||||
find_library(OSXFUSE NO_CACHE NAMES OSXFUSE)
|
||||
if (NOT OSXFUSE)
|
||||
message(FATAL_ERROR "FUSE for macOS not found (https://osxfuse.github.io/)")
|
||||
endif ()
|
||||
set(LIBFUSE_LIBRARIES fuse)
|
||||
set(LIBFUSE2_LIBRARIES fuse)
|
||||
set(REPERTORY_LINK_LIBRARIES
|
||||
z
|
||||
pthread
|
||||
dl
|
||||
${REPERTORY_LINK_LIBRARIES}
|
||||
${LIBDL_LIBRARY}
|
||||
${LIBPTHREAD_LIBRARY}
|
||||
"-L/usr/local/lib"
|
||||
"-framework Foundation"
|
||||
"-framework AppKit"
|
||||
"-framework Security"
|
||||
"-framework SystemConfiguration"
|
||||
)
|
||||
elseif (MSVC)
|
||||
set(STATIC_LIB_EXT lib)
|
||||
|
||||
set(REPERTORY_C_FLAGS_LIST
|
||||
${REPERTORY_C_FLAGS_LIST}
|
||||
/D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
|
||||
/DNOMINMAX
|
||||
/bigobj
|
||||
/Zi
|
||||
)
|
||||
|
||||
set(REPERTORY_CXX_FLAGS_LIST
|
||||
${REPERTORY_CXX_FLAGS_LIST}
|
||||
/D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
|
||||
/DNOMINMAX
|
||||
/bigobj
|
||||
/Zi
|
||||
)
|
||||
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(REPERTORY_C_FLAGS_LIST
|
||||
${REPERTORY_C_FLAGS_LIST}
|
||||
/DEBUG
|
||||
)
|
||||
|
||||
set(REPERTORY_CXX_FLAGS_LIST
|
||||
${REPERTORY_CXX_FLAGS_LIST}
|
||||
/DEBUG
|
||||
)
|
||||
|
||||
set(REPERTORY_SHARED_LINKER_FLAGS_LIST
|
||||
${REPERTORY_SHARED_LINKER_FLAGS_LIST}
|
||||
/DEBUG
|
||||
/OPT:REF
|
||||
/OPT:ICF
|
||||
)
|
||||
set(OPENSSL_USE_STATIC_LIBS TRUE)
|
||||
if (NOT OPENSSL_ROOT_DIR)
|
||||
set (OPENSSL_ROOT_DIR "$ENV{USERPROFILE}\\scoop\\apps\\openssl\\current")
|
||||
endif()
|
||||
find_package(OpenSSL 1.1.1 REQUIRED)
|
||||
set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
|
||||
set(REPERTORY_DEFINITIONS ${REPERTORY_DEFINITIONS} -D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING)
|
||||
|
||||
if (NOT CMAKE_GENERATOR_LOWER STREQUAL "nmake makefiles")
|
||||
set(REPERTORY_OUTPUT_DIR ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (MINGW)
|
||||
set(REPERTORY_LINK_LIBRARIES
|
||||
${REPERTORY_LINK_LIBRARIES}
|
||||
mswsock
|
||||
)
|
||||
endif()
|
||||
|
||||
if (MSVC OR MINGW)
|
||||
set(REPERTORY_VER_FILEVERSION ${REPERTORY_MAJOR},${REPERTORY_MINOR},${REPERTORY_REV},${REPERTORY_RELEASE_NUM})
|
||||
set(REPERTORY_VER_FILEVERSION_STR ${REPERTORY_MAJOR}.${REPERTORY_MINOR}.${REPERTORY_REV}.${REPERTORY_RELEASE_NUM})
|
||||
set(REPERTORY_VER_PRODUCTVERSION ${REPERTORY_MAJOR},${REPERTORY_MINOR},${REPERTORY_REV},${REPERTORY_RELEASE_NUM})
|
||||
set(REPERTORY_VER_PRODUCTVERSION_STR ${REPERTORY_MAJOR}.${REPERTORY_MINOR}.${REPERTORY_REV}.${REPERTORY_RELEASE_NUM})
|
||||
set(REPERTORY_VER_PRERELEASE VS_FF_PRERELEASE)
|
||||
set(REPERTORY_VER_COMPANYNAME_STR "https://git.fifthgrid.com/blockstorage")
|
||||
set(REPERTORY_VER_LEGALCOPYRIGHT_STR "Copyright 2018 <MIT License> <https://git.fifthgrid.com/blockstorage/repertory>")
|
||||
set(REPERTORY_VER_FILEDESCRIPTION_STR "Mount utility for Sia, Skynet and S3")
|
||||
set(REPERTORY_VER_LEGALCOPYRIGHT_STR "Copyright 2018-2023 <MIT License> <https://git.fifthgrid.com/blockstorage/repertory>")
|
||||
set(REPERTORY_VER_FILEDESCRIPTION_STR "Mount utility for Sia and S3")
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.rc.in ${CMAKE_CURRENT_SOURCE_DIR}/src/version.rc @ONLY)
|
||||
set(WINDOWS_VERSION_RC ${CMAKE_CURRENT_SOURCE_DIR}/src/version.rc)
|
||||
|
||||
set(OPENSSL_USE_STATIC_LIBS TRUE)
|
||||
if (NOT OPENSSL_ROOT_DIR)
|
||||
set (OPENSSL_ROOT_DIR "C:\\Program Files\\OpenSSL-Win64")
|
||||
if (MSVC)
|
||||
set(LIB_EXT .lib)
|
||||
endif()
|
||||
find_package(OpenSSL 1.1.1 REQUIRED)
|
||||
set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
|
||||
|
||||
include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/3rd_party/winfsp-${WINFSP_VERSION}/inc)
|
||||
add_definitions(-DTTMATH_NOASM -D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING)
|
||||
link_directories(${CMAKE_SOURCE_DIR}/3rd_party/winfsp-${WINFSP_VERSION}/lib)
|
||||
set(REPERTORY_LINK_LIBRARIES
|
||||
Ncrypt.lib
|
||||
Rpcrt4.lib
|
||||
Secur32.lib
|
||||
Shlwapi.lib
|
||||
Userenv.lib
|
||||
Version.lib
|
||||
Winhttp.lib
|
||||
Wininet.lib
|
||||
Ws2_32.lib
|
||||
advapi32.lib
|
||||
bcrypt.lib
|
||||
comdlg32.lib
|
||||
crypt32.lib
|
||||
gdi32.lib
|
||||
httpapi.lib
|
||||
kernel32.lib
|
||||
ole32.lib
|
||||
oleaut32.lib
|
||||
shell32.lib
|
||||
user32.lib
|
||||
uuid.lib
|
||||
winspool.lib
|
||||
${WINFSP_LIBRARY_BASENAME}.lib
|
||||
${REPERTORY_LINK_LIBRARIES}
|
||||
advapi32${LIB_EXT}
|
||||
bcrypt${LIB_EXT}
|
||||
comdlg32${LIB_EXT}
|
||||
crypt32${LIB_EXT}
|
||||
gdi32${LIB_EXT}
|
||||
httpapi${LIB_EXT}
|
||||
kernel32${LIB_EXT}
|
||||
ncrypt${LIB_EXT}
|
||||
ole32${LIB_EXT}
|
||||
oleaut32${LIB_EXT}
|
||||
rpcrt4${LIB_EXT}
|
||||
secur32${LIB_EXT}
|
||||
shell32${LIB_EXT}
|
||||
shlwapi${LIB_EXT}
|
||||
user32${LIB_EXT}
|
||||
userenv${LIB_EXT}
|
||||
uuid${LIB_EXT}
|
||||
version${LIB_EXT}
|
||||
winhttp${LIB_EXT}
|
||||
wininet${LIB_EXT}
|
||||
winspool${LIB_EXT}
|
||||
ws2_32${LIB_EXT}
|
||||
)
|
||||
|
||||
if (CMAKE_GENERATOR MATCHES "NMake Makefiles")
|
||||
set(REPERTORY_DLL_OUTPUT_DIR ${CMAKE_BINARY_DIR})
|
||||
else()
|
||||
set(REPERTORY_DLL_OUTPUT_DIR ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE})
|
||||
endif()
|
||||
|
||||
function(CopySupportFiles target)
|
||||
add_custom_command(
|
||||
TARGET ${target}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${CMAKE_SOURCE_DIR}/3rd_party/winfsp-${WINFSP_VERSION}/bin/${WINFSP_LIBRARY_BASENAME}.dll
|
||||
${REPERTORY_DLL_OUTPUT_DIR}/${WINFSP_LIBRARY_BASENAME}.dll)
|
||||
add_custom_command(
|
||||
TARGET ${target}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${CMAKE_SOURCE_DIR}/3rd_party/cacert.pem
|
||||
${REPERTORY_DLL_OUTPUT_DIR}/cacert.pem)
|
||||
endfunction()
|
||||
endif()
|
||||
|
||||
list(JOIN REPERTORY_CXX_FLAGS_LIST " " REPERTORY_CXX_FLAGS_LIST)
|
||||
list(JOIN REPERTORY_C_FLAGS_LIST " " REPERTORY_C_FLAGS_LIST)
|
||||
list(JOIN REPERTORY_SHARED_LINKER_FLAGS_LIST " " REPERTORY_SHARED_LINKER_FLAGS_LIST)
|
||||
include_directories(SYSTEM
|
||||
${EXTERNAL_BUILD_ROOT}/include
|
||||
)
|
||||
|
||||
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${REPERTORY_C_FLAGS_LIST}")
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${REPERTORY_CXX_FLAGS_LIST}")
|
||||
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${REPERTORY_SHARED_LINKER_FLAGS_LIST}")
|
||||
link_directories(
|
||||
${EXTERNAL_BUILD_ROOT}/lib
|
||||
${EXTERNAL_BUILD_ROOT}/lib64
|
||||
)
|
||||
|
||||
include(cmake/zlib.cmake)
|
||||
include(cmake/openssl.cmake)
|
||||
@ -367,142 +241,59 @@ include(cmake/curl.cmake)
|
||||
include(cmake/boost.cmake)
|
||||
include(cmake/libuuid.cmake)
|
||||
include(cmake/rocksdb.cmake)
|
||||
include(cmake/cryptopp.cmake)
|
||||
include(cmake/awscpp.cmake)
|
||||
include(cmake/libmicrohttpd.cmake)
|
||||
include(cmake/libhttpserver.cmake)
|
||||
include(cmake/libsodium.cmake)
|
||||
|
||||
include_directories(include)
|
||||
include_directories(SYSTEM
|
||||
${Boost_INCLUDE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cpp-httplib
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/json
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/jsonrpcpp-1.1.1/lib
|
||||
${LIBUUID_INCLUDE_DIR}
|
||||
${EXTERNAL_BUILD_ROOT}/include
|
||||
${EXTERNAL_BUILD_ROOT}/include/cryptopp
|
||||
${OPENSSL_INCLUDE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/pugixml/src
|
||||
${CURL_INCLUDE_DIRS}
|
||||
${LIBFUSE_INCLUDE_DIRS}
|
||||
${CMAKE_SOURCE_DIR}/3rd_party/ttmath-0.9.3/ttmath
|
||||
${LIBFUSE2_INCLUDE_DIRS}
|
||||
${LIBFUSE3_INCLUDE_DIRS}
|
||||
${LIBUUID_INCLUDE_DIR}
|
||||
${OPENSSL_INCLUDE_DIR}
|
||||
${ROCKSDB_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
if (NOT IS_DEBIAN9_DISTRO)
|
||||
check_include_file_cxx(optional HAS_STD_OPTIONAL)
|
||||
if (HAS_STD_OPTIONAL)
|
||||
add_definitions(-DHAS_STD_OPTIONAL)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (UNIX)
|
||||
macro(install_symlink filepath sympath)
|
||||
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${filepath} ${sympath})")
|
||||
install(CODE "message(\"-- Created symlink: ${sympath} -> ${filepath}\")")
|
||||
endmacro(install_symlink)
|
||||
check_include_files(sys/xattr.h HAS_SETXATTR)
|
||||
if (HAS_SETXATTR)
|
||||
add_definitions(-DHAS_SETXATTR)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(REPERTORY_LINK_LIBRARIES
|
||||
${ROCKSDB_LIBRARIES}
|
||||
${LIBFUSE_LIBRARIES}
|
||||
${LIBFUSE2_LIBRARIES}
|
||||
${LIBFUSE3_LIBRARIES}
|
||||
${LIBUUID_LIBRARIES}
|
||||
${AWSCPP_LIBRARIES}
|
||||
${LIBHTTPSERVER_LIBRARIES}
|
||||
${LIBMICROHTTPD_LIBRARIES}
|
||||
${Boost_LIBRARIES}
|
||||
${CURL_LIBRARIES}
|
||||
${OPENSSL_LIBRARIES}
|
||||
${ZLIB_LIBRARIES}
|
||||
${LIBSODIUM_LIBRARIES}
|
||||
${REPERTORY_LINK_LIBRARIES}
|
||||
)
|
||||
|
||||
file(GLOB_RECURSE REPERTORY_HEADERS
|
||||
${REPERTORY_HEADERS}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/*.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/*.hh
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/**/*.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/**/*.hh
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/**/*.hpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/pugixml/src/*.hpp
|
||||
)
|
||||
|
||||
file(GLOB_RECURSE REPERTORY_SOURCES
|
||||
${REPERTORY_SOURCES}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/**/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/jsonrpcpp-1.1.1/lib/jsonrp.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/pugixml/src/*.cpp
|
||||
)
|
||||
list(REMOVE_ITEM REPERTORY_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
|
||||
|
||||
add_library(librepertory STATIC ${REPERTORY_SOURCES} ${REPERTORY_HEADERS})
|
||||
set_target_properties(librepertory PROPERTIES PREFIX "")
|
||||
target_link_libraries(librepertory LINK_INTERFACE_LIBRARIES ${REPERTORY_LINK_LIBRARIES})
|
||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/common.cpp.in ${CMAKE_CURRENT_SOURCE_DIR}/src/common.cpp @ONLY)
|
||||
|
||||
add_dependencies(librepertory
|
||||
rocksdb_project
|
||||
cryptopp_project
|
||||
libhttpserver_project
|
||||
)
|
||||
if (REPERTORY_ENABLE_S3)
|
||||
add_dependencies(librepertory awscpp_project)
|
||||
endif ()
|
||||
|
||||
if (LINUX)
|
||||
add_dependencies(librepertory
|
||||
libuuid_project
|
||||
boost_project
|
||||
curl_project
|
||||
openssl_project
|
||||
)
|
||||
elseif (MACOS)
|
||||
add_dependencies(librepertory
|
||||
openssl_project
|
||||
boost_project
|
||||
curl_project
|
||||
)
|
||||
elseif (MSVC)
|
||||
add_dependencies(librepertory
|
||||
curl_project
|
||||
zlib_project
|
||||
boost_project
|
||||
)
|
||||
endif()
|
||||
|
||||
add_executable(repertory
|
||||
src/main.cpp
|
||||
${WINDOWS_VERSION_RC}
|
||||
${REPERTORY_HEADERS}
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
TARGET repertory
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/cacert.pem
|
||||
${CMAKE_BINARY_DIR}/cacert.pem
|
||||
)
|
||||
|
||||
add_dependencies(repertory librepertory)
|
||||
|
||||
target_link_libraries(repertory PRIVATE librepertory)
|
||||
|
||||
if (MACOS)
|
||||
set_target_properties(repertory PROPERTIES COMPILE_FLAGS -fvisibility=hidden)
|
||||
elseif (MSVC)
|
||||
CopySupportFiles(repertory)
|
||||
endif()
|
||||
|
||||
include(cmake/testing.cmake)
|
||||
|
||||
if (UNIX)
|
||||
install(TARGETS repertory RUNTIME DESTINATION bin)
|
||||
if (LINUX)
|
||||
install_symlink(${CMAKE_INSTALL_PREFIX}/bin/repertory /sbin/mount.repertory)
|
||||
endif()
|
||||
endif()
|
||||
include(cmake/helpers.cmake)
|
||||
include(cmake/librepertory.cmake)
|
||||
include(cmake/repertory.cmake)
|
||||
include(cmake/unittests.cmake)
|
||||
include(cmake/install.cmake)
|
||||
|
||||
message(STATUS "Repertory Version: ${REPERTORY_VERSION}")
|
||||
message(STATUS "Git Revision: ${REPERTORY_GIT_REV}")
|
||||
|
Reference in New Issue
Block a user