Skip to content

Commit a944dab

Browse files
committed
build: improve Homebrew dependency handling and skip internal builds
This update allows OpenRV to leverage Homebrew-installed dependencies more effectively, reducing build times and avoiding redundant downloads. Key changes: - Provided namespaced targets (e.g., TIFF::TIFF) for major dependencies when using Homebrew. - Added support for skipping internal Python and PySide builds. - Integrated Homebrew mbedtls for AJA by disabling internal plugin loading. - Standardized dependency detection using PkgConfig where appropriate. Signed-off-by: Michael Oliver <mcoliver@gmail.com>
1 parent db74d22 commit a944dab

26 files changed

Lines changed: 1112 additions & 40 deletions

cmake/dependencies/aja.cmake

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,48 @@ SET(_mbedcrypto_lib
5050
${_mbedtls_lib_dir}/${CMAKE_STATIC_LIBRARY_PREFIX}mbedcrypto${CMAKE_STATIC_LIBRARY_SUFFIX}
5151
)
5252

53+
IF(RV_USE_BREW_DEPS)
54+
FIND_PACKAGE(PkgConfig)
55+
PKG_CHECK_MODULES(PC_mbedtls mbedtls mbedx509 mbedcrypto)
56+
IF(PC_mbedtls_FOUND)
57+
MESSAGE(STATUS "Using Homebrew mbedtls")
58+
# Use direct paths from pkg-config
59+
FIND_LIBRARY(
60+
BREW_MBEDTLS_LIB
61+
NAMES mbedtls
62+
HINTS ${PC_mbedtls_LIBDIR}
63+
)
64+
FIND_LIBRARY(
65+
BREW_MBEDX509_LIB
66+
NAMES mbedx509
67+
HINTS ${PC_mbedtls_LIBDIR}
68+
)
69+
FIND_LIBRARY(
70+
BREW_MBEDCRYPTO_LIB
71+
NAMES mbedcrypto
72+
HINTS ${PC_mbedtls_LIBDIR}
73+
)
74+
75+
IF(BREW_MBEDTLS_LIB
76+
AND BREW_MBEDX509_LIB
77+
AND BREW_MBEDCRYPTO_LIB
78+
)
79+
SET(_mbedtls_lib
80+
"${BREW_MBEDTLS_LIB}"
81+
)
82+
SET(_mbedx509_lib
83+
"${BREW_MBEDX509_LIB}"
84+
)
85+
SET(_mbedcrypto_lib
86+
"${BREW_MBEDCRYPTO_LIB}"
87+
)
88+
SET(_use_brew_mbedtls
89+
TRUE
90+
)
91+
ENDIF()
92+
ENDIF()
93+
ENDIF()
94+
5395
LIST(APPEND _byproducts ${_mbedtls_lib} ${_mbedx509_lib} ${_mbedcrypto_lib})
5496

