forked from ccache/ccache
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
127 lines (107 loc) · 2.68 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
cmake_minimum_required(VERSION 3.4.3)
project(ccache LANGUAGES ASM C CXX)
set(CMAKE_PROJECT_DESCRIPTION "a fast C/C++ compiler cache")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
set(CMAKE_CXX_EXTENSIONS NO)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED YES)
set(CMAKE_C_EXTENSIONS NO)
# Always export compile_commands.json since it's useful for many tools.
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
#
# Settings
#
include(StandardSettings)
include(StandardWarnings)
include(DefaultBuildType)
#
# Configuration
#
include(GNUInstallDirs)
include(GenerateConfigurationFile)
include(GenerateVersionFile)
#
# Third party
#
option(USE_LIBZSTD_FROM_INTERNET "Download and use libzstd from the Internet" OFF)
find_package(zstd 1.1.2 REQUIRED)
#
# Special flags
#
# Note: Cppcheck will scan everything after this point. zstd is above so it
# doesn't get scanned.
#
include(CodeAnalysis)
option(ENABLE_TRACING "Enable possibility to use internal ccache tracing" OFF)
#
# Source code
#
add_subdirectory(src)
#
# ccache executable
#
add_executable(ccache src/main.cpp)
target_link_libraries(ccache PRIVATE standard_settings standard_warnings ccache_lib)
#
# Documentation
#
add_subdirectory(doc)
#
# Installation
#
install(TARGETS ccache DESTINATION ${CMAKE_INSTALL_BINDIR})
#
# Packaging
#
include(CCachePackConfig)
#
# Tests
#
option(ENABLE_TESTING "Enable tests" ON)
if(ENABLE_TESTING)
enable_testing()
add_subdirectory(unittest)
add_subdirectory(test)
# Note: VERSION_GREATER_EQUAL requires CMake 3.17
if(NOT ${CMAKE_VERSION} VERSION_LESS "3.17")
list(APPEND CMAKE_CTEST_ARGUMENTS "--output-on-failure")
endif()
# Add "check" target which compiles and runs tests.
set(
check_command
${CMAKE_CTEST_COMMAND} --force-new-ctest-process --output-on-failure)
if(CMAKE_CONFIGURATION_TYPES)
list(APPEND check_command --build-config "$<CONFIGURATION>")
endif()
add_custom_target(
check
COMMAND ${check_command}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS ccache unittest)
endif()
#
# Special formatting targets
#
find_program(
CLANG_FORMAT_EXE
NAMES "clang-format"
DOC "Path to clang-format executable.")
mark_as_advanced(CLANG_FORMAT_EXE) # Don't show in CMake UIs
if(NOT CLANG_FORMAT_EXE)
message(WARNING "clang-format not found")
else()
add_custom_target(
format
COMMAND misc/format.sh
COMMENT "Formatting code"
USES_TERMINAL
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
add_custom_target(
check_format
COMMAND misc/check_format.sh
COMMENT "Checking code formatting"
USES_TERMINAL
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
endif()