From c4f61c3b26e329a4fe992a5c06bcc5b2b1718f2c Mon Sep 17 00:00:00 2001 From: Takayuki Tanabe Date: Mon, 3 Aug 2020 22:39:57 +0900 Subject: [PATCH] add cmake/files. --- cmake/CompileOptions.cmake | 33 +++++++++++++++++++++++++++++++++ cmake/Findgflags.cmake | 24 ++++++++++++++++++++++++ cmake/Findglog.cmake | 24 ++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 cmake/CompileOptions.cmake create mode 100644 cmake/Findgflags.cmake create mode 100644 cmake/Findglog.cmake diff --git a/cmake/CompileOptions.cmake b/cmake/CompileOptions.cmake new file mode 100644 index 00000000..3b24c329 --- /dev/null +++ b/cmake/CompileOptions.cmake @@ -0,0 +1,33 @@ +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer") +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -fno-omit-frame-pointer") + +set(sanitizers "address") +if (ENABLE_UB_SANITIZER) + # NOTE: UB check requires instrumented libstdc++ + set(sanitizers "${sanitizers},undefined") +endif () +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + # do nothing for gcc +elseif (CMAKE_CXX_COMPILER_ID MATCHES "^(Clang|AppleClang)$") + set(sanitizers "${sanitizers},nullability") +else () + message(FATAL_ERROR "unsupported compiler ${CMAKE_CXX_COMPILER_ID}") +endif () + +if (ENABLE_SANITIZER) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=${sanitizers}") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-sanitize=alignment") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-sanitize-recover=${sanitizers}") +endif () +if (ENABLE_COVERAGE) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} --coverage") +endif () + +function(set_compile_options target_name) + target_compile_options(${target_name} + PRIVATE -Wall -Wextra -Werror) +endfunction(set_compile_options) diff --git a/cmake/Findgflags.cmake b/cmake/Findgflags.cmake new file mode 100644 index 00000000..f0af39a9 --- /dev/null +++ b/cmake/Findgflags.cmake @@ -0,0 +1,24 @@ +if(TARGET gflags::gflags) + return() +endif() + +find_library(gflags_LIBRARY_FILE NAMES gflags) +find_path(gflags_INCLUDE_DIR NAMES gflags/gflags.h) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(gflags DEFAULT_MSG + gflags_LIBRARY_FILE + gflags_INCLUDE_DIR) + +if(gflags_LIBRARY_FILE AND gflags_INCLUDE_DIR) + set(gflags_FOUND ON) + add_library(gflags::gflags SHARED IMPORTED) + set_target_properties(gflags::gflags PROPERTIES + IMPORTED_LOCATION "${gflags_LIBRARY_FILE}" + INTERFACE_INCLUDE_DIRECTORIES "${gflags_INCLUDE_DIR}") +else() + set(gflags_FOUND OFF) +endif() + +unset(gflags_LIBRARY_FILE CACHE) +unset(gflags_INCLUDE_DIR CACHE) diff --git a/cmake/Findglog.cmake b/cmake/Findglog.cmake new file mode 100644 index 00000000..4b35db66 --- /dev/null +++ b/cmake/Findglog.cmake @@ -0,0 +1,24 @@ +if(TARGET glog::glog) + return() +endif() + +find_library(glog_LIBRARY_FILE NAMES glog) +find_path(glog_INCLUDE_DIR NAMES glog/logging.h) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(glog DEFAULT_MSG + glog_LIBRARY_FILE + glog_INCLUDE_DIR) + +if(glog_LIBRARY_FILE AND glog_INCLUDE_DIR) + set(glog_FOUND ON) + add_library(glog::glog SHARED IMPORTED) + set_target_properties(glog::glog PROPERTIES + IMPORTED_LOCATION "${glog_LIBRARY_FILE}" + INTERFACE_INCLUDE_DIRECTORIES "${glog_INCLUDE_DIR}") +else() + set(glog_FOUND OFF) +endif() + +unset(glog_LIBRARY_FILE CACHE) +unset(glog_INCLUDE_DIR CACHE)