diff --git a/CMakeLists.txt b/CMakeLists.txt index 2913c6b..4750542 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,12 +14,9 @@ if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR) message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there.") endif() -# ---- Add source files ---- +# --- Import tools ---- -# Note: globbing sources is considered bad practice as CMake's generators may not detect new files automatically. -# Keep that in mind when changing files, or explicitly mention them here. -FILE(GLOB_RECURSE headers CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") -FILE(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") +include(cmake/tools.cmake) # ---- Add dependencies via CPM ---- # see https://github.com/TheLartians/CPM.cmake for more info @@ -33,6 +30,13 @@ CPMAddPackage( VERSION 1.0 ) +# ---- Add source files ---- + +# Note: globbing sources is considered bad practice as CMake's generators may not detect new files automatically. +# Keep that in mind when changing files, or explicitly mention them here. +FILE(GLOB_RECURSE headers CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") +FILE(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp") + # ---- Create library ---- # Note: for header-only libraries change all PUBLIC flags to INTERFACE and create an interface target: diff --git a/README.md b/README.md index 5b7f137..fa73dd3 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ This template is the result of learnings from many previous projects and should - Code formatting enforced by [clang-format](https://clang.llvm.org/docs/ClangFormat.html) via [Format.cmake](https://github.com/TheLartians/Format.cmake) - Reproducible dependency management via [CPM.cmake](https://github.com/TheLartians/CPM.cmake) - Installable target with versioning information via [PackageProject.cmake](https://github.com/TheLartians/PackageProject.cmake) +- Support for [sanitizer tools and more](#additional-tools) ## Usage @@ -76,6 +77,14 @@ cmake --build build/test --target fix-format See [Format.cmake](https://github.com/TheLartians/Format.cmake) for more options. +### Additional tools + +The project includes an [tools.cmake](cmake/tools.cmake) file that can be used to import additional tools on-demand through CMake configuration arguments. +The following are currently supported. + +- `-DUSE_SANITIZER=
` +- `-DUSE_CCACHE=` + ## FAQ > Can I use this for header-only libraries? diff --git a/cmake/tools.cmake b/cmake/tools.cmake new file mode 100644 index 0000000..31ec37c --- /dev/null +++ b/cmake/tools.cmake @@ -0,0 +1,33 @@ +# this file contains a list of tools that can be activated and downloaded on-demand +# each tool is enabled during configuration by passing an additional `-DUSE_=` argument to CMake + +# determine if a tool has already been enabled +foreach(TOOL USE_SANITIZER;USE_CCACHE) + get_property(${TOOL}_ENABLED GLOBAL "" PROPERTY ${TOOL}_ENABLED SET) +endforeach() + +# enables sanitizers support using the the `USE_SANITIZER` flag +# available values are: Address, Memory, MemoryWithOrigins, Undefined, Thread, Leak, 'Address;Undefined' +if (USE_SANITIZER AND NOT USE_SANITIZER_ENABLED) + set_property(GLOBAL PROPERTY USE_SANITIZER_ENABLED true) + + CPMAddPackage( + NAME StableCoder-cmake-scripts + GITHUB_REPOSITORY StableCoder/cmake-scripts + GIT_TAG 3a469d8251660a97dbf9e0afff0a242965d40277 + ) + + include(${StableCoder-cmake-scripts_SOURCE_DIR}/sanitizers.cmake) +endif() + +# enables CCACHE support through the USE_CCACHE flag +# possible values are: YES, NO or equivalent +if (USE_CCACHE AND NOT USE_CCACHE_ENABLED) + set_property(GLOBAL PROPERTY USE_CCACHE_ENABLED true) + + CPMAddPackage( + NAME Ccache.cmake + GITHUB_REPOSITORY TheLartians/Ccache.cmake + VERSION 1.1 + ) +endif()