The open source OpenXR runtime
1# Copyright 2020-2025, Collabora, Ltd.
2# SPDX-License-Identifier: BSL-1.0
3
4# Catch2
5if(BUILD_TESTING)
6 add_library(xrt-external-catch2 STATIC Catch2/catch_amalgamated.cpp)
7 target_include_directories(
8 xrt-external-catch2 SYSTEM INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/Catch2
9 )
10 if(MSVC)
11 # Needed for Visual Studio 2019.
12 # https://github.com/catchorg/Catch2/issues/2916#issuecomment-2404082203
13 target_compile_options(xrt-external-catch2 PRIVATE "/Zc:hiddenFriend-")
14 endif()
15endif()
16
17# OpenVR
18add_library(xrt-external-openvr INTERFACE)
19target_include_directories(
20 xrt-external-openvr SYSTEM INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/openvr_includes
21 )
22
23# cJSON
24add_library(xrt-external-cjson INTERFACE)
25if(XRT_HAVE_SYSTEM_CJSON)
26 target_link_libraries(xrt-external-cjson INTERFACE cJSON::cJSON)
27else()
28 target_include_directories(
29 xrt-external-cjson SYSTEM INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/cjson
30 )
31 target_compile_definitions(xrt-external-cjson INTERFACE CJSON_HIDE_SYMBOLS)
32endif()
33
34# FlexKalman
35add_library(xrt-external-flexkalman INTERFACE)
36target_include_directories(xrt-external-flexkalman INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/flexkalman)
37
38# FlexKalman
39add_library(xrt-external-util-headers INTERFACE)
40target_include_directories(
41 xrt-external-util-headers INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/util-headers
42 )
43
44# Glad
45add_library(xrt-external-glad INTERFACE)
46target_include_directories(
47 xrt-external-glad SYSTEM INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/glad/include
48 )
49
50# Hungarian graph algorithm
51add_library(xrt-external-hungarian INTERFACE)
52target_include_directories(
53 xrt-external-hungarian SYSTEM INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/hungarian
54 )
55
56# JNIPP and Android JNI wrappers
57if(ANDROID)
58 add_library(xrt-external-jnipp STATIC jnipp/jnipp.cpp)
59 target_include_directories(
60 xrt-external-jnipp SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/jnipp
61 )
62
63 file(GLOB WRAP_SOURCES android-jni-wrap/wrap/*.cpp)
64 add_library(xrt-external-jni-wrap STATIC ${WRAP_SOURCES})
65 target_include_directories(
66 xrt-external-jni-wrap PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/android-jni-wrap
67 )
68 target_link_libraries(xrt-external-jni-wrap PUBLIC xrt-external-jnipp)
69endif()
70
71# Nano Protobuf
72add_library(
73 xrt-external-nanopb STATIC
74 nanopb/monado_metrics.pb.c
75 nanopb/monado_metrics.pb.h
76 nanopb/pb.h
77 nanopb/pb_common.c
78 nanopb/pb_common.h
79 nanopb/pb_decode.c
80 nanopb/pb_decode.h
81 nanopb/pb_encode.c
82 nanopb/pb_encode.h
83 )
84target_include_directories(xrt-external-nanopb PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/nanopb)
85
86if(ANDROID)
87 add_library(
88 xrt-external-cardboard STATIC cardboard/cardboard_device.pb.h
89 cardboard/cardboard_device.pb.c
90 )
91
92 target_include_directories(
93 xrt-external-cardboard PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/cardboard/
94 )
95 target_link_libraries(xrt-external-cardboard PUBLIC xrt-external-nanopb)
96endif()
97
98# OpenXR
99add_library(xrt-external-openxr INTERFACE)
100target_include_directories(
101 xrt-external-openxr INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/openxr_includes
102 )
103
104# External VIT interface
105if(XRT_FEATURE_SLAM)
106 add_library(xrt-external-vit INTERFACE)
107 target_include_directories(
108 xrt-external-vit INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/vit_includes
109 )
110endif()
111
112# SDL
113if(XRT_HAVE_SDL2)
114 add_library(xrt-external-sdl2 INTERFACE)
115 target_link_libraries(xrt-external-sdl2 INTERFACE SDL2::SDL2)
116
117 # Fix SDL2 build include for Alpine Linux
118 find_path(SDL2_DIRECTFB_INCLUDE_DIR directfb.h PATH_SUFFIXES directfb)
119 if(SDL2_DIRECTFB_INCLUDE_DIR)
120 target_include_directories(xrt-external-sdl2 INTERFACE ${SDL2_DIRECTFB_INCLUDE_DIR})
121 endif()
122endif()
123
124# STB
125add_library(xrt-external-stb INTERFACE)
126target_include_directories(xrt-external-stb SYSTEM INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/stb)
127
128# bcdec
129add_library(xrt-external-bcdec INTERFACE)
130target_include_directories(xrt-external-bcdec SYSTEM INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/bcdec)
131
132# renderdoc
133add_library(xrt-external-renderdoc INTERFACE)
134target_include_directories(
135 xrt-external-renderdoc SYSTEM INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/renderdoc_api
136 )
137
138# imgui
139if(XRT_HAVE_OPENGL)
140 add_library(
141 xrt-external-imgui STATIC
142 # imgui 1.90.8-docking
143 imgui/imgui/imconfig.h
144 imgui/imgui/imgui.cpp
145 imgui/imgui/imgui_tables.cpp
146 imgui/imgui/imgui.h
147 imgui/imgui/imgui_demo.cpp
148 imgui/imgui/imgui_draw.cpp
149 imgui/imgui/backends/imgui_impl_opengl3.cpp
150 imgui/imgui/backends/imgui_impl_opengl3.h
151 imgui/imgui/imgui_internal.h
152 imgui/imgui/imgui_widgets.cpp
153 imgui/imgui/imstb_rectpack.h
154 imgui/imgui/imstb_textedit.h
155 imgui/imgui/imstb_truetype.h
156 # cimgui 7c16d31cdb9d2db3038b324fe967ffa76b02c8c4
157 imgui/cimgui/cimgui.cpp
158 imgui/cimgui/cimgui.h
159 imgui/cimgui/cimgui_impl.h
160 # implot 0.17 f156599faefe316f7dd20fe6c783bf87c8bb6fd9
161 imgui/implot/implot.cpp
162 imgui/implot/implot.h
163 imgui/implot/implot_internal.h
164 imgui/implot/implot_items.cpp
165 imgui/implot/implot_demo.cpp
166 # cimplot 439f705b1cfae0e9fbe42c13ab5b45becc47d404
167 imgui/cimplot/cimplot.cpp
168 imgui/cimplot/cimplot.h
169 imgui/imgui_monado/imgui_monado.cpp
170 )
171
172 target_include_directories(
173 xrt-external-imgui SYSTEM
174 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/imgui
175 PRIVATE
176 ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui
177 ${CMAKE_CURRENT_SOURCE_DIR}/imgui/cimgui
178 ${CMAKE_CURRENT_SOURCE_DIR}/imgui/implot
179 )
180 target_compile_definitions(xrt-external-imgui PUBLIC CIMGUI_NO_EXPORT CIMGUI_USE_OPENGL3)
181
182 if(WIN32)
183 target_compile_definitions(
184 xrt-external-imgui
185 PUBLIC "IMGUI_IMPL_API=extern\ \"C\" __declspec\(dllexport\)"
186 )
187 else()
188 target_compile_definitions(xrt-external-imgui PUBLIC "IMGUI_IMPL_API=extern\ \"C\"")
189 endif()
190
191 set_target_properties(xrt-external-imgui PROPERTIES INTERPROCEDURAL_OPTIMIZATION OFF)
192 target_link_libraries(xrt-external-imgui PUBLIC xrt-external-glad)
193
194 if(XRT_HAVE_SDL2)
195 add_library(
196 xrt-external-imgui-sdl2 STATIC imgui/imgui/backends/imgui_impl_sdl2.cpp
197 imgui/imgui/backends/imgui_impl_sdl2.h
198 )
199 target_include_directories(
200 xrt-external-imgui-sdl2 SYSTEM
201 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/imgui/imgui
202 )
203 target_compile_definitions(xrt-external-imgui-sdl2 PUBLIC CIMGUI_USE_SDL2)
204 target_link_libraries(
205 xrt-external-imgui-sdl2 PUBLIC xrt-external-imgui xrt-external-sdl2
206 )
207 set_target_properties(
208 xrt-external-imgui-sdl2 PROPERTIES INTERPROCEDURAL_OPTIMIZATION OFF
209 )
210 endif()
211
212endif()
213
214# tinyceres
215add_library(xrt-external-tinyceres INTERFACE)
216target_include_directories(
217 xrt-external-tinyceres SYSTEM INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/tinyceres/include
218 )
219
220# Tracy
221if(XRT_HAVE_TRACY)
222 add_library(xrt-external-tracy STATIC tracy/TracyClient.cpp)
223 target_include_directories(
224 xrt-external-tracy SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/tracy
225 )
226 target_compile_definitions(xrt-external-tracy PRIVATE TRACY_ENABLE)
227 target_link_libraries(xrt-external-tracy PRIVATE ${CMAKE_DL_LIBS})
228endif()
229
230# Valve VDF parser
231add_library(xrt-external-vdf INTERFACE)
232target_include_directories(
233 xrt-external-vdf SYSTEM INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/valve-file-vdf
234 )