Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gabime/spdlog.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgabime <gmelman1@gmail.com>2019-06-10 18:09:36 +0300
committergabime <gmelman1@gmail.com>2019-06-10 18:09:36 +0300
commit68a0193d952eb0b39ccb54e3a8c60b72c3f189a9 (patch)
treef9ea9ecdbc6752ccfd95db94b125e2a286c07fdc
parent80740f0e46034a2b958238858aa49f37acd60288 (diff)
CMake refactoring to functions
-rw-r--r--CMakeLists.txt18
-rw-r--r--bench/CMakeLists.txt1
-rw-r--r--cmake/sanitizers.cmake21
-rw-r--r--cmake/utils.cmake41
-rw-r--r--cmake/version.cmake16
-rw-r--r--example/CMakeLists.txt2
-rw-r--r--tests/CMakeLists.txt11
7 files changed, 57 insertions, 53 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index dcc54309..519233cb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,7 +7,8 @@ cmake_minimum_required(VERSION 3.1)
#---------------------------------------------------------------------------------------
# Start spdlog project
#---------------------------------------------------------------------------------------
-include(cmake/version.cmake)
+include(cmake/utils.cmake)
+spdlog_extract_version()
project(spdlog VERSION ${SPDLOG_VERSION} LANGUAGES CXX)
message(STATUS "Build spdlog: ${SPDLOG_VERSION}")
@@ -49,7 +50,6 @@ option(SPDLOG_FMT_EXTERNAL "Use external fmt library instead of bundled" OFF)
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})
-
find_package(Threads REQUIRED)
#---------------------------------------------------------------------------------------
@@ -63,6 +63,7 @@ target_include_directories(spdlog PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
target_link_libraries(spdlog PUBLIC Threads::Threads)
+spdlog_enable_warnings(spdlog)
#---------------------------------------------------------------------------------------
# Header only version
@@ -75,19 +76,6 @@ target_include_directories(spdlog_header_only INTERFACE
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
target_link_libraries(spdlog_header_only INTERFACE Threads::Threads)
-#---------------------------------------------------------------------------------------
-# Turn on compiler warnings and sanitizers if we build our own project
-#---------------------------------------------------------------------------------------
-if(SPDLOG_MASTER_PROJECT)
- if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
- target_compile_options( spdlog PRIVATE -Wall -Wextra -Wconversion -pedantic -Wfatal-errors)
- endif()
- if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
- target_compile_options( spdlog PRIVATE /W3 /WX )
- endif()
-
- include(cmake/sanitizers.cmake)
-endif()
#---------------------------------------------------------------------------------------
# use fmt package if using exertnal fmt
diff --git a/bench/CMakeLists.txt b/bench/CMakeLists.txt
index 6457a89d..d087cf66 100644
--- a/bench/CMakeLists.txt
+++ b/bench/CMakeLists.txt
@@ -13,6 +13,7 @@ find_package(Threads REQUIRED)
find_package(benchmark CONFIG REQUIRED)
add_executable(bench bench.cpp)
+spdlog_enable_warnings(bench)
target_link_libraries(bench PRIVATE spdlog::spdlog)
add_executable(async_bench async_bench.cpp)
diff --git a/cmake/sanitizers.cmake b/cmake/sanitizers.cmake
deleted file mode 100644
index 3b090835..00000000
--- a/cmake/sanitizers.cmake
+++ /dev/null
@@ -1,21 +0,0 @@
-if(SPDLOG_SANITIZE_THREAD AND SPDLOG_SANITIZE_ADDRESS)
- message(FATAL_ERROR "AddressSanitizer is not compatible with ThreadSanitizer.")
-endif()
-
-if(SPDLOG_SANITIZE_ADDRESS)
- message(STATUS "AddressSanitizer enabled")
- set(SANITIZER_FLAGS "-fsanitize=address,undefined")
- add_compile_options("-fno-sanitize=signed-integer-overflow")
-endif()
-
-if(SPDLOG_SANITIZE_THREAD)
- message(STATUS "ThreadSanitizer enabled")
- set(SANITIZER_FLAGS "-fsanitize=thread")
-endif()
-
-if(SPDLOG_SANITIZE_THREAD OR SPDLOG_SANITIZE_ADDRESS)
- add_compile_options(${SANITIZER_FLAGS})
- add_compile_options("-fno-sanitize-recover=all")
- add_compile_options("-fno-omit-frame-pointer")
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${SANITIZER_FLAGS} -fuse-ld=gold")
-endif()
diff --git a/cmake/utils.cmake b/cmake/utils.cmake
new file mode 100644
index 00000000..5ed8f9ce
--- /dev/null
+++ b/cmake/utils.cmake
@@ -0,0 +1,41 @@
+# Get spdlog version from include/spdlog/version.h and put it in SPDLOG_VERSION
+function(spdlog_extract_version)
+ file(READ "${CMAKE_CURRENT_LIST_DIR}/include/spdlog/version.h" file_contents)
+ string(REGEX MATCH "SPDLOG_VER_MAJOR ([0-9]+)" _ "${file_contents}")
+ set(ver_major ${CMAKE_MATCH_1})
+
+ string(REGEX MATCH "SPDLOG_VER_MINOR ([0-9]+)" _ "${file_contents}")
+ set(ver_minor ${CMAKE_MATCH_1})
+ string(REGEX MATCH "SPDLOG_VER_PATCH ([0-9]+)" _ "${file_contents}")
+ set(ver_patch ${CMAKE_MATCH_1})
+
+ if (NOT ver_major OR NOT ver_minor OR NOT ver_patch)
+ message(FATAL_ERROR "Could not extract valid version from spdlog/version.h")
+ endif()
+ set (SPDLOG_VERSION "${ver_major}.${ver_minor}.${ver_patch}" PARENT_SCOPE)
+endfunction()
+
+
+# Turn on warnings on the given target
+function(spdlog_enable_warnings target_name)
+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
+ target_compile_options(${target_name} PRIVATE -Wall -Wextra -Wconversion -pedantic -Wfatal-errors)
+ endif()
+ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
+ target_compile_options(${target_name} PRIVATE /W4 /WX )
+ endif()
+endfunction()
+
+
+# Enable address sanitizer (gcc/clang only)
+function(spdlog_enable_sanitizer target_name)
+ if (NOT CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
+ message(FATAL_ERROR "Sanitizer supported only for gcc/clang")
+ endif()
+ message(STATUS "Address sanitizer enabled")
+ target_compile_options(${target_name} "-fsanitize=address,undefined")
+ target_compile_options(${target_name} "-fno-sanitize=signed-integer-overflow")
+ target_compile_options(${target_name} "-fno-sanitize-recover=all")
+ target_compile_options(${target_name} "-fno-omit-frame-pointer")
+ target_link_libraries(${target_name} "-fsanitize=address,undefined -fuse-ld=gold")
+endfunction() \ No newline at end of file
diff --git a/cmake/version.cmake b/cmake/version.cmake
deleted file mode 100644
index 4f3f0360..00000000
--- a/cmake/version.cmake
+++ /dev/null
@@ -1,16 +0,0 @@
-#---------------------------------------------------------------------------------------
-# Get spdlog version from include/spdlog/version.h
-#---------------------------------------------------------------------------------------
-file(READ "${CMAKE_CURRENT_LIST_DIR}/../include/spdlog/version.h" SPDLOG_VERSION_FILE)
-string(REGEX MATCH "SPDLOG_VER_MAJOR ([0-9]+)" _ "${SPDLOG_VERSION_FILE}")
-set(ver_major ${CMAKE_MATCH_1})
-
-string(REGEX MATCH "SPDLOG_VER_MINOR ([0-9]+)" _ "${SPDLOG_VERSION_FILE}")
-set(ver_minor ${CMAKE_MATCH_1})
-string(REGEX MATCH "SPDLOG_VER_PATCH ([0-9]+)" _ "${SPDLOG_VERSION_FILE}")
-set(ver_patch ${CMAKE_MATCH_1})
-
-if (NOT ver_major OR NOT ver_minor OR NOT ver_patch)
- message(FATAL_ERROR "Could not extract valid version from spdlog/version.h")
-endif()
-set (SPDLOG_VERSION "${ver_major}.${ver_minor}.${ver_patch}") \ No newline at end of file
diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt
index 994051f9..1f22b990 100644
--- a/example/CMakeLists.txt
+++ b/example/CMakeLists.txt
@@ -13,12 +13,14 @@ endif()
# Example of using pre-compiled library
#---------------------------------------------------------------------------------------
add_executable(example example.cpp)
+spdlog_enable_warnings(example)
target_link_libraries(example spdlog::spdlog)
#---------------------------------------------------------------------------------------
# Example of using header-only library
#---------------------------------------------------------------------------------------
add_executable(example_header_only example.cpp)
+spdlog_enable_warnings(example_header_only)
target_link_libraries(example_header_only spdlog::spdlog_header_only)
# Create logs directory
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index a59cf07b..b4192e79 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -21,13 +21,22 @@ enable_testing()
# The compiled library tests
if(SPDLOG_BUILD_TESTS)
add_executable(spdlog-utests ${SPDLOG_UTESTS_SOURCES})
+ spdlog_enable_warnings(spdlog-utests)
target_link_libraries(spdlog-utests spdlog)
- add_test(NAME spdlog-utests COMMAND spdlog-utests)
+ if(SPDLOG_SANITIZE_ADDRESS)
+ spdlog_enable_sanitizer(spdlog-utests)
+ endif()
+ add_test(NAME spdlog-utests COMMAND spdlog-utests)
+
endif()
# The header-only library version tests
if(SPDLOG_BUILD_HO_TESTS)
add_executable(spdlog-utests-ho ${SPDLOG_UTESTS_SOURCES})
+ spdlog_enable_warnings(spdlog-utests-ho)
target_link_libraries(spdlog-utests-ho spdlog::spdlog_header_only)
+ if(SPDLOG_SANITIZE_ADDRESS)
+ spdlog_set_address_sanitizer(spdlog-utests-ho)
+ endif()
add_test(NAME spdlog-utests-ho COMMAND spdlog-utests-ho)
endif() \ No newline at end of file