set(AVIF_RAV1E_GIT_TAG v0.8.1) set(AVIF_CORROSION_GIT_TAG v0.5.2) set(AVIF_CARGOC_GIT_TAG v0.10.14) set(RAV1E_LIB_FILENAME "${AVIF_SOURCE_DIR}/ext/rav1e/build.libavif/usr/lib/${AVIF_LIBRARY_PREFIX}rav1e${CMAKE_STATIC_LIBRARY_SUFFIX}" ) if(EXISTS "${RAV1E_LIB_FILENAME}") message(STATUS "libavif(AVIF_CODEC_RAV1E=LOCAL): compiled rav1e library found at ${RAV1E_LIB_FILENAME}") add_library(rav1e::rav1e STATIC IMPORTED) set_target_properties(rav1e::rav1e PROPERTIES IMPORTED_LOCATION "${RAV1E_LIB_FILENAME}" IMPORTED_SONAME rav1e AVIF_LOCAL ON) target_include_directories(rav1e::rav1e INTERFACE "${AVIF_SOURCE_DIR}/ext/rav1e/build.libavif/usr/include/rav1e") else() message( STATUS "libavif(AVIF_CODEC_RAV1E=LOCAL): compiled rav1e library not found at ${RAV1E_LIB_FILENAME}; using FetchContent" ) if(EXISTS "${AVIF_SOURCE_DIR}/ext/rav1e") message(STATUS "libavif(AVIF_CODEC_RAV1E=LOCAL): ext/rav1e found; using as FetchContent SOURCE_DIR") set(FETCHCONTENT_SOURCE_DIR_RAV1E "${AVIF_SOURCE_DIR}/ext/rav1e") message(CHECK_START "libavif(AVIF_CODEC_RAV1E=LOCAL): configuring rav1e") else() message(CHECK_START "libavif(AVIF_CODEC_RAV1E=LOCAL): fetching and configuring rav1e") endif() FetchContent_Declare( Corrosion GIT_REPOSITORY https://github.com/corrosion-rs/corrosion.git GIT_TAG ${AVIF_CORROSION_GIT_TAG} GIT_SHALLOW ON ) if(APPLE) if(CMAKE_OSX_ARCHITECTURES STREQUAL "arm64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") set(Rust_CARGO_TARGET "aarch64-apple-darwin") endif() endif() FetchContent_MakeAvailable(Corrosion) find_program(CARGO_CINSTALL cargo-cinstall HINTS "$ENV{HOME}/.cargo/bin") if(CARGO_CINSTALL) add_executable(cargo-cinstall IMPORTED GLOBAL) set_property(TARGET cargo-cinstall PROPERTY IMPORTED_LOCATION ${CARGO_CINSTALL}) endif() if(NOT TARGET cargo-cinstall) FetchContent_Declare( cargoc GIT_REPOSITORY https://github.com/lu-zero/cargo-c.git GIT_TAG "${AVIF_CARGOC_GIT_TAG}" GIT_SHALLOW ON ) FetchContent_MakeAvailable(cargoc) corrosion_import_crate( MANIFEST_PATH ${cargoc_SOURCE_DIR}/Cargo.toml PROFILE release IMPORTED_CRATES MYVAR_IMPORTED_CRATES FEATURES vendored-openssl ) set(CARGO_CINSTALL $) endif() FetchContent_Declare( rav1e GIT_REPOSITORY https://github.com/xiph/rav1e.git GIT_TAG "${AVIF_RAV1E_GIT_TAG}" GIT_SHALLOW ON ) FetchContent_MakeAvailable(rav1e) set(RAV1E_LIB_FILENAME ${CMAKE_CURRENT_BINARY_DIR}/ext/rav1e/usr/lib/${CMAKE_STATIC_LIBRARY_PREFIX}rav1e${CMAKE_STATIC_LIBRARY_SUFFIX} ) set(RAV1E_ENVVARS) if(CMAKE_C_IMPLICIT_LINK_DIRECTORIES MATCHES "alpine-linux-musl") list(APPEND RAV1E_ENVVARS "RUSTFLAGS=-C link-args=-Wl,-z,stack-size=2097152 -C target-feature=-crt-static") endif() if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_OSX_SYSROOT) list(APPEND RAV1E_ENVVARS "SDKROOT=${CMAKE_OSX_SYSROOT}") endif() if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_OSX_DEPLOYMENT_TARGET) list(APPEND RAV1E_ENVVARS "MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}") endif() add_custom_target( rav1e COMMAND ${CMAKE_COMMAND} -E env ${RAV1E_ENVVARS} ${CARGO_CINSTALL} cinstall -v --release --library-type=staticlib --prefix=/usr --target ${Rust_CARGO_TARGET_CACHED} --destdir ${CMAKE_CURRENT_BINARY_DIR}/ext/rav1e DEPENDS cargo-cinstall BYPRODUCTS ${RAV1E_LIB_FILENAME} USES_TERMINAL WORKING_DIRECTORY ${rav1e_SOURCE_DIR} ) set(RAV1E_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/ext/rav1e/usr/include/rav1e") file(MAKE_DIRECTORY ${RAV1E_INCLUDE_DIR}) set(RAV1E_FOUND ON) add_library(rav1e::rav1e STATIC IMPORTED) add_dependencies(rav1e::rav1e rav1e) target_link_libraries(rav1e::rav1e INTERFACE "${Rust_CARGO_TARGET_LINK_NATIVE_LIBS}") target_link_options(rav1e::rav1e INTERFACE "${Rust_CARGO_TARGET_LINK_OPTIONS}") set_target_properties(rav1e::rav1e PROPERTIES IMPORTED_LOCATION "${RAV1E_LIB_FILENAME}" AVIF_LOCAL ON FOLDER "ext/rav1e") target_include_directories(rav1e::rav1e INTERFACE "${RAV1E_INCLUDE_DIR}") message(CHECK_PASS "complete") endif()