-
Notifications
You must be signed in to change notification settings - Fork 52
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
129 lines (103 loc) · 3.34 KB
/
CMakeLists.txt
File metadata and controls
129 lines (103 loc) · 3.34 KB
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
128
129
cmake_minimum_required(VERSION 3.11...3.31)
project(dylib VERSION 3.0.1 LANGUAGES CXX)
if(NOT "${CMAKE_CXX_STANDARD}")
set(CMAKE_CXX_STANDARD 11)
endif()
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(SOURCES
src/dylib.cpp
src/symbols.cpp
src/demangle.cpp
src/format.cpp
)
add_library(dylib ${SOURCES})
if(BUILD_SHARED_LIBS AND WIN32)
set_target_properties(dylib PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
endif()
target_include_directories(dylib
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
if(UNIX)
target_link_libraries(dylib PRIVATE dl)
endif()
include(GNUInstallDirs)
install(
TARGETS dylib
EXPORT dylibTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(
DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(
EXPORT dylibTargets
FILE dylibTargets.cmake
NAMESPACE dylib::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/dylib
)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/dylibConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/dylibConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/dylibConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/dylib
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/dylibConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/dylibConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/dylib
)
option(DYLIB_BUILD_TESTS "When set to ON, build unit tests" OFF)
option(DYLIB_WARNING_AS_ERRORS "Treat warnings as errors" OFF)
if(DYLIB_BUILD_TESTS)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
find_package(googletest QUIET)
include(FetchContent)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/refs/tags/v1.15.2.zip
)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-Wall -Wextra -Weffc++)
elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
add_compile_options(-Wall -Wextra)
elseif(MSVC)
add_compile_options(/W4)
endif()
if(DYLIB_WARNING_AS_ERRORS)
if(MSVC)
add_compile_options(/WX)
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES ".*Clang")
add_compile_options(-Werror)
endif()
endif()
add_library(dynamic_lib SHARED tests/lib.cpp)
if(WIN32 AND MINGW)
set_target_properties(dynamic_lib PROPERTIES PREFIX "")
endif()
enable_testing()
if(UNIX AND NOT APPLE)
add_compile_options(-fprofile-arcs -ftest-coverage)
endif()
add_executable(unit_tests tests/tests.cpp)
add_dependencies(unit_tests dynamic_lib)
target_link_libraries(unit_tests PRIVATE gtest_main dylib)
if(UNIX AND NOT APPLE)
target_link_libraries(unit_tests PRIVATE gcov)
endif()
include(GoogleTest)
gtest_discover_tests(unit_tests PROPERTIES DISCOVERY_TIMEOUT 600 WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
endif()