5597
# There is an issue with the recent AJA SDK : the OS specific header files are no longer copied to _aja_ntv2_include_dir Adding custom paths here to work around
@@ -85,6 +127,19 @@ IF(RV_TARGET_WINDOWS
85127
LIST(APPEND _configure_options "-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebug")
86128
ENDIF()
87129

130+
IF(_use_brew_mbedtls)
131+
LIST(APPEND _configure_options "-DAJANTV2_DISABLE_MBEDTLS=ON")
132+
# In AJA SDK, AJANTV2_DISABLE_PLUGIN_LOAD=ON also disables internal mbedtls
133+
LIST(APPEND _configure_options "-DAJANTV2_DISABLE_PLUGIN_LOAD=ON")
134+
SET(_aja_install_command
135+
${_cmake_install_command}
136+
)
137+
ELSE()
138+
SET(_aja_install_command
139+
${_cmake_install_command} && ${CMAKE_COMMAND} -E copy_directory ${_mbedtls_lib_dir} ${_lib_dir}
140+
)
141+
ENDIF()
142+
88143
EXTERNALPROJECT_ADD(
89144
${_target}
90145
URL ${_download_url}
@@ -97,7 +152,7 @@ EXTERNALPROJECT_ADD(
97152
INSTALL_DIR ${_install_dir}
98153
CONFIGURE_COMMAND ${CMAKE_COMMAND} ${_configure_options}
99154
BUILD_COMMAND ${_cmake_build_command}
100-
INSTALL_COMMAND ${_cmake_install_command} && ${CMAKE_COMMAND} -E copy_directory ${_mbedtls_lib_dir} ${_lib_dir}
155+
INSTALL_COMMAND ${_aja_install_command}
101156
BUILD_IN_SOURCE FALSE
102157
BUILD_ALWAYS FALSE
103158
BUILD_BYPRODUCTS ${_byproducts}

cmake/dependencies/boost.cmake

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -207,37 +207,41 @@ FOREACH(
207207
_boost_lib
208208
${_boost_libs}
209209
)
210-
ADD_LIBRARY(Boost::${_boost_lib} SHARED IMPORTED GLOBAL)
211-
ADD_DEPENDENCIES(Boost::${_boost_lib} ${_target})
212-
SET_PROPERTY(
213-
TARGET Boost::${_boost_lib}
214-
PROPERTY IMPORTED_LOCATION ${_boost_${_boost_lib}_lib}
215-
)
216-
SET_PROPERTY(
217-
TARGET Boost::${_boost_lib}
218-
PROPERTY IMPORTED_SONAME ${_boost_${_boost_lib}_lib_name}
219-
)
220-
221-
IF(RV_TARGET_WINDOWS)
210+
IF(NOT TARGET Boost::${_boost_lib})
211+
ADD_LIBRARY(Boost::${_boost_lib} SHARED IMPORTED GLOBAL)
212+
ADD_DEPENDENCIES(Boost::${_boost_lib} ${_target})
222213
SET_PROPERTY(
223214
TARGET Boost::${_boost_lib}
224-
PROPERTY IMPORTED_IMPLIB ${_boost_${_boost_lib}_implib}
215+
PROPERTY IMPORTED_LOCATION ${_boost_${_boost_lib}_lib}
216+
)
217+
SET_PROPERTY(
218+
TARGET Boost::${_boost_lib}
219+
PROPERTY IMPORTED_SONAME ${_boost_${_boost_lib}_lib_name}
220+
)
221+
222+
IF(RV_TARGET_WINDOWS)
223+
SET_PROPERTY(
224+
TARGET Boost::${_boost_lib}
225+
PROPERTY IMPORTED_IMPLIB ${_boost_${_boost_lib}_implib}
226+
)
227+
ENDIF()
228+
TARGET_INCLUDE_DIRECTORIES(
229+
Boost::${_boost_lib}
230+
INTERFACE ${_include_dir}
225231
)
226-
ENDIF()
227-
TARGET_INCLUDE_DIRECTORIES(
228-
Boost::${_boost_lib}
229-
INTERFACE ${_include_dir}
230-
)
231232

232-
LIST(APPEND RV_DEPS_LIST Boost::${_boost_lib})
233-
LIST(APPEND _boost_stage_output ${RV_STAGE_LIB_DIR}/${_boost_${_boost_lib}_lib_name})
233+
LIST(APPEND RV_DEPS_LIST Boost::${_boost_lib})
234+
LIST(APPEND _boost_stage_output ${RV_STAGE_LIB_DIR}/${_boost_${_boost_lib}_lib_name})
235+
ENDIF()
234236
ENDFOREACH()
235237

236-
ADD_LIBRARY(Boost::headers INTERFACE IMPORTED GLOBAL)
237-
SET_TARGET_PROPERTIES(
238-
Boost::headers
239-
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${_include_dir}"
240-
)
238+
IF(NOT TARGET Boost::headers)
239+
ADD_LIBRARY(Boost::headers INTERFACE IMPORTED GLOBAL)
240+
SET_TARGET_PROPERTIES(
241+
Boost::headers
242+
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${_include_dir}"
243+
)
244+
ENDIF()
241245

242246
# Note: On Windows, Boost's b2 puts both .lib and .dll in lib/, so we copy _lib_dir to both RV_STAGE_LIB_DIR and RV_STAGE_BIN_DIR.
243247
IF(RV_TARGET_WINDOWS)

cmake/dependencies/dav1d.cmake

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,62 @@
44
# SPDX-License-Identifier: Apache-2.0
55
#
66

7+
IF(RV_USE_BREW_DEPS)
8+
FIND_PACKAGE(PkgConfig)
9+
PKG_CHECK_MODULES(PC_dav1d dav1d)
10+
IF(PC_dav1d_FOUND)
11+
MESSAGE(STATUS "Using Homebrew dav1d: ${PC_dav1d_VERSION}")
12+
13+
IF(NOT TARGET dav1d::dav1d)
14+
ADD_LIBRARY(dav1d::dav1d UNKNOWN IMPORTED GLOBAL)
15+
FIND_LIBRARY(
16+
dav1d_LIBRARY
17+
NAMES dav1d
18+
HINTS ${PC_dav1d_LIBDIR}
19+
)
20+
SET_PROPERTY(
21+
TARGET dav1d::dav1d
22+
PROPERTY IMPORTED_LOCATION "${dav1d_LIBRARY}"
23+
)
24+
TARGET_INCLUDE_DIRECTORIES(
25+
dav1d::dav1d
26+
INTERFACE "${PC_dav1d_INCLUDE_DIRS}"
27+
)
28+
ENDIF()
29+
30+
LIST(APPEND RV_DEPS_LIST dav1d::dav1d)
31+
GET_TARGET_PROPERTY(_dav1d_loc dav1d::dav1d LOCATION)
32+
GET_FILENAME_COMPONENT(_dav1d_lib_dir "${_dav1d_loc}" DIRECTORY)
33+
SET(RV_DEPS_DAVID_LIB_DIR
34+
"${_dav1d_lib_dir}"
35+
CACHE INTERNAL ""
36+
)
37+
38+
# FFmpeg customization adding dav1d codec support to FFmpeg
39+
SET_PROPERTY(
40+
GLOBAL APPEND
41+
PROPERTY "RV_FFMPEG_EXTRA_C_OPTIONS" "--extra-cflags=-I${PC_dav1d_INCLUDE_DIRS}"
42+
)
43+
IF(RV_TARGET_WINDOWS)
44+
SET_PROPERTY(
45+
GLOBAL APPEND
46+
PROPERTY "RV_FFMPEG_EXTRA_LIBPATH_OPTIONS" "--extra-ldflags=-LIBPATH:${_dav1d_lib_dir}"
47+
)
48+
ELSE()
49+
SET_PROPERTY(
50+
GLOBAL APPEND
51+
PROPERTY "RV_FFMPEG_EXTRA_LIBPATH_OPTIONS" "--extra-ldflags=-L${_dav1d_lib_dir}"
52+
)
53+
ENDIF()
54+
SET_PROPERTY(
55+
GLOBAL APPEND
56+
PROPERTY "RV_FFMPEG_EXTERNAL_LIBS" "--enable-libdav1d"
57+
)
58+
59+
RETURN()
60+
ENDIF()
61+
ENDIF()
62+
763
RV_CREATE_STANDARD_DEPS_VARIABLES("RV_DEPS_DAV1D" "${RV_DEPS_DAV1D_VERSION}" "ninja" "meson")
864
RV_SHOW_STANDARD_DEPS_VARIABLES()
965

cmake/dependencies/expat.cmake

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,33 @@
1111
RV_CREATE_STANDARD_DEPS_VARIABLES("RV_DEPS_EXPAT" "${RV_DEPS_EXPAT_VERSION}" "" "")
1212
RV_SHOW_STANDARD_DEPS_VARIABLES()
1313

14+
IF(RV_USE_BREW_DEPS)
15+
FIND_PACKAGE(EXPAT)
16+
IF(EXPAT_FOUND)
17+
MESSAGE(STATUS "Using Homebrew EXPAT: ${EXPAT_VERSION_STRING}")
18+
IF(NOT TARGET EXPAT::EXPAT)
19+
ADD_LIBRARY(EXPAT::EXPAT UNKNOWN IMPORTED GLOBAL)
20+
SET_PROPERTY(
21+
TARGET EXPAT::EXPAT
22+
PROPERTY IMPORTED_LOCATION "${EXPAT_LIBRARY}"
23+
)
24+
TARGET_INCLUDE_DIRECTORIES(
25+
EXPAT::EXPAT
26+
INTERFACE "${EXPAT_INCLUDE_DIRS}"
27+
)
28+
ENDIF()
29+
LIST(APPEND RV_DEPS_LIST EXPAT::EXPAT)
30+
# Some other deps might need EXPAT root dir
31+
GET_FILENAME_COMPONENT(_expat_include_dir "${EXPAT_INCLUDE_DIRS}" ABSOLUTE)
32+
GET_FILENAME_COMPONENT(_expat_root_dir "${_expat_include_dir}/.." ABSOLUTE)
33+
SET(RV_DEPS_EXPAT_ROOT_DIR
34+
"${_expat_root_dir}"
35+
CACHE INTERNAL "" FORCE
36+
)
37+
RETURN()
38+
ENDIF()
39+
ENDIF()
40+
1441
STRING(REPLACE "." "_" _version_underscored ${_version})
1542
SET(_download_url
1643
"https://github.com/libexpat/libexpat/archive/refs/tags/R_${_version_underscored}.tar.gz"

cmake/dependencies/ffmpeg.cmake

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,66 @@
1616
# cmake-format: on
1717
# ------------------------------------------------------------------------------
1818

19+
IF(RV_USE_BREW_DEPS)
20+
FIND_PACKAGE(PkgConfig)
21+
SET(_ffmpeg_found_all
22+
TRUE
23+
)
24+
FOREACH(
25+
_comp
26+
avutil swresample swscale avcodec avformat
27+
)
28+
PKG_CHECK_MODULES(PC_${_comp} lib${_comp})
29+
IF(PC_${_comp}_FOUND)
30+
IF(NOT TARGET ffmpeg::${_comp})
31+
ADD_LIBRARY(ffmpeg::${_comp} UNKNOWN IMPORTED GLOBAL)
32+
FIND_LIBRARY(
33+
LIB_${_comp}
34+
NAMES ${_comp}
35+
HINTS ${PC_${_comp}_LIBDIR}
36+
)
37+
SET_PROPERTY(
38+
TARGET ffmpeg::${_comp}
39+
PROPERTY IMPORTED_LOCATION "${LIB_${_comp}}"
40+
)
41+
TARGET_INCLUDE_DIRECTORIES(
42+
ffmpeg::${_comp}
43+
INTERFACE "${PC_${_comp}_INCLUDE_DIRS}"
44+
)
45+
LIST(APPEND RV_DEPS_LIST ffmpeg::${_comp})
46+
47+
# Need to link dependencies
48+
IF("${_comp}" STREQUAL "swresample"
49+
OR "${_comp}" STREQUAL "swscale"
50+
)
51+
TARGET_LINK_LIBRARIES(
52+
ffmpeg::${_comp}
53+
INTERFACE ffmpeg::avutil
54+
)
55+
ELSEIF("${_comp}" STREQUAL "avcodec")
56+
TARGET_LINK_LIBRARIES(
57+
ffmpeg::${_comp}
58+
INTERFACE ffmpeg::swresample
59+
)
60+
ELSEIF("${_comp}" STREQUAL "avformat")
61+
TARGET_LINK_LIBRARIES(
62+
ffmpeg::${_comp}
63+
INTERFACE ffmpeg::avcodec
64+
)
65+
ENDIF()
66+
ENDIF()
67+
ELSE()
68+
MESSAGE(WARNING "Homebrew FFmpeg component lib${_comp} not found")
69+
SET(_ffmpeg_found_all
70+
FALSE
71+
)
72+
ENDIF()
73+
ENDFOREACH()
74+
75+
IF(_ffmpeg_found_all)
76+
RETURN()
77+
ENDIF()
78+
ENDIF()
1979
SET(_target
2080
"RV_DEPS_FFMPEG"
2181
)

cmake/dependencies/gc.cmake

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,32 @@
66

77
RV_CREATE_STANDARD_DEPS_VARIABLES("RV_DEPS_GC" "${RV_DEPS_GC_VERSION}" "" "")
88

9+
IF(RV_USE_BREW_DEPS)
10+
FIND_PACKAGE(PkgConfig)
11+
PKG_CHECK_MODULES(PC_GC bdw-gc)
12+
IF(PC_GC_FOUND)
13+
MESSAGE(STATUS "Using Homebrew GC")
14+
IF(NOT TARGET BDWGC::Gc)
15+
ADD_LIBRARY(BDWGC::Gc UNKNOWN IMPORTED GLOBAL)
16+
FIND_LIBRARY(
17+
GC_LIBRARY
18+
NAMES gc
19+
HINTS ${PC_GC_LIBDIR}
20+
)
21+
SET_PROPERTY(
22+
TARGET BDWGC::Gc
23+
PROPERTY IMPORTED_LOCATION "${GC_LIBRARY}"
24+
)
25+
TARGET_INCLUDE_DIRECTORIES(
26+
BDWGC::Gc
27+
INTERFACE "${PC_GC_INCLUDE_DIRS}"
28+
)
29+
ENDIF()
30+
LIST(APPEND RV_DEPS_LIST BDWGC::Gc)
31+
RETURN()
32+
ENDIF()
33+
ENDIF()
34+
935
SET(_download_url
1036
"https://github.com/ivmai/bdwgc/archive/refs/tags/v${_version}.zip"
1137
)

cmake/dependencies/glew.cmake

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,33 @@
66

77
RV_CREATE_STANDARD_DEPS_VARIABLES("RV_DEPS_GLEW" "${RV_DEPS_GLEW_VERSION}" "make" "")
88

9+
IF(RV_USE_BREW_DEPS)
10+
FIND_PACKAGE(GLEW)
11+
IF(GLEW_FOUND)
12+
MESSAGE(STATUS "Using Homebrew GLEW: ${GLEW_VERSION}")
13+
IF(NOT TARGET GLEW::GLEW)
14+
ADD_LIBRARY(GLEW::GLEW UNKNOWN IMPORTED GLOBAL)
15+
IF(GLEW_SHARED_LIBRARY)
16+
SET_PROPERTY(
17+
TARGET GLEW::GLEW
18+
PROPERTY IMPORTED_LOCATION "${GLEW_SHARED_LIBRARY}"
19+
)
20+
ELSE()
21+
SET_PROPERTY(
22+
TARGET GLEW::GLEW
23+
PROPERTY IMPORTED_LOCATION "${GLEW_LIBRARIES}"
24+
)
25+
ENDIF()
26+
TARGET_INCLUDE_DIRECTORIES(
27+
GLEW::GLEW
28+
INTERFACE "${GLEW_INCLUDE_DIRS}"
29+
)
30+
ENDIF()
31+
LIST(APPEND RV_DEPS_LIST GLEW::GLEW)
32+
RETURN()
33+
ENDIF()
34+
ENDIF()
35+
936
SET(_download_url
1037
"https://github.com/nigels-com/glew/archive/refs/tags/glew-${_version}.tar.gz"
1138
)

0 commit comments

Comments
 (0)