Skip to content

Commit b4f2c49

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.
1 parent db74d22 commit b4f2c49

26 files changed

+791
-15
lines changed

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: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ FOREACH(
207207
_boost_lib
208208
${_boost_libs}
209209
)
210+
IF(NOT TARGET Boost::${_boost_lib})
210211
ADD_LIBRARY(Boost::${_boost_lib} SHARED IMPORTED GLOBAL)
211212
ADD_DEPENDENCIES(Boost::${_boost_lib} ${_target})
212213
SET_PROPERTY(
@@ -231,13 +232,16 @@ FOREACH(
231232

232233
LIST(APPEND RV_DEPS_LIST Boost::${_boost_lib})
233234
LIST(APPEND _boost_stage_output ${RV_STAGE_LIB_DIR}/${_boost_${_boost_lib}_lib_name})
235+
ENDIF()
234236
ENDFOREACH()
235237

238+
IF(NOT TARGET Boost::headers)
236239
ADD_LIBRARY(Boost::headers INTERFACE IMPORTED GLOBAL)
237240
SET_TARGET_PROPERTIES(
238241
Boost::headers
239242
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${_include_dir}"
240243
)
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: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,37 @@
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(dav1d_LIBRARY NAMES dav1d HINTS ${PC_dav1d_LIBDIR})
16+
SET_PROPERTY(TARGET dav1d::dav1d PROPERTY IMPORTED_LOCATION "${dav1d_LIBRARY}")
17+
TARGET_INCLUDE_DIRECTORIES(dav1d::dav1d INTERFACE "${PC_dav1d_INCLUDE_DIRS}")
18+
ENDIF()
19+
20+
LIST(APPEND RV_DEPS_LIST dav1d::dav1d)
21+
GET_TARGET_PROPERTY(_dav1d_loc dav1d::dav1d LOCATION)
22+
GET_FILENAME_COMPONENT(_dav1d_lib_dir "${_dav1d_loc}" DIRECTORY)
23+
SET(RV_DEPS_DAVID_LIB_DIR "${_dav1d_lib_dir}" CACHE INTERNAL "")
24+
25+
# FFmpeg customization adding dav1d codec support to FFmpeg
26+
SET_PROPERTY(GLOBAL APPEND PROPERTY "RV_FFMPEG_EXTRA_C_OPTIONS" "--extra-cflags=-I${PC_dav1d_INCLUDE_DIRS}")
27+
IF(RV_TARGET_WINDOWS)
28+
SET_PROPERTY(GLOBAL APPEND PROPERTY "RV_FFMPEG_EXTRA_LIBPATH_OPTIONS" "--extra-ldflags=-LIBPATH:${_dav1d_lib_dir}")
29+
ELSE()
30+
SET_PROPERTY(GLOBAL APPEND PROPERTY "RV_FFMPEG_EXTRA_LIBPATH_OPTIONS" "--extra-ldflags=-L${_dav1d_lib_dir}")
31+
ENDIF()
32+
SET_PROPERTY(GLOBAL APPEND PROPERTY "RV_FFMPEG_EXTERNAL_LIBS" "--enable-libdav1d")
33+
34+
RETURN()
35+
ENDIF()
36+
ENDIF()
37+
738
RV_CREATE_STANDARD_DEPS_VARIABLES("RV_DEPS_DAV1D" "${RV_DEPS_DAV1D_VERSION}" "ninja" "meson")
839
RV_SHOW_STANDARD_DEPS_VARIABLES()
940

cmake/dependencies/expat.cmake

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,24 @@
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(TARGET EXPAT::EXPAT PROPERTY IMPORTED_LOCATION "${EXPAT_LIBRARY}")
21+
TARGET_INCLUDE_DIRECTORIES(EXPAT::EXPAT INTERFACE "${EXPAT_INCLUDE_DIRS}")
22+
ENDIF()
23+
LIST(APPEND RV_DEPS_LIST EXPAT::EXPAT)
24+
# Some other deps might need EXPAT root dir
25+
GET_FILENAME_COMPONENT(_expat_include_dir "${EXPAT_INCLUDE_DIRS}" ABSOLUTE)
26+
GET_FILENAME_COMPONENT(_expat_root_dir "${_expat_include_dir}/.." ABSOLUTE)
27+
SET(RV_DEPS_EXPAT_ROOT_DIR "${_expat_root_dir}" CACHE INTERNAL "" FORCE)
28+
RETURN()
29+
ENDIF()
30+
ENDIF()
31+
1432
STRING(REPLACE "." "_" _version_underscored ${_version})
1533
SET(_download_url
1634
"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: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,22 @@
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(GC_LIBRARY NAMES gc HINTS ${PC_GC_LIBDIR})
17+
SET_PROPERTY(TARGET BDWGC::Gc PROPERTY IMPORTED_LOCATION "${GC_LIBRARY}")
18+
TARGET_INCLUDE_DIRECTORIES(BDWGC::Gc INTERFACE "${PC_GC_INCLUDE_DIRS}")
19+
ENDIF()
20+
LIST(APPEND RV_DEPS_LIST BDWGC::Gc)
21+
RETURN()
22+
ENDIF()
23+
ENDIF()
24+
925
SET(_download_url
1026
"https://github.com/ivmai/bdwgc/archive/refs/tags/v${_version}.zip"
1127
)

cmake/dependencies/glew.cmake

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,24 @@
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(TARGET GLEW::GLEW PROPERTY IMPORTED_LOCATION "${GLEW_SHARED_LIBRARY}")
17+
ELSE()
18+
SET_PROPERTY(TARGET GLEW::GLEW PROPERTY IMPORTED_LOCATION "${GLEW_LIBRARIES}")
19+
ENDIF()
20+
TARGET_INCLUDE_DIRECTORIES(GLEW::GLEW INTERFACE "${GLEW_INCLUDE_DIRS}")
21+
ENDIF()
22+
LIST(APPEND RV_DEPS_LIST GLEW::GLEW)
23+
RETURN()
24+
ENDIF()
25+
ENDIF()
26+
927
SET(_download_url
1028
"https://github.com/nigels-com/glew/archive/refs/tags/glew-${_version}.tar.gz"
1129
)

cmake/dependencies/imath.cmake

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

77
RV_CREATE_STANDARD_DEPS_VARIABLES("RV_DEPS_IMATH" "${RV_DEPS_IMATH_VERSION}" "" "")
88

9+
IF(RV_USE_BREW_DEPS)
10+
FIND_PACKAGE(Imath CONFIG)
11+
IF(Imath_FOUND)
12+
MESSAGE(STATUS "Using Homebrew Imath: ${Imath_VERSION}")
13+
14+
# Helper macro to promote target to global
15+
MACRO(PROMOTE_TO_GLOBAL target)
16+
IF(TARGET ${target})
17+
GET_TARGET_PROPERTY(_is_imported ${target} IMPORTED)
18+
IF(_is_imported)
19+
SET_TARGET_PROPERTIES(${target} PROPERTIES IMPORTED_GLOBAL TRUE)
20+
ENDIF()
21+
ENDIF()
22+
ENDMACRO()
23+
24+
IF(TARGET Imath::Imath)
25+
PROMOTE_TO_GLOBAL(Imath::Imath)
26+
LIST(APPEND RV_DEPS_LIST Imath::Imath)
27+
ELSEIF(TARGET Imath::imath)
28+
PROMOTE_TO_GLOBAL(Imath::imath)
29+
ADD_LIBRARY(Imath::Imath ALIAS Imath::imath)
30+
LIST(APPEND RV_DEPS_LIST Imath::Imath)
31+
ELSE()
32+
# Fallback using variables
33+
ADD_LIBRARY(Imath::Imath UNKNOWN IMPORTED GLOBAL)
34+
SET_PROPERTY(TARGET Imath::Imath PROPERTY IMPORTED_LOCATION "${Imath_LIBRARY}")
35+
TARGET_INCLUDE_DIRECTORIES(Imath::Imath INTERFACE "${Imath_INCLUDE_DIR}")
36+
LIST(APPEND RV_DEPS_LIST Imath::Imath)
37+
ENDIF()
38+
39+
SET(RV_DEPS_IMATH_VERSION "${Imath_VERSION}" CACHE INTERNAL "" FORCE)
40+
SET(RV_DEPS_IMATH_ROOT_DIR "${Imath_DIR}/../.." CACHE INTERNAL "" FORCE)
41+
SET(RV_DEPS_IMATH_CMAKE_DIR "${Imath_DIR}" CACHE STRING "" FORCE)
42+
RETURN()
43+
ENDIF()
44+
ENDIF()
45+
946
SET(_download_url
1047
"https://github.com/AcademySoftwareFoundation/Imath/archive/refs/tags/v${_version}.zip"
1148
)

cmake/dependencies/jpegturbo.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_JPEGTURBO" "${RV_DEPS_JPEGTURBO_VERSION}" "" "")
88

9+
IF(RV_USE_BREW_DEPS)
10+
FIND_PACKAGE(JPEG)
11+
FIND_LIBRARY(TURBOJPEG_LIBRARY NAMES turbojpeg)
12+
FIND_PATH(TURBOJPEG_INCLUDE_DIR NAMES turbojpeg.h)
13+
14+
IF(JPEG_FOUND AND TURBOJPEG_LIBRARY AND TURBOJPEG_INCLUDE_DIR)
15+
MESSAGE(STATUS "Using Homebrew JPEGTURBO")
16+
17+
IF(NOT TARGET libjpeg-turbo::jpeg)
18+
ADD_LIBRARY(libjpeg-turbo::jpeg UNKNOWN IMPORTED GLOBAL)
19+
SET_PROPERTY(TARGET libjpeg-turbo::jpeg PROPERTY IMPORTED_LOCATION "${JPEG_LIBRARY}")
20+
TARGET_INCLUDE_DIRECTORIES(libjpeg-turbo::jpeg INTERFACE "${JPEG_INCLUDE_DIR}")
21+
ENDIF()
22+
23+
IF(NOT TARGET libjpeg-turbo::turbojpeg)
24+
ADD_LIBRARY(libjpeg-turbo::turbojpeg UNKNOWN IMPORTED GLOBAL)
25+
SET_PROPERTY(TARGET libjpeg-turbo::turbojpeg PROPERTY IMPORTED_LOCATION "${TURBOJPEG_LIBRARY}")
26+
TARGET_INCLUDE_DIRECTORIES(libjpeg-turbo::turbojpeg INTERFACE "${TURBOJPEG_INCLUDE_DIR}")
27+
ENDIF()
28+
29+
LIST(APPEND RV_DEPS_LIST libjpeg-turbo::jpeg)
30+
LIST(APPEND RV_DEPS_LIST libjpeg-turbo::turbojpeg)
31+
RETURN()
32+
ENDIF()
33+
ENDIF()
34+
935
SET(_download_url
1036
"https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/${_version}.tar.gz"
1137
)

cmake/dependencies/ocio.cmake

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,27 @@
1010
RV_CREATE_STANDARD_DEPS_VARIABLES("RV_DEPS_OCIO" "${RV_DEPS_OCIO_VERSION}" "make" "")
1111
RV_SHOW_STANDARD_DEPS_VARIABLES()
1212

13+
IF(RV_USE_BREW_DEPS)
14+
FIND_PACKAGE(OpenColorIO CONFIG)
15+
IF(OpenColorIO_FOUND)
16+
MESSAGE(STATUS "Using Homebrew OpenColorIO: ${OpenColorIO_VERSION}")
17+
18+
IF(TARGET OpenColorIO::OpenColorIO)
19+
GET_TARGET_PROPERTY(_is_imported OpenColorIO::OpenColorIO IMPORTED)
20+
IF(_is_imported)
21+
SET_TARGET_PROPERTIES(OpenColorIO::OpenColorIO PROPERTIES IMPORTED_GLOBAL TRUE)
22+
ENDIF()
23+
ENDIF()
24+
25+
IF(NOT TARGET ocio::ocio)
26+
ADD_LIBRARY(ocio::ocio INTERFACE IMPORTED GLOBAL)
27+
TARGET_LINK_LIBRARIES(ocio::ocio INTERFACE OpenColorIO::OpenColorIO)
28+
ENDIF()
29+
LIST(APPEND RV_DEPS_LIST OpenColorIO::OpenColorIO)
30+
RETURN()
31+
ENDIF()
32+
ENDIF()
33+
1334
# The folder OCIO is building its own dependencies
1435
SET(RV_DEPS_OCIO_DIST_DIR
1536
${_build_dir}/ext/dist

0 commit comments

Comments
 (0)