-
Added
-t
(test) option tolibdeflate-gunzip
. -
Unaligned access optimizations are now enabled on WebAssembly builds.
-
Fixed a build error when building with the Intel C Compiler (ICC).
-
Fixed a build error when building with uClibc.
-
libdeflate's CI system has switched from Travis CI to GitHub Actions.
-
Made some improvements to test scripts.
-
Added support for compression level 0, "no compression".
-
Added an ARM CRC32 instruction accelerated implementation of CRC32.
-
Added support for linking the programs to the shared library version of libdeflate rather than to the static library version.
-
Made the compression level affect the minimum input size at which compression is attempted.
-
Fixed undefined behavior in x86 Adler32 implementation. (No miscompilations were observed in practice.)
-
Fixed undefined behavior in x86 CPU feature code. (No miscompilations were observed in practice.)
-
Fixed installing shared lib symlink on macOS.
-
Documented third-party bindings.
-
Made a lot of improvements to the testing scripts and the CI configuration file.
-
Lots of other small improvements and cleanups.
-
Prevented gcc 10 from miscompiling libdeflate (workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94994).
-
Removed workaround for gcc 5 and earlier producing slow code on ARM32. If this affects you, please upgrade your compiler.
-
New API function:
libdeflate_zlib_decompress_ex()
. It provides the actual size of the stream that was decompressed, like the gzip and DEFLATE equivalents. -
libdeflate_zlib_decompress()
now accepts trailing bytes after the end of the stream, like the gzip and DEFLATE equivalents. -
Added support for custom memory allocators. (New API function:
libdeflate_set_memory_allocator()
) -
Added support for building the library in freestanding mode.
-
Building libdeflate no longer requires
CPPFLAGS=-Icommon
.
- Fixed up stdcall support on 32-bit Windows: the functions are now exported
using both suffixed and non-suffixed names, and fixed
libdeflate.h
to be MSVC-compatible again.
-
The 32-bit Windows build of libdeflate now uses the "stdcall" calling convention instead of "cdecl". If you're calling
libdeflate.dll
directly from C or C++, you'll need to recompile your code. If you're calling it from another language, or calling it indirectly usingLoadLibrary()
, you'll need to update your code to use the stdcall calling convention. -
The Makefile now supports building libdeflate as a shared library (
.dylib
) on macOS. -
Fixed a bug where support for certain optimizations and optional features (file access hints and more precise timestamps) was incorrectly omitted when libdeflate was compiled with
-Werror
. -
Added
make check
target to the Makefile. -
Added CI configuration files.
-
make install
now supports customizing the directories into which binaries, headers, and libraries are installed. -
make install
now installs into/usr/local
by default. To change it, use e.g.make install PREFIX=/usr
. -
make install
now works on more platforms. -
The Makefile now supports overriding the optimization flags.
-
The compression functions now correctly handle an output data buffer >= 4 GiB in size, and
gzip
andgunzip
now correctly handle multi-gigabyte files (if enough memory is available).
-
Slight improvements to decompression speed.
-
Added an AVX-512BW implementation of Adler-32.
-
The Makefile now supports a user-specified installation
PREFIX
. -
Fixed build error with some Visual Studio versions.
-
Fixed crash in CRC-32 code when the prebuilt libdeflate for 32-bit Windows was called by a program built with Visual Studio.
-
Improved the worst-case decompression speed of malicious data.
-
Fixed build error when compiling for an ARM processor without hardware floating point support.
-
Improved performance on the PowerPC64 architecture.
-
Added soname to
libdeflate.so
, to make packaging easier. -
Added
make install
target to the Makefile. -
The Makefile now supports user-specified
CPPFLAGS
. -
The Windows binary releases now include the import library for
libdeflate.dll
.libdeflate.lib
is now the import library, andlibdeflatestatic.lib
is the static library.
-
Added support for multi-member gzip files.
-
Moved architecture-specific code into subdirectories. If you aren't using the provided Makefile to build libdeflate, you now need to compile
lib/*.c
andlib/*/*.c
instead of justlib/*.c
. -
Added an ARM PMULL implementation of CRC-32, which speeds up gzip compression and decompression on 32-bit and 64-bit ARM processors that have the Cryptography Extensions.
-
Improved detection of CPU features, resulting in accelerated functions being used in more cases. This includes:
-
Detect CPU features on 32-bit x86, not just 64-bit as was done previously.
-
Detect CPU features on ARM, both 32 and 64-bit. (Limited to Linux only currently.)
-
-
Build fixes for certain platforms and compilers.
-
libdeflate now produces the same output on all CPU architectures.
-
Improved documentation for building libdeflate on Windows.
-
Fixed a very rare bug that caused data to be compressed incorrectly. The bug affected compression levels 7 and below since libdeflate v0.2. Although there have been no user reports of the bug, and I believe it would have been highly unlikely to encounter on realistic data, it could occur on data specially crafted to reproduce it.
-
Fixed a compilation error when building with clang 3.7.
-
Various improvements to the gzip program's behavior.
-
Faster CRC-32 on AVX-capable processors.
-
Other minor changes.
-
The CRC-32 checksum algorithm has been optimized with carryless multiplication instructions for
x86_64
(PCLMUL). This speeds up gzip compression and decompression. -
Build fixes for certain platforms and compilers.
-
Added more test programs and scripts.
-
libdeflate is now entirely MIT-licensed.
-
The Adler-32 checksum algorithm has been optimized with vector instructions for
x86_64
(SSE2 and AVX2) and ARM (NEON). This speeds up zlib compression and decompression. -
To avoid naming collisions, functions and definitions in libdeflate's API have been renamed to be prefixed with
libdeflate_
orLIBDEFLATE_
. Programs using the old API will need to be updated. -
Various bug fixes and other improvements.
- Some bug fixes and other minor changes.
-
Implemented a new block splitting algorithm which typically improves the compression ratio slightly at all compression levels.
-
The compressor now outputs each block using the cheapest type (dynamic Huffman, static Huffman, or uncompressed).
-
The gzip program has received an overhaul and now behaves more like the standard version.
-
Build system updates, including: some build options were changed and some build options were removed, and the default 'make' target now includes the gzip program as well as the library.
- Initial official release.