Skip to content

Commit 2e5ef8d

Browse files
committed
Add a custom CMake find script for the K4A SDK on Windows since this does not seem to come with a CMake config file
1 parent 04618ad commit 2e5ef8d

File tree

3 files changed

+75
-9
lines changed

3 files changed

+75
-9
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ enable_testing()
117117

118118
# libpng (packaged)
119119
add_subdirectory(libvis/third_party/libpng)
120-
set_target_properties(png png_static genfiles genprebuilt gensym genvers symbol-check PROPERTIES FOLDER "libvis/third_party/png")
120+
set_target_properties(png png_static genfiles PROPERTIES FOLDER "libvis/third_party/png")
121121

122122
# GLEW (external, required)
123123
find_package(GLEW REQUIRED)

applications/badslam/CMakeLists.txt

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,15 @@ if (CMAKE_CUDA_COMPILER)
2525
find_package(realsense2)
2626

2727
# Optional, only required for live Azure Kinect camera support
28-
find_package(k4a)
29-
find_package(k4arecord)
28+
if (WIN32)
29+
# Use a custom find script in the cmake subdirectory since the K4A SDK does
30+
# not seem to ship cmake files on Windows
31+
find_package(K4A)
32+
else()
33+
# On Linux, use the SDK-provided CMake files
34+
find_package(k4a)
35+
find_package(k4arecord)
36+
endif()
3037

3138
# Optional, only required for live Structure Core camera support
3239
find_package(Structure)
@@ -107,12 +114,22 @@ if (CMAKE_CUDA_COMPILER)
107114
)
108115
endif()
109116

110-
if (TARGET k4a::k4a)
111-
target_link_libraries(badslam_baselib PRIVATE
112-
k4a::k4a
113-
k4a::k4arecord
114-
)
115-
target_compile_definitions(badslam_baselib PUBLIC HAVE_K4A)
117+
if (WIN32)
118+
if (TARGET K4APrebuilt AND TARGET K4ARecordPrebuilt)
119+
target_link_libraries(badslam_baselib PUBLIC
120+
K4APrebuilt
121+
K4ARecordPrebuilt
122+
)
123+
target_compile_definitions(badslam_baselib PUBLIC HAVE_K4A)
124+
endif()
125+
else()
126+
if (TARGET k4a::k4a)
127+
target_link_libraries(badslam_baselib PUBLIC
128+
k4a::k4a
129+
k4a::k4arecord
130+
)
131+
target_compile_definitions(badslam_baselib PUBLIC HAVE_K4A)
132+
endif()
116133
endif()
117134

118135
if(MSVC)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# CMake module which defines the "K4A" target if the user points
2+
# out the location of the K4A SDK in the K4ASDK_ROOT cached variable. No
3+
# automatic detection of the SDK install location is attempted.
4+
5+
if(NOT K4ASDK_ROOT OR K4ASDK_ROOT EQUAL "K4ASDK_ROOT-NOTFOUND")
6+
message(STATUS "K4ASDK_ROOT has not been set. If you would like to use the K4A SDK support, please set this to the root path of the K4A SDK manually.")
7+
set(K4ASDK_ROOT "K4ASDK_ROOT-NOTFOUND" CACHE PATH "K4A SDK root directory")
8+
else()
9+
file(TO_CMAKE_PATH ${K4ASDK_ROOT} K4ASDK_ROOT)
10+
11+
if(NOT K4ASDK_TARGET_ARCH)
12+
message(WARNING "K4ASDK_TARGET_ARCH is not set. Assuming amd64.")
13+
set(K4ASDK_TARGET_ARCH amd64)
14+
endif()
15+
16+
set(K4ASDK_HEADERS ${K4ASDK_ROOT}/sdk/include)
17+
18+
if(WIN32)
19+
set(K4ASDK_LIBDIR ${K4ASDK_ROOT}/sdk/windows-desktop/${K4ASDK_TARGET_ARCH}/release/lib)
20+
set(K4A_IMPORTLIB ${K4ASDK_LIBDIR}/k4a.lib)
21+
set(K4ARECORD_IMPORTLIB ${K4ASDK_LIBDIR}/k4arecord.lib)
22+
else()
23+
message(FATAL_ERROR "Unknown platform for the K4A SDK find script.")
24+
endif()
25+
26+
# Define K4APrebuilt target if k4a.lib was found
27+
if(EXISTS ${K4A_IMPORTLIB})
28+
set(K4A_FOUND TRUE)
29+
add_library(K4APrebuilt UNKNOWN IMPORTED)
30+
set_target_properties(K4APrebuilt PROPERTIES
31+
IMPORTED_LOCATION ${K4A_IMPORTLIB}
32+
INTERFACE_INCLUDE_DIRECTORIES ${K4ASDK_HEADERS}
33+
)
34+
else()
35+
set(K4A_FOUND FALSE)
36+
endif()
37+
38+
# Define K4ARecordPrebuilt target if k4a.lib was found
39+
if(EXISTS ${K4ARECORD_IMPORTLIB})
40+
set(K4ARECORD_FOUND TRUE)
41+
add_library(K4ARecordPrebuilt UNKNOWN IMPORTED)
42+
set_target_properties(K4ARecordPrebuilt PROPERTIES
43+
IMPORTED_LOCATION ${K4ARECORD_IMPORTLIB}
44+
INTERFACE_INCLUDE_DIRECTORIES ${K4ASDK_HEADERS}
45+
)
46+
else()
47+
set(K4ARECORD_FOUND FALSE)
48+
endif()
49+
endif()

0 commit comments

Comments
 (0)