diff options
Diffstat (limited to 'libs/libmdbx/src/CMakeLists.txt')
-rw-r--r-- | libs/libmdbx/src/CMakeLists.txt | 235 |
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}) |