Added support for AVIF, HEIF and JPEG XL on macOS.

This commit is contained in:
23rd 2024-02-18 20:48:05 +03:00 committed by John Preston
parent 5971aefb83
commit c26982be3e
3 changed files with 169 additions and 69 deletions

View File

@ -64,7 +64,7 @@ jobs:
- name: First set up.
run: |
sudo chown -R `whoami`:admin /usr/local/share
brew install automake ninja pkg-config
brew install automake ninja pkg-config nasm meson
# Disable spotlight.
sudo mdutil -a -i off

View File

@ -202,6 +202,11 @@ def removeDir(folder):
return 'if exist ' + folder + ' rmdir /Q /S ' + folder + '\nif exist ' + folder + ' exit /b 1'
return 'rm -rf ' + folder
def setVar(key, value):
if win:
return 'SET ' + key + '="' + value + '"';
return key + '="' + value + '"';
def filterByPlatform(commands):
commands = commands.split('\n')
result = ''
@ -690,10 +695,9 @@ mac:
""")
stage('dav1d', """
win:
git clone -b 1.2.1 --depth 1 https://code.videolan.org/videolan/dav1d.git
cd dav1d
win:
if "%X8664%" equ "x64" (
SET "TARGET=x86_64"
) else (
@ -709,7 +713,7 @@ win:
echo system = 'windows' >> %FILE%
echo cpu_family = '%TARGET%' >> %FILE%
echo cpu = '%TARGET%' >> %FILE%
echo endian = 'little'>> %FILE%
echo endian = 'little' >> %FILE%
depends:python/Scripts/activate.bat
%THIRDPARTY_DIR%\\python\\Scripts\\activate.bat
@ -723,12 +727,55 @@ release:
win:
copy %LIBS_DIR%\\local\\lib\\libdav1d.a %LIBS_DIR%\\local\\lib\\dav1d.lib
deactivate
mac:
buildOneArch() {
arch=$1
folder=`pwd`/$2
TARGET="\'${arch}\'"
MIN="\'${MIN_VER}\'"
FILE=cross-file.txt
echo "[binaries]" > $FILE
echo "c = ['clang', '-arch', ${TARGET}]" >> $FILE
echo "cpp = ['clang++', '-arch', ${TARGET}]" >> $FILE
echo "ar = 'ar'" >> $FILE
echo "strip = 'strip'" >> $FILE
echo "[built-in options]" >> $FILE
echo "c_args = [${MIN}]" >> $FILE
echo "cpp_args = [${MIN}]" >> $FILE
echo "c_link_args = [${MIN}]" >> $FILE
echo "cpp_link_args = [${MIN}]" >> $FILE
echo "[host_machine]" >> $FILE
echo "system = 'darwin'" >> $FILE
echo "subsystem = 'macos'" >> $FILE
echo "cpu_family = ${TARGET}" >> $FILE
echo "cpu = ${TARGET}" >> $FILE
echo "endian = 'little'" >> $FILE
meson setup \\
--cross-file $FILE \\
--prefix ${USED_PREFIX} \\
--default-library=static \\
--buildtype=minsize \\
-Denable_tools=false \\
-Denable_tests=false \\
${folder}
meson compile -C ${folder}
meson install -C ${folder}
mv ${USED_PREFIX}/lib/libdav1d.a ${folder}/libdav1d.a
}
buildOneArch arm64 build.arm64
buildOneArch x86_64 build
lipo -create build.arm64/libdav1d.a build/libdav1d.a -output ${USED_PREFIX}/lib/libdav1d.a
""")
stage('libavif', """
win:
git clone -b v0.11.1 --depth 1 https://github.com/AOMediaCodec/libavif.git
cd libavif
win:
cmake . ^
-A %WIN32X64% ^
-DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
@ -743,12 +790,22 @@ win:
release:
cmake --build . --config Release
cmake --install . --config Release
mac:
cmake . \\
-D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
-D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
-D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX \\
-D BUILD_SHARED_LIBS=OFF \\
-D AVIF_ENABLE_WERROR=OFF \\
-D AVIF_CODEC_DAV1D=ON
cmake --build . --config MinSizeRel $MAKE_THREADS_CNT
cmake --install . --config MinSizeRel
""")
stage('libde265', """
win:
git clone --depth 1 -b v1.0.12 https://github.com/strukturag/libde265.git
cd libde265
win:
cmake . ^
-A %WIN32X64% ^
-DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
@ -768,12 +825,63 @@ win:
release:
cmake --build . --config Release
cmake --install . --config Release
mac:
cmake . \\
-D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
-D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
-D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX \\
-D DISABLE_SSE=ON \\
-D BUILD_SHARED_LIBS=OFF \\
-D ENABLE_DECODER=ON \\
-D ENABLE_ENCODER=OFF
cmake --build . --config MinSizeRel $MAKE_THREADS_CNT
cmake --install . --config MinSizeRel
""")
stage('libwebp', """
git clone -b v1.3.2 https://github.com/webmproject/libwebp.git
cd libwebp
win:
nmake /f Makefile.vc CFG=debug-static OBJDIR=out RTLIBCFG=static all
nmake /f Makefile.vc CFG=release-static OBJDIR=out RTLIBCFG=static all
copy out\\release-static\\$X8664\\lib\\libwebp.lib out\\release-static\\$X8664\\lib\\webp.lib
copy out\\release-static\\$X8664\\lib\\libwebpdemux.lib out\\release-static\\$X8664\\lib\\webpdemux.lib
copy out\\release-static\\$X8664\\lib\\libwebpmux.lib out\\release-static\\$X8664\\lib\\webpmux.lib
mac:
buildOneArch() {
arch=$1
folder=$2
CFLAGS=$UNGUARDED cmake -B $folder -G Ninja . \\
-D CMAKE_BUILD_TYPE=Release \\
-D CMAKE_INSTALL_PREFIX=$USED_PREFIX \\
-D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
-D CMAKE_OSX_ARCHITECTURES=$arch \\
-D WEBP_BUILD_ANIM_UTILS=OFF \\
-D WEBP_BUILD_CWEBP=OFF \\
-D WEBP_BUILD_DWEBP=OFF \\
-D WEBP_BUILD_GIF2WEBP=OFF \\
-D WEBP_BUILD_IMG2WEBP=OFF \\
-D WEBP_BUILD_VWEBP=OFF \\
-D WEBP_BUILD_WEBPMUX=OFF \\
-D WEBP_BUILD_WEBPINFO=OFF \\
-D WEBP_BUILD_EXTRAS=OFF
cmake --build $folder $MAKE_THREADS_CNT
}
buildOneArch arm64 build.arm64
buildOneArch x86_64 build
lipo -create build.arm64/libsharpyuv.a build/libsharpyuv.a -output build/libsharpyuv.a
lipo -create build.arm64/libwebp.a build/libwebp.a -output build/libwebp.a
lipo -create build.arm64/libwebpdemux.a build/libwebpdemux.a -output build/libwebpdemux.a
lipo -create build.arm64/libwebpmux.a build/libwebpmux.a -output build/libwebpmux.a
cmake --install build
""")
stage('libheif', """
win:
git clone --depth 1 -b v1.16.2 https://github.com/strukturag/libheif.git
cd libheif
win:
%THIRDPARTY_DIR%\\msys64\\usr\\bin\\sed.exe -i 's/LIBHEIF_EXPORTS/LIBDE265_STATIC_BUILD/g' libheif/CMakeLists.txt
%THIRDPARTY_DIR%\\msys64\\usr\\bin\\sed.exe -i 's/HAVE_VISIBILITY/LIBHEIF_STATIC_BUILD/g' libheif/CMakeLists.txt
cmake . ^
@ -797,12 +905,55 @@ win:
release:
cmake --build . --config Release
cmake --install . --config Release
mac:
cmake . \\
-D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
-D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
-D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX \\
-D BUILD_SHARED_LIBS=OFF \\
-D ENABLE_PLUGIN_LOADING=OFF \\
-D WITH_AOM_ENCODER=OFF \\
-D WITH_AOM_DECODER=OFF \\
-D WITH_X265=OFF \\
-D WITH_SvtEnc=OFF \\
-D WITH_RAV1E=OFF \\
-D WITH_DAV1D=ON \\
-D WITH_LIBDE265=ON \\
-D LIBDE265_INCLUDE_DIR=$USED_PREFIX/include/ \\
-D LIBDE265_LIBRARY=$USED_PREFIX/lib/libde265.a \\
-D LIBSHARPYUV_INCLUDE_DIR=$USED_PREFIX/include/webp/ \\
-D LIBSHARPYUV_LIBRARY=$USED_PREFIX/lib/libsharpyuv.a \\
-D WITH_EXAMPLES=OFF
cmake --build . --config MinSizeRel $MAKE_THREADS_CNT
cmake --install . --config MinSizeRel
""")
stage('libjxl', """
win:
git clone -b v0.8.2 --depth 1 --recursive --shallow-submodules https://github.com/libjxl/libjxl.git
cd libjxl
""" + setVar("cmake_defines", ' '.join("""
-DBUILD_SHARED_LIBS=OFF
-DBUILD_TESTING=OFF
-DJPEGXL_ENABLE_FUZZERS=OFF
-DJPEGXL_ENABLE_DEVTOOLS=OFF
-DJPEGXL_ENABLE_TOOLS=OFF
-DJPEGXL_ENABLE_DOXYGEN=OFF
-DJPEGXL_ENABLE_MANPAGES=OFF
-DJPEGXL_ENABLE_EXAMPLES=OFF
-DJPEGXL_ENABLE_JNI=OFF
-DJPEGXL_ENABLE_JPEGLI_LIBJPEG=OFF
-DJPEGXL_ENABLE_SJPEG=OFF
-DJPEGXL_ENABLE_OPENEXR=OFF
-DJPEGXL_ENABLE_SKCMS=ON
-DJPEGXL_BUNDLE_SKCMS=ON
-DJPEGXL_ENABLE_VIEWERS=OFF
-DJPEGXL_ENABLE_TCMALLOC=OFF
-DJPEGXL_ENABLE_PLUGINS=OFF
-DJPEGXL_ENABLE_COVERAGE=OFF
-DJPEGXL_ENABLE_PROFILER=OFF
-DJPEGXL_WARNINGS_AS_ERRORS=OFF
""".replace('\n', '').split())) + """
win:
cmake . ^
-A %WIN32X64% ^
-DCMAKE_INSTALL_PREFIX=%LIBS_DIR%/local ^
@ -813,31 +964,20 @@ win:
-DCMAKE_CXX_FLAGS_DEBUG="/MTd /Zi /Ob0 /Od /RTC1" ^
-DCMAKE_C_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
-DCMAKE_CXX_FLAGS_RELEASE="/MT /O2 /Ob2 /DNDEBUG" ^
-DBUILD_SHARED_LIBS=OFF ^
-DBUILD_TESTING=OFF ^
-DJPEGXL_ENABLE_FUZZERS=OFF ^
-DJPEGXL_ENABLE_DEVTOOLS=OFF ^
-DJPEGXL_ENABLE_TOOLS=OFF ^
-DJPEGXL_ENABLE_DOXYGEN=OFF ^
-DJPEGXL_ENABLE_MANPAGES=OFF ^
-DJPEGXL_ENABLE_EXAMPLES=OFF ^
-DJPEGXL_ENABLE_JNI=OFF ^
-DJPEGXL_ENABLE_JPEGLI_LIBJPEG=OFF ^
-DJPEGXL_ENABLE_SJPEG=OFF ^
-DJPEGXL_ENABLE_OPENEXR=OFF ^
-DJPEGXL_ENABLE_SKCMS=ON ^
-DJPEGXL_BUNDLE_SKCMS=ON ^
-DJPEGXL_ENABLE_VIEWERS=OFF ^
-DJPEGXL_ENABLE_TCMALLOC=OFF ^
-DJPEGXL_ENABLE_PLUGINS=OFF ^
-DJPEGXL_ENABLE_COVERAGE=OFF ^
-DJPEGXL_ENABLE_PROFILER=OFF ^
-DJPEGXL_WARNINGS_AS_ERRORS=OFF
%cmake_defines%
cmake --build . --config Debug
cmake --install . --config Debug
release:
cmake --build . --config Release
cmake --install . --config Release
mac:
cmake . \\
-D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \\
-D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
-D CMAKE_INSTALL_PREFIX:STRING=$USED_PREFIX \\
${cmake_defines}
cmake --build . --config MinSizeRel $MAKE_THREADS_CNT
cmake --install . --config MinSizeRel
""")
stage('libvpx', """
@ -906,46 +1046,6 @@ depends:yasm/yasm
make install
""")
stage('libwebp', """
git clone -b v1.3.2 https://github.com/webmproject/libwebp.git
cd libwebp
win:
nmake /f Makefile.vc CFG=debug-static OBJDIR=out RTLIBCFG=static all
nmake /f Makefile.vc CFG=release-static OBJDIR=out RTLIBCFG=static all
copy out\\release-static\\$X8664\\lib\\libwebp.lib out\\release-static\\$X8664\\lib\\webp.lib
copy out\\release-static\\$X8664\\lib\\libwebpdemux.lib out\\release-static\\$X8664\\lib\\webpdemux.lib
copy out\\release-static\\$X8664\\lib\\libwebpmux.lib out\\release-static\\$X8664\\lib\\webpmux.lib
mac:
buildOneArch() {
arch=$1
folder=$2
CFLAGS=$UNGUARDED cmake -B $folder -G Ninja . \\
-D CMAKE_BUILD_TYPE=Release \\
-D CMAKE_INSTALL_PREFIX=$USED_PREFIX \\
-D CMAKE_OSX_DEPLOYMENT_TARGET:STRING=$MACOSX_DEPLOYMENT_TARGET \\
-D CMAKE_OSX_ARCHITECTURES=$arch \\
-D WEBP_BUILD_ANIM_UTILS=OFF \\
-D WEBP_BUILD_CWEBP=OFF \\
-D WEBP_BUILD_DWEBP=OFF \\
-D WEBP_BUILD_GIF2WEBP=OFF \\
-D WEBP_BUILD_IMG2WEBP=OFF \\
-D WEBP_BUILD_VWEBP=OFF \\
-D WEBP_BUILD_WEBPMUX=OFF \\
-D WEBP_BUILD_WEBPINFO=OFF \\
-D WEBP_BUILD_EXTRAS=OFF
cmake --build $folder $MAKE_THREADS_CNT
}
buildOneArch arm64 build.arm64
buildOneArch x86_64 build
lipo -create build.arm64/libsharpyuv.a build/libsharpyuv.a -output build/libsharpyuv.a
lipo -create build.arm64/libwebp.a build/libwebp.a -output build/libwebp.a
lipo -create build.arm64/libwebpdemux.a build/libwebpdemux.a -output build/libwebpdemux.a
lipo -create build.arm64/libwebpmux.a build/libwebpmux.a -output build/libwebpmux.a
cmake --install build
""")
stage('nv-codec-headers', """
win:
git clone https://github.com/FFmpeg/nv-codec-headers.git

View File

@ -13,7 +13,7 @@ You will require **api_id** and **api_hash** to access the Telegram API servers.
Go to ***BuildPath*** and run
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git automake cmake wget pkg-config gnu-tar ninja
brew install git automake cmake wget pkg-config gnu-tar ninja nasm meson
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer