-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
169 lines (143 loc) · 5.6 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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
cmake_minimum_required(VERSION 3.20)
project(pf_glfw
VERSION 0.2.2)
if (MSVC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29.30129 AND CMAKE_VERSION VERSION_GREATER 3.20.3)
set(CMAKE_CXX_STANDARD 23) # /std:c++latest - unlocks the non stable cpp20 features. For new 16.11 versions
else ()
set(CMAKE_CXX_STANDARD 20) # /std:c++latest for msvc and -std=c++20 for everyone else.
endif ()
find_package(fmt CONFIG REQUIRED)
find_package(glfw3 CONFIG REQUIRED)
find_package(range-v3 CONFIG REQUIRED)
find_package(magic_enum CONFIG REQUIRED)
find_package(glm CONFIG REQUIRED)
find_package(pf_common CONFIG REQUIRED)
set(SOURCES
src/pf_glfw/Window.cpp
src/pf_glfw/enums/Key.cpp
src/pf_glfw/Cursor.cpp
src/pf_glfw/Image.cpp
src/pf_glfw/Monitor.cpp
src/pf_glfw/GLFW.cpp
src/pf_glfw/WindowHints.cpp
src/pf_glfw/Joystick.cpp)
set(INCLUDES
src/pf_glfw/Window.h
src/pf_glfw/enums/Key.h
src/pf_glfw/enums/KeyAction.h
src/pf_glfw/enums/ModifierKey.h
src/pf_glfw/enums/MouseButton.h
src/pf_glfw/enums/CursorEntered.h
src/pf_glfw/Cursor.h
src/pf_glfw/Image.h
src/pf_glfw/enums/CursorShape.h
src/pf_glfw/Monitor.h
src/pf_glfw/enums/Connection.h
src/pf_glfw/concepts.h
src/pf_glfw/structs.h
src/pf_glfw/GLFW.h
src/pf_glfw/fwd.h
src/pf_glfw/enums/Error.h
src/pf_glfw/Exception.h
src/pf_glfw/enums/ButtonState.h
src/pf_glfw/enums/CursorBehavior.h
src/pf_glfw/WindowHints.h
src/pf_glfw/constants.h
src/pf_glfw/enums/OpenGLProfile.h
src/pf_glfw/enums/ContextCreationAPI.h
src/pf_glfw/enums/ContextRobustness.h
src/pf_glfw/enums/ContextReleaseBehavior.h
src/pf_glfw/enums/ClientAPI.h
src/pf_glfw/enums/GamepadAxis.h
src/pf_glfw/enums/GamepadButton.h
src/pf_glfw/enums/JoystickHatState.h
src/pf_glfw/enums/JoystickID.h
src/pf_glfw/Joystick.h src/pf_glfw/VideoMode.h src/pf_glfw/GammaRamp.h)
SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on windows")
SET(CMAKE_RELEASE_POSTFIX "" CACHE STRING "add a postfix, usually empty on windows")
SET(CMAKE_RELWITHDEBINFO_POSTFIX "rd" CACHE STRING "add a postfix, usually empty on windows")
SET(CMAKE_MINSIZEREL_POSTFIX "s" CACHE STRING "add a postfix, usually empty on windows")
add_library(${PROJECT_NAME} STATIC ${SOURCES} ${INCLUDES})
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
target_compile_options(${PROJECT_NAME} PRIVATE ${flags})
include(GNUInstallDirs)
target_include_directories(${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_include_directories(${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>)
target_link_libraries(${PROJECT_NAME} PUBLIC pf_common::pf_common glfw)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
include(GenerateExportHeader)
generate_export_header(${PROJECT_NAME} EXPORT_FILE_NAME ${PROJECT_NAME}/${PROJECT_NAME_LOWER}_export.h)
set_property(TARGET ${PROJECT_NAME} PROPERTY VERSION ${PROJECT_VERSION})
set_property(TARGET ${PROJECT_NAME} PROPERTY SOVERSION ${PROJECT_VERSION_MAJOR})
set_property(TARGET ${PROJECT_NAME} PROPERTY INTERFACE_${PROJECT_NAME}_MAJOR_VERSION ${PROJECT_VERSION_MAJOR})
set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY COMPATIBLE_INTERFACE_STRING ${PROJECT_NAME}_MAJOR_VERSION)
install(TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}Targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
#install(
# FILES
# ${INCLUDES}
# ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME_LOWER}_export.h
# DESTINATION
# ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
# COMPONENT
# Devel
#)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME_LOWER}_export.h
DESTINATION
${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
COMPONENT
Devel
)
install(
DIRECTORY "${CMAKE_SOURCE_DIR}/src/pf_glfw/"
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
FILES_MATCHING
PATTERN "*.h"
)
install(
FILES
${GENERATED_INCLUDES}
DESTINATION
${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/Generated
COMPONENT
Devel
)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
export(EXPORT ${PROJECT_NAME}Targets
FILE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Targets.cmake
NAMESPACE ${PROJECT_NAME}::
)
set(ConfigPackageLocation lib/cmake/${PROJECT_NAME})
install(EXPORT ${PROJECT_NAME}Targets
FILE
${PROJECT_NAME}Targets.cmake
NAMESPACE
${PROJECT_NAME}::
DESTINATION
${ConfigPackageLocation}
)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake
"include($" "{CMAKE_CURRENT_LIST_DIR}/${PROJECT_NAME}Targets.cmake)"
)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake
DESTINATION
${ConfigPackageLocation}
COMPONENT
Devel
)