Skip to content

Commit

Permalink
Allow libavif to install rav1e, except on manylinux2014 and aarch64 (#7)
Browse files Browse the repository at this point in the history
* Allow libavif to install rav1e, except on manylinux2014 and aarch64

* Allow libavif to install rav1e on Windows

---------

Co-authored-by: Andrew Murray <radarhere@users.noreply.github.com>
  • Loading branch information
radarhere and radarhere authored Dec 7, 2024
1 parent d76ae2f commit 9ad8311
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 65 deletions.
4 changes: 0 additions & 4 deletions .github/workflows/test-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,6 @@ jobs:
if: steps.build-cache.outputs.cache-hit != 'true'
run: "& winbuild\\build\\build_dep_libpng.cmd"

- name: Build dependencies / rav1e
if: steps.build-cache.outputs.cache-hit != 'true'
run: "& winbuild\\build\\build_dep_rav1e.cmd"

- name: Build dependencies / meson
if: steps.build-cache.outputs.cache-hit != 'true'
run: "& winbuild\\build\\install_meson.cmd"
Expand Down
67 changes: 34 additions & 33 deletions .github/workflows/wheels-dependencies.sh
Original file line number Diff line number Diff line change
Expand Up @@ -97,48 +97,49 @@ function build_harfbuzz {
touch harfbuzz-stamp
}

function install_rav1e {
if [ -n "$IS_MACOS" ]; then
suffix="macos"
if [[ "$PLAT" == "arm64" ]]; then
suffix+="-aarch64"
fi
else
suffix="linux"
function build_libavif {
if [ -e libavif-stamp ]; then return; fi

if [[ -z "$IS_MACOS" ]] && ([[ "$MB_ML_VER" == 2014 ]] || [[ "$PLAT" == "aarch64" ]]); then
# Once Amazon 2 is EOL on 30 June 2025, manylinux2014 will no longer be needed
# Once GitHub Actions supports aarch64 without emulation, this will no longer needed as building will be faster
if [[ "$PLAT" == "aarch64" ]]; then
suffix+="-aarch64"
suffix="aarch64"
else
suffix+="-generic"
suffix="generic"
fi
fi

curl -sLo - \
https://github.com/xiph/rav1e/releases/download/v$RAV1E_VERSION/librav1e-$RAV1E_VERSION-$suffix.tar.gz \
| tar -C $BUILD_PREFIX --exclude LICENSE --exclude '*.so' --exclude '*.dylib' -zxf -
curl -sLo - \
https://github.com/xiph/rav1e/releases/download/v$RAV1E_VERSION/librav1e-$RAV1E_VERSION-linux-$suffix.tar.gz \
| tar -C $BUILD_PREFIX -zxf -

# Force libavif to treat system rav1e as if it were local
mkdir -p /tmp/cmake/Modules
cat <<EOF > /tmp/cmake/Modules/Findrav1e.cmake
add_library(rav1e::rav1e STATIC IMPORTED GLOBAL)
set_target_properties(rav1e::rav1e PROPERTIES
IMPORTED_LOCATION "$BUILD_PREFIX/lib/librav1e.a"
AVIF_LOCAL ON
INTERFACE_INCLUDE_DIRECTORIES "$BUILD_PREFIX/include/rav1e"
)
EOF

if [ -z "$IS_MACOS" ]; then
sed -i 's/-lgcc_s/-lgcc_eh/g' "${BUILD_PREFIX}/lib/pkgconfig/rav1e.pc"
fi
rav1e=SYSTEM
else
curl https://sh.rustup.rs -sSf | sh -s -- -y
. "$HOME/.cargo/env"

# Force libavif to treat system rav1e as if it were local
mkdir -p /tmp/cmake/Modules
cat <<EOF > /tmp/cmake/Modules/Findrav1e.cmake
add_library(rav1e::rav1e STATIC IMPORTED GLOBAL)
set_target_properties(rav1e::rav1e PROPERTIES
IMPORTED_LOCATION "$BUILD_PREFIX/lib/librav1e.a"
AVIF_LOCAL ON
INTERFACE_INCLUDE_DIRECTORIES "$BUILD_PREFIX/include/rav1e"
)
EOF
}
if [ -z "$IS_ALPINE" ] && [ -z "$IS_MACOS" ]; then
yum install -y perl
fi

rav1e=LOCAL
fi

function build_libavif {
if [ -e libavif-stamp ]; then return; fi
install_rav1e
python3 -m pip install meson ninja

if [[ "$PLAT" == "x86_64" ]]; then
build_simple nasm 2.16.03 https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/
build_simple nasm 2.16.03 https://www.nasm.us/pub/nasm/releasebuilds/2.16.03
fi

local out_dir=$(fetch_unpack https://github.com/AOMediaCodec/libavif/archive/refs/tags/v$LIBAVIF_VERSION.tar.gz libavif-$LIBAVIF_VERSION.tar.gz)
Expand All @@ -150,7 +151,7 @@ function build_libavif {
-DBUILD_SHARED_LIBS=OFF \
-DAVIF_LIBSHARPYUV=LOCAL \
-DAVIF_LIBYUV=LOCAL \
-DAVIF_CODEC_RAV1E=SYSTEM \
-DAVIF_CODEC_RAV1E=$rav1e \
-DAVIF_CODEC_AOM=LOCAL \
-DAVIF_CODEC_DAV1D=LOCAL \
-DAVIF_CODEC_SVT=LOCAL \
Expand Down
2 changes: 1 addition & 1 deletion docs/installation/building-from-source.rst
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ Many of Pillow's features require external libraries:

sudo pkg install jpeg-turbo tiff webp lcms2 freetype2 openjpeg harfbuzz fribidi libxcb libavif

See ``depends/install_raqm_cmake.sh`` to install libraqm.
Then see ``depends/install_raqm_cmake.sh`` to install libraqm.

.. tab:: Android

Expand Down
10 changes: 0 additions & 10 deletions winbuild/Findrav1e.cmake

This file was deleted.

19 changes: 2 additions & 17 deletions winbuild/build_prepare.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ def cmd_msbuild(
"ZLIB": "1.3.1",
"MESON": "1.6.0",
"LIBAVIF": "1.1.1",
"RAV1E": "0.7.1",
}
V["LIBPNG_DOTLESS"] = V["LIBPNG"].replace(".", "")
V["LIBPNG_XY"] = "".join(V["LIBPNG"].split(".")[:2])
Expand Down Expand Up @@ -400,19 +399,6 @@ def cmd_msbuild(
],
"bins": [r"*.dll"],
},
"rav1e": {
"url": (
f"https://github.com/xiph/rav1e/releases/download/v{V['RAV1E']}/FILENAME"
),
"filename": f"rav1e-{V['RAV1E']}-windows-msvc-generic.zip",
"dir": "rav1e-windows-msvc-sdk",
"license": "LICENSE",
"build": [
cmd_xcopy("include", "{inc_dir}"),
],
"bins": [r"bin\*.dll"],
"libs": [r"lib\*.*"],
},
"libavif": {
"url": f"https://github.com/AOMediaCodec/libavif/archive/v{V['LIBAVIF']}.zip",
"filename": f"libavif-{V['LIBAVIF']}.zip",
Expand All @@ -435,8 +421,7 @@ def cmd_msbuild(
"-DAVIF_CODEC_AOM=LOCAL",
"-DAVIF_LIBYUV=LOCAL",
"-DAVIF_LIBSHARPYUV=LOCAL",
"-DAVIF_CODEC_RAV1E=SYSTEM",
"-DAVIF_RAV1E_ROOT={build_dir}",
"-DAVIF_CODEC_RAV1E=LOCAL",
"-DCMAKE_MODULE_PATH={winbuild_dir_cmake}",
"-DAVIF_CODEC_DAV1D=LOCAL",
"-DAVIF_CODEC_SVT=LOCAL",
Expand Down Expand Up @@ -804,7 +789,7 @@ def main() -> None:
if args.no_fribidi:
disabled += ["fribidi"]
if args.no_avif or args.architecture != "AMD64":
disabled += ["rav1e", "libavif"]
disabled += ["libavif"]

prefs = {
"architecture": args.architecture,
Expand Down

0 comments on commit 9ad8311

Please sign in to comment.