forked from ocornut/imgui
-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
221 lines (203 loc) · 12.5 KB
/
CMakeLists.txt
File metadata and controls
221 lines (203 loc) · 12.5 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
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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
cmake_minimum_required(VERSION 3.16)
# A simple cmake setup for the main library and some backends.
project(imgui)
option(IMGUI_DEFINE_MATH_OPERATORS "Enable ImGui ImVec2/ImVec4 operators" OFF)
option(IMGUI_BUILD_EXAMPLES "" OFF)
option(IMGUI_ENABLE_STDLIB "Enable imgui_stdlib header" ON)
# Renderer / platform backend selection. Accepts a single value or a CMake list
# (semicolon-separated) to enable multiple backends in one build, e.g.
# -DIMGUI_BACKEND_RENDERER="opengl3;vulkan" -DIMGUI_BACKEND_PLATFORM="glfw;win32"
set(IMGUI_BACKEND_RENDERER "opengl3" CACHE STRING
"Renderer backend(s), semicolon-separated. Allowed: none null allegro5 dx9 dx10 dx11 dx12 metal opengl2 opengl3 sdlrenderer2 sdlrenderer3 vulkan wgpu")
set(IMGUI_BACKEND_PLATFORM "glfw" CACHE STRING
"Platform backend(s), semicolon-separated. Allowed: none null allegro5 android glfw glut osx sdl2 sdl3 win32")
add_library(imgui
"${imgui_SOURCE_DIR}/imgui.h"
"${imgui_SOURCE_DIR}/imgui_internal.h"
"${imgui_SOURCE_DIR}/imgui.cpp"
"${imgui_SOURCE_DIR}/imgui_demo.cpp"
"${imgui_SOURCE_DIR}/imgui_draw.cpp"
"${imgui_SOURCE_DIR}/imgui_widgets.cpp"
"${imgui_SOURCE_DIR}/imgui_spectrum.h"
"${imgui_SOURCE_DIR}/imgui_spectrum.cpp"
"${imgui_SOURCE_DIR}/imgui_tables.cpp"
)
add_library(imgui::imgui ALIAS imgui)
if(IMGUI_ENABLE_STDLIB)
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/misc/cpp/imgui_stdlib.h" "${imgui_SOURCE_DIR}/misc/cpp/imgui_stdlib.cpp")
endif()
if(IMGUI_DEFINE_MATH_OPERATORS)
target_compile_definitions(imgui PUBLIC IMGUI_DEFINE_MATH_OPERATORS)
endif()
target_compile_definitions(imgui PUBLIC
IMGUI_IMPL_OPENGL_LOADER_GL3W=1
IMGUI_DISABLE_OBSOLETE_FUNCTIONS # to check for obsolete functions
# IMGUI_USER_CONFIG="${PROJECT_SOURCE_DIR}/path/to/imconfig.h" # to use your own imconfig.h
)
target_include_directories(imgui PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
target_compile_features(imgui PUBLIC cxx_std_11)
# ###########
# BACKENDS #
# ###########
foreach(_imgui_renderer IN LISTS IMGUI_BACKEND_RENDERER)
if(_imgui_renderer STREQUAL "none")
# do nothing. imgui will compile without a renderer.
elseif(_imgui_renderer STREQUAL "null")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_null.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_null.cpp")
set(_imgui_added_null TRUE)
elseif(_imgui_renderer STREQUAL "allegro5")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_allegro5.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_allegro5.cpp")
set(_imgui_added_allegro5 TRUE)
# untested, needs work
elseif(_imgui_renderer STREQUAL "dx9")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_dx9.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_dx9.cpp")
target_link_libraries(imgui PRIVATE d3d9)
elseif(_imgui_renderer STREQUAL "dx10")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_dx10.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_dx10.cpp")
target_link_libraries(imgui PRIVATE d3d10)
elseif(_imgui_renderer STREQUAL "dx11")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_dx11.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_dx11.cpp")
target_link_libraries(imgui PRIVATE d3d11)
elseif(_imgui_renderer STREQUAL "dx12")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_dx12.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_dx12.cpp")
target_link_libraries(imgui PRIVATE d3d12 dxgi)
elseif(_imgui_renderer STREQUAL "metal")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_metal.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_metal.mm")
target_link_libraries(imgui PRIVATE "-framework Metal -framework QuartzCore")
elseif(_imgui_renderer STREQUAL "opengl2")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_opengl2.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_opengl2.cpp")
find_package(OpenGL REQUIRED)
if(TARGET OpenGL::OpenGL)
target_link_libraries(imgui PRIVATE OpenGL::OpenGL)
elseif(TARGET OpenGL::GL)
target_link_libraries(imgui PRIVATE OpenGL::GL)
endif()
elseif(_imgui_renderer STREQUAL "opengl3")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3_loader.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp")
find_package(OpenGL REQUIRED)
if(TARGET OpenGL::OpenGL)
target_link_libraries(imgui PRIVATE OpenGL::OpenGL)
elseif(TARGET OpenGL::GL)
target_link_libraries(imgui PRIVATE OpenGL::GL)
endif()
elseif(_imgui_renderer STREQUAL "sdlrenderer2")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_sdlrenderer2.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_sdlrenderer2.cpp")
# untested, needs work
elseif(_imgui_renderer STREQUAL "sdlrenderer3")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_sdlrenderer3.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_sdlrenderer3.cpp")
# untested, needs work
elseif(_imgui_renderer STREQUAL "vulkan")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_vulkan.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_vulkan.cpp")
# This likely requires you to install the Vulkan SDK.
find_package(Vulkan REQUIRED)
target_link_libraries(imgui PRIVATE Vulkan::Vulkan)
# Untested.
elseif(_imgui_renderer STREQUAL "wgpu")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_wgpu.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_wgpu.cpp")
# untested, needs work
else()
message(FATAL_ERROR "IMGUI_BACKEND_RENDERER contains unknown value '${_imgui_renderer}'")
endif()
endforeach()
foreach(_imgui_platform IN LISTS IMGUI_BACKEND_PLATFORM)
if(_imgui_platform STREQUAL "none")
# do nothing. imgui will compile without a platform.
elseif(_imgui_platform STREQUAL "null" AND _imgui_added_null)
# already included by the renderer backend above
elseif(_imgui_platform STREQUAL "allegro5" AND _imgui_added_allegro5)
# already included by the renderer backend above
elseif(_imgui_platform STREQUAL "android")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_android.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_android.cpp")
# untested, needs work
elseif(_imgui_platform STREQUAL "glfw")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp")
if(NOT TARGET glfw)
include(FetchContent)
FetchContent_Declare(
glfw
GIT_REPOSITORY https://github.com/glfw/glfw.git
GIT_TAG tags/3.4
GIT_SHALLOW TRUE
)
option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" OFF)
option(GLFW_BUILD_TESTS "Build the GLFW test programs" OFF)
option(GLFW_BUILD_DOCS "Build the GLFW documentation" OFF)
option(GLFW_INSTALL "Generate installation target" OFF)
option(GLFW_VULKAN_STATIC "Use the Vulkan loader statically linked into application" OFF)
FetchContent_MakeAvailable(glfw)
endif()
target_link_libraries(imgui PUBLIC glfw)
elseif(_imgui_platform STREQUAL "glut")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_glut.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_glut.cpp")
# untested, needs work
elseif(_imgui_platform STREQUAL "osx")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_osx.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_osx.mm")
target_link_libraries(imgui PRIVATE "-framework AppKit -framework MetalKit -framework Foundation -framework GameController")
# This builds successfully, but hangs on startup. Needs work.
elseif(_imgui_platform STREQUAL "sdl2")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_sdl2.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_sdl2.cpp")
# untested, needs work
elseif(_imgui_platform STREQUAL "sdl3")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_sdl3.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_sdl3.cpp")
# untested, needs work
elseif(_imgui_platform STREQUAL "win32")
target_sources(imgui PRIVATE "${imgui_SOURCE_DIR}/backends/imgui_impl_win32.h" "${imgui_SOURCE_DIR}/backends/imgui_impl_win32.cpp")
else()
message(FATAL_ERROR "IMGUI_BACKEND_PLATFORM contains unknown value '${_imgui_platform}'")
endif()
endforeach()
if(IMGUI_BUILD_EXAMPLES)
set(_imgui_any_example FALSE)
foreach(_imgui_renderer IN LISTS IMGUI_BACKEND_RENDERER)
foreach(_imgui_platform IN LISTS IMGUI_BACKEND_PLATFORM)
set(_imgui_example_name "")
set(_imgui_example_src "")
if(_imgui_renderer STREQUAL "none" AND _imgui_platform STREQUAL "none")
set(_imgui_example_name "imgui_example_null")
set(_imgui_example_src "examples/example_null/main.cpp")
elseif(_imgui_renderer STREQUAL "opengl2" AND _imgui_platform STREQUAL "glfw")
set(_imgui_example_name "imgui_example_glfw_opengl2")
set(_imgui_example_src "examples/example_glfw_opengl2/main.cpp")
elseif(_imgui_renderer STREQUAL "opengl3" AND _imgui_platform STREQUAL "glfw")
set(_imgui_example_name "imgui_example_glfw_opengl3")
set(_imgui_example_src "examples/example_glfw_opengl3/main.cpp")
elseif(_imgui_renderer STREQUAL "vulkan" AND _imgui_platform STREQUAL "glfw")
set(_imgui_example_name "imgui_example_glfw_vulkan")
set(_imgui_example_src "examples/example_glfw_vulkan/main.cpp")
elseif(_imgui_renderer STREQUAL "dx9" AND _imgui_platform STREQUAL "win32")
set(_imgui_example_name "imgui_example_win32_directx9")
set(_imgui_example_src "examples/example_win32_directx9/main.cpp")
elseif(_imgui_renderer STREQUAL "dx10" AND _imgui_platform STREQUAL "win32")
set(_imgui_example_name "imgui_example_win32_directx10")
set(_imgui_example_src "examples/example_win32_directx10/main.cpp")
elseif(_imgui_renderer STREQUAL "dx11" AND _imgui_platform STREQUAL "win32")
set(_imgui_example_name "imgui_example_win32_directx11")
set(_imgui_example_src "examples/example_win32_directx11/main.cpp")
elseif(_imgui_renderer STREQUAL "dx12" AND _imgui_platform STREQUAL "win32")
set(_imgui_example_name "imgui_example_win32_directx12")
set(_imgui_example_src "examples/example_win32_directx12/main.cpp")
elseif(_imgui_renderer STREQUAL "opengl3" AND _imgui_platform STREQUAL "win32")
set(_imgui_example_name "imgui_example_win32_opengl3")
set(_imgui_example_src "examples/example_win32_opengl3/main.cpp")
elseif(_imgui_renderer STREQUAL "metal" AND _imgui_platform STREQUAL "glfw")
set(_imgui_example_name "imgui_example_glfw_metal")
set(_imgui_example_src "examples/example_glfw_metal/main.mm")
elseif(_imgui_renderer STREQUAL "metal" AND _imgui_platform STREQUAL "osx")
set(_imgui_example_name "imgui_example_apple_metal")
set(_imgui_example_src "examples/example_apple_metal/main.mm")
elseif(_imgui_renderer STREQUAL "opengl2" AND _imgui_platform STREQUAL "osx")
set(_imgui_example_name "imgui_example_apple_opengl2")
set(_imgui_example_src "examples/example_apple_opengl2/main.mm")
endif()
if(_imgui_example_name)
add_executable(${_imgui_example_name} "${_imgui_example_src}")
target_link_libraries(${_imgui_example_name} PRIVATE imgui)
target_include_directories(${_imgui_example_name} PRIVATE "backends/")
set(_imgui_any_example TRUE)
endif()
endforeach()
endforeach()
if(NOT _imgui_any_example)
message(WARNING "IMGUI_BUILD_EXAMPLES is set, but no example was built. \nNo supported combination of renderer and platform was found in IMGUI_BACKEND_RENDERER='${IMGUI_BACKEND_RENDERER}' / IMGUI_BACKEND_PLATFORM='${IMGUI_BACKEND_PLATFORM}'. \nSet IMGUI_BUILD_EXAMPLES=OFF to disable this warning.")
endif()
endif()