Repository navigation
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
130 lines (103 loc) · 4.35 KB
/
Copy pathCMakeLists.txt
File metadata and controls
130 lines (103 loc) · 4.35 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
130
cmake_minimum_required(VERSION 3.29)
project(adobe-source-libraries CXX)
include(FindGit)
include(CMakeParseArguments)
if (PROJECT_IS_TOP_LEVEL)
include(CTest)
endif()
if(WIN32)
set(CMAKE_OBJECT_PATH_MAX 500)
endif()
################################################################################
# Enable CPM caching to avoid re-downloading dependencies. Must be before CPM.cmake include.
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm CACHE PATH "Directory to cache CPM packages" FORCE)
include(cmake/CPM.cmake)
################################################################################
# Dependencies
# https://github.com/stlab/copy-on-write/releases
CPMAddPackage("gh:stlab/copy-on-write@1.0.4")
# https://github.com/stlab/enum-ops/releases
CPMAddPackage(gh:stlab/enum-ops@1.0.4)
# CPMAddPackage(NAME enum-ops
# URL "${CMAKE_SOURCE_DIR}/../enum-ops"
# )
################################################################################
set(CMAKE_CXX_EXTENSIONS OFF)
if(NOT DEFINED CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 20)
endif(NOT DEFINED CMAKE_CXX_STANDARD)
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
# Create symlink to compile_commands.json for clangd
if(CMAKE_EXPORT_COMPILE_COMMANDS AND PROJECT_IS_TOP_LEVEL)
add_custom_target(clangd_compile_commands ALL
COMMAND ${CMAKE_COMMAND} -E create_symlink
${CMAKE_BINARY_DIR}/compile_commands.json
${CMAKE_SOURCE_DIR}/compile_commands.json
COMMENT "Creating symlink to compile_commands.json for clangd"
)
endif()
# https://github.com/boostorg/boost/releases
CPMAddPackage(
NAME Boost
VERSION 1.88.0
URL https://github.com/boostorg/boost/releases/download/boost-1.88.0/boost-1.88.0-cmake.7z
URL_HASH SHA256=feba537f6d32c062ed0f26b4d6e5b8e8450d51ef81492369a101ab99fcead278
OPTIONS
"BOOST_ENABLE_CMAKE ON"
"CMAKE_CXX_CLANG_TIDY ;"
)
function(target_link_boost target)
target_link_libraries(${target} PUBLIC Boost::system)
target_link_libraries(${target} PUBLIC Boost::signals2)
target_link_libraries(${target} PUBLIC Boost::range)
target_link_libraries(${target} PUBLIC Boost::multiprecision)
target_link_libraries(${target} PUBLIC Boost::date_time)
target_link_libraries(${target} PUBLIC stlab::copy-on-write)
target_link_libraries(${target} PUBLIC stlab::enum-ops)
endfunction(target_link_boost)
function(target_link_boost_test target)
target_link_libraries(${target} PRIVATE Boost::unit_test_framework)
target_link_libraries(${target} PRIVATE Boost::program_options)
endfunction(target_link_boost_test)
add_subdirectory(source)
if(PROJECT_IS_TOP_LEVEL AND BUILD_TESTING)
add_subdirectory(test)
endif()
# Documentation with Doxygen
option(BUILD_DOCS "Build documentation" OFF)
if(BUILD_DOCS)
find_package(Doxygen REQUIRED)
if(DOXYGEN_FOUND)
# Download doxygen-awesome-css theme via CPM
CPMAddPackage(
URI gh:jothepro/doxygen-awesome-css@2.3.4
DOWNLOAD_ONLY YES
)
set(AWESOME_CSS_DIR ${doxygen-awesome-css_SOURCE_DIR})
# Configure Doxyfile
set(DOXYFILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/documentation/doxyfile.in)
set(DOXYFILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
# Set variables for Doxyfile template
set(PROJECT_NAME "Adobe Source Libraries")
set(PROJECT_BRIEF "A collection of C++ libraries.")
set(PROJECT_VERSION "2.0.0")
set(INPUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}")
set(AWESOME_CSS_PATH "${AWESOME_CSS_DIR}")
set(CMAKE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY)
# Add custom target for documentation
add_custom_target(docs
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating API documentation with Doxygen"
VERBATIM
)
# Ensure the output directory exists
file(MAKE_DIRECTORY ${OUTPUT_DIR})
message(STATUS "Documentation target 'docs' configured")
message(STATUS "Run 'cmake --build . --target docs' to generate documentation")
else()
message(WARNING "Doxygen not found. Documentation will not be built.")
endif()
endif()