mirror of
https://github.com/Nexoniarz/YAPF.git
synced 2026-11-03 04:54:26 +00:00
YAPF v1: fast byte-aligned format, SIMD, tools and plugins
Format (version 1, replaces the earlier experimental versions): - per-tile YCoCg-R or subtract-green colour transform, 8-bit modular - 12 row filters per 8-row band (Left, Gradient, Up-right, Up-average, Up 1-8 rows), none with more than a one-add serial dependency - residuals in groups of 8 at the group's width (w bits x 8 = w bytes), 4-bit control codes with repeat-previous-width runs chosen by DP - constant and stored tiles, independent 64x64 tiles, mips, GPU hints - all sizes validated before decoding; corrupt input is rejected Library: - SIMD on by default: SSSE3 (runtime CPUID check; GCC, Clang, MSVC, MinGW) and NEON on ARM64; -DYAPF_NO_SIMD for plain C - yapf_load_memory, yapf_load_mt, yapf_load_memory_mt - 6-10x faster decoding than PNG (stb_image) on one core; -O2 and -O3 builds perform the same - fixes for macOS (sysconf) and the Windows import library exports Tools and integrations: - `yapf` CLI: convert PNG/JPG/TGA/BMP/PSD/GIF <-> YAPF, info, bench, thumbnail, mips - JavaScript and Python bindings (byte-identical to the C encoder) - GIMP 3 plugin: exports the flattened image, optional mipmaps - Blender extension: import (also as plane), export, drag and drop - VS Code preview, Figma plugin, Photoshop scripts, Linux MIME type and thumbnailer - Makefile, updated build.sh / build.bat, tools/build_release.sh - tests/test_yapf.c (784 checks) and bindings/js/test.js Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
b9b8c93a22
commit
2ca726e3af
48 changed files with 14905 additions and 710 deletions
21
build.sh
Normal file → Executable file
21
build.sh
Normal file → Executable file
|
|
@ -8,7 +8,7 @@
|
|||
#
|
||||
# Options:
|
||||
# --debug Debug build: no optimisation, full symbols
|
||||
# --simd Enable SIMD paths (-DYAPF_USE_SIMD)
|
||||
# --no-simd Plain C only (SIMD is on by default, picked at run time)
|
||||
# --static-only Build only static libraries
|
||||
# --shared-only Build only shared libraries
|
||||
# --help Show this message
|
||||
|
|
@ -40,14 +40,15 @@ step() { echo; echo "${BLD}──── $* ────${RST}"; }
|
|||
|
||||
# ── Option parsing ───────────────────────────────────────────────────
|
||||
OPT_DEBUG=0
|
||||
OPT_SIMD=0
|
||||
OPT_NOSIMD=0
|
||||
OPT_STATIC_ONLY=0
|
||||
OPT_SHARED_ONLY=0
|
||||
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--debug) OPT_DEBUG=1 ;;
|
||||
--simd) OPT_SIMD=1 ;;
|
||||
--no-simd) OPT_NOSIMD=1 ;;
|
||||
--simd) ;; # SIMD is the default now; kept for old scripts
|
||||
--static-only) OPT_STATIC_ONLY=1 ;;
|
||||
--shared-only) OPT_SHARED_ONLY=1 ;;
|
||||
--help)
|
||||
|
|
@ -89,7 +90,7 @@ fi
|
|||
[[ -n "$STRIP" ]] && info "Strip : $STRIP"
|
||||
|
||||
# ── Compiler flags ───────────────────────────────────────────────────
|
||||
CFLAGS="-std=c99 -Wall -Wextra -Wpedantic -fPIC"
|
||||
CFLAGS="-std=c99 -Wall -Wextra -Wpedantic -fPIC -pthread"
|
||||
LFLAGS=""
|
||||
|
||||
if [[ $OPT_DEBUG -eq 1 ]]; then
|
||||
|
|
@ -101,7 +102,8 @@ else
|
|||
info "Mode : release"
|
||||
fi
|
||||
|
||||
[[ $OPT_SIMD -eq 1 ]] && { CFLAGS="$CFLAGS -DYAPF_USE_SIMD"; info "SIMD : enabled"; }
|
||||
if [[ $OPT_NOSIMD -eq 1 ]]; then CFLAGS="$CFLAGS -DYAPF_NO_SIMD"; info "SIMD : disabled"
|
||||
else info "SIMD : SSSE3 / NEON, chosen at run time"; fi
|
||||
|
||||
# ── Detect OS ────────────────────────────────────────────────────────
|
||||
OS=$(uname -s)
|
||||
|
|
@ -176,6 +178,13 @@ if [[ "$OS" == "Darwin" ]]; then
|
|||
ok "dist/macos/libyapf.a (universal)"
|
||||
fi
|
||||
|
||||
step "Building the yapf command-line tool"
|
||||
"$CLANG" $CFLAGS --target=arm64-apple-macos11 tools/yapf_cli.c yapf.c -o /tmp/_yapf_cli_arm64 -lm
|
||||
"$CLANG" $CFLAGS --target=x86_64-apple-macos10.15 tools/yapf_cli.c yapf.c -o /tmp/_yapf_cli_x64 -lm
|
||||
"$LIPO" -create /tmp/_yapf_cli_arm64 /tmp/_yapf_cli_x64 -output dist/macos/yapf
|
||||
rm -f /tmp/_yapf_cli_arm64 /tmp/_yapf_cli_x64
|
||||
ok "dist/macos/yapf (universal)"
|
||||
|
||||
# ── Linux build ──────────────────────────────────────────────────────
|
||||
elif [[ "$OS" == "Linux" ]]; then
|
||||
|
||||
|
|
@ -205,6 +214,8 @@ elif [[ "$OS" == "Linux" ]]; then
|
|||
compile_static "$NATIVE_TRIPLE" "dist/$NATIVE_DIR/libyapf.a"
|
||||
ok "dist/$NATIVE_DIR/libyapf.a"
|
||||
fi
|
||||
"$CLANG" $CFLAGS --target="$NATIVE_TRIPLE" tools/yapf_cli.c yapf.c -o "dist/$NATIVE_DIR/yapf" -lm
|
||||
ok "dist/$NATIVE_DIR/yapf (command-line tool)"
|
||||
|
||||
# ── Cross-compile to the other common arch ────────────────────────
|
||||
if [[ "$HOST_ARCH" == "x86_64" ]]; then
|
||||
|
|
|
|||
Loading…
Reference in a new issue