Add tools.cmake (#14)
* add sanitizer support. closes #13. * add comment * add tools.cmake * document tools * cleanup * add tools to feature list
This commit is contained in:
		
							parent
							
								
									62469ec741
								
							
						
					
					
						commit
						cec2e8cf4d
					
				
					 3 changed files with 51 additions and 5 deletions
				
			
		|  | @ -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: | ||||
|  |  | |||
|  | @ -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=<Address | Memory | MemoryWithOrigins | Undefined | Thread | Leak | 'Address;Undefined'>` | ||||
| - `-DUSE_CCACHE=<YES | NO>` | ||||
| 
 | ||||
| ## FAQ | ||||
| 
 | ||||
| > Can I use this for header-only libraries? | ||||
|  |  | |||
							
								
								
									
										33
									
								
								cmake/tools.cmake
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								cmake/tools.cmake
									
										
									
									
									
										Normal file
									
								
							|  | @ -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_<TOOL>=<VALUE>` 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() | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue