1
0
mirror of https://github.com/codership/wsrep-lib.git synced 2025-07-28 20:02:00 +03:00
Files
wsrep-lib/CMakeLists.txt
Teemu Ollakka af8383daf0 C++11 checks in CMakeLists.txt, added atomic.hpp
Check if the superproject has already enabled C++11 before enabling
it in CMakeLists.txt.

Added utility file atomic.hpp to select the correct atomics header
to work around issues with ancient GCC 4.4.
2019-02-13 13:05:45 +02:00

122 lines
3.4 KiB
CMake

#
# Copyright (C) 2018 Codership Oy <info@codership.com>
#
cmake_minimum_required (VERSION 2.8)
project (wsrep-lib)
include(CheckIncludeFile)
# Options
# Compile unit tests
option(WSREP_LIB_WITH_UNIT_TESTS "Compile unit tests" ON)
if (WSREP_LIB_WITH_UNIT_TESTS)
# Run tests automatically by default if compiled
option(WSREP_LIB_WITH_AUTO_TEST "Run unit tests automatically after build" OFF)
endif()
# Build a sample program
option(WSREP_LIB_WITH_DBSIM "Compile sample dbsim program" ON)
option(WSREP_LIB_WITH_ASAN "Enable address sanitizer" OFF)
option(WSREP_LIB_WITH_TSAN "Enable thread sanitizer" OFF)
option(WSREP_LIB_WITH_DOCUMENTATION "Generate documentation" OFF)
option(WSREP_LIB_WITH_COVERAGE "Compile with coverage instrumentation" OFF)
option(WSREP_LIB_STRICT_BUILD_FLAGS "Compile with strict build flags" OFF)
option(WSREP_LIB_MAINTAINER_MODE "Fail compilation on any warnings" OFF)
# Compiler options
# Set std to C++0x/C++11 if superproject has not set standard yet
if (NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 11)
string(FIND "${CMAKE_CXX_FLAGS}" "-std=" HAVE_STD)
if (HAVE_STD EQUAL -1)
if (CMAKE_VERSION VERSION_LESS "3.1")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND
CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()
else()
set(CMAKE_CXX_STANDARD 11)
endif()
endif()
endif()
# CXX flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Woverloaded-virtual -g")
if (WSREP_LIB_STRICT_BUILD_FLAGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weffc++")
endif()
if (WSREP_LIB_MAINTAINER_MODE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
endif()
# Set up include directories
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/wsrep-API/v26")
if (WSREP_LIB_WITH_UNIT_TESTS)
find_package(Boost 1.54.0 REQUIRED
unit_test_framework
)
endif()
if (WSREP_LIB_WITH_DBSIM)
find_package(Boost 1.54.0 REQUIRED
program_options
filesystem
thread
)
endif()
# Coverage
# To produce a coverage report, call cmake with -DWITH_COVERAGE=ON,
# run
#
# make
# make test
# make ExperimentalCoverage
# make coverage_report
#
# The coverage report output will be in directory root index.html
#
if (WSREP_LIB_WITH_COVERAGE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
endif()
if (WSREP_LIB_WITH_ASAN)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
endif()
if (WSREP_LIB_WITH_TSAN)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
endif()
add_custom_target(coverage_report
lcov --capture --directory src --directory test --directory dbsim --directory include --output lcov.info --no-external
COMMAND genhtml --output-directory coverage_report lcov.info)
if (WSREP_LIB_WITH_DOCUMENTATION)
find_package(Doxygen REQUIRED)
add_custom_target(doc ALL
COMMAND doxygen ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc
COMMENT "Generating documentation with Doxygen"
VERBATIM)
endif()
add_subdirectory(src)
add_subdirectory(wsrep-API)
if (WSREP_LIB_WITH_UNIT_TESTS)
enable_testing()
add_subdirectory(test)
endif()
if (WSREP_LIB_WITH_DBSIM)
add_subdirectory(dbsim)
endif()