asset_jpegxl #6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: asset_jpegxl | |
on: | |
workflow_dispatch: | |
permissions: | |
contents: write | |
jobs: | |
prepare: | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Cache # the post step for this will upload jpegxl.tar if not hit | |
id: cache | |
uses: actions/cache@v4 | |
with: | |
enableCrossOsArchive: true | |
key: "asset_jpegxl_8835f5d_2" | |
path: jpegxl.tar | |
- name: Build | |
if: steps.cache.outputs.cache-hit != 'true' | |
run: | | |
curl -L https://github.com/libjxl/libjxl/archive/8835f5dfc4857f46277f6c703e47ac7817bd7aed.tar.gz | tar -zx | |
mv libjxl-* jpegxl | |
cd jpegxl | |
sed -i.bak -e 's|download_github testdata|#|' deps.sh | |
./deps.sh | |
cat <<EOF >tools/multicall.cc | |
#include <stddef.h> | |
#include <string.h> | |
#include "jxlinfo.c" | |
#include "cjxl_main.cc" | |
#include "djxl_main.cc" | |
#include "cjpegli.cc" | |
#include "djpegli.cc" | |
#if defined(WIN32) || defined(_WIN32) | |
#define PATH_SEPARATOR '\\\\' | |
#else | |
#define PATH_SEPARATOR '/' | |
#endif | |
int main(int argc, const char *argv[]) { | |
if (argc <= 0) { | |
return 1; | |
} | |
const char *argv0 = strrchr(argv[0], PATH_SEPARATOR); | |
if (argv0 == NULL) { | |
argv0 = argv[0]; | |
} else { | |
argv0++; | |
} | |
before: | |
if (argc <= 0) { | |
return 1; | |
} else if (strcmp(argv0, "jxlinfo") == 0) { | |
return cmd_jxlinfo_main(argc, argv); | |
} else if (strcmp(argv0, "cjxl") == 0) { | |
return cmd_cjxl_main(argc, argv); | |
} else if (strcmp(argv0, "djxl") == 0) { | |
return cmd_djxl_main(argc, argv); | |
} else if (strcmp(argv0, "cjpegli") == 0) { | |
return cmd_cjpegli_main(argc, argv); | |
} else if (strcmp(argv0, "djpegli") == 0) { | |
return cmd_djpegli_main(argc, argv); | |
} else { | |
argv++; | |
argc--; | |
if (argc <= 0) { | |
return 1; | |
} | |
argv0 = strrchr(argv[0], PATH_SEPARATOR); | |
if (argv0 == NULL) { | |
argv0 = argv[0]; | |
} else { | |
argv0++; | |
} | |
goto before; | |
} | |
return 0; | |
} | |
EOF | |
sed -i.bak -e 's|name = malloc|name = (char*)malloc|g' tools/jxlinfo.c | |
sed -i.bak -e 's|int main(|int cmd_jxlinfo_main(int argc, const char** argv){//|' tools/jxlinfo.c | |
sed -i.bak -e 's|int main(|int cmd_cjxl_main(int argc, const char** argv){//|' tools/cjxl_main.cc | |
sed -i.bak -e 's|int main(|int cmd_djxl_main(int argc, const char** argv){//|' tools/djxl_main.cc | |
sed -i.bak -e 's|int main(|int cmd_cjpegli_main(|' -e 's|namespace {|namespace cjpegli{|' -e 's|::CJpegliMain|::cjpegli::CJpegliMain|' tools/cjpegli.cc | |
sed -i.bak -e 's|int main(|int cmd_djpegli_main(|' -e 's|namespace {|namespace djpegli{|' -e 's|::DJpegliMain|::djpegli::DJpegliMain|' tools/djpegli.cc | |
sed -i.bak -e 's|# Main compressor.|add_executable\(multicall multicall.cc\)\ntarget_link_libraries\(multicall jxl jxl_extras_codec jxl_extras-internal jxl_threads jxl_tool\)\nendif\(\)\nif\(0\)|' tools/CMakeLists.txt | |
cd .. | |
tar -cf jpegxl.tar --dereference jpegxl | |
linux-x64: | |
needs: prepare | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Restore Cache Tar | |
uses: actions/cache/restore@v4 | |
with: | |
enableCrossOsArchive: true | |
key: "asset_jpegxl_8835f5d_2" | |
path: jpegxl.tar | |
- name: Build | |
run: | | |
tar -xf jpegxl.tar --strip-components 1 | |
sudo apt update | |
sudo apt install -y build-essential pkg-config cmake ninja-build libgif-dev libjpeg-dev libpng-dev | |
sed -i.bak -e 's|string(APPEND CMAKE_EXE_LINKER_FLAGS " -static")||' -e 's|string(APPEND CMAKE_EXE_LINKER_FLAGS " -static-libgcc -static-libstdc++")||' -e 's|CMAKE_USE_PTHREADS_INIT|0|' CMakeLists.txt | |
to_bak(){ sudo mv $1 $1.bak ;} | |
to_bak /usr/lib/x86_64-linux-gnu/libz.a | |
to_bak /usr/lib/x86_64-linux-gnu/libpthread.a | |
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DJPEGXL_STATIC=ON -DJPEGXL_ENABLE_BENCHMARK=OFF -DJPEGXL_ENABLE_DOXYGEN=OFF -DJPEGXL_ENABLE_MANPAGES=OFF -DJPEGXL_ENABLE_JNI=OFF -DJPEGXL_ENABLE_SJPEG=OFF -DJPEGXL_ENABLE_OPENEXR=OFF -DJPEGXL_ENABLE_AVX512=OFF | |
cmake --build build | |
mv build/tools/multicall ./jpegxl | |
strip ./jpegxl | |
zip -9 linux-x64.zip jpegxl | |
- name: Verify | |
run: | | |
uname -a | |
ldd --version | |
ldd ./jpegxl || true | |
./jpegxl cjxl -V | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
prerelease: true | |
body: "`github.workflow_sha = ${{ github.workflow_sha }}`" | |
tag_name: "${{ 'asset_jpegxl_8835f5d_' }}${{ github.run_id }}" | |
files: linux-x64.zip | |
mac-arm64: | |
needs: prepare | |
runs-on: macos-14 | |
steps: | |
- name: Restore Cache Tar | |
uses: actions/cache/restore@v4 | |
with: | |
enableCrossOsArchive: true | |
key: "asset_jpegxl_8835f5d_2" | |
path: jpegxl.tar | |
- name: Build | |
run: | | |
tar -xf jpegxl.tar --strip-components 1 | |
( unset CI ; brew install ninja giflib jpeg-turbo libpng ) | |
to_bak(){ sudo mv $1 $1.bak ;} | |
to_bak /Library/Frameworks/Mono.framework/Versions/6.12.0/include/gif_lib.h # WHAT THE FUCK | |
to_bak /opt/homebrew/lib/libpng.dylib # static lib instead of dylib | |
to_bak /opt/homebrew/lib/libjpeg.dylib | |
to_bak /opt/homebrew/lib/libgif.dylib | |
sed -i.bak -e 's|string(APPEND CMAKE_EXE_LINKER_FLAGS " -static")||' -e 's|string(APPEND CMAKE_EXE_LINKER_FLAGS " -static-libgcc -static-libstdc++")||' CMakeLists.txt | |
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DJPEGXL_STATIC=ON -DJPEGXL_ENABLE_BENCHMARK=OFF -DJPEGXL_ENABLE_DOXYGEN=OFF -DJPEGXL_ENABLE_MANPAGES=OFF -DJPEGXL_ENABLE_JNI=OFF -DJPEGXL_ENABLE_SJPEG=OFF -DJPEGXL_ENABLE_OPENEXR=OFF -DJPEGXL_ENABLE_AVX512=OFF | |
cmake --build build | |
mv build/tools/multicall ./jpegxl | |
strip ./jpegxl | |
zip -9 mac-arm64.zip jpegxl | |
- name: Verify | |
run: | | |
uname -a | |
otool -L ./jpegxl || true | |
./jpegxl cjxl -V | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
prerelease: true | |
body: "`github.workflow_sha = ${{ github.workflow_sha }}`" | |
tag_name: "${{ 'asset_jpegxl_8835f5d_' }}${{ github.run_id }}" | |
files: mac-arm64.zip | |
win-x64: | |
needs: prepare | |
runs-on: windows-2022 | |
steps: | |
- name: Restore Cache Tar | |
uses: actions/cache/restore@v4 | |
with: | |
enableCrossOsArchive: true | |
key: "asset_jpegxl_8835f5d_2" | |
path: jpegxl.tar | |
- name: Build | |
shell: C:\msys64\msys2_shell.cmd -mingw64 -defterm -here -no-start -e {0} | |
run: | | |
tar -xf jpegxl.tar --strip-components 1 | |
pacman -S --noconfirm mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc zip mingw-w64-x86_64-libpng mingw-w64-x86_64-libjpeg mingw-w64-x86_64-giflib | |
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DJPEGXL_STATIC=ON -DJPEGXL_ENABLE_BENCHMARK=OFF -DJPEGXL_ENABLE_DOXYGEN=OFF -DJPEGXL_ENABLE_MANPAGES=OFF -DJPEGXL_ENABLE_JNI=OFF -DJPEGXL_ENABLE_SJPEG=OFF -DJPEGXL_ENABLE_OPENEXR=OFF -DJPEGXL_ENABLE_DEVTOOLS=OFF -DJPEGXL_ENABLE_AVX512=OFF | |
cmake --build build | |
mv build/tools/multicall.exe ./jpegxl.exe | |
strip ./jpegxl.exe | |
zip -9 win-x64.zip jpegxl.exe | |
- name: Verify | |
run: | | |
uname -a | |
ldd ./jpegxl.exe || true | |
./jpegxl.exe cjxl -V | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
prerelease: true | |
body: "`github.workflow_sha = ${{ github.workflow_sha }}`" | |
tag_name: "${{ 'asset_jpegxl_8835f5d_' }}${{ github.run_id }}" | |
files: win-x64.zip |