КИ | Стабильный | Развивать |
---|---|---|
Действия GitHub | ||
КодФактор | ||
OSS-Fuzz | ||
Кодеков |
библиотека сжатия данных zlib для систем следующего поколения
Поддерживается Гансом Кристианом Росбахом, также известным как Dead2 (zlib-ng àtcirclestorm dót org).
Мотивом для этого форка было то, что несколько сторонних разработчиков с новыми оптимизациями не были реализованы в официальном репозитории zlib.
Марк Адлер поддерживает zlib в течение очень долгого времени, и он проделал отличную работу, и, надеюсь, он будет продолжать это делать еще долго. Идея zlib-ng заключается не в том, чтобы заменить zlib, а в том, чтобы сосуществовать в качестве замены с более низким порогом изменения кода.
zlib имеет долгую историю и невероятно портативен, поддерживая даже многие системы, существовавшие до Интернета.
Это здорово, но это может усложнить дальнейшую разработку и сопровождение. Код zlib содержит множество обходных путей для очень старых компиляторов или для адаптации систем с ограничениями, например, работой в 16-битной среде.
Многие из этих обходных путей являются лишь бременем обслуживания, некоторые из них довольно сложны с точки зрения кода. Из-за множества обходных путей, разбросанных по всему коду, новым программистам, у которых есть идея или интерес к zlib, становится сложнее внести свой вклад.
Я решил сделать форк, объединить все оптимизации Intel, некоторые оптимизации Cloudflare, а также пару других небольших патчей. Затем начал очищать обходные пути, различный мертвый код, весь дополнительный код и примеры кода.
В результате zlib-ng становится более производительным и простым в обслуживании.
С момента его запуска в zlib-ng было внесено множество улучшений, и множество людей и компаний внесли как небольшие, так и большие улучшения или ценное тестирование.
Пожалуйста, прочтите LICENSE.md, он очень простой и либеральный.
Есть два способа собрать zlib-ng:
Чтобы собрать zlib-ng с помощью кроссплатформенного генератора make-файлов cmake.
cmake .
cmake --build . --config Release
ctest --verbose -C Release
Альтернативно вы можете использовать графический инструмент настройки cmake ccmake:
ccmake .
Чтобы собрать zlib-ng с помощью сценария конфигурации bash:
./configure
make
make test
CMake | настроить | Описание | По умолчанию |
---|---|---|---|
ZLIB_COMPAT | --zlib-compat | Компилировать с помощью API, совместимого с zlib. | ВЫКЛЮЧЕННЫЙ |
ZLIB_ENABLE_TESTS | Сборка тестовых двоичных файлов | НА | |
With_GZFILEOP | --without-gzfileops | Компилировать с поддержкой функций, связанных с gzFile. | НА |
With_OPTIM | --без оптимизации | Создавайте с оптимизацией | НА |
With_NEW_STRATEGIES | --без-новых-стратегий | Используйте новые стратегии | НА |
With_NATIVE_INSTRUCTIONS | Компилируется с полным набором инструкций, поддерживаемым на этом хосте (gcc/clang -march=native) | ВЫКЛЮЧЕННЫЙ | |
With_RUNTIME_CPU_DETECTION | Компилируется с обнаружением ЦП во время выполнения | НА | |
С_SANITIZER | Сборка с использованием дезинфицирующего средства (память, адрес, не определено) | ВЫКЛЮЧЕННЫЙ | |
С_GTEST | Сборка gtest_zlib | НА | |
With_FUZZERS | Тест сборки/фаззинг | ВЫКЛЮЧЕННЫЙ | |
С_BENCHMARKS | Тестирование/тестирование сборки | ВЫКЛЮЧЕННЫЙ | |
С_MAINTAINER_WARNINGS | Сборка с предупреждениями сопровождающего проекта | ВЫКЛЮЧЕННЫЙ | |
With_CODE_COVERAGE | Включить отчеты о покрытии кода | ВЫКЛЮЧЕННЫЙ |
ВНИМАНИЕ: Мы не рекомендуем устанавливать вручную, если вы действительно не знаете, что делаете, поскольку это потенциально может переопределить системную библиотеку zlib по умолчанию, а любая несовместимость или неправильная конфигурация zlib-ng может сделать всю систему непригодной для использования, требуя восстановления или переустановки. Если вам по-прежнему нужна установка вручную, мы рекомендуем использовать префикс пути /opt/.
Для дистрибутивов Linux альтернативный способ использования zlib-ng (если он скомпилирован в режиме zlib-compat) вместо zlib — использование переменной среды LD_PRELOAD . Если программа динамически связана с zlib, то программа временно попытается вместо этого использовать zlib-ng без риска нестабильности всей системы.
LD_PRELOAD=/opt/zlib-ng/libz.so.1.2.13.zlib-ng /usr/bin/program
Чтобы установить zlib-ng для всей системы с помощью cmake:
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
Альтернативно вы можете собрать и установить zlib-ng с помощью менеджера зависимостей 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
Порт zlib-ng в vcpkg постоянно обновляется членами команды Microsoft и участниками сообщества. Если версия устарела, создайте проблему или запрос на извлечение в репозитории vcpkg.
Zlib-ng стремится быть открытым для участия, и мы будем рады получить запросы на включение на github. Мы также очень ценим помощь с тестированием и проверкой запросов на включение и т. д.
Пожалуйста, проверьте Wiki для получения дополнительной информации: Внесение вклада
Благодарим всех людей и компании, которые нашли время, чтобы внести свой вклад в обзоры кода, тестирование и/или исправления. Без вас Zlib-ng не был бы так хорош.
Формат deflate, используемый zlib, был определен Филом Кацем.
Спецификации deflate и zlib были написаны Л. Питером Дойчем.
zlib изначально был создан Жаном-Лу Гайи (сжатие) и Марком Адлером (декомпрессия).
CMake | настроить | Описание | По умолчанию |
---|---|---|---|
FORCE_SSE2 | --force-sse2 | Пропустить проверку времени выполнения для инструкций SSE2 (всегда включено для x86_64) | ВЫКЛ (x86) |
С_AVX2 | Сборка с использованием встроенных функций AVX2. | НА | |
С_AVX512 | Сборка с использованием встроенных функций AVX512. | НА | |
С_AVX512VNNI | Сборка с использованием встроенных функций AVX512VNNI. | НА | |
С_SSE2 | Сборка с использованием встроенных функций SSE2 | НА | |
С_SSSE3 | Сборка с использованием встроенных функций SSSE3 | НА | |
С_SSE42 | Сборка с использованием встроенных функций SSE42. | НА | |
With_PCLMULQDQ | Сборка с использованием встроенных функций PCLMULQDQ. | НА | |
With_VPCLMULQDQ | --без-vpclmulqdq | Сборка с использованием встроенных функций VPCLMULQDQ. | НА |
С_ACLE | --без-акула | Сборка с использованием встроенных функций ACLE | НА |
С_NEON | --без неона | Создайте с использованием встроенных функций NEON | НА |
С_ARMV6 | --без-armv6 | Сборка с использованием встроенных функций ARMv6. | НА |
С_ALTIVEC | --без-altivec | Сборка с использованием встроенных функций AltiVec (VMX) | НА |
With_POWER8 | --без-power8 | Создавайте с оптимизацией POWER8 | НА |
С_RVV | Сборка с использованием встроенных функций RVV | НА | |
С_CRC32_VX | --без-crc32-vx | Сборка с векторизованным CRC32 на IBM Z | НА |
With_DFLTCC_DEFLATE | --with-dfltcc-deflate | Сборка с использованием встроенных функций DFLTCC для сжатия на IBM Z. | ВЫКЛЮЧЕННЫЙ |
With_DFLTCC_INFLATE | --with-dfltcc-inflate | Сборка с использованием встроенных функций DFLTCC для распаковки на IBM Z. | ВЫКЛЮЧЕННЫЙ |
С_UNALIGNED | --без-невыровненный | Разрешить оптимизации, использующие невыровненное чтение, если это безопасно на текущей арке. | НА |
With_INFLATE_STRICT | Стройте со строгой проверкой расстояния надувания | ВЫКЛЮЧЕННЫЙ | |
With_INFLATE_ALLOW_INVALID_DIST | Постройте с нулевой заливкой для увеличения недопустимых расстояний. | ВЫКЛЮЧЕННЫЙ | |
INSTALL_UTILS | Скопируйте minigzip и minideflate во время установки. | ВЫКЛЮЧЕННЫЙ | |
ZLIBNG_ENABLE_TESTS | Протестируйте специальный API zlib-ng | НА |