Deps: add libx265 build support

This updates the deps builder only, further integration into blender
is still needed to expose it in blender itself.
This commit is contained in:
Ray Molenkamp 2024-06-05 09:29:28 -06:00
parent 05142b3ea8
commit 880193d689
9 changed files with 233 additions and 11 deletions

@ -153,6 +153,7 @@ if(NOT WIN32 OR ENABLE_MSYS2)
include(cmake/opus.cmake)
include(cmake/vpx.cmake)
include(cmake/x264.cmake)
include(cmake/x265.cmake)
include(cmake/aom.cmake)
include(cmake/ffmpeg.cmake)
include(cmake/fftw.cmake)

@ -107,6 +107,7 @@ download_source(FLAC)
download_source(VPX)
download_source(OPUS)
download_source(X264)
download_source(X265)
download_source(OPENJPEG)
download_source(FFMPEG)
download_source(FFTW)

@ -20,7 +20,8 @@ set(FFMPEG_CFLAGS "\
-I${temp_LIBDIR}/vpx/include \
-I${temp_LIBDIR}/x264/include \
-I${temp_LIBDIR}/zlib/include \
-I${temp_LIBDIR}/aom/include"
-I${temp_LIBDIR}/aom/include \
-I${temp_LIBDIR}/x265/include"
)
set(FFMPEG_LDFLAGS "\
${LIBDIR_FLAG}${temp_LIBDIR}/lame/lib \
@ -31,6 +32,7 @@ ${LIBDIR_FLAG}${temp_LIBDIR}/theora/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/opus/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/vpx/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/x264/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/x265/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/zlib/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/aom/lib"
)
@ -81,7 +83,8 @@ ${temp_LIBDIR}/vpx/lib/pkgconfig:\
${temp_LIBDIR}/theora/lib/pkgconfig:\
${temp_LIBDIR}/openjpeg/lib/pkgconfig:\
${temp_LIBDIR}/opus/lib/pkgconfig:\
${temp_LIBDIR}/aom/lib/pkgconfig:"
${temp_LIBDIR}/aom/lib/pkgconfig:\
${temp_LIBDIR}/x265/lib/pkgconfig:"
)
endif()
@ -180,6 +183,7 @@ ExternalProject_Add(external_ffmpeg
--enable-libmp3lame
--disable-librtmp
--enable-libx264
--enable-libx265
--enable-libaom
--disable-libopencore-amrnb
--disable-libopencore-amrwb
@ -230,6 +234,7 @@ add_dependencies(
external_ffmpeg
external_zlib
external_x264
external_x265
external_opus
external_vpx
external_theora

@ -118,6 +118,7 @@ if((NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe") AND (EXISTS "${D
"${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe"
)
endif()
set(NASM_PATH "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe")
message("Checking for perl")
# download perl for libvpx

@ -351,6 +351,13 @@ set(X264_HASH_TYPE SHA256)
set(X264_FILE x264-${X264_VERSION}.tar.gz)
set(X264_HOMEPAGE https://www.videolan.org/developers/x264.html)
set(X265_VERSION 3cf6c1e53037eb9e198860365712e1bafb22f7c6)
set(X265_URI https://bitbucket.org/multicoreware/x265_git/get/${X265_VERSION}.tar.gz)
set(X265_HASH 40d12016192cdc740132cb00dd6cc80ead094ff91a1a897181256def2011342e)
set(X265_HASH_TYPE SHA256)
set(X265_FILE x265-${X265_VERSION}.tar.gz)
set(X265_HOMEPAGE https://www.videolan.org/developers/x265.html)
set(OPENJPEG_VERSION 2.5.0)
set(OPENJPEG_SHORT_VERSION 2.5)
set(OPENJPEG_URI https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz)

@ -0,0 +1,167 @@
# SPDX-FileCopyrightText: 2024 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
set(LIB_PREFIX "")
set(LIB_SUFFIX "-static")
else()
set(LIB_PREFIX "lib")
set(LIB_SUFFIX "")
endif()
if(BLENDER_PLATFORM_WINDOWS_ARM)
set(X265_WINDOWS_ARM64_ARGS
-DCMAKE_C_COMPILER=${LIBDIR}/llvm/bin/clang-cl.exe
-DCMAKE_CXX_COMPILER=${LIBDIR}/llvm/bin/clang-cl.exe
-DCMAKE_C_FLAGS_INIT="--target=arm64-pc-windows-msvc"
-DCMAKE_CXX_FLAGS_INIT="--target=arm64-pc-windows-msvc"
-DCMAKE_CXX_STANDARD=11
)
set(X265_12_PATCH_COMMAND COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/x265_12/src/external_x265_12 < ${PATCH_DIR}/x265_windows_arm.diff)
set(X265_10_PATCH_COMMAND COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/x265_10/src/external_x265_10 < ${PATCH_DIR}/x265_windows_arm.diff)
set(X265_PATCH_COMMAND COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/x265/src/external_x265 < ${PATCH_DIR}/x265_windows_arm.diff)
else()
set(X265_WINDOWS_ARM64_ARGS)
set(X265_12_PATCH_COMMAND)
set(X265_10_PATCH_COMMAND)
set(X265_PATCH_COMMAND)
endif()
# 12 bit build flags
set(X265_12_EXTRA_ARGS
-DHIGH_BIT_DEPTH=ON
-DEXPORT_C_API=OFF
-DENABLE_SHARED=OFF
-DENABLE_CLI=OFF
-DMAIN12=ON
)
# 10 bit build flags
set(X265_10_EXTRA_ARGS
-DHIGH_BIT_DEPTH=ON
-DEXPORT_C_API=OFF
-DENABLE_SHARED=OFF
-DENABLE_CLI=OFF
)
# 8 bit build flags
set(X265_EXTRA_ARGS
-DENABLE_SHARED=OFF
-DEXTRA_LIB=${LIBDIR}/x265_12/lib/${LIB_PREFIX}x265${LIB_SUFFIX}${LIBEXT}^^${LIBDIR}/x265_10/lib/${LIB_PREFIX}x265${LIB_SUFFIX}${LIBEXT}
-DLINKED_10BIT=ON
-DLINKED_12BIT=ON
)
if(UNIX)
list(APPEND X265_EXTRA_ARGS
-DCMAKE_STATIC_LIBRARY_SUFFIX_C=_unmerged${LIB_SUFFIX}${LIBEXT}
-DCMAKE_STATIC_LIBRARY_SUFFIX_CXX=_unmerged${LIB_SUFFIX}${LIBEXT}
)
endif()
if(WIN32)
list(APPEND X265_EXTRA_ARGS -DNASM_EXECUTABLE=${NASM_PATH})
list(APPEND X265_10_EXTRA_ARGS -DNASM_EXECUTABLE=${NASM_PATH})
list(APPEND X265_12_EXTRA_ARGS -DNASM_EXECUTABLE=${NASM_PATH})
endif()
ExternalProject_Add(external_x265_12
URL file://${PACKAGE_DIR}/${X265_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${X265_HASH_TYPE}=${X265_HASH}
PREFIX ${BUILD_DIR}/x265_12
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
SOURCE_SUBDIR source
PATCH_COMMAND ${X265_12_PATCH_COMMAND}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/x265_12 ${DEFAULT_CMAKE_FLAGS} ${X265_WINDOWS_ARM64_ARGS} ${X265_12_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/x265_12
)
ExternalProject_Add(external_x265_10
URL file://${PACKAGE_DIR}/${X265_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${X265_HASH_TYPE}=${X265_HASH}
PREFIX ${BUILD_DIR}/x265_10
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
SOURCE_SUBDIR source
PATCH_COMMAND ${X265_10_PATCH_COMMAND}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/x265_10 ${DEFAULT_CMAKE_FLAGS} ${X265_WINDOWS_ARM64_ARGS} ${X265_10_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/x265_10
)
ExternalProject_Add(external_x265
URL file://${PACKAGE_DIR}/${X265_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${X265_HASH_TYPE}=${X265_HASH}
PREFIX ${BUILD_DIR}/x265
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
SOURCE_SUBDIR source
PATCH_COMMAND ${X265_PATCH_COMMAND}
LIST_SEPARATOR ^^
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/x265 ${DEFAULT_CMAKE_FLAGS} ${X265_WINDOWS_ARM64_ARGS} ${X265_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/x265
)
add_dependencies(
external_x265
external_x265_12
external_x265_10
)
if(BUILD_MODE STREQUAL Release AND WIN32)
ExternalProject_Add_Step(external_x265 after_install
COMMAND "${CMAKE_AR}"
/OUT:${LIBDIR}/x265/lib/x265.lib
${LIBDIR}/x265/lib/${LIB_PREFIX}x265${LIB_SUFFIX}.lib
${LIBDIR}/x265_10/lib/${LIB_PREFIX}x265${LIB_SUFFIX}.lib
${LIBDIR}/x265_12/lib/${LIB_PREFIX}x265${LIB_SUFFIX}.lib
DEPENDEES install
)
endif()
if(UNIX)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
# Write a script and the STDIN for CMAKE_AR.
# This is needed because `ar` requires STDIN instead of command line arguments, sigh!
set(_ar_stdin "${BUILD_DIR}/x265/tmp/x265_ar_script.stdin")
set(_ar_cmake "${BUILD_DIR}/x265/tmp/x265_ar_script.cmake")
file(WRITE ${_ar_stdin} "\
CREATE ${LIBDIR}/x265/lib/${LIB_PREFIX}x265${LIB_SUFFIX}${LIBEXT}
ADDLIB ${LIBDIR}/x265/lib/${LIB_PREFIX}x265${LIB_SUFFIX}_unmerged${LIBEXT}
ADDLIB ${LIBDIR}/x265_10/lib/${LIB_PREFIX}x265${LIB_SUFFIX}${LIBEXT}
ADDLIB ${LIBDIR}/x265_12/lib/${LIB_PREFIX}x265${LIB_SUFFIX}${LIBEXT}
SAVE
END
")
file(WRITE ${_ar_cmake} "\
set(ARG_AR $\{CMAKE_ARGV0\})
set(ARG_AR_INPUT $\{CMAKE_ARGV1\})
execute_process(
COMMAND $\{ARG_AR\} -M
INPUT_FILE $\{ARG_AR_INPUT\}
)
")
ExternalProject_Add_Step(external_x265 after_install
COMMAND ${CMAKE_COMMAND} -P ${_ar_cmake} -- ${CMAKE_AR} ${_ar_stdin}
DEPENDEES install
)
unset(_ar_stdin)
unset(_ar_cmake)
else()
ExternalProject_Add_Step(external_x265 after_install
COMMAND libtool -static -o
${LIBDIR}/x265/lib/${LIB_PREFIX}x265${LIB_SUFFIX}${LIBEXT}
${LIBDIR}/x265/lib/${LIB_PREFIX}x265${LIB_SUFFIX}_unmerged${LIBEXT}
${LIBDIR}/x265_10/lib/${LIB_PREFIX}x265${LIB_SUFFIX}${LIBEXT}
${LIBDIR}/x265_12/lib/${LIB_PREFIX}x265${LIB_SUFFIX}${LIBEXT}
DEPENDEES install
)
endif()
endif()
unset(LIB_PREFIX)
unset(LIB_SUFFIX)

@ -1,17 +1,17 @@
--- a/configure 2018-08-27 13:46:41.071106150 +0200
+++ b/configure 2018-08-27 13:46:28.162765762 +0200
@@ -6655,7 +6655,7 @@
@@ -6768,7 +6768,7 @@
require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; }
enabled libopenh264 && require_pkg_config libopenh264 openh264 wels/codec_api.h WelsGetCodecVersion
enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
- { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
+ { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version "-DOPJ_STATIC $pthreads_extralibs $libm_extralibs" && add_cppflags "-DOPJ_STATIC $pthreads_extralibs $libm_extralibs"; } }
enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
enabled libopenvino && require libopenvino c_api/ie_c_api.h ie_c_api_version -linference_engine_c_api
enabled libopus && {
@@ -6696,8 +6696,8 @@
enabled libvidstab && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit
enabled libopenvino && { { check_pkg_config libopenvino openvino openvino/c/openvino.h ov_core_create && enable openvino2; } ||
{ check_pkg_config libopenvino openvino c_api/ie_c_api.h ie_c_api_version ||
@@ -6812,8 +6812,8 @@
enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 2.0.0" libvmaf.h vmaf_init
enabled libvmaf && check_pkg_config libvmaf_cuda "libvmaf >= 2.0.0" libvmaf_cuda.h vmaf_cuda_state_init
enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
-enabled libvorbis && require_pkg_config libvorbis vorbis vorbis/codec.h vorbis_info_init &&
- require_pkg_config libvorbisenc vorbisenc vorbis/vorbisenc.h vorbis_encode_init
@ -20,3 +20,12 @@
enabled libvpx && {
enabled libvpx_vp8_decoder && {
@@ -6845,7 +6845,7 @@
[ "$toolchain" != "msvc" ] ||
require_cpp_condition libx264 x264.h "X264_BUILD >= 158"; } &&
check_cpp_condition libx262 x264.h "X264_MPEG2"
-enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get &&
+enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get "$pthreads_extralibs" &&
require_cpp_condition libx265 x265.h "X265_BUILD >= 89"
enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode "-lxavs $pthreads_extralibs $libm_extralibs"
enabled libxavs2 && require_pkg_config libxavs2 "xavs2 >= 1.3.0" "stdint.h xavs2.h" xavs2_api_get

@ -1,6 +1,5 @@
diff -Naur ffmpeg-clean/configure ffmpeg-dirty/configure
--- ffmpeg-clean/configure 2023-02-27 20:43:45.000000000 +0000
+++ ffmpeg-dirty/configure 2023-05-25 09:49:24.949566500 +0100
--- ffmpeg-6.1.1\configure 2023-12-30 16:07:26 -0700
+++ external_ffmpeg\configure 2024-03-18 13:17:59 -0600
@@ -6675,7 +6675,7 @@
enabled jni && { [ $target_os = "android" ] && check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; }
enabled ladspa && require_headers "ladspa.h dlfcn.h"
@ -43,7 +42,7 @@ diff -Naur ffmpeg-clean/configure ffmpeg-dirty/configure
enabled libvpx && {
enabled libvpx_vp8_decoder && {
@@ -6840,7 +6839,7 @@
@@ -6840,12 +6839,12 @@
enabled libwebp && {
enabled libwebp_encoder && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion
enabled libwebp_anim_encoder && check_pkg_config libwebp_anim_encoder "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit; }
@ -52,3 +51,9 @@ diff -Naur ffmpeg-clean/configure ffmpeg-dirty/configure
require_cpp_condition libx264 x264.h "X264_BUILD >= 122" && {
[ "$toolchain" != "msvc" ] ||
require_cpp_condition libx264 x264.h "X264_BUILD >= 158"; } &&
check_cpp_condition libx262 x264.h "X264_MPEG2"
-enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get &&
+enabled libx265 && require libx265 "x265.h" x265_api_get -lx265 &&
require_cpp_condition libx265 x265.h "X265_BUILD >= 89"
enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode "-lxavs $pthreads_extralibs $libm_extralibs"
enabled libxavs2 && require_pkg_config libxavs2 "xavs2 >= 1.3.0" "stdint.h xavs2.h" xavs2_api_get

@ -0,0 +1,26 @@
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index c74db2179..bb8fb3c29 100755
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -378,7 +378,7 @@ if(GCC)
endif()
endif()
endif(ENABLE_AGGRESSIVE_CHECKS)
- execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CC_VERSION)
+ #execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CC_VERSION)
endif(GCC)
find_package(Nasm)
diff --git a/source/dynamicHDR10/CMakeLists.txt b/source/dynamicHDR10/CMakeLists.txt
index 22fb79d44..ad0f3a7a8 100644
--- a/source/dynamicHDR10/CMakeLists.txt
+++ b/source/dynamicHDR10/CMakeLists.txt
@@ -140,7 +140,7 @@ if(GCC)
endif()
endif()
endif(ENABLE_AGGRESSIVE_CHECKS)
- execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CC_VERSION)
+ #execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CC_VERSION)
endif(GCC)
# Build options