-
Notifications
You must be signed in to change notification settings - Fork 51
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
126 lines (98 loc) · 3.85 KB
/
Copy pathCMakeLists.txt
File metadata and controls
126 lines (98 loc) · 3.85 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
cmake_minimum_required(VERSION 3.29)
include(cmake/CPM.cmake)
# Add cpp-library for set version
# [DEPENDENCY] https://github.com/stlab/cpp-library
# CPMAddPackage(
# NAME cpp-library
# SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../cpp-library"
# )
CPMAddPackage("gh:stlab/cpp-library@5.4.1")
include(${cpp-library_SOURCE_DIR}/cpp-library.cmake)
project(adobe-source-libraries CXX)
cpp_library_set_version()
################################################################################
include(FindGit)
include(CMakeParseArguments)
if(PROJECT_IS_TOP_LEVEL)
include(CTest)
endif()
if(WIN32)
set(CMAKE_OBJECT_PATH_MAX 500)
endif()
################################################################################
# Dependencies
# https://github.com/stlab/copy-on-write/releases
CPMAddPackage("gh:stlab/copy-on-write@1.1.1")
# https://github.com/stlab/enum-ops/releases
CPMAddPackage(gh:stlab/enum-ops@1.2.0)
# 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++")
# https://github.com/boostorg/boost/releases
CPMAddPackage(
NAME Boost
VERSION 1.91.0-1
URL https://github.com/boostorg/boost/releases/download/boost-1.91.0-1/boost-1.91.0-1-cmake.7z
URL_HASH SHA256=29c7d4f4ac36ad853b6765d03571ea60d90286775df026b4efd9f3281131972b
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)
# Download doxygen-awesome-css theme via CPM
# https://github.com/jothepro/doxygen-awesome-css
CPMAddPackage(
URI gh:jothepro/doxygen-awesome-css@2.4.2
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 ${PROJECT_VERSION})
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")
endif()