CI | 安定した | 開発する |
---|---|---|
GitHub アクション | ||
コードファクター | ||
OSS-ファズ | ||
コードコフ |
次世代システム用の zlib データ圧縮ライブラリ
Hans Kristian Rosbach 別名 Dead2 (zlib-ng àt Circlestorm dot org) によって保守されています。
このフォークの動機は、新しい最適化を伴ういくつかのサードパーティの貢献が公式の zlib リポジトリに実装されていないことにありました。
Mark Adler は非常に長い間 zlib を保守してきました。彼は素晴らしい仕事をしてくれました。できれば今後も長く続けてくれるでしょう。 zlib-ng の考え方は、zlib を置き換えるのではなく、コード変更のしきい値が低いドロップイン置き換えとして共存することです。
zlib には長い歴史があり、非常に移植性が高く、インターネット以前の多くのシステムもサポートしています。
それは素晴らしいことですが、さらなる開発と保守性が複雑になる可能性があります。 zlib コードには、非常に古いコンパイラや、16 ビット環境での動作などの制限のあるシステムに対応するための多くの回避策が含まれています。
これらの回避策の多くはメンテナンスの負担にすぎませんが、中にはコード的に非常に大規模なものもあります。コード全体に多くの回避策が散乱しているため、zlib にアイデアや興味を持っている新しいプログラマーが貢献することが難しくなります。
私はフォークを作成し、すべての Intel 最適化、Cloudflare 最適化の一部、およびその他のいくつかの小さなパッチをマージすることにしました。次に、回避策、さまざまなデッドコード、すべての貢献コードとサンプルコードの整理を開始しました。
その結果、パフォーマンスが向上し、zlib-ng の保守が容易になります。
zlib-ng にはその開始以来、多くの改良が加えられており、多くの人々や企業が大小両方の改良、または貴重なテストに貢献してきました。
LICENSE.md を読んでください。これは非常にシンプルで非常に自由です。
zlib-ng をビルドするには 2 つの方法があります。
クロスプラットフォームの 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
configure スクリプトを使用して 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 組み込み関数を使用してビルドする | の上 |
WITH_NEON | --ネオンなし | NEON 組み込み関数を使用してビルドする | の上 |
WITH_ARMV6 | --without-armv6 | ARMv6 組み込み関数を使用してビルドする | の上 |
WITH_ALTIVEC | --altivec なし | AltiVec (VMX) 組み込み関数を使用して構築する | の上 |
WITH_POWER8 | --電源なし8 | POWER8 最適化を使用して構築する | の上 |
WITH_RVV | RVV 組み込み関数を使用して構築する | の上 | |
WITH_CRC32_VX | --with-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 | 無効な距離をインフレートする場合はゼロフィルで構築します | オフ | |
INSTALL_UTILS | インストール中に minigzip と minideflate をコピーします | オフ | |
ZLIBNG_ENABLE_TESTS | zlib-ng 固有の API をテストする | の上 |