Skip to content

Commit

Permalink
wip: compat with ext/libyuv
Browse files Browse the repository at this point in the history
  • Loading branch information
fdintino committed Feb 21, 2024
1 parent a22649c commit ffc6b19
Showing 1 changed file with 54 additions and 22 deletions.
76 changes: 54 additions & 22 deletions cmake/Modules/LocalLibyuv.cmake
Original file line number Diff line number Diff line change
@@ -1,32 +1,60 @@
if(NOT DEFINED AVIF_LOCAL_LIBYUV_REPO)
set(AVIF_LOCAL_LIBYUV_REPO "https://chromium.googlesource.com/libyuv/libyuv")
endif()
if(NOT DEFINED AVIF_LOCAL_LIBYUV_TAG)
set(AVIF_LOCAL_LIBYUV_TAG "464c51a0353c71f08fe45f683d6a97a638d47833")
endif()
set(AVIF_LOCAL_LIBYUV_REPO "https://chromium.googlesource.com/libyuv/libyuv")
set(AVIF_LOCAL_LIBYUV_TAG "464c51a0353c71f08fe45f683d6a97a638d47833")

set(AVIF_LIBYUV_EXT_SOURCE_DIR "${AVIF_SOURCE_DIR}/ext/libyuv")

set(LIBYUV_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/ext/libyuv")
if(ANDROID_ABI)
set(LIBYUV_BINARY_DIR "${LIBYUV_BINARY_DIR}/${ANDROID_ABI}")
set(AVIF_LIBYUV_BUILD_DIR "${AVIF_SOURCE_DIR}/ext/libyuv/build")
# If ${ANDROID_ABI} is set, look for the library under that subdirectory.
if(DEFINED ANDROID_ABI)
set(AVIF_LIBYUV_BUILD_DIR "${AVIF_LIBYUV_BUILD_DIR}/${ANDROID_ABI}")
endif()
FetchContent_Declare(
libyuv
GIT_REPOSITORY "${AVIF_LOCAL_LIBYUV_REPO}"
SOURCE_DIR "${AVIF_SOURCE_DIR}/ext/libyuv" BINARY_DIR "${LIBYUV_BINARY_DIR}"
GIT_TAG "${AVIF_LOCAL_LIBYUV_TAG}"
UPDATE_COMMAND ""
)
set(LIB_FILENAME "${AVIF_LIBYUV_BUILD_DIR}/${AVIF_LIBRARY_PREFIX}yuv${CMAKE_STATIC_LIBRARY_SUFFIX}")

if(EXISTS "${LIB_FILENAME}")
message(STATUS "libavif(AVIF_LIBYUV=LOCAL): compiled library found at ${LIB_FILENAME}")
set(LIBYUV_INCLUDE_DIR "${AVIF_SOURCE_DIR}/ext/libyuv/include")

add_library(yuv::yuv STATIC IMPORTED GLOBAL)
set_target_properties(yuv::yuv PROPERTIES IMPORTED_LOCATION "${LIB_FILENAME}" AVIF_LOCAL ON)
target_include_directories(yuv::yuv INTERFACE "${LIBYUV_INCLUDE_DIR}")

else()
message(STATUS "libavif(AVIF_LIBYUV=LOCAL): compiled library not found at ${LIB_FILENAME}; using FetchContent")
if(EXISTS "${AVIF_LIBYUV_EXT_SOURCE_DIR}")
message(STATUS "libavif(AVIF_LIBYUV=LOCAL): ext/libyuv found; using as FetchContent SOURCE_DIR")
set(FETCHCONTENT_SOURCE_DIR_SVT "${AVIF_LIBYUV_EXT_SOURCE_DIR}")
message(CHECK_START "libavif(AVIF_LIBYUV=LOCAL): configuring libyuv")
else()
message(CHECK_START "libavif(AVIF_LIBYUV=LOCAL): fetching and configuring libyuv")
endif()

avif_fetchcontent_populate_cmake(libyuv)
set(LIBYUV_FETCHCONTENT_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libyuv-build")
if(ANDROID_ABI)
set(LIBYUV_FETCHCONTENT_BINARY_DIR "${LIBYUV_FETCHCONTENT_BINARY_DIR}/${ANDROID_ABI}")
endif()
FetchContent_Declare(
libyuv
GIT_REPOSITORY "${AVIF_LOCAL_LIBYUV_REPO}"
BINARY_DIR "${LIBYUV_FETCHCONTENT_BINARY_DIR}"
GIT_TAG "${AVIF_LOCAL_LIBYUV_TAG}"
UPDATE_COMMAND ""
)

set_property(TARGET yuv PROPERTY POSITION_INDEPENDENT_CODE ON)
set_target_properties(yuv PROPERTIES AVIF_LOCAL ON FOLDER "ext/libyuv")
avif_fetchcontent_populate_cmake(libyuv)

add_library(yuv::yuv ALIAS yuv)
set_property(TARGET yuv PROPERTY POSITION_INDEPENDENT_CODE ON)
if(EXISTS "${AVIF_LIBYUV_EXT_SOURCE_DIR}")
set_target_properties(yuv PROPERTIES AVIF_LOCAL OUTPUT_NAME_DEBUG)
endif()

set(LIBYUV_INCLUDE_DIR "${AVIF_SOURCE_DIR}/ext/libyuv/include")
add_library(yuv::yuv ALIAS yuv)

target_include_directories(yuv INTERFACE ${LIBYUV_INCLUDE_DIR})
set(LIBYUV_INCLUDE_DIR "${AVIF_SOURCE_DIR}/ext/libyuv/include")

target_include_directories(yuv INTERFACE ${LIBYUV_INCLUDE_DIR})

message(CHECK_PASS "complete")
endif()

set(libyuv_FOUND ON)

Expand All @@ -41,3 +69,7 @@ endif()
if(NOT LIBYUV_VERSION)
message(STATUS "libyuv version detection failed.")
endif()

if(EXISTS "${AVIF_LIBYUV_EXT_SOURCE_DIR}")
set_target_properties(yuv PROPERTIES FOLDER "ext/libyuv")
endif()

0 comments on commit ffc6b19

Please sign in to comment.