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:
parent
05142b3ea8
commit
880193d689
@ -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)
|
||||
|
167
build_files/build_environment/cmake/x265.cmake
Normal file
167
build_files/build_environment/cmake/x265.cmake
Normal file
@ -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
|
||||
|
26
build_files/build_environment/patches/x265_windows_arm.diff
Normal file
26
build_files/build_environment/patches/x265_windows_arm.diff
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user