File: LocalSvt.cmake

package info (click to toggle)
libavif 1.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 20,956 kB
  • sloc: ansic: 29,303; cpp: 13,260; sh: 1,145; xml: 1,040; java: 307; makefile: 51
file content (101 lines) | stat: -rw-r--r-- 3,865 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
set(AVIF_SVT_GIT_TAG "v3.0.1")

set(LIB_FILENAME "${AVIF_SOURCE_DIR}/ext/SVT-AV1/Bin/Release/${AVIF_LIBRARY_PREFIX}SvtAv1Enc${CMAKE_STATIC_LIBRARY_SUFFIX}")

if(EXISTS "${LIB_FILENAME}")
    message(STATUS "libavif(AVIF_CODEC_SVT=LOCAL): compiled library found at ${LIB_FILENAME}")
    add_library(SvtAv1Enc STATIC IMPORTED GLOBAL)
    set_target_properties(SvtAv1Enc PROPERTIES IMPORTED_LOCATION "${LIB_FILENAME}" AVIF_LOCAL ON)
    target_include_directories(SvtAv1Enc INTERFACE "${AVIF_SOURCE_DIR}/ext/SVT-AV1/include")
else()
    message(STATUS "libavif(AVIF_CODEC_SVT=LOCAL): compiled library not found at ${LIB_FILENAME}; using FetchContent")
    if(EXISTS "${AVIF_SOURCE_DIR}/ext/SVT-AV1")
        message(STATUS "libavif(AVIF_CODEC_SVT=LOCAL): ext/SVT-AV1 found; using as FetchContent SOURCE_DIR")
        set(FETCHCONTENT_SOURCE_DIR_SVT "${AVIF_SOURCE_DIR}/ext/SVT-AV1")
        message(CHECK_START "libavif(AVIF_CODEC_SVT=LOCAL): configuring SVT-AV1")
    else()
        message(CHECK_START "libavif(AVIF_CODEC_SVT=LOCAL): fetching and configuring SVT-AV1")
    endif()

    set(SVT_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/svt-build")
    if(ANDROID_ABI)
        set(SVT_BINARY_DIR "${SVT_BINARY_DIR}/${ANDROID_ABI}")
    endif()

    # Workaround https://gitlab.kitware.com/cmake/cmake/-/issues/25042 by enabling ASM before ASM_NASM
    if(NOT CMAKE_ASM_COMPILER)
        include(CheckLanguage)
        check_language(ASM)
        if(CMAKE_ASM_COMPILER)
            enable_language(ASM)
        endif()
    endif()
    if(NOT CMAKE_ASM_NASM_COMPILER AND CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64|AMD64|amd64)")
        include(CheckLanguage)
        check_language(ASM_NASM)
        if(CMAKE_ASM_NASM_COMPILER)
            enable_language(ASM_NASM)
        endif()
    endif()

    FetchContent_Declare(
        svt
        GIT_REPOSITORY "https://gitlab.com/AOMediaCodec/SVT-AV1.git"
        BINARY_DIR "${SVT_BINARY_DIR}"
        GIT_TAG "${AVIF_SVT_GIT_TAG}"
        UPDATE_COMMAND ""
        GIT_SHALLOW ON
    )

    set(BUILD_DEC OFF CACHE BOOL "")
    set(BUILD_APPS OFF CACHE BOOL "")
    set(NATIVE OFF CACHE BOOL "")

    set(CMAKE_BUILD_TYPE_ORIG ${CMAKE_BUILD_TYPE})
    set(CMAKE_BUILD_TYPE Release CACHE INTERNAL "")

    set(CMAKE_OUTPUT_DIRECTORY_ORIG "${CMAKE_OUTPUT_DIRECTORY}")
    set(CMAKE_OUTPUT_DIRECTORY "${SVT_BINARY_DIR}" CACHE INTERNAL "")

    if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
        set(SVT_AV1_LTO ON)
    else()
        set(SVT_AV1_LTO OFF)
    endif()

    avif_fetchcontent_populate_cmake(svt)

    set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_ORIG} CACHE STRING "" FORCE)
    set(CMAKE_OUTPUT_DIRECTORY ${CMAKE_OUTPUT_DIRECTORY_ORIG} CACHE STRING "" FORCE)

    set(SVT_INCLUDE_DIR ${SVT_BINARY_DIR}/include)
    file(MAKE_DIRECTORY ${SVT_INCLUDE_DIR}/svt-av1)

    file(GLOB _svt_header_files ${svt_SOURCE_DIR}/Source/API/*.h)

    set(_svt_header_byproducts)

    foreach(_svt_header_file ${_svt_header_files})
        get_filename_component(_svt_header_name "${_svt_header_file}" NAME)
        set(_svt_header_output ${SVT_INCLUDE_DIR}/svt-av1/${_svt_header_name})
        add_custom_command(
            OUTPUT ${_svt_header_output}
            COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_svt_header_file} ${_svt_header_output}
            DEPENDS ${_svt_header_file}
            VERBATIM
        )
        list(APPEND _svt_header_byproducts ${_svt_header_output})
    endforeach()

    add_custom_target(_svt_install_headers DEPENDS ${_svt_header_byproducts})
    add_dependencies(SvtAv1Enc _svt_install_headers)
    set_target_properties(SvtAv1Enc PROPERTIES AVIF_LOCAL ON)

    target_include_directories(SvtAv1Enc INTERFACE ${SVT_INCLUDE_DIR})

    message(CHECK_PASS "complete")
endif()

if(EXISTS "${AVIF_SOURCE_DIR}/ext/SVT-AV1")
    set_target_properties(SvtAv1Enc PROPERTIES FOLDER "ext/SVT-AV1")
endif()