CI | Stabil | Entwickeln |
---|---|---|
GitHub-Aktionen | ||
CodeFactor | ||
OSS-Fuzz | ||
Codecov |
zlib-Datenkomprimierungsbibliothek für Systeme der nächsten Generation
Verwaltet von Hans Kristian Rosbach alias Dead2 (zlib-ng àt Circlestorm Dót org)
Die Motivation für diesen Fork bestand darin, dass mehrere Beiträge von Drittanbietern mit neuen Optimierungen nicht in das offizielle zlib-Repository implementiert wurden.
Mark Adler betreut zlib schon sehr lange, hat großartige Arbeit geleistet und wird hoffentlich noch lange weitermachen. Die Idee von zlib-ng besteht nicht darin, zlib zu ersetzen, sondern als direkter Ersatz mit einem niedrigeren Schwellenwert für Codeänderungen zu existieren.
zlib hat eine lange Geschichte und ist unglaublich portabel und unterstützt sogar viele Systeme, die vor dem Internet existierten.
Das ist großartig, kann aber die weitere Entwicklung und Wartbarkeit erschweren. Der zlib-Code enthält viele Problemumgehungen für wirklich alte Compiler oder um Systeme mit Einschränkungen zu unterstützen, z. B. den Betrieb in einer 16-Bit-Umgebung.
Viele dieser Problemumgehungen stellen lediglich einen Wartungsaufwand dar, andere sind in Bezug auf den Code ziemlich umfangreich. Da der Code mit vielen Problemumgehungen überladen ist, wird es für neue Programmierer mit einer Idee/Interesse an zlib schwieriger, einen Beitrag zu leisten.
Ich beschloss, einen Fork zu erstellen, alle Intel-Optimierungen, einige der Cloudflare-Optimierungen und ein paar andere kleinere Patches zusammenzuführen. Dann begann ich, Problemumgehungen, verschiedene tote Codes, sämtlichen Beitrags- und Beispielcode zu bereinigen.
Das Ergebnis ist eine leistungsfähigere und einfacher zu wartende zlib-ng.
Seit seiner Gründung wurden in zlib-ng viele Verbesserungen vorgenommen, und zahlreiche Personen und Unternehmen haben sowohl kleine als auch große Verbesserungen oder wertvolle Tests beigesteuert.
Bitte lesen Sie LICENSE.md, es ist sehr einfach und sehr liberal.
Es gibt zwei Möglichkeiten, zlib-ng zu erstellen:
Zum Erstellen von zlib-ng mit dem plattformübergreifenden Makefile-Generator cmake.
cmake .
cmake --build . --config Release
ctest --verbose -C Release
Alternativ können Sie das cmake-Konfigurations-GUI-Tool ccmake verwenden:
ccmake .
So erstellen Sie zlib-ng mit dem Bash-Konfigurationsskript:
./configure
make
make test
CMake | konfigurieren | Beschreibung | Standard |
---|---|---|---|
ZLIB_COMPAT | --zlib-compat | Kompilieren Sie mit einer zlib-kompatiblen API | AUS |
ZLIB_ENABLE_TESTS | Erstellen Sie Testbinärdateien | AN | |
WITH_GZFILEOP | --without-gzfileops | Kompilieren Sie mit Unterstützung für gzFile-bezogene Funktionen | AN |
WITH_OPTIM | --ohne-Optimierungen | Erstellen Sie mit Optimierungen | AN |
WITH_NEW_STRATEGIES | --ohne-neue-Strategien | Nutzen Sie neue Strategien | AN |
WITH_NATIVE_INSTRUCTIONS | Kompiliert mit vollständigem Befehlssatz, der auf diesem Host unterstützt wird (gcc/clang -march=native) | AUS | |
WITH_RUNTIME_CPU_DETECTION | Kompiliert mit Laufzeit-CPU-Erkennung | AN | |
WITH_SANITIZER | Mit Desinfektionsmittel erstellen (Speicher, Adresse, undefiniert) | AUS | |
WITH_GTEST | Erstellen Sie gtest_zlib | AN | |
WITH_FUZZERS | Build-Test/Fuzz | AUS | |
WITH_BENCHMARKS | Erstellen Sie Tests/Benchmarks | AUS | |
WITH_MAINTAINER_WARNINGS | Erstellen Sie mit Warnungen des Projektbetreuers | AUS | |
WITH_CODE_COVERAGE | Aktivieren Sie die Codeabdeckungsberichterstattung | AUS |
WARNUNG: Wir raten von einer manuellen Installation ab, es sei denn, Sie wissen wirklich, was Sie tun, da dies möglicherweise die standardmäßige zlib-Bibliothek des Systems überschreiben kann und jede Inkompatibilität oder falsche Konfiguration von zlib-ng das gesamte System unbrauchbar machen kann, was eine Wiederherstellung oder Neuinstallation erforderlich machen kann. Wenn Sie dennoch eine manuelle Installation wünschen, empfehlen wir die Verwendung des Pfadpräfixes /opt/.
Für Linux-Distributionen besteht eine alternative Möglichkeit, zlib-ng (sofern im zlib-compat-Modus kompiliert) anstelle von zlib zu verwenden, in der Verwendung der Umgebungsvariablen LD_PRELOAD . Wenn das Programm dynamisch mit zlib verknüpft ist, versucht das Programm vorübergehend, stattdessen zlib-ng zu verwenden, ohne eine systemweite Instabilität zu riskieren.
LD_PRELOAD=/opt/zlib-ng/libz.so.1.2.13.zlib-ng /usr/bin/program
So installieren Sie zlib-ng systemweit mit cmake:
cmake --build . --target install
So installieren Sie zlib-ng systemweit mit dem Konfigurationsskript:
make install
Nach dem Erstellen mit cmake kann mit cpack ein Installationspaket erstellt werden. Standardmäßig wird ein TGZ-Paket erstellt, Sie können jedoch -G
an jeden Befehl anhängen, um alternative Pakettypen (TGZ, ZIP, RPM, DEB) zu generieren. Um einfach ein RPM- oder Deb-Paket zu erstellen, würden Sie -G RPM
bzw. -G DEB
verwenden.
cd build
cpack --config CPackConfig.cmake
cpack --config CPackSourceConfig.cmake
Alternativ können Sie zlib-ng mit dem vcpkg-Abhängigkeitsmanager erstellen und installieren:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh # "./bootstrap-vcpkg.bat" for powershell
./vcpkg integrate install
./vcpkg install zlib-ng
Der zlib-ng-Port in vcpkg wird von Microsoft-Teammitgliedern und Community-Mitwirkenden auf dem neuesten Stand gehalten. Wenn die Version veraltet ist, erstellen Sie bitte einen Issue oder Pull Request im vcpkg-Repository.
Zlib-ng ist bestrebt, offen für Beiträge zu sein und wir würden uns über Pull-Anfragen auf Github freuen. Hilfe beim Testen und Überprüfen von Pull-Requests usw. wird ebenfalls sehr geschätzt.
Weitere Informationen finden Sie im Wiki: Mitwirken
Unser Dank geht an alle Personen und Unternehmen, die sich die Zeit genommen haben, Codeüberprüfungen, Tests und/oder Patches beizusteuern. Zlib-ng wäre ohne dich nicht annähernd so gut gewesen.
Das von zlib verwendete Deflate-Format wurde von Phil Katz definiert.
Die Deflate- und Zlib-Spezifikationen wurden von L. Peter Deutsch verfasst.
zlib wurde ursprünglich von Jean-loup Gailly (Komprimierung) und Mark Adler (Dekomprimierung) erstellt.
CMake | konfigurieren | Beschreibung | Standard |
---|---|---|---|
FORCE_SSE2 | --force-sse2 | Laufzeitprüfung für SSE2-Anweisungen überspringen (immer aktiviert für x86_64) | AUS (x86) |
WITH_AVX2 | Erstellen Sie mit AVX2-Intrinsics | AN | |
WITH_AVX512 | Erstellen Sie mit AVX512-Intrinsics | AN | |
WITH_AVX512VNNI | Gebaut mit AVX512VNNI-Intrinsics | AN | |
WITH_SSE2 | Erstellen Sie mit SSE2-Intrinsics | AN | |
WITH_SSSE3 | Erstellen Sie mit SSSE3-Intrinsics | AN | |
WITH_SSE42 | Erstellen Sie mit SSE42-Intrinsics | AN | |
WITH_PCLMULQDQ | Erstellen Sie mit PCLMULQDQ-Intrinsics | AN | |
WITH_VPCLMULQDQ | --without-vpclmulqdq | Erstellen Sie mit VPCLMULQDQ-Intrinsics | AN |
WITH_ACLE | --ohne-Acle | Erstellen Sie mit ACLE-Funktionen | AN |
WITH_NEON | --ohne-Neon | Bauen Sie mit NEON-Intrinsics | AN |
WITH_ARMV6 | --without-armv6 | Erstellen Sie mit ARMv6-Intrinsics | AN |
WITH_ALTIVEC | --without-altivec | Erstellen Sie mit AltiVec (VMX)-Intrinsics | AN |
WITH_POWER8 | --without-power8 | Erstellen Sie mit POWER8-Optimierungen | AN |
WITH_RVV | Bauen Sie mit RVV-Intrinsiken auf | AN | |
WITH_CRC32_VX | --without-crc32-vx | Erstellen Sie mit vektorisiertem CRC32 auf IBM Z | AN |
WITH_DFLTCC_DEFLATE | --with-dfltcc-deflate | Erstellen Sie mit DFLTCC-Intrinsics für die Komprimierung auf IBM Z | AUS |
WITH_DFLTCC_INFLATE | --with-dfltcc-inflate | Erstellen Sie mit DFLTCC-Intrinsics für die Dekomprimierung auf IBM Z | AUS |
WITH_UNALIGNED | --without-unaligned | Erlauben Sie Optimierungen, die nicht ausgerichtete Lesevorgänge verwenden, sofern dies auf dem aktuellen Arch sicher ist | AN |
WITH_INFLATE_STRICT | Bauen Sie mit strenger Kontrolle des Aufblasabstands | AUS | |
WITH_INFLATE_ALLOW_INVALID_DIST | Bauen Sie mit Nullfüllung, um ungültige Abstände zu vergrößern | AUS | |
INSTALL_UTILS | Kopieren Sie minigzip und minideflate während der Installation | AUS | |
ZLIBNG_ENABLE_TESTS | Testen Sie die zlib-ng-spezifische API | AN |