Skip to content

Commit 412dc4b

Browse files
committed
Cleaning up DeckLink find module and adding macro for win32 idl->header/body generation
1 parent bbe12d1 commit 412dc4b

File tree

1 file changed

+48
-29
lines changed

1 file changed

+48
-29
lines changed

Modules/FindDeckLinkSDK.cmake

+48-29
Original file line numberDiff line numberDiff line change
@@ -31,28 +31,61 @@
3131
# Typical usage is:
3232
# > cmake -DDECKLINK_SDK_ROOT:PATH="<some_path_here>"
3333
# ...
34+
#
3435
# CMakeLists.txt:
36+
# PROJECT(XYZ)
37+
# ...
3538
# FIND_PACKAGE(DeckLinkSDK REQUIRED)
36-
# TARGET_LINK_LIBRARIES(${your_app} ${your_libs} "${DeckLinkSDK_LIBS}")
39+
# DeckLinkGenerateAPIFiles(${PROJECT_NAME})
40+
# target_sources(vtk${PROJECT_NAME} PRIVATE ${MIDL_OUTPUT})
41+
# LIST(APPEND BlackMagicDeckLink_SRCS ${MIDL_OUTPUT})
42+
# TARGET_LINK_LIBRARIES(XYZ ${your_libs} ${DeckLinkSDK_LIBS})
3743
#
3844
# You can do the following in your DeckLink related sources;
39-
#define _stringify(x) #x
40-
#define STRINGIFY(x) _stringify(x)
41-
#include STRINGIFY(DeckLinkSDK_INCLUDE_FILE)
42-
#undef STRINGIFY
43-
#undef _stringify
45+
# #include <DeckLinkAPI.h>
4446
#
4547
# You can optionally provide version argument, for example;
4648
# FIND_PACKAGE(DeckLinkSDK 10.5 REQUIRED)
4749

50+
MACRO(DeckLinkGenerateAPIFiles _project_name)
51+
IF(NOT WIN32)
52+
return()
53+
ENDIF()
54+
55+
SET(MIDL_OUTPUT
56+
${CMAKE_CURRENT_BINARY_DIR}/DeckLinkAPI.h
57+
${CMAKE_CURRENT_BINARY_DIR}/DeckLinkAPI_i.c
58+
)
59+
SET(_midl_file
60+
${DeckLinkSDK_INCLUDE_DIR}/DeckLinkAPI.idl
61+
)
62+
ADD_CUSTOM_COMMAND(
63+
OUTPUT ${MIDL_OUTPUT}
64+
COMMAND midl /h ${CMAKE_CURRENT_BINARY_DIR}/DeckLinkAPI.h /iid ${CMAKE_CURRENT_BINARY_DIR}/DeckLinkAPI_i.c ${_midl_file}
65+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
66+
DEPENDS ${_midl_file}
67+
VERBATIM
68+
)
69+
ADD_CUSTOM_TARGET(${_project_name}-midl-cmplr
70+
DEPENDS ${MIDL_OUTPUT}
71+
)
72+
ADD_DEPENDENCIES(${_project_name}
73+
${_project_name}-midl-cmplr
74+
)
75+
SET_SOURCE_FILES_PROPERTIES(
76+
${MIDL_OUTPUT}
77+
PROPERTIES
78+
GENERATED TRUE
79+
SKIP_AUTOGEN ON
80+
)
81+
ENDMACRO()
82+
4883
SET(DeckLink_DEFAULT "/src/Blackmagic_SDK")
4984

5085
IF(WIN32)
5186
SET(_platform "Win")
52-
SET(__src_file DeckLinkAPI.idl)
5387
SET(__include_file DeckLinkAPI.idl)
5488
ELSE()
55-
SET(__src_file DeckLinkAPIDispatch.cpp)
5689
SET(__include_file DeckLinkAPI.h)
5790

5891
IF(APPLE)
@@ -92,12 +125,6 @@ ELSE()
92125
UNSET(DeckLinkSDK_PATH)
93126
ENDIF()
94127

