CI | 안정적인 | 개발하다 |
---|---|---|
GitHub 작업 | ||
코드팩터 | ||
OSS-퍼즈 | ||
코덱스 |
차세대 시스템을 위한 zlib 데이터 압축 라이브러리
Hans Kristian Rosbach(Dead2라고도 함)가 관리함(zlib-ng àt Circlestorm dót org)
이 포크의 동기는 공식 zlib 저장소에 구현되지 않은 새로운 최적화가 포함된 여러 타사 기여를 확인했기 때문입니다.
Mark Adler는 매우 오랫동안 zlib를 유지관리해 왔으며 훌륭한 일을 해냈으며 앞으로 오랫동안 계속될 수 있기를 바랍니다. zlib-ng의 아이디어는 zlib를 대체하는 것이 아니라 코드 변경에 대한 임계값이 더 낮은 드롭인 대체품으로 공존하는 것입니다.
zlib는 오랜 역사를 가지고 있으며 믿을 수 없을 정도로 이식성이 뛰어나며 인터넷 이전의 많은 시스템도 지원합니다.
훌륭하지만 추가 개발 및 유지 관리가 복잡해질 수 있습니다. zlib 코드에는 매우 오래된 컴파일러에 대한 해결 방법이나 16비트 환경에서 작동하는 것과 같은 제한 사항이 있는 시스템을 수용하기 위한 많은 해결 방법이 포함되어 있습니다.
이러한 해결 방법 중 상당수는 유지 관리 부담일 뿐이며 일부는 코드 측면에서 꽤 큰 부담입니다. 코드 전체에 많은 해결 방법이 복잡해지기 때문에 zlib에 대한 아이디어/관심이 있는 새로운 프로그래머가 기여하기가 더 어려워집니다.
저는 포크를 만들고 모든 Intel 최적화, 일부 Cloudflare 최적화 및 몇 가지 다른 작은 패치를 병합하기로 결정했습니다. 그런 다음 해결 방법, 다양한 데드 코드, 모든 기여 및 예제 코드를 정리하기 시작했습니다.
그 결과 성능이 향상되고 zlib-ng를 유지 관리하기가 더 쉬워졌습니다.
zlib-ng는 처음부터 많은 개선이 이루어졌으며 수많은 사람과 회사가 크고 작은 개선이나 가치 있는 테스트에 기여했습니다.
LICENSE.md를 읽어보세요. 매우 간단하고 자유로워요.
zlib-ng를 빌드하는 방법에는 두 가지가 있습니다.
크로스 플랫폼 makefile 생성기 cmake를 사용하여 zlib-ng를 빌드합니다.
cmake .
cmake --build . --config Release
ctest --verbose -C Release
또는 cmake 구성 GUI 도구 ccmake를 사용할 수 있습니다.
ccmake .
bash 구성 스크립트를 사용하여 zlib-ng를 빌드하려면 다음을 수행하십시오.
./configure
make
make test
CMake | 구성 | 설명 | 기본 |
---|---|---|---|
ZLIB_COMPAT | --zlib-compat | zlib 호환 API로 컴파일 | 끄다 |
ZLIB_ENABLE_TESTS | 테스트 바이너리 빌드 | 에 | |
WITH_GZFILEOP | --gzfileops 없이 | gzFile 관련 기능을 지원하여 컴파일 | 에 |
WITH_OPTIM | --최적화 없이 | 최적화로 구축 | 에 |
WITH_NEW_STRATEGIES | --새로운 전략 없이 | 새로운 전략을 사용하세요 | 에 |
WITH_NATIVE_INSTRUCTIONS | 이 호스트에서 지원되는 전체 명령어 세트로 컴파일합니다(gcc/clang -march=native) | 끄다 | |
WITH_RUNTIME_CPU_DETECTION | 런타임 CPU 감지로 컴파일 | 에 | |
WITH_SANITIZER | 새니타이저로 빌드(메모리, 주소, 정의되지 않음) | 끄다 | |
WITH_GTEST | gtest_zlib 빌드 | 에 | |
WITH_FUZZERS | 빌드 테스트/퍼즈 | 끄다 | |
WITH_BENCHMARKS | 테스트/벤치마크 구축 | 끄다 | |
WITH_MAINTAINER_WARNINGS | 프로젝트 관리자 경고로 빌드 | 끄다 | |
WITH_CODE_COVERAGE | 코드 적용 범위 보고 활성화 | 끄다 |
경고: 수행 중인 작업을 실제로 알지 않는 한 수동 설치를 권장하지 않습니다. 이는 잠재적으로 시스템 기본 zlib 라이브러리를 무시할 수 있고, zlib-ng의 비호환성 또는 잘못된 구성으로 인해 전체 시스템을 사용할 수 없게 되어 복구 또는 재설치가 필요할 수 있기 때문입니다. 여전히 수동 설치를 원하는 경우 /opt/ 경로 접두어를 사용하는 것이 좋습니다.
Linux 배포판의 경우 zlib 대신 zlib-ng(zlib-compat 모드로 컴파일된 경우)를 사용하는 다른 방법은 LD_PRELOAD 환경 변수를 사용하는 것입니다. 프로그램이 zlib와 동적으로 링크된 경우 프로그램은 시스템 전체의 불안정성을 위험에 빠뜨리지 않고 일시적으로 zlib-ng를 대신 사용하려고 시도합니다.
LD_PRELOAD=/opt/zlib-ng/libz.so.1.2.13.zlib-ng /usr/bin/program
cmake를 사용하여 시스템 전체에 zlib-ng를 설치하려면:
cmake --build . --target install
구성 스크립트를 사용하여 시스템 전체에 zlib-ng를 설치하려면 다음을 수행하십시오.
make install
cmake로 빌드한 후 cpack을 사용하여 설치 패키지를 만들 수 있습니다. 기본적으로 tgz 패키지가 생성되지만 각 명령에 -G
추가하여 대체 패키지 유형(TGZ, ZIP, RPM, DEB)을 생성할 수 있습니다. rpm 또는 deb 패키지를 쉽게 생성하려면 각각 -G RPM
또는 -G DEB
사용합니다.
cd build
cpack --config CPackConfig.cmake
cpack --config CPackSourceConfig.cmake
또는 vcpkg 종속성 관리자를 사용하여 zlib-ng를 빌드하고 설치할 수 있습니다.
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
vcpkg의 zlib-ng 포트는 Microsoft 팀 구성원과 커뮤니티 참가자에 의해 최신 상태로 유지됩니다. 버전이 오래된 경우 vcpkg 저장소에서 이슈 또는 풀 요청을 생성하세요.
Zlib-ng는 기여에 개방적인 것을 목표로 하고 있으며 github에서 끌어오기 요청을 받게 되어 기쁘게 생각합니다. 끌어오기 요청 등을 테스트하고 검토하는 데 도움을 주시면 매우 감사하겠습니다.
자세한 내용은 Wiki를 확인하세요: 기여
시간을 내어 코드 검토, 테스트 및/또는 패치를 제공해주신 모든 사람과 회사에 감사드립니다. 당신이 없었다면 Zlib-ng는 그다지 좋지 않았을 것입니다.
zlib에서 사용하는 deflate 형식은 Phil Katz가 정의했습니다.
deflate 및 zlib 사양은 L. Peter Deutsch가 작성했습니다.
zlib는 원래 Jean-loup Gailly(압축)와 Mark Adler(압축 해제)에 의해 만들어졌습니다.
CMake | 구성 | 설명 | 기본 |
---|---|---|---|
FORCE_SSE2 | --force-sse2 | SSE2 명령에 대한 런타임 검사 건너뛰기(x86_64의 경우 항상 켜짐) | 끄기(x86) |
WITH_AVX2 | AVX2 내장 기능을 사용하여 빌드 | 에 | |
WITH_AVX512 | AVX512 내장 기능으로 빌드 | 에 | |
WITH_AVX512VNNI | AVX512VNNI 내장 기능으로 빌드 | 에 | |
WITH_SSE2 | SSE2 내장 함수로 빌드 | 에 | |
WITH_SSSE3 | SSSE3 내장 기능을 사용하여 빌드 | 에 | |
WITH_SSE42 | SSE42 내장 함수로 빌드 | 에 | |
WITH_PCLMULQDQ | PCLMULQDQ 내장 함수를 사용하여 빌드 | 에 | |
WITH_VPCLMULQDQ | --vpclmulqdq 없이 | VPCLMULQDQ 내장 기능을 사용하여 빌드 | 에 |
WITH_ACLE | --acle 없이 | ACLE 내장 함수로 빌드 | 에 |
WITH_NEON | --네온 없이 | NEON 내장 함수를 사용하여 빌드 | 에 |
WITH_ARMV6 | --armv6 없이 | ARMv6 내장 기능을 사용하여 빌드 | 에 |
WITH_ALTIVEC | --altivec 없이 | AltiVec(VMX) 내장 기능을 사용하여 빌드 | 에 |
WITH_POWER8 | --전원 없음8 | POWER8 최적화로 구축 | 에 |
WITH_RVV | RVV 내장 기능을 사용하여 빌드 | 에 | |
WITH_CRC32_VX | --crc32-vx 없이 | IBM Z에서 벡터화된 CRC32를 사용하여 빌드 | 에 |
WITH_DFLTCC_DEFLATE | --with-dfltcc-deflate | IBM Z에서 압축을 위해 DFLTCC 내장 기능을 사용하여 빌드 | 끄다 |
WITH_DFLTCC_INFLATE | --with-dfltcc-inflate | IBM Z에서 압축 해제를 위해 DFLTCC 내장 기능을 사용하여 빌드 | 끄다 |
WITH_UNALIGNED | --정렬되지 않은 상태 | 현재 아치에서 안전한 경우 정렬되지 않은 읽기를 사용하는 최적화를 허용합니다. | 에 |
WITH_INFLATE_STRICT | 엄격한 팽창 거리 확인으로 구축 | 끄다 | |
WITH_INFLATE_ALLOW_INVALID_DIST | 유효하지 않은 거리를 부풀리기 위해 0 채우기로 빌드 | 끄다 | |
INSTALL_UTILS | 설치 중 minigzip 및 minideflate 복사 | 끄다 | |
ZLIBNG_ENABLE_TESTS | zlib-ng 특정 API 테스트 | 에 |