summaryrefslogtreecommitdiff
path: root/libs/libmdbx/src/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'libs/libmdbx/src/CMakeLists.txt')
-rw-r--r--libs/libmdbx/src/CMakeLists.txt235
1 files changed, 171 insertions, 64 deletions
diff --git a/libs/libmdbx/src/CMakeLists.txt b/libs/libmdbx/src/CMakeLists.txt
index e00f34034a..20a50a4537 100644
--- a/libs/libmdbx/src/CMakeLists.txt
+++ b/libs/libmdbx/src/CMakeLists.txt
@@ -62,7 +62,8 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git" AND
EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in" AND
EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/version.c.in" AND
EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/man1" AND
- EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/mdbx_chk.c")
+ EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/mdbx_chk.c" AND
+ EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/mdbx.c++")
set(MDBX_AMALGAMATED_SOURCE FALSE)
find_program(GIT git)
if(NOT GIT)
@@ -71,6 +72,7 @@ if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git" AND
set(MDBX_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" AND
EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.c" AND
+ EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx.c++" AND
EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" AND
EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/man1" AND
EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/mdbx_chk.c")
@@ -86,15 +88,35 @@ if(DEFINED PROJECT_NAME)
if(NOT MDBX_AMALGAMATED_SOURCE AND NOT DEFINED BUILD_TESTING)
set(BUILD_TESTING OFF)
endif()
+ enable_language(C)
else()
set(SUBPROJECT OFF)
set(NOT_SUBPROJECT ON)
- project(libmdbx C CXX)
+ project(libmdbx C)
if(NOT MDBX_AMALGAMATED_SOURCE AND NOT DEFINED BUILD_TESTING)
set(BUILD_TESTING ON)
endif()
endif()
+if(MDBX_AMALGAMATED_SOURCE AND DEFINED MDBX_ENABLE_TESTS AND MDBX_ENABLE_TESTS)
+ message(WARNING "MDBX_ENABLE_TESTS=${MDBX_ENABLE_TESTS}: But amalgamated source code don't includes tests.")
+ set(MDBX_ENABLE_TESTS OFF)
+endif()
+
+# Try to find a C++ compiler unless sure that this is unnecessary.
+if (NOT CMAKE_CXX_COMPILER_LOADED)
+ include(CheckLanguage)
+ if(NOT DEFINED MDBX_BUILD_CXX OR MDBX_BUILD_CXX
+ OR (NOT MDBX_AMALGAMATED_SOURCE AND (NOT DEFINED MDBX_ENABLE_TESTS OR MDBX_ENABLE_TESTS)))
+ check_language(CXX)
+ if(CMAKE_CXX_COMPILER)
+ enable_language(CXX)
+ endif()
+ endif()
+else()
+ enable_language(CXX)
+endif()
+
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE MinSizeRel CACHE STRING
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
@@ -105,16 +127,6 @@ if(NOT_SUBPROJECT AND (CMAKE_CROSSCOMPILING OR IOS))
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
endif()
-if(IOS)
- set(MDBX_BUILD_TOOLS_DEFAULT OFF)
- if(NOT_SUBPROJECT)
- cmake_policy(SET CMP0006 OLD)
- set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO")
- endif()
-else()
- set(MDBX_BUILD_TOOLS_DEFAULT ON)
-endif()
-
if(NOT "$ENV{TEAMCITY_PROCESS_FLOW_ID}" STREQUAL "")
set(CI TEAMCITY)
message(STATUS "TeamCity CI")
@@ -161,10 +173,27 @@ if(NOT CMAKE_BUILD_TYPE)
endif()
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPERCASE)
+set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
+set(THREADS_PREFER_PTHREAD_FLAG TRUE)
+find_package(Threads REQUIRED)
+
include(cmake/utils.cmake)
include(cmake/compiler.cmake)
include(cmake/profile.cmake)
+# Workaround for `-pthread` toolchain/cmake bug
+if(NOT APPLE AND NOT MSVC
+ AND CMAKE_USE_PTHREADS_INIT AND NOT CMAKE_THREAD_LIBS_INIT
+ AND (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG))
+ check_compiler_flag("-pthread" CC_HAS_PTHREAD)
+ if(CC_HAS_PTHREAD AND NOT CMAKE_EXE_LINKER_FLAGS MATCHES "-pthread")
+ message(STATUS "Force add -pthread for linker flags to avoid troubles")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pthread")
+ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -pthread")
+ endif()
+endif()
+
CHECK_FUNCTION_EXISTS(pow NOT_NEED_LIBM)
if(NOT_NEED_LIBM)
set(LIB_MATH "")
@@ -178,18 +207,16 @@ else()
endif()
endif()
-find_package(Threads REQUIRED)
-
if(SUBPROJECT)
if(NOT DEFINED BUILD_SHARED_LIBS)
option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)" OFF)
endif()
if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
- option(CMAKE_POSITION_INDEPENDENT_CODE "Generate position independed (PIC)" ON)
+ option(CMAKE_POSITION_INDEPENDENT_CODE "Generate position independent (PIC)" ON)
endif()
else()
option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)" ON)
- option(CMAKE_POSITION_INDEPENDENT_CODE "Generate position independed (PIC)" ON)
+ option(CMAKE_POSITION_INDEPENDENT_CODE "Generate position independent (PIC)" ON)
if (CC_HAS_ARCH_NATIVE)
option(BUILD_FOR_NATIVE_CPU "Generate code for the compiling machine CPU" OFF)
endif()
@@ -294,14 +321,30 @@ else()
endif(SUBPROJECT)
list(FIND CMAKE_C_COMPILE_FEATURES c_std_11 HAS_C11)
+list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_11 HAS_CXX11)
+list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_14 HAS_CXX14)
+list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_17 HAS_CXX17)
+list(FIND CMAKE_CXX_COMPILE_FEATURES cxx_std_20 HAS_CXX20)
+if(NOT DEFINED MDBX_CXX_STANDARD)
+ if(DEFINED CMAKE_CXX_STANDARD)
+ set(MDBX_CXX_STANDARD ${CMAKE_CXX_STANDARD})
+ elseif(NOT HAS_CXX20 LESS 0)
+ set(MDBX_CXX_STANDARD 20)
+ elseif(NOT HAS_CXX17 LESS 0)
+ set(MDBX_CXX_STANDARD 17)
+ elseif(NOT HAS_CXX14 LESS 0)
+ set(MDBX_CXX_STANDARD 14)
+ elseif(NOT HAS_CXX11 LESS 0)
+ set(MDBX_CXX_STANDARD 11)
+ else()
+ set(MDBX_CXX_STANDARD 98)
+ endif()
+endif()
if(NOT HAS_C11 LESS 0)
set(MDBX_C_STANDARD 11)
else()
set(MDBX_C_STANDARD 99)
endif()
-if(MDBX_C_STANDARD)
- message(STATUS "Use C${MDBX_C_STANDARD} for libmdbx")
-endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows" AND EXISTS "${MDBX_SOURCE_DIR}/ntdll.def")
if(MSVC)
@@ -354,15 +397,6 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows" AND EXISTS "${MDBX_SOURCE_DIR}/ntdll.
endif()
endif()
-macro(add_mdbx_option NAME DESCRIPTION DEFAULT)
- list(APPEND MDBX_BUILD_OPTIONS ${NAME})
- if(NOT ${DEFAULT} STREQUAL "AUTO")
- option(${NAME} "${DESCRIPTION}" ${DEFAULT})
- elseif(NOT DEFINED ${NAME})
- set(${NAME}_AUTO ON)
- endif()
-endmacro()
-
################################################################################
################################################################################
#
@@ -375,13 +409,33 @@ endmacro()
#
set(MDBX_BUILD_OPTIONS ENABLE_ASAN MDBX_USE_VALGRIND ENABLE_GPROF ENABLE_GCOV)
+macro(add_mdbx_option NAME DESCRIPTION DEFAULT)
+ list(APPEND MDBX_BUILD_OPTIONS ${NAME})
+ if(NOT ${DEFAULT} STREQUAL "AUTO")
+ option(${NAME} "${DESCRIPTION}" ${DEFAULT})
+ elseif(NOT DEFINED ${NAME})
+ set(${NAME}_AUTO ON)
+ endif()
+endmacro()
+
+if(IOS)
+ set(MDBX_BUILD_TOOLS_DEFAULT OFF)
+ if(NOT_SUBPROJECT)
+ cmake_policy(SET CMP0006 OLD)
+ set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO")
+ endif()
+else()
+ set(MDBX_BUILD_TOOLS_DEFAULT ON)
+endif()
+
add_mdbx_option(MDBX_INSTALL_STATIC "Build and install libmdbx for static linking" OFF)
add_mdbx_option(MDBX_BUILD_SHARED_LIBRARY "Build libmdbx as shared library (DLL)" ${BUILD_SHARED_LIBS})
add_mdbx_option(MDBX_BUILD_TOOLS "Build MDBX tools (mdbx_chk/stat/dump/load/copy)" ${MDBX_BUILD_TOOLS_DEFAULT})
+CMAKE_DEPENDENT_OPTION(MDBX_INSTALL_MANPAGES "Install man-pages for MDBX tools (mdbx_chk/stat/dump/load/copy)" ON MDBX_BUILD_TOOLS OFF)
add_mdbx_option(MDBX_TXN_CHECKOWNER "Checking transaction matches the calling thread inside libmdbx's API" ON)
-add_mdbx_option(MDBX_TXN_CHECKPID "Paranoid checking PID inside libmdbx's API" AUTO)
+add_mdbx_option(MDBX_ENV_CHECKPID "Paranoid checking PID inside libmdbx's API" AUTO)
add_mdbx_option(MDBX_HUGE_TRANSACTIONS "Support for huge write-transactions" OFF)
-mark_as_advanced(MDBX_TXN_CHECKPID)
+mark_as_advanced(MDBX_ENV_CHECKPID)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
add_mdbx_option(MDBX_DISABLE_GNU_SOURCE "Don't use GNU/Linux libc extensions" OFF)
mark_as_advanced(MDBX_DISABLE_GNU_SOURCE)
@@ -392,7 +446,7 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR IOS)
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
if(MDBX_NTDLL_EXTRA_IMPLIB)
- add_mdbx_option(MDBX_AVOID_CRT "Avoid dependence from MSVC CRT and use ntdll.dll instead" ${NOT_SUBPROJECT})
+ add_mdbx_option(MDBX_AVOID_CRT "Avoid dependence from MSVC CRT and use ntdll.dll instead" OFF)
endif()
add_mdbx_option(MDBX_CONFIG_MANUAL_TLS_CALLBACK
"Provide mdbx_dll_handler() for manual initialization" OFF)
@@ -409,8 +463,7 @@ option(MDBX_FORCE_ASSERTIONS "Force enable assertion checking" OFF)
if(NOT MDBX_AMALGAMATED_SOURCE)
add_mdbx_option(MDBX_ALLOY_BUILD "Build MDBX library through single/alloyed object file" ON)
- option(MDBX_ENABLE_TESTS "Build MDBX tests" ${BUILD_TESTING})
-endif(NOT MDBX_AMALGAMATED_SOURCE)
+endif()
if((MDBX_BUILD_TOOLS OR MDBX_ENABLE_TESTS) AND MDBX_BUILD_SHARED_LIBRARY)
add_mdbx_option(MDBX_LINK_TOOLS_NONSTATIC "Link MDBX tools with non-static libmdbx" OFF)
@@ -418,14 +471,36 @@ else()
unset(MDBX_LINK_TOOLS_NONSTATIC CACHE)
endif()
+if(CMAKE_CXX_COMPILER_LOADED AND MDBX_CXX_STANDARD GREATER_EQUAL 11 AND MDBX_CXX_STANDARD LESS 83)
+ if(NOT MDBX_AMALGAMATED_SOURCE)
+ option(MDBX_ENABLE_TESTS "Build MDBX tests" ${BUILD_TESTING})
+ endif()
+ if(NOT MDBX_AVOID_CRT
+ AND NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
+ AND NOT (CMAKE_COMPILER_IS_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4)
+ AND NOT (MSVC AND MSVC_VERSION LESS 1900))
+ option(MDBX_BUILD_CXX "Build C++ portion" ON)
+ else()
+ set(MDBX_BUILD_CXX FALSE)
+ endif()
+else()
+ set(MDBX_BUILD_CXX FALSE)
+ set(MDBX_ENABLE_TESTS FALSE)
+endif()
+
################################################################################
################################################################################
+if(MDBX_BUILD_CXX AND NOT CMAKE_CXX_COMPILER_LOADED)
+ message(FATAL_ERROR "MDBX_BUILD_CXX=${MDBX_BUILD_CXX}: The C++ compiler is required to build the C++API.")
+endif()
+
# Get version
fetch_version(MDBX "${CMAKE_CURRENT_SOURCE_DIR}" FALSE)
message(STATUS "libmdbx version is ${MDBX_VERSION}")
# sources list
+set(LIBMDBX_PUBLIC_HEADERS mdbx.h)
set(LIBMDBX_SOURCES mdbx.h "${CMAKE_CURRENT_BINARY_DIR}/config.h")
if(MDBX_AMALGAMATED_SOURCE)
list(APPEND LIBMDBX_SOURCES mdbx.c)
@@ -438,7 +513,7 @@ else()
set(MDBX_BUILD_SOURCERY "${MDBX_SOURCERY_DIGEST}_${MDBX_SOURCERY_SUFFIX}")
if(MDBX_ALLOY_BUILD)
- list(APPEND LIBMDBX_SOURCES ${MDBX_SOURCE_DIR}/alloy.c)
+ list(APPEND LIBMDBX_SOURCES "${MDBX_SOURCE_DIR}/alloy.c")
include_directories("${MDBX_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}")
else()
list(APPEND LIBMDBX_SOURCES
@@ -450,12 +525,25 @@ else()
include_directories("${MDBX_SOURCE_DIR}")
endif()
endif(MDBX_AMALGAMATED_SOURCE)
+if(MDBX_BUILD_CXX)
+ message(STATUS "Use C${MDBX_C_STANDARD} and C++${MDBX_CXX_STANDARD} for libmdbx")
+ list(APPEND LIBMDBX_PUBLIC_HEADERS mdbx.h++)
+ list(APPEND LIBMDBX_SOURCES "${MDBX_SOURCE_DIR}/mdbx.c++" mdbx.h++)
+else()
+ message(STATUS "Use C${MDBX_C_STANDARD} for libmdbx but C++ portion is disabled")
+endif()
macro(target_setup_options TARGET)
if(DEFINED INTERPROCEDURAL_OPTIMIZATION)
set_target_properties(${TARGET} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION $<BOOL:${INTERPROCEDURAL_OPTIMIZATION}>)
endif()
+ set_target_properties(${TARGET} PROPERTIES
+ C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON)
+ if(MDBX_BUILD_CXX)
+ set_target_properties(${TARGET} PROPERTIES
+ CXX_STANDARD ${MDBX_CXX_STANDARD} CXX_STANDARD_REQUIRED ON)
+ endif()
if(CC_HAS_FASTMATH)
target_compile_options(${TARGET} PRIVATE "-ffast-math")
endif()
@@ -468,7 +556,7 @@ macro(target_setup_options TARGET)
endmacro()
macro(libmdbx_setup_libs TARGET MODE)
- target_link_libraries(${TARGET} ${MODE} ${CMAKE_THREAD_LIBS_INIT})
+ target_link_libraries(${TARGET} ${MODE} Threads::Threads)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
target_link_libraries(${TARGET} ${MODE} ntdll.lib)
if(MDBX_NTDLL_EXTRA_IMPLIB AND MDBX_AVOID_CRT)
@@ -479,6 +567,9 @@ macro(libmdbx_setup_libs TARGET MODE)
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Android")
target_link_libraries(${TARGET} ${MODE} log)
endif()
+ if(LIBCXX_FILESYSTEM AND MDBX_BUILD_CXX)
+ target_link_libraries(${TARGET} ${MODE} ${LIBCXX_FILESYSTEM})
+ endif()
endmacro()
# build static library
@@ -487,11 +578,7 @@ if(MDBX_INSTALL_STATIC)
else()
add_library(mdbx-static STATIC EXCLUDE_FROM_ALL ${LIBMDBX_SOURCES})
endif()
-set_target_properties(mdbx-static PROPERTIES PUBLIC_HEADER mdbx.h)
-if(MDBX_C_STANDARD)
- set_target_properties(mdbx-static PROPERTIES
- C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON)
-endif()
+set_target_properties(mdbx-static PROPERTIES PUBLIC_HEADER "${LIBMDBX_PUBLIC_HEADERS}")
target_compile_definitions(mdbx-static PRIVATE MDBX_BUILD_SHARED_LIBRARY=0)
target_setup_options(mdbx-static)
libmdbx_setup_libs(mdbx-static INTERFACE)
@@ -506,11 +593,7 @@ endif()
# build shared library
if(MDBX_BUILD_SHARED_LIBRARY)
add_library(mdbx SHARED ${LIBMDBX_SOURCES})
- set_target_properties(mdbx PROPERTIES PUBLIC_HEADER mdbx.h)
- if(MDBX_C_STANDARD)
- set_target_properties(mdbx PROPERTIES
- C_STANDARD ${MDBX_C_STANDARD} C_STANDARD_REQUIRED ON)
- endif()
+ set_target_properties(mdbx PROPERTIES PUBLIC_HEADER "${LIBMDBX_PUBLIC_HEADERS}")
target_compile_definitions(mdbx PRIVATE LIBMDBX_EXPORTS MDBX_BUILD_SHARED_LIBRARY=1 INTERFACE LIBMDBX_IMPORTS)
target_setup_options(mdbx)
libmdbx_setup_libs(mdbx PRIVATE)
@@ -579,19 +662,24 @@ endif()
################################################################################
# mdbx-shared-lib installation
+if(NOT DEFINED MDBX_DLL_INSTALL_DESTINATION)
+ if(WIN32)
+ set(MDBX_DLL_INSTALL_DESTINATION bin)
+ else()
+ set(MDBX_DLL_INSTALL_DESTINATION lib)
+ endif()
+endif()
if(MDBX_BUILD_SHARED_LIBRARY)
if(CMAKE_VERSION VERSION_LESS 3.12)
install(TARGETS mdbx EXPORT libmdbx
- RUNTIME DESTINATION bin COMPONENT runtime
- LIBRARY DESTINATION bin COMPONENT runtime
+ LIBRARY DESTINATION ${MDBX_DLL_INSTALL_DESTINATION} COMPONENT runtime
OBJECTS DESTINATION lib COMPONENT devel
ARCHIVE DESTINATION lib COMPONENT devel
PUBLIC_HEADER DESTINATION include COMPONENT devel
INCLUDES DESTINATION include COMPONENT devel)
else()
install(TARGETS mdbx EXPORT libmdbx
- RUNTIME DESTINATION bin COMPONENT runtime
- LIBRARY DESTINATION bin COMPONENT runtime
+ LIBRARY DESTINATION ${MDBX_DLL_INSTALL_DESTINATION} COMPONENT runtime
NAMELINK_COMPONENT devel
OBJECTS DESTINATION lib COMPONENT devel
ARCHIVE DESTINATION lib COMPONENT devel
@@ -602,6 +690,9 @@ endif(MDBX_BUILD_SHARED_LIBRARY)
# mdbx-tools installation
if(MDBX_BUILD_TOOLS)
+ if(NOT DEFINED MDBX_TOOLS_INSTALL_DESTINATION)
+ set(MDBX_TOOLS_INSTALL_DESTINATION bin)
+ endif()
install(
TARGETS
mdbx_chk
@@ -610,33 +701,36 @@ if(MDBX_BUILD_TOOLS)
mdbx_dump
mdbx_load
RUNTIME
- DESTINATION bin
+ DESTINATION ${MDBX_TOOLS_INSTALL_DESTINATION}
COMPONENT runtime)
- install(
- FILES
- "${MDBX_SOURCE_DIR}/man1/mdbx_chk.1"
- "${MDBX_SOURCE_DIR}/man1/mdbx_stat.1"
- "${MDBX_SOURCE_DIR}/man1/mdbx_copy.1"
- "${MDBX_SOURCE_DIR}/man1/mdbx_dump.1"
- "${MDBX_SOURCE_DIR}/man1/mdbx_load.1"
- DESTINATION man/man1
- COMPONENT doc)
+ if(MDBX_INSTALL_MANPAGES)
+ if(NOT DEFINED MDBX_MAN_INSTALL_DESTINATION)
+ set(MDBX_MAN_INSTALL_DESTINATION man/man1)
+ endif()
+ install(
+ FILES
+ "${MDBX_SOURCE_DIR}/man1/mdbx_chk.1"
+ "${MDBX_SOURCE_DIR}/man1/mdbx_stat.1"
+ "${MDBX_SOURCE_DIR}/man1/mdbx_copy.1"
+ "${MDBX_SOURCE_DIR}/man1/mdbx_dump.1"
+ "${MDBX_SOURCE_DIR}/man1/mdbx_load.1"
+ DESTINATION ${MDBX_MAN_INSTALL_DESTINATION}
+ COMPONENT doc)
+ endif()
endif(MDBX_BUILD_TOOLS)
# mdbx-static-lib installation
if(MDBX_INSTALL_STATIC)
if(CMAKE_VERSION VERSION_LESS 3.12)
install(TARGETS mdbx-static EXPORT libmdbx
- RUNTIME DESTINATION bin COMPONENT runtime
- LIBRARY DESTINATION bin COMPONENT runtime
+ LIBRARY DESTINATION lib COMPONENT devel
OBJECTS DESTINATION lib COMPONENT devel
ARCHIVE DESTINATION lib COMPONENT devel
PUBLIC_HEADER DESTINATION include COMPONENT devel
INCLUDES DESTINATION include COMPONENT devel)
else()
install(TARGETS mdbx-static EXPORT libmdbx
- RUNTIME DESTINATION bin COMPONENT runtime
- LIBRARY DESTINATION bin COMPONENT runtime
+ LIBRARY DESTINATION lib COMPONENT devel
NAMELINK_COMPONENT devel
OBJECTS DESTINATION lib COMPONENT devel
ARCHIVE DESTINATION lib COMPONENT devel
@@ -650,10 +744,16 @@ endif(MDBX_INSTALL_STATIC)
# collect options & build info
string(TIMESTAMP MDBX_BUILD_TIMESTAMP UTC)
set(MDBX_BUILD_FLAGS ${CMAKE_C_FLAGS})
+if(MDBX_BUILD_CXX)
+ set(MDBX_BUILD_FLAGS ${CMAKE_CXX_FLAGS})
+endif()
# append cmake's build-type flags and defines
if(NOT CMAKE_CONFIGURATION_TYPES)
list(APPEND MDBX_BUILD_FLAGS ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}})
+ if(MDBX_BUILD_CXX)
+ list(APPEND MDBX_BUILD_FLAGS ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE_UPPERCASE}})
+ endif()
endif()
# get definitions
@@ -705,13 +805,15 @@ endif()
# provide build-type
if(CMAKE_CONFIGURATION_TYPES)
+ # via per-configuration define
add_definitions(-DMDBX_BUILD_TYPE="$<CONFIG>")
+ set(MDBX_BUILD_TYPE "<CONFIGURATION DEPENDENT>")
else()
set(MDBX_BUILD_TYPE ${CMAKE_BUILD_TYPE})
endif()
# options
-set(options VERSION C_COMPILER CXX_COMPILER)
+set(options VERSION C_COMPILER CXX_COMPILER MDBX_BUILD_TARGET MDBX_BUILD_TYPE)
foreach(item IN LISTS options)
if(DEFINED ${item})
set(value "${${item}}")
@@ -735,9 +837,14 @@ add_definitions(-DMDBX_CONFIG_H="${CMAKE_CURRENT_BINARY_DIR}/config.h")
################################################################################
if(NOT MDBX_AMALGAMATED_SOURCE AND MDBX_ENABLE_TESTS)
+ if(NOT CMAKE_CXX_COMPILER_LOADED)
+ message(FATAL_ERROR "MDBX_ENABLE_TESTS=${MDBX_ENABLE_TESTS}: The C++ compiler is required to build the tests.")
+ endif()
add_subdirectory(test)
endif()
+################################################################################
+
set(PACKAGE "libmdbx")
set(CPACK_PACKAGE_VERSION_MAJOR ${MDBX_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${MDBX_VERSION_MINOR})