blob: 507c0262ee8b341d5e9a744d1c98bea05ca3d1d9 [file] [log] [blame]
set(AVIF_LIBYUV_TAG "ce488afb7b1a1d9279ddeddb3fcade534d741c81")
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()
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}")
set_target_properties(yuv::yuv PROPERTIES FOLDER "ext/libyuv")
else()
message(STATUS "libavif(AVIF_LIBYUV=LOCAL): compiled library not found at ${LIB_FILENAME}; using FetchContent")
if(EXISTS "${AVIF_SOURCE_DIR}/ext/libyuv")
message(STATUS "libavif(AVIF_LIBYUV=LOCAL): ext/libyuv found; using as FetchContent SOURCE_DIR")
set(FETCHCONTENT_SOURCE_DIR_LIBYUV "${AVIF_SOURCE_DIR}/ext/libyuv")
message(CHECK_START "libavif(AVIF_LIBYUV=LOCAL): configuring libyuv")
else()
message(CHECK_START "libavif(AVIF_LIBYUV=LOCAL): fetching and configuring libyuv")
endif()
set(LIBYUV_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/libyuv-build")
if(ANDROID_ABI)
set(LIBYUV_BINARY_DIR "${LIBYUV_BINARY_DIR}/${ANDROID_ABI}")
endif()
# unset JPEG_FOUND so that libyuv does not find it
set(JPEG_FOUND_ORIG ${JPEG_FOUND})
unset(JPEG_FOUND CACHE)
set(CMAKE_DISABLE_FIND_PACKAGE_JPEG TRUE)
FetchContent_Declare(
libyuv
GIT_REPOSITORY "https://chromium.googlesource.com/libyuv/libyuv"
BINARY_DIR "${LIBYUV_BINARY_DIR}"
GIT_TAG "${AVIF_LIBYUV_TAG}"
UPDATE_COMMAND ""
)
avif_fetchcontent_populate_cmake(libyuv)
set(JPEG_FOUND ${JPEG_FOUND_ORIG})
unset(JPEG_FOUND_ORIG CACHE)
set(CMAKE_DISABLE_FIND_PACKAGE_JPEG FALSE)
set_target_properties(yuv PROPERTIES AVIF_LOCAL ON POSITION_INDEPENDENT_CODE ON)
add_library(yuv::yuv ALIAS yuv)
set(LIBYUV_INCLUDE_DIR "${libyuv_SOURCE_DIR}/include")
target_include_directories(yuv INTERFACE ${LIBYUV_INCLUDE_DIR})
if(EXISTS "${AVIF_SOURCE_DIR}/ext/libyuv")
set_target_properties(yuv PROPERTIES FOLDER "ext/libyuv")
endif()
message(CHECK_PASS "complete")
endif()
set(libyuv_FOUND ON)
set(LIBYUV_VERSION_H "${LIBYUV_INCLUDE_DIR}/libyuv/version.h")
if(EXISTS ${LIBYUV_VERSION_H})
# message(STATUS "Reading: ${LIBYUV_VERSION_H}")
file(READ ${LIBYUV_VERSION_H} LIBYUV_VERSION_H_CONTENTS)
string(REGEX MATCH "#define LIBYUV_VERSION ([0-9]+)" _ ${LIBYUV_VERSION_H_CONTENTS})
set(LIBYUV_VERSION ${CMAKE_MATCH_1})
# message(STATUS "libyuv version detected: ${LIBYUV_VERSION}")
endif()
if(NOT LIBYUV_VERSION)
message(STATUS "libyuv version detection failed.")
endif()