CI | Écurie | Développer |
---|---|---|
Actions GitHub | ||
Facteur de code | ||
OSS-Fuzz | ||
Codecov |
bibliothèque de compression de données zlib pour les systèmes de nouvelle génération
Maintenu par Hans Kristian Rosbach alias Dead2 (zlib-ng àt circlestorm dót org)
La motivation de ce fork était de voir plusieurs contributions tierces avec de nouvelles optimisations non implémentées dans le référentiel zlib officiel.
Mark Adler gère zlib depuis très longtemps, il a fait un excellent travail et j'espère qu'il continuera encore longtemps. L'idée de zlib-ng n'est pas de remplacer zlib, mais de coexister en remplacement avec un seuil inférieur de changement de code.
zlib a une longue histoire et est incroyablement portable, prenant même en charge de nombreux systèmes antérieurs à Internet.
C'est formidable, mais cela peut compliquer le développement et la maintenabilité. Le code zlib contient de nombreuses solutions de contournement pour les compilateurs très anciens ou pour s'adapter aux systèmes présentant des limitations telles que le fonctionnement dans un environnement 16 bits.
Beaucoup de ces solutions de contournement ne représentent que des charges de maintenance, certaines d'entre elles sont assez énormes en termes de code. Avec de nombreuses solutions de contournement encombrées dans le code, il est plus difficile pour les nouveaux programmeurs ayant une idée/un intérêt pour zlib de contribuer.
J'ai décidé de créer un fork, de fusionner toutes les optimisations Intel, certaines optimisations Cloudflare, ainsi que quelques autres correctifs plus petits. Ensuite, j'ai commencé à nettoyer les solutions de contournement, divers codes morts, toutes les contributions et exemples de code.
Le résultat est un zlib-ng plus performant et plus facile à maintenir.
De nombreuses améliorations ont été apportées à zlib-ng depuis ses débuts, et de nombreuses personnes et entreprises ont contribué à des améliorations petites et grandes, ou à des tests précieux.
Veuillez lire LICENSE.md, c'est très simple et très libéral.
Il existe deux manières de construire zlib-ng :
Pour construire zlib-ng à l'aide du générateur de makefile multiplateforme cmake.
cmake .
cmake --build . --config Release
ctest --verbose -C Release
Alternativement, vous pouvez utiliser l'outil graphique de configuration cmake ccmake :
ccmake .
Pour construire zlib-ng à l'aide du script bash configure :
./configure
make
make test
CMake | configurer | Description | Défaut |
---|---|---|---|
ZLIB_COMPAT | --zlib-compat | Compiler avec l'API compatible zlib | DÉSACTIVÉ |
ZLIB_ENABLE_TESTS | Créer des binaires de test | SUR | |
AVEC_GZFILEOP | --sans-gzfileops | Compiler avec la prise en charge des fonctions liées à gzFile | SUR |
AVEC_OPTIM | --sans-optimisations | Construire avec des optimisations | SUR |
AVEC_NEW_STRATÉGIES | --sans-nouvelles-stratégies | Utiliser de nouvelles stratégies | SUR |
AVEC_NATIVE_INSTRUCTIONS | Compile avec le jeu d'instructions complet pris en charge sur cet hôte (gcc/clang -march=native) | DÉSACTIVÉ | |
AVEC_RUNTIME_CPU_DETECTION | Compile avec détection du processeur d'exécution | SUR | |
AVEC_SANITIZER | Construire avec un désinfectant (mémoire, adresse, non défini) | DÉSACTIVÉ | |
AVEC_GTEST | Construire gtest_zlib | SUR | |
AVEC_FUZZERS | Construire un test/fuzz | DÉSACTIVÉ | |
AVEC_BENCHMARKS | Construire des tests/benchmarks | DÉSACTIVÉ | |
AVEC_MAINTAINER_WARNINGS | Construire avec les avertissements du responsable du projet | DÉSACTIVÉ | |
AVEC_CODE_COVERAGE | Activer le rapport sur la couverture du code | DÉSACTIVÉ |
AVERTISSEMENT : nous ne recommandons pas l'installation manuelle à moins que vous sachiez vraiment ce que vous faites, car cela peut potentiellement remplacer la bibliothèque zlib par défaut du système, et toute incompatibilité ou mauvaise configuration de zlib-ng peut rendre l'ensemble du système inutilisable, nécessitant une récupération ou une réinstallation. Si vous souhaitez toujours une installation manuelle, nous vous recommandons d'utiliser le préfixe de chemin /opt/.
Pour les distributions Linux, une autre façon d'utiliser zlib-ng (s'il est compilé en mode zlib-compat) au lieu de zlib consiste à utiliser la variable d'environnement LD_PRELOAD . Si le programme est lié dynamiquement à zlib, le programme tentera temporairement d'utiliser zlib-ng à la place, sans risquer une instabilité à l'échelle du système.
LD_PRELOAD=/opt/zlib-ng/libz.so.1.2.13.zlib-ng /usr/bin/program
Pour installer zlib-ng sur l'ensemble du système à l'aide de cmake :
cmake --build . --target install
Pour installer zlib-ng à l'échelle du système à l'aide du script de configuration :
make install
Après avoir construit avec cmake, un package d'installation peut être créé à l'aide de cpack. Par défaut, un package tgz est créé, mais vous pouvez ajouter -G
à chaque commande pour générer des types de packages alternatifs (TGZ, ZIP, RPM, DEB). Pour créer facilement un package rpm ou deb, vous utiliserez respectivement -G RPM
ou -G DEB
.
cd build
cpack --config CPackConfig.cmake
cpack --config CPackSourceConfig.cmake
Vous pouvez également créer et installer zlib-ng à l'aide du gestionnaire de dépendances vcpkg :
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
Le port zlib-ng dans vcpkg est tenu à jour par les membres de l'équipe Microsoft et les contributeurs de la communauté. Si la version est obsolète, veuillez créer un problème ou une pull request sur le référentiel vcpkg.
Zlib-ng vise à être ouvert aux contributions, et nous serions ravis de recevoir des pull request sur github. L'aide pour tester et examiner les demandes d'extraction, etc. est également très appréciée.
Veuillez consulter le Wiki pour plus d'informations : Contribuer
Merci à toutes les personnes et entreprises qui ont pris le temps de contribuer aux révisions de code, aux tests et/ou aux correctifs. Zlib-ng n'aurait pas été aussi bon sans vous.
Le format deflate utilisé par zlib a été défini par Phil Katz.
Les spécifications deflate et zlib ont été rédigées par L. Peter Deutsch.
zlib a été créé à l'origine par Jean-loup Gailly (compression) et Mark Adler (décompression).
CMake | configurer | Description | Défaut |
---|---|---|---|
FORCE_SSE2 | --force-sse2 | Ignorer la vérification de l'exécution pour les instructions SSE2 (toujours activé pour x86_64) | DÉSACTIVÉ (x86) |
AVEC_AVX2 | Construire avec les éléments intrinsèques d'AVX2 | SUR | |
AVEC_AVX512 | Construire avec les éléments intrinsèques de l'AVX512 | SUR | |
AVEC_AVX512VNNI | Construire avec les éléments intrinsèques AVX512VNNI | SUR | |
AVEC_SSE2 | Construire avec les intrinsèques SSE2 | SUR | |
AVEC_SSSE3 | Construire avec les intrinsèques SSSE3 | SUR | |
AVEC_SSE42 | Construire avec les intrinsèques SSE42 | SUR | |
AVEC_PCLMULQDQ | Construire avec les intrinsèques PCLMULQDQ | SUR | |
AVEC_VPCLMULQDQ | --sans-vpclmulqdq | Construire avec les intrinsèques VPCLMULQDQ | SUR |
AVEC_ACLE | --sans-acle | Construire avec les intrinsèques ACLE | SUR |
AVEC_NEON | --sans-néon | Construire avec les intrinsèques NEON | SUR |
AVEC_ARMV6 | --sans-armv6 | Construire avec les intrinsèques ARMv6 | SUR |
AVEC_ALTIVEC | --sans-altivec | Construire avec les éléments intrinsèques d'AltiVec (VMX) | SUR |
AVEC_POWER8 | --sans-alimentation8 | Construire avec les optimisations POWER8 | SUR |
AVEC_RVV | Construire avec les intrinsèques RVV | SUR | |
AVEC_CRC32_VX | --sans-crc32-vx | Construire avec CRC32 vectorisé sur IBM Z | SUR |
AVEC_DFLTCC_DEFLATE | --avec-dfltcc-deflate | Construire avec les intrinsèques DFLTCC pour la compression sur IBM Z | DÉSACTIVÉ |
AVEC_DFLTCC_INFLATE | --avec-dfltcc-inflate | Construire avec les intrinsèques DFLTCC pour la décompression sur IBM Z | DÉSACTIVÉ |
AVEC_UNALIGNED | --sans-non-aligné | Autoriser les optimisations qui utilisent des lectures non alignées si elles sont sûres sur l'arche actuelle | SUR |
AVEC_INFLATE_STRICT | Construire avec une vérification stricte de la distance de gonflage | DÉSACTIVÉ | |
AVEC_INFLATE_ALLOW_INVALID_DIST | Construire avec un remplissage nul pour gonfler les distances invalides | DÉSACTIVÉ | |
INSTALL_UTILS | Copiez minigzip et minideflate pendant l'installation | DÉSACTIVÉ | |
ZLIBNG_ENABLE_TESTS | Tester l'API spécifique à zlib-ng | SUR |