CI | Estable | Desarrollar |
---|---|---|
Acciones de GitHub | ||
Factor de código | ||
OSS-Fuzz | ||
códigocov |
Biblioteca de compresión de datos zlib para sistemas de próxima generación
Mantenido por Hans Kristian Rosbach también conocido como Dead2 (zlib-ng àt Circlestorm dót org)
La motivación para esta bifurcación fue ver varias contribuciones de terceros con nuevas optimizaciones que no se implementaron en el repositorio oficial de zlib.
Mark Adler ha mantenido zlib durante mucho tiempo, ha hecho un gran trabajo y esperamos que continúe durante mucho tiempo. La idea de zlib-ng no es reemplazar zlib, sino coexistir como un reemplazo directo con un umbral más bajo para el cambio de código.
zlib tiene una larga historia y es increíblemente portátil, incluso soporta muchos sistemas anteriores a Internet.
Eso es genial, pero puede complicar un mayor desarrollo y mantenibilidad. El código zlib contiene muchas soluciones para compiladores realmente antiguos o para adaptarse a sistemas con limitaciones, como operar en un entorno de 16 bits.
Muchas de estas soluciones son sólo cargas de mantenimiento, algunas de ellas son bastante grandes en cuanto a código. Con muchas soluciones alternativas abarrotadas en todo el código, a los nuevos programadores con una idea o interés en zlib les resulta más difícil contribuir.
Decidí hacer una bifurcación, fusionar todas las optimizaciones de Intel, algunas de las optimizaciones de Cloudflare y un par de parches más pequeños. Luego comencé a limpiar soluciones alternativas, varios códigos inactivos, todo el código de contribución y de ejemplo.
El resultado es un zlib-ng con mejor rendimiento y más fácil de mantener.
Se han realizado muchas mejoras en zlib-ng desde su inicio, y numerosas personas y empresas han contribuido con mejoras pequeñas y grandes, o con pruebas valiosas.
Lea LICENSE.md, es muy simple y muy liberal.
Hay dos formas de compilar zlib-ng:
Para compilar zlib-ng utilizando el generador de archivos MAKE multiplataforma cmake.
cmake .
cmake --build . --config Release
ctest --verbose -C Release
Alternativamente, puede utilizar la herramienta GUI de configuración de cmake ccmake:
ccmake .
Para compilar zlib-ng usando el script de configuración de bash:
./configure
make
make test
Chacer | configurar | Descripción | Por defecto |
---|---|---|---|
ZLIB_COMPAT | --zlib-compat | Compilar con API compatible con zlib | APAGADO |
ZLIB_ENABLE_TESTS | Construir binarios de prueba | EN | |
CON_GZFILEOP | --sin-gzfileops | Compile con soporte para funciones relacionadas con gzFile | EN |
CON_OPTIM | --sin-optimizaciones | Construir con optimizaciones | EN |
CON_NEW_STRATEGIES | --sin-nuevas-estrategias | Utilice nuevas estrategias | EN |
CON_INSTRUCCIONES_NATIVAS | Se compila con un conjunto de instrucciones completo compatible con este host (gcc/clang -march=native) | APAGADO | |
CON_RUNTIME_CPU_DETECTION | Se compila con detección de CPU en tiempo de ejecución | EN | |
CON_DESINFECTANTE | Construir con desinfectante (memoria, dirección, indefinido) | APAGADO | |
CON_GTEST | Construir gtest_zlib | EN | |
CON_FUZZERS | Prueba de compilación/fuzz | APAGADO | |
CON_PREFERENCIAS | Crear pruebas/puntos de referencia | APAGADO | |
CON_MAINTAINER_WARNINGS | Construir con advertencias del mantenedor del proyecto | APAGADO | |
CON_CODE_COVERAGE | Habilitar informes de cobertura de código | APAGADO |
ADVERTENCIA: No recomendamos la instalación manual a menos que realmente sepa lo que está haciendo, porque esto puede potencialmente anular la biblioteca zlib predeterminada del sistema, y cualquier incompatibilidad o configuración incorrecta de zlib-ng puede inutilizar todo el sistema, requiriendo recuperación o reinstalación. Si aún desea una instalación manual, le recomendamos utilizar el prefijo de ruta /opt/.
Para las distribuciones de Linux, una forma alternativa de usar zlib-ng (si se compila en modo zlib-compat) en lugar de zlib es mediante el uso de la variable de entorno LD_PRELOAD . Si el programa está vinculado dinámicamente con zlib, entonces el programa intentará usar temporalmente zlib-ng en su lugar, sin correr el riesgo de inestabilidad en todo el sistema.
LD_PRELOAD=/opt/zlib-ng/libz.so.1.2.13.zlib-ng /usr/bin/program
Para instalar zlib-ng en todo el sistema usando cmake:
cmake --build . --target install
Para instalar zlib-ng en todo el sistema usando el script de configuración:
make install
Después de compilar con cmake, se puede crear un paquete de instalación usando cpack. De forma predeterminada, se crea un paquete tgz, pero puede agregar -G
a cada comando para generar tipos de paquetes alternativos (TGZ, ZIP, RPM, DEB). Para crear fácilmente un paquete rpm o deb, usaría -G RPM
o -G DEB
respectivamente.
cd build
cpack --config CPackConfig.cmake
cpack --config CPackSourceConfig.cmake
Alternativamente, puedes compilar e instalar zlib-ng usando el administrador de dependencias 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
Los miembros del equipo de Microsoft y los contribuyentes de la comunidad mantienen actualizado el puerto zlib-ng en vcpkg. Si la versión no está actualizada, cree un problema o una solicitud de extracción en el repositorio de vcpkg.
Zlib-ng pretende estar abierto a contribuciones y estaremos encantados de recibir solicitudes de extracción en github. También se agradece mucho la ayuda para probar y revisar las solicitudes de extracción, etc.
Consulte la Wiki para obtener más información: Contribuyendo
Gracias a todas las personas y empresas que se han tomado el tiempo para contribuir con revisiones de código, pruebas y/o parches. Zlib-ng no habría sido tan bueno sin ti.
El formato deflate utilizado por zlib fue definido por Phil Katz.
Las especificaciones deflate y zlib fueron escritas por L. Peter Deutsch.
zlib fue creado originalmente por Jean-loup Gailly (compresión) y Mark Adler (descompresión).
Chacer | configurar | Descripción | Por defecto |
---|---|---|---|
FUERZA_SSE2 | --force-sse2 | Omitir la verificación del tiempo de ejecución para las instrucciones SSE2 (siempre activado para x86_64) | APAGADO (x86) |
CON_AVX2 | Construya con los intrínsecos de AVX2 | EN | |
CON_AVX512 | Construir con elementos intrínsecos de AVX512 | EN | |
CON_AVX512VNNI | Construir con elementos intrínsecos AVX512VNNI | EN | |
CON_SSE2 | Construir con intrínsecos SSE2 | EN | |
CON_SSSE3 | Construir con intrínsecos SSSE3 | EN | |
CON_SSE42 | Construir con intrínsecos SSE42 | EN | |
CON_PCLMULQDQ | Construir con elementos intrínsecos PCLMULQDQ | EN | |
CON_VPCLMULQDQ | --sin-vpclmulqdq | Construir con elementos intrínsecos de VPCLMULQDQ | EN |
CON_ACLE | --sin-acle | Construya con elementos intrínsecos de ACLE | EN |
CON_NEÓN | --sin-neón | Construya con elementos intrínsecos de NEON | EN |
CON_ARMV6 | --sin-armv6 | Construya con elementos intrínsecos de ARMv6 | EN |
CON_ALTIVEC | --sin-altivec | Construya con elementos intrínsecos de AltiVec (VMX) | EN |
CON_POWER8 | --sin-poder8 | Construya con optimizaciones POWER8 | EN |
CON_RVV | Construya con intrínsecos RVV | EN | |
CON_CRC32_VX | --sin-crc32-vx | Construya con CRC32 vectorizado en IBM Z | EN |
CON_DFLTCC_DEFLATE | --con-dfltcc-deflate | Compilación con elementos intrínsecos de DFLTCC para compresión en IBM Z | APAGADO |
CON_DFLTCC_INFLATE | --con-dfltcc-inflar | Compilación con elementos intrínsecos de DFLTCC para descompresión en IBM Z | APAGADO |
CON_UNALIGNED | --sin-desalineado | Permitir optimizaciones que utilicen lecturas no alineadas si son seguras en el arco actual | EN |
CON_INFLATE_STRICT | Construya con control estricto de la distancia de inflado | APAGADO | |
CON_INFLATE_ALLOW_INVALID_DIST | Construir con relleno cero para inflar distancias no válidas | APAGADO | |
INSTALACIÓN_UTILIZACIONES | Copie minigzip y minideflate durante la instalación | APAGADO | |
ZLIBNG_ENABLE_TESTS | Pruebe la API específica de zlib-ng | EN |