IC | Estável | Desenvolver |
---|---|---|
Ações do GitHub | ||
Fator de código | ||
OSS Fuzz | ||
Codecov |
biblioteca de compactação de dados zlib para sistemas de próxima geração
Mantido por Hans Kristian Rosbach, também conhecido como Dead2 (zlib-ng àt Circlestorm dót org)
A motivação para este fork foi ver várias contribuições de terceiros com novas otimizações não sendo implementadas no repositório zlib oficial.
Mark Adler mantém o zlib há muito tempo e fez um ótimo trabalho e espero que continue por muito tempo. A ideia do zlib-ng não é substituir o zlib, mas coexistir como um substituto imediato com um limite mais baixo para alteração de código.
zlib tem uma longa história e é incrivelmente portátil, suportando até mesmo muitos sistemas anteriores à Internet.
Isso é ótimo, mas pode complicar o desenvolvimento e a manutenção. O código zlib contém muitas soluções alternativas para compiladores realmente antigos ou para acomodar sistemas com limitações, como operar em um ambiente de 16 bits.
Muitas dessas soluções alternativas são apenas encargos de manutenção, algumas delas são bastante pesadas em termos de código. Com muitas soluções alternativas desordenadas em todo o código, fica mais difícil para novos programadores com uma ideia/interesse em zlib contribuir.
Decidi fazer um fork, mesclar todas as otimizações da Intel, algumas das otimizações do Cloudflare, além de alguns outros patches menores. Em seguida, comecei a limpar soluções alternativas, vários códigos mortos, todos os códigos de contribuição e de exemplo.
O resultado é um zlib-ng com melhor desempenho e mais fácil de manter.
Muitas melhorias foram feitas no zlib-ng desde o seu início, e inúmeras pessoas e empresas contribuíram com pequenas e grandes melhorias ou testes valiosos.
Por favor, leia LICENSE.md, é muito simples e muito liberal.
Existem duas maneiras de construir o zlib-ng:
Para construir o zlib-ng usando o gerador makefile multiplataforma cmake.
cmake .
cmake --build . --config Release
ctest --verbose -C Release
Alternativamente, você pode usar a ferramenta GUI de configuração cmake ccmake:
ccmake .
Para construir o zlib-ng usando o script bash configure:
./configure
make
make test
CMake | configurar | Descrição | Padrão |
---|---|---|---|
ZLIB_COMPAT | --zlib-compat | Compilar com API compatível com zlib | DESLIGADO |
ZLIB_ENABLE_TESTS | Construir binários de teste | SOBRE | |
COM_GZFILEOP | --sem-gzfileops | Compilar com suporte para funções relacionadas ao gzFile | SOBRE |
COM_OPTIM | --sem otimizações | Crie com otimizações | SOBRE |
COM_NOVAS_ESTRATÉGIAS | --sem novas estratégias | Utilize novas estratégias | SOBRE |
COM_NATIVE_INSTRUCTIONS | Compila com conjunto completo de instruções suportado neste host (gcc/clang -march=native) | DESLIGADO | |
COM_RUNTIME_CPU_DETECTION | Compila com detecção de CPU em tempo de execução | SOBRE | |
COM_SANITIZADOR | Construir com sanitizador (memória, endereço, indefinido) | DESLIGADO | |
COM_GTEST | Construir gtest_zlib | SOBRE | |
COM_FUZZERS | Teste de construção/fuzz | DESLIGADO | |
COM_BENCHMARKS | Construir testes/benchmarks | DESLIGADO | |
COM_MAINTAINER_WARNINGS | Construa com avisos do mantenedor do projeto | DESLIGADO | |
COM_CODE_COVERAGE | Habilitar relatórios de cobertura de código | DESLIGADO |
AVISO: Não recomendamos a instalação manual, a menos que você realmente saiba o que está fazendo, porque isso pode substituir a biblioteca zlib padrão do sistema e qualquer incompatibilidade ou configuração incorreta do zlib-ng pode tornar todo o sistema inutilizável, exigindo recuperação ou reinstalação. Se você ainda quiser uma instalação manual, recomendamos usar o prefixo de caminho /opt/.
Para distribuições Linux, uma maneira alternativa de usar zlib-ng (se compilado no modo zlib-compat) em vez de zlib é através do uso da variável de ambiente LD_PRELOAD . Se o programa estiver vinculado dinamicamente ao zlib, o programa tentará temporariamente usar o zlib-ng, sem arriscar a instabilidade de todo o sistema.
LD_PRELOAD=/opt/zlib-ng/libz.so.1.2.13.zlib-ng /usr/bin/program
Para instalar o zlib-ng em todo o sistema usando cmake:
cmake --build . --target install
Para instalar o zlib-ng em todo o sistema usando o script configure:
make install
Após compilar com cmake, um pacote de instalação pode ser criado usando cpack. Por padrão, um pacote tgz é criado, mas você pode anexar -G
a cada comando para gerar tipos de pacotes alternativos (TGZ, ZIP, RPM, DEB). Para criar facilmente um pacote rpm ou deb, você usaria -G RPM
ou -G DEB
respectivamente.
cd build
cpack --config CPackConfig.cmake
cpack --config CPackSourceConfig.cmake
Alternativamente, você pode construir e instalar o zlib-ng usando o gerenciador de dependência 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
A porta zlib-ng no vcpkg é mantida atualizada pelos membros da equipe da Microsoft e colaboradores da comunidade. Se a versão estiver desatualizada, crie um problema ou solicitação pull no repositório vcpkg.
Zlib-ng pretende estar aberto a contribuições e ficaríamos encantados em receber pull requests no github. Ajuda com testes e revisão de solicitações pull, etc. também é muito apreciada.
Por favor, verifique o Wiki para mais informações: Contribuindo
Agradecemos a todas as pessoas e empresas que dedicaram seu tempo para contribuir com revisões de código, testes e/ou patches. Zlib-ng não teria sido tão bom sem você.
O formato deflate usado pelo zlib foi definido por Phil Katz.
As especificações deflate e zlib foram escritas por L. Peter Deutsch.
zlib foi originalmente criado por Jean-loup Gailly (compressão) e Mark Adler (descompressão).
CMake | configurar | Descrição | Padrão |
---|---|---|---|
FORCE_SSE2 | --force-sse2 | Ignorar a verificação de tempo de execução para instruções SSE2 (sempre ativado para x86_64) | DESLIGADO (x86) |
COM_AVX2 | Construa com intrínsecos AVX2 | SOBRE | |
COM_AVX512 | Construa com intrínsecos AVX512 | SOBRE | |
COM_AVX512VNNI | Construa com intrínsecos AVX512VNNI | SOBRE | |
COM_SSE2 | Construa com intrínsecos SSE2 | SOBRE | |
COM_SSSE3 | Construa com intrínsecos SSSE3 | SOBRE | |
COM_SSE42 | Construa com intrínsecos SSE42 | SOBRE | |
COM_PCLMULQDQ | Construir com intrínsecos PCLMULQDQ | SOBRE | |
COM_VPCLMULQDQ | --sem-vpclmulqdq | Construir com intrínsecos VPCLMULQDQ | SOBRE |
COM_ACLE | --sem-acle | Construa com intrínsecos ACLE | SOBRE |
COM_NEON | --sem-neon | Construa com intrínsecos NEON | SOBRE |
COM_ARMV6 | --sem-armv6 | Construa com intrínsecos ARMv6 | SOBRE |
COM_ALTIVEC | --sem-altivec | Construa com intrínsecos AltiVec (VMX) | SOBRE |
COM_POWER8 | --sem-poder8 | Crie com otimizações do POWER8 | SOBRE |
COM_RVV | Construa com intrínsecos RVV | SOBRE | |
COM_CRC32_VX | --sem-crc32-vx | Construa com CRC32 vetorizado no IBM Z | SOBRE |
COM_DFLTCC_DEFLATE | --with-dfltcc-deflate | Construa com intrínsecos DFLTCC para compactação no IBM Z | DESLIGADO |
COM_DFLTCC_INFLATE | --with-dfltcc-inflate | Construa com intrínsecos DFLTCC para descompactação no IBM Z | DESLIGADO |
COM_UNALIGNED | --sem-desalinhado | Permitir otimizações que usam leituras desalinhadas se for seguro no arco atual | SOBRE |
COM_INFLATE_STRICT | Construa com verificação rigorosa da distância de inflação | DESLIGADO | |
COM_INFLATE_ALLOW_INVALID_DIST | Construa com preenchimento zero para aumentar distâncias inválidas | DESLIGADO | |
INSTALL_UTILS | Copie minigzip e minideflate durante a instalação | DESLIGADO | |
ZLIBNG_ENABLE_TESTS | Testar API específica do zlib-ng | SOBRE |