CI | Stabil | Mengembangkan |
---|---|---|
Tindakan GitHub | ||
Faktor Kode | ||
OSS-Fuzz | ||
kodecov |
perpustakaan kompresi data zlib untuk sistem generasi berikutnya
Dikelola oleh Hans Kristian Rosbach alias Dead2 (zlib-ng àtcirclestorm dót org)
Motivasi dari fork ini adalah melihat beberapa kontribusi pihak ketiga dengan optimasi baru tidak diterapkan ke dalam repositori resmi zlib.
Mark Adler telah mempertahankan zlib untuk waktu yang sangat lama, dan dia telah melakukan pekerjaannya dengan baik dan mudah-mudahan dia akan terus melanjutkannya untuk waktu yang lama. Ide zlib-ng bukan untuk menggantikan zlib, namun untuk hidup berdampingan sebagai pengganti drop-in dengan ambang batas yang lebih rendah untuk perubahan kode.
zlib memiliki sejarah panjang dan sangat portabel, bahkan mendukung banyak sistem sebelum Internet.
Itu bagus, tapi bisa mempersulit pengembangan dan pemeliharaan lebih lanjut. Kode zlib berisi banyak solusi untuk kompiler yang sangat lama atau untuk mengakomodasi sistem dengan keterbatasan seperti beroperasi di lingkungan 16-bit.
Banyak dari solusi ini hanya merupakan beban pemeliharaan, beberapa di antaranya cukup besar dalam hal kode. Dengan banyaknya solusi yang berantakan di seluruh kode, semakin sulit bagi pemrogram baru yang memiliki ide/minat terhadap zlib untuk berkontribusi.
Saya memutuskan untuk membuat fork, menggabungkan semua optimasi Intel, beberapa optimasi Cloudflare, ditambah beberapa patch kecil lainnya. Kemudian mulai membersihkan solusi, berbagai kode mati, semua kode kontrib dan contoh.
Hasilnya adalah kinerja yang lebih baik dan pemeliharaan zlib-ng yang lebih mudah.
Banyak perbaikan telah dilakukan pada zlib-ng sejak dimulainya, dan banyak orang dan perusahaan telah memberikan kontribusi baik perbaikan kecil maupun besar, atau pengujian yang berharga.
Silakan baca LICENSE.md, ini sangat sederhana dan sangat liberal.
Ada dua cara untuk membangun zlib-ng:
Untuk membangun zlib-ng menggunakan cmake generator makefile lintas platform.
cmake .
cmake --build . --config Release
ctest --verbose -C Release
Alternatifnya, Anda dapat menggunakan alat GUI konfigurasi cmake ccmake:
ccmake .
Untuk membangun zlib-ng menggunakan skrip konfigurasi bash:
./configure
make
make test
CMembuat | konfigurasikan | Keterangan | Bawaan |
---|---|---|---|
ZLIB_COMPAT | --zlib-kompatibel | Kompilasi dengan API yang kompatibel dengan zlib | MATI |
ZLIB_ENABLE_TESTS | Bangun biner uji | PADA | |
DENGAN_GZFILEOP | --tanpa-gzfileops | Kompilasi dengan dukungan untuk fungsi terkait gzFile | PADA |
DENGAN_OPTIM | --tanpa-optimasi | Bangun dengan pengoptimalan | PADA |
DENGAN_NEW_STRATEGI | --tanpa-strategi-baru | Gunakan strategi baru | PADA |
DENGAN_NATIVE_INSTRUCTIONS | Kompilasi dengan set instruksi lengkap yang didukung pada host ini (gcc/clang -march=native) | MATI | |
DENGAN_RUNTIME_CPU_DETECTION | Kompilasi dengan deteksi CPU runtime | PADA | |
DENGAN_SANITIZER | Dibuat dengan pembersih (memori, alamat, tidak ditentukan) | MATI | |
DENGAN_GTEST | Bangun gtest_zlib | PADA | |
DENGAN_FUZZERS | Uji pembuatan/fuzz | MATI | |
DENGAN_BENCHMARKS | Membangun tes/benchmark | MATI | |
DENGAN_MAINAINER_PERINGATAN | Bangun dengan peringatan pengelola proyek | MATI | |
DENGAN_CODE_COVERAGE | Aktifkan pelaporan cakupan kode | MATI |
PERINGATAN: Kami tidak menyarankan penginstalan secara manual kecuali Anda benar-benar paham apa yang Anda lakukan, karena hal ini berpotensi mengesampingkan pustaka zlib default sistem, dan ketidakcocokan atau konfigurasi zlib-ng yang salah dapat membuat keseluruhan sistem tidak dapat digunakan, memerlukan pemulihan atau penginstalan ulang. Jika Anda masih menginginkan instalasi manual, sebaiknya gunakan awalan jalur /opt/.
Untuk distro Linux, cara alternatif untuk menggunakan zlib-ng (jika dikompilasi dalam mode zlib-compat) daripada zlib, adalah melalui penggunaan variabel lingkungan LD_PRELOAD . Jika program terhubung secara dinamis dengan zlib, maka program akan mencoba menggunakan zlib-ng untuk sementara, tanpa menimbulkan risiko ketidakstabilan sistem.
LD_PRELOAD=/opt/zlib-ng/libz.so.1.2.13.zlib-ng /usr/bin/program
Untuk menginstal zlib-ng di seluruh sistem menggunakan cmake:
cmake --build . --target install
Untuk menginstal zlib-ng di seluruh sistem menggunakan skrip konfigurasi:
make install
Setelah dibangun dengan cmake, paket instalasi dapat dibuat menggunakan cpack. Secara default, paket tgz dibuat, tetapi Anda dapat menambahkan -G
ke setiap perintah untuk menghasilkan jenis paket alternatif (TGZ, ZIP, RPM, DEB). Untuk membuat paket rpm atau deb dengan mudah, Anda dapat menggunakan -G RPM
atau -G DEB
.
cd build
cpack --config CPackConfig.cmake
cpack --config CPackSourceConfig.cmake
Alternatifnya, Anda dapat membangun dan menginstal zlib-ng menggunakan manajer ketergantungan 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
Port zlib-ng di vcpkg selalu diperbarui oleh anggota tim Microsoft dan kontributor komunitas. Jika versinya sudah kedaluwarsa, silakan buat masalah atau tarik permintaan pada repositori vcpkg.
Zlib-ng bertujuan untuk terbuka terhadap kontribusi, dan kami akan dengan senang hati menerima permintaan penarikan di github. Bantuan untuk menguji dan meninjau permintaan tarik, dll juga sangat dihargai.
Silakan periksa Wiki untuk info lebih lanjut: Berkontribusi
Terima kasih kami sampaikan kepada semua orang dan perusahaan yang telah meluangkan waktu untuk menyumbangkan tinjauan kode, pengujian, dan/atau perbaikan. Zlib-ng tidak akan sebaik ini tanpa Anda.
Format deflate yang digunakan oleh zlib ditentukan oleh Phil Katz.
Spesifikasi deflate dan zlib ditulis oleh L. Peter Deutsch.
zlib awalnya dibuat oleh Jean-loup Gailly (kompresi) dan Mark Adler (dekompresi).
CMembuat | konfigurasikan | Keterangan | Bawaan |
---|---|---|---|
KEKUATAN_SSE2 | --force-sse2 | Lewati pemeriksaan runtime untuk instruksi SSE2 (Selalu aktif untuk x86_64) | MATI (x86) |
DENGAN_AVX2 | Bangun dengan intrinsik AVX2 | PADA | |
DENGAN_AVX512 | Bangun dengan intrinsik AVX512 | PADA | |
DENGAN_AVX512VNNI | Bangun dengan intrinsik AVX512VNNI | PADA | |
DENGAN_SSE2 | Bangun dengan intrinsik SSE2 | PADA | |
DENGAN_SSSE3 | Bangun dengan intrinsik SSSE3 | PADA | |
DENGAN_SSE42 | Bangun dengan intrinsik SSE42 | PADA | |
DENGAN_PCLMULQDQ | Bangun dengan intrinsik PCLMULQDQ | PADA | |
DENGAN_VPCLMULQDQ | --tanpa-vpclmulqdq | Membangun dengan intrinsik VPCLMULQDQ | PADA |
DENGAN_ACLE | --tanpa-acle | Bangun dengan intrinsik ACLE | PADA |
DENGAN_NEON | --tanpa-neon | Bangun dengan intrinsik NEON | PADA |
DENGAN_ARMV6 | --tanpa-armv6 | Membangun dengan intrinsik ARMv6 | PADA |
DENGAN_ALTIFC | --tanpa-altivec | Bangun dengan intrinsik AltiVec (VMX). | PADA |
DENGAN_POWER8 | --tanpa-kekuatan8 | Bangun dengan optimasi POWER8 | PADA |
DENGAN_RVV | Bangun dengan intrinsik RVV | PADA | |
DENGAN_CRC32_VX | --tanpa-crc32-vx | Bangun dengan CRC32 yang divektorkan pada IBM Z | PADA |
DENGAN_DFLTCC_DEFLATE | --dengan-dfltcc-kempis | Membangun dengan intrinsik DFLTCC untuk kompresi pada IBM Z | MATI |
DENGAN_DFLTCC_INFLATE | --dengan-dfltcc-mengembang | Membangun dengan intrinsik DFLTCC untuk dekompresi pada IBM Z | MATI |
DENGAN_UNALIGNED | --tanpa-tidak selaras | Izinkan pengoptimalan yang menggunakan pembacaan tidak selaras jika aman pada lengkungan saat ini | PADA |
DENGAN_INFLATE_STRICT | Bangun dengan pemeriksaan jarak pemompaan yang ketat | MATI | |
DENGAN_INFLATE_ALLOW_INVALID_DIST | Bangun dengan pengisian nol untuk meningkatkan jarak yang tidak valid | MATI | |
INSTALL_UTILS | Salin minigzip dan minideflate saat instalasi | MATI | |
ZLIBNG_ENABLE_TESTS | Uji API khusus zlib-ng | PADA |