95-
IF(WIN32)
96-
SET(DeckLinkSDK_INCLUDE_FILE DeckLinkAPI_h.h)
97-
ELSE()
98-
SET(DeckLinkSDK_INCLUDE_FILE ${DeckLinkSDK_INCLUDE_DIR}/DeckLinkAPI.h)
99-
ENDIF()
100-
101128
SET(_version_h "${DeckLinkSDK_INCLUDE_DIR}/DeckLinkAPIVersion.h")
102129
IF(EXISTS "${_version_h}")
103130
FILE(STRINGS "${_version_h}" _tmpstr REGEX "^#define[\t ]+BLACKMAGIC_DECKLINK_API_VERSION_STRING[\t ]+\".*\"")
@@ -108,7 +135,7 @@ ENDIF()
108135
INCLUDE(FindPackageHandleStandardArgs)
109136
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
110137
DeckLinkSDK
111-
REQUIRED_VARS DeckLinkSDK_PATH DeckLinkSDK_INCLUDE_DIR DeckLinkSDK_INCLUDE_FILE
138+
REQUIRED_VARS DeckLinkSDK_PATH DeckLinkSDK_INCLUDE_DIR
112139
VERSION_VAR DeckLinkSDK_VERSION_STRING
113140
FAIL_MESSAGE "DeckLink SDK not found. Please set DECKLINK_SDK_ROOT to the root folder of your DeckLink SDK install.")
114141

@@ -118,17 +145,15 @@ IF(WIN32)
118145
ADD_LIBRARY(NVIDIA_GPUDirect SHARED IMPORTED)
119146
set_target_properties(NVIDIA_GPUDirect
120147
PROPERTIES
121-
IMPORTED_IMPLIB "${DeckLinkSDK_PATH}/Win/NVIDIA_GPUDirect/lib/${BUILD_ARCHITECTURE}/dvp.lib"
122-
IMPORTED_LOCATION "${DeckLinkSDK_PATH}/Win/NVIDIA_GPUDirect/bin/${BUILD_ARCHITECTURE}/dvp.dll"
123-
INTERFACE_INCLUDE_DIRECTORIES "${DeckLinkSDK_PATH}/Win/NVIDIA_GPUDirect/include"
148+
IMPORTED_IMPLIB "${DeckLinkSDK_PATH}/${_platform}/NVIDIA_GPUDirect/lib/${BUILD_ARCHITECTURE}/dvp.lib"
149+
IMPORTED_LOCATION "${DeckLinkSDK_PATH}/${_platform}/NVIDIA_GPUDirect/bin/${BUILD_ARCHITECTURE}/dvp.dll"
150+
INTERFACE_INCLUDE_DIRECTORIES "${DeckLinkSDK_PATH}/${_platform}/NVIDIA_GPUDirect/include"
124151
)
125152

126153
set_target_properties(DeckLinkSDK
127154
PROPERTIES
128-
INTERFACE_SOURCES
129-
"${DeckLinkSDK_PATH}/Win/include/${__src_file}"
130155
INTERFACE_INCLUDE_DIRECTORIES
131-
"${DeckLinkSDK_PATH}/Win/include;${DeckLinkSDK_PATH}/Win/DirectShow/include"
156+
"${DeckLinkSDK_PATH}/${_platform}/include;${DeckLinkSDK_PATH}/${_platform}/DirectShow/include"
132157
)
133158
SET(DeckLinkSDK_LIBS DeckLinkSDK NVIDIA_GPUDirect)
134159
ELSE()
@@ -141,8 +166,8 @@ ELSE()
141166
ADD_LIBRARY(NVIDIA_GPUDirect SHARED IMPORTED)
142167
set_target_properties(NVIDIA_GPUDirect
143168
PROPERTIES
144-
IMPORTED_LOCATION "${DeckLinkSDK_PATH}/linux/NVIDIA_GPUDirect/${BUILD_ARCHITECTURE}/libdvp.so"
145-
INTERFACE_INCLUDE_DIRECTORIES "${DeckLinkSDK_PATH}/linux/NVIDIA_GPUDirect/include"
169+
IMPORTED_LOCATION "${DeckLinkSDK_PATH}/${_platform}/NVIDIA_GPUDirect/${BUILD_ARCHITECTURE}/libdvp.so"
170+
INTERFACE_INCLUDE_DIRECTORIES "${DeckLinkSDK_PATH}/${_platform}/NVIDIA_GPUDirect/include"
146171
)
147172
set_target_properties(DeckLinkSDK
148173
PROPERTIES
@@ -158,10 +183,4 @@ ELSE()
158183
ENDIF()
159184
ENDIF()
160185

161-
set_target_properties(DeckLinkSDK
162-
PROPERTIES
163-
INTERFACE_COMPILE_DEFINITIONS
164-
DeckLinkSDK_INCLUDE_FILE=${DeckLinkSDK_INCLUDE_FILE}
165-
)
166-
167186
MARK_AS_ADVANCED(DeckLinkSDK_LIBS)

0 commit comments

Comments
 (0)