|
1 | 1 | # |
2 | 2 | # ImGui Library |
3 | 3 | # |
4 | | -cmake_minimum_required(VERSION 3.6.0) |
| 4 | +cmake_minimum_required(VERSION 3.15) |
5 | 5 |
|
6 | 6 | include(CMakeOptions.cmake) |
7 | | -include(CMakeImplFiles.cmake) |
8 | 7 |
|
9 | 8 |
|
10 | 9 | ################################################################################################################## |
11 | | -# Setup |
| 10 | +# PROJECT |
12 | 11 | ################################################################################################################## |
| 12 | + |
| 13 | +set(imgui_VERSION 1.88.0) |
| 14 | + |
13 | 15 | project(imgui |
14 | | - VERSION 1.88 |
15 | | - LANGUAGES CXX |
16 | | - DESCRIPTION "ImGui library." |
| 16 | + VERSION ${imgui_VERSION} |
| 17 | + LANGUAGES CXX |
| 18 | + DESCRIPTION "Build ImGui as shared or static library." |
| 19 | + HOMEPAGE_URL "https://github.com/ocornut/imgui" |
17 | 20 | ) |
18 | 21 |
|
19 | | -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/$<CONFIG>) |
20 | | -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/$<CONFIG>) |
21 | | -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/$<CONFIG>) |
22 | | -set(CMAKE_PDB_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/$<CONFIG>) |
| 22 | +set(CMAKE_VERBOSE_MAKEFILE TRUE CACHE BOOL "" FORCE) |
23 | 23 |
|
24 | | -set(CMAKE_VERBOSE_MAKEFILE TRUE) |
| 24 | +# Note that for multi-config generators, we don't need to set CMAKE_BUILD_TYPE. |
| 25 | +# However for single-config generators, depending on the type of generator and cmake version, |
| 26 | +# both may be null and we set CMAKE_BUILD_TYPE just in case. |
| 27 | +if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) |
| 28 | + message(STATUS "[ImGui] CMAKE_BUILD_TYPE was not set. Defaults to Release.") |
| 29 | + set(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE) |
| 30 | +endif() |
25 | 31 |
|
26 | | -if (WIN32) |
27 | | - if (IMGUI_STATIC_LIBRARY) |
28 | | - message(STATUS "[INFO] Building library as --> Static Library") |
29 | | - set(BUILD_SHARED_LIBS OFF) |
30 | | - set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS OFF) |
31 | | - else() |
32 | | - message(STATUS "[INFO] Building library as --> DLL") |
33 | | - set(BUILD_SHARED_LIBS ON) |
34 | | - set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) |
35 | | - endif() |
| 32 | +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) |
| 33 | + message(STATUS "[ImGui] Default install path: [${CMAKE_BINARY_DIR}/dist]") |
| 34 | + set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/dist" CACHE PATH "" FORCE) |
36 | 35 | endif() |
37 | 36 |
|
38 | | -set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/imgui) |
39 | | -set(BACKENDS_DIR ${SOURCE_DIR}/backends) |
40 | | -set(FONTS_DIR ${SOURCE_DIR}/misc/fonts) |
| 37 | +set(IMGUI_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/imgui) |
| 38 | +set(BACKENDS_DIR ${IMGUI_SOURCE_DIR}/backends) |
41 | 39 |
|
42 | 40 |
|
43 | 41 | ################################################################################################################## |
44 | | -# Project Files |
| 42 | +# SOURCES |
45 | 43 | ################################################################################################################## |
46 | | -set(HEADERS_CXX_FILES |
47 | | - ${SOURCE_DIR}/imgui.h |
48 | | - ${SOURCE_DIR}/imconfig.h |
49 | | - ${SOURCE_DIR}/imgui_internal.h |
50 | | - ${SOURCE_DIR}/imstb_rectpack.h |
51 | | - ${SOURCE_DIR}/imstb_textedit.h |
52 | | - ${SOURCE_DIR}/imstb_truetype.h |
| 44 | + |
| 45 | +set(PUBLIC_H_FILES |
| 46 | + ${IMGUI_SOURCE_DIR}/imgui.h |
| 47 | + ${IMGUI_SOURCE_DIR}/imconfig.h |
| 48 | + ${IMGUI_SOURCE_DIR}/imgui_internal.h |
| 49 | + ${IMGUI_SOURCE_DIR}/imstb_rectpack.h |
| 50 | + ${IMGUI_SOURCE_DIR}/imstb_textedit.h |
| 51 | + ${IMGUI_SOURCE_DIR}/imstb_truetype.h |
53 | 52 | ) |
54 | 53 |
|
55 | | -set(SOURCES_CXX_FILES |
56 | | - ${SOURCE_DIR}/imgui.cpp |
57 | | - ${SOURCE_DIR}/imgui_draw.cpp |
58 | | - ${SOURCE_DIR}/imgui_widgets.cpp |
59 | | - ${SOURCE_DIR}/imgui_demo.cpp |
60 | | - ${SOURCE_DIR}/imgui_tables.cpp |
| 54 | +set(PUBLIC_CXX_FILES |
| 55 | + ${IMGUI_SOURCE_DIR}/imgui.cpp |
| 56 | + ${IMGUI_SOURCE_DIR}/imgui_draw.cpp |
| 57 | + ${IMGUI_SOURCE_DIR}/imgui_widgets.cpp |
| 58 | + ${IMGUI_SOURCE_DIR}/imgui_demo.cpp |
| 59 | + ${IMGUI_SOURCE_DIR}/imgui_tables.cpp |
61 | 60 | ) |
62 | 61 |
|
63 | | -file(GLOB FONTS_FILES ${FONTS_DIR}/*.ttf) |
| 62 | +file(GLOB FONTS_FILES ${IMGUI_SOURCE_DIR}/misc/fonts/*.ttf) |
64 | 63 |
|
65 | | -set(HEADERS_CXX_IMPL_FILES) |
66 | | -set(SOURCES_CXX_IMPL_FILES) |
67 | | -if (IMGUI_WITH_IMPL) |
68 | | - Init_Impl_Files(HEADERS_CXX_IMPL_FILES SOURCES_CXX_IMPL_FILES) |
| 64 | +set(IMGUI_INTERFACE_LIBS "") |
| 65 | +if(IMGUI_WITH_BACKEND) |
| 66 | + if("${IMGUI_BACKEND_PLATFORM}" STREQUAL "WIN32") |
| 67 | + message(STATUS "[ImGui] Including backend platform: [WIN32]") |
| 68 | + list(APPEND PUBLIC_H_FILES ${BACKENDS_DIR}/imgui_impl_win32.h) |
| 69 | + list(APPEND PUBLIC_CXX_FILES ${BACKENDS_DIR}/imgui_impl_win32.cpp) |
| 70 | + endif() |
| 71 | + |
| 72 | + if(IMGUI_BACKEND_DX9) |
| 73 | + message(STATUS "[ImGui] Including backend api: [Direct3D9]") |
| 74 | + list(APPEND PUBLIC_H_FILES ${BACKENDS_DIR}/imgui_impl_dx9.h) |
| 75 | + list(APPEND PUBLIC_CXX_FILES ${BACKENDS_DIR}/imgui_impl_dx9.cpp) |
| 76 | + list(APPEND IMGUI_INTERFACE_LIBS d3d9) |
| 77 | + endif() |
| 78 | + if(IMGUI_BACKEND_DX10) |
| 79 | + message(STATUS "[ImGui] Including backend api: [Direct3D10]") |
| 80 | + list(APPEND PUBLIC_H_FILES ${BACKENDS_DIR}/imgui_impl_dx10.h) |
| 81 | + list(APPEND PUBLIC_CXX_FILES ${BACKENDS_DIR}/imgui_impl_dx10.cpp) |
| 82 | + list(APPEND IMGUI_INTERFACE_LIBS d3d10) |
| 83 | + endif() |
| 84 | + if(IMGUI_BACKEND_DX11) |
| 85 | + message(STATUS "[ImGui] Including backend api: [Direct3D11]") |
| 86 | + list(APPEND PUBLIC_H_FILES ${BACKENDS_DIR}/imgui_impl_dx11.h) |
| 87 | + list(APPEND PUBLIC_CXX_FILES ${BACKENDS_DIR}/imgui_impl_dx11.cpp) |
| 88 | + list(APPEND IMGUI_INTERFACE_LIBS d3d11) |
| 89 | + endif() |
| 90 | + if(IMGUI_BACKEND_DX12) |
| 91 | + message(STATUS "[ImGui] Including backend api: [Direct3D12]") |
| 92 | + list(APPEND PUBLIC_H_FILES ${BACKENDS_DIR}/imgui_impl_dx12.h) |
| 93 | + list(APPEND PUBLIC_CXX_FILES ${BACKENDS_DIR}/imgui_impl_dx12.cpp) |
| 94 | + list(APPEND IMGUI_INTERFACE_LIBS d3d12) |
| 95 | + list(APPEND IMGUI_INTERFACE_LIBS dxgi) |
| 96 | + # list(APPEND IMGUI_INTERFACE_LIBS d3dcompiler) |
| 97 | + endif() |
69 | 98 | endif() |
70 | 99 |
|
| 100 | +set(PROJECT_FILES |
| 101 | + ${PUBLIC_H_FILES} |
| 102 | + ${PUBLIC_CXX_FILES} |
| 103 | + ${FONTS_FILES} |
| 104 | +) |
| 105 | + |
71 | 106 |
|
72 | 107 | ################################################################################################################## |
73 | | -# IDE Representation |
| 108 | +# IDE REPRESENTATION |
74 | 109 | ################################################################################################################## |
| 110 | + |
75 | 111 | # Groups CMake pre-defined projects: |
76 | 112 | set_property(GLOBAL PROPERTY USE_FOLDERS ON) |
77 | | - |
78 | | -source_group("Header Files" FILES |
79 | | - ${HEADERS_CXX_FILES} |
80 | | -) |
81 | | -source_group("Header Files\\Impl" FILES |
82 | | - ${HEADERS_CXX_IMPL_FILES} |
83 | | -) |
84 | | -source_group("Source Files" FILES |
85 | | - ${SOURCES_CXX_FILES} |
86 | | -) |
87 | | -source_group("Source Files\\Impl" FILES |
88 | | - ${SOURCES_CXX_IMPL_FILES} |
89 | | -) |
90 | | -source_group("Resource Files" FILES |
91 | | - ${FONTS_FILES} |
92 | | -) |
| 113 | +source_group("" FILES ${PUBLIC_H_FILES}) |
| 114 | +source_group("" FILES ${PUBLIC_CXX_FILES}) |
| 115 | +source_group("\\Fonts" FILES ${FONTS_FILES}) |
93 | 116 |
|
94 | 117 |
|
95 | 118 | ################################################################################################################## |
96 | | -# Target |
| 119 | +# TARGET |
97 | 120 | ################################################################################################################## |
98 | | -add_library(${PROJECT_NAME} |
99 | | - ${HEADERS_CXX_FILES} |
100 | | - ${SOURCES_CXX_FILES} |
101 | | - ${HEADERS_CXX_IMPL_FILES} |
102 | | - ${SOURCES_CXX_IMPL_FILES} |
103 | | - ${FONTS_FILES} |
| 121 | + |
| 122 | +if(IMGUI_STATIC_LIBRARY) |
| 123 | + message(STATUS "[ImGui] Building STATIC library") |
| 124 | + add_library(${PROJECT_NAME} STATIC ${PROJECT_FILES}) |
| 125 | +else() |
| 126 | + message(STATUS "[ImGui] Building SHARED library") |
| 127 | + add_library(${PROJECT_NAME} SHARED ${PROJECT_FILES}) |
| 128 | +endif() |
| 129 | +add_library(ImGui::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) |
| 130 | + |
| 131 | +target_include_directories(${PROJECT_NAME} |
| 132 | + PUBLIC |
| 133 | + $<BUILD_INTERFACE:${IMGUI_SOURCE_DIR}> |
| 134 | + $<BUILD_INTERFACE:${BACKENDS_DIR}> |
| 135 | + $<INSTALL_INTERFACE:include> # ${CMAKE_INSTALL_PREFIX}/include |
104 | 136 | ) |
105 | | -target_include_directories(${PROJECT_NAME} PUBLIC |
106 | | - ${SOURCE_DIR} |
107 | | - ${SOURCE_DIR}/backends |
| 137 | +target_link_libraries(${PROJECT_NAME} INTERFACE ${IMGUI_INTERFACE_LIBS}) |
| 138 | + |
| 139 | +if(IMGUI_BACKEND_DX12) |
| 140 | + target_link_libraries(${PROJECT_NAME} PRIVATE d3d12 dxgi) |
| 141 | + target_compile_definitions(${PROJECT_NAME} PRIVATE ImTextureID=ImU64) |
| 142 | +endif() |
| 143 | + |
| 144 | +target_compile_options(${PROJECT_NAME} |
| 145 | + PUBLIC |
| 146 | + $<$<CXX_COMPILER_ID:MSVC>:$<$<CONFIG:Debug>:/MTd>> |
| 147 | + $<$<CXX_COMPILER_ID:MSVC>:$<$<CONFIG:MinSizeRel>:/MT>> |
| 148 | + $<$<CXX_COMPILER_ID:MSVC>:$<$<CONFIG:Release>:/MT>> |
| 149 | + $<$<CXX_COMPILER_ID:MSVC>:$<$<CONFIG:RelWithDebInfo>:/MTd>> |
108 | 150 | ) |
109 | | -if(IMGUI_IMPL_DX12 AND NOT IMGUI_STATIC_LIBRARY) |
110 | | - target_link_libraries(${PROJECT_NAME} PUBLIC d3d12) |
| 151 | + |
| 152 | +if(MSVC) |
| 153 | + if(IMGUI_STATIC_LIBRARY) |
| 154 | + set_property(TARGET ${PROJECT_NAME} PROPERTY WINDOWS_EXPORT_ALL_SYMBOLS OFF) |
| 155 | + else() |
| 156 | + set_property(TARGET ${PROJECT_NAME} PROPERTY WINDOWS_EXPORT_ALL_SYMBOLS ON) |
| 157 | + endif() |
111 | 158 | endif() |
112 | 159 |
|
| 160 | +set_target_properties(${PROJECT_NAME} PROPERTIES |
| 161 | + DEBUG_POSTFIX "${STATIC_POSTFIX}d" |
| 162 | + RELEASE_POSTFIX "${STATIC_POSTFIX}" |
| 163 | + MINSIZEREL_POSTFIX "${STATIC_POSTFIX}mr" |
| 164 | + RELWITHDEBINFO_POSTFIX "${STATIC_POSTFIX}rd" |
| 165 | +) |
| 166 | + |
113 | 167 |
|
114 | 168 | ################################################################################################################## |
115 | | -# Target Install |
| 169 | +# INSTALL |
116 | 170 | ################################################################################################################## |
117 | | -set (DISTRIBUTE_DIR ${CMAKE_BINARY_DIR}/dist/$<CONFIG>) |
118 | | -install( |
119 | | - TARGETS ${PROJECT_NAME} |
120 | | - RUNTIME DESTINATION ${DISTRIBUTE_DIR}/bin |
121 | | - LIBRARY DESTINATION ${DISTRIBUTE_DIR}/lib |
122 | | - ARCHIVE DESTINATION ${DISTRIBUTE_DIR}/lib |
| 171 | + |
| 172 | +set(CMAKE_PACKAGE_NAME "ImGui") |
| 173 | +string(TOLOWER ${CMAKE_PACKAGE_NAME} CMAKE_PACKAGE_NAME_LOWER) |
| 174 | +set(TARGETS_EXPORT_NAME "${CMAKE_PACKAGE_NAME}Targets") |
| 175 | + |
| 176 | +install(TARGETS ${PROJECT_NAME} |
| 177 | + EXPORT ${TARGETS_EXPORT_NAME} |
123 | 178 | ) |
124 | | -install( |
125 | | - FILES ${HEADERS_CXX_FILES} ${HEADERS_CXX_IMPL_FILES} |
126 | | - DESTINATION ${DISTRIBUTE_DIR}/include |
| 179 | +install(FILES ${PUBLIC_H_FILES} |
| 180 | + DESTINATION include/imgui |
127 | 181 | ) |
128 | | -install( |
129 | | - FILES ${FONTS_FILES} |
130 | | - DESTINATION ${DISTRIBUTE_DIR}/misc/fonts |
| 182 | +install(FILES ${FONTS_FILES} |
| 183 | + DESTINATION misc/fonts |
131 | 184 | ) |
132 | 185 |
|
133 | | -# Install PDB files for VS builds to enable debugging: |
134 | | -if (MSVC) |
135 | | - if (NOT IMGUI_STATIC_LIBRARY) |
136 | | - install( |
137 | | - FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> |
138 | | - DESTINATION ${DISTRIBUTE_DIR}/lib |
139 | | - CONFIGURATIONS Debug OR RelWithDebInfo |
140 | | - COMPONENT libraries |
141 | | - OPTIONAL |
| 186 | +if(MSVC) |
| 187 | + if(IMGUI_STATIC_LIBRARY) |
| 188 | + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/$<TARGET_FILE_BASE_NAME:${PROJECT_NAME}>.pdb |
| 189 | + DESTINATION lib |
| 190 | + CONFIGURATIONS Debug OR RelWithDebInfo |
142 | 191 | ) |
143 | 192 | else() |
144 | | - install( |
145 | | - FILES |
146 | | - $<$<CONFIG:Debug>:${CMAKE_BINARY_DIR}/bin/$<CONFIG>/${PROJECT_NAME}.pdb> |
147 | | - $<$<CONFIG:RelWithDebInfo>:${CMAKE_BINARY_DIR}/${PROJECT_NAME}.dir/$<CONFIG>/${PROJECT_NAME}.pdb> |
148 | | - DESTINATION ${DISTRIBUTE_DIR}/lib |
149 | | - CONFIGURATIONS Debug OR RelWithDebInfo |
150 | | - COMPONENT libraries |
151 | | - OPTIONAL |
| 193 | + install(FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> |
| 194 | + DESTINATION bin |
| 195 | + CONFIGURATIONS Debug OR RelWithDebInfo |
152 | 196 | ) |
153 | 197 | endif() |
154 | 198 | endif() |
155 | 199 |
|
| 200 | + |
| 201 | +################################################################################################################## |
| 202 | +# PACKAGE |
| 203 | +################################################################################################################## |
| 204 | + |
| 205 | +include(CMakePackageConfigHelpers) |
| 206 | + |
| 207 | +set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") |
| 208 | +set(CMAKE_FILES_INSTALL_DIR "lib/cmake/${CMAKE_PACKAGE_NAME_LOWER}") |
| 209 | +set(VERSION_FILE "${GENERATED_DIR}/${CMAKE_PACKAGE_NAME}ConfigVersion.cmake") |
| 210 | +set(CONFIG_FILE "${GENERATED_DIR}/${CMAKE_PACKAGE_NAME}Config.cmake") |
| 211 | + |
| 212 | +file(WRITE "${CONFIG_FILE}.in" |
| 213 | +"@PACKAGE_INIT@ |
| 214 | +
|
| 215 | +include(\"\${CMAKE_CURRENT_LIST_DIR}/${TARGETS_EXPORT_NAME}.cmake\") |
| 216 | +") |
| 217 | + |
| 218 | +write_basic_package_version_file(${VERSION_FILE} VERSION ${imgui_VERSION} COMPATIBILITY AnyNewerVersion) |
| 219 | +configure_package_config_file("${CONFIG_FILE}.in" ${CONFIG_FILE} INSTALL_DESTINATION ${CMAKE_FILES_INSTALL_DIR}) |
| 220 | + |
| 221 | +install(EXPORT ${TARGETS_EXPORT_NAME} |
| 222 | + NAMESPACE ${CMAKE_PACKAGE_NAME}:: |
| 223 | + DESTINATION ${CMAKE_FILES_INSTALL_DIR} |
| 224 | +) |
| 225 | +install(FILES ${VERSION_FILE} ${CONFIG_FILE} |
| 226 | + DESTINATION ${CMAKE_FILES_INSTALL_DIR} |
| 227 | +) |
0 commit comments