# Platform-Independent Primitives library ## Introduction Low-level C++ library that covers next areas: * Strings * Console IO * Threads * Timers * Events * Various IO devices * Mathematics (FFT with libfftw3) * Cryptography (libsodium) * Compression (zlib) * Resources * Metaprogramming ## CMake This library tightly integrated with CMake by providing some macro: * `pip_code_model( file0 [file1 ...] [OPTIONS opt0 [opt1 ...] ] [ABSOLUTE])` Generate code model files for source files file0 [file1 ...]. Options you can see by exec "pip_cmg -h". If not ABSOLUTE source files will be prepended by ${CMAKE_CURRENT_SOURCE_DIR}. You should add ${} to your target. * `pip_resources( file)` Generate C++ files for resource file. You should add ${} to your target. ## Documentation [🇺🇸 Online documentation](https://shstk.ru/pip/html/en/index.html) [🇺🇸 Qt-help](https://shstk.ru/pip/pip_en.qch) [🇷🇺 Онлайн документация](https://shstk.ru/pip/html/ru/index.html) [🇷🇺 Qt-help](https://shstk.ru/pip/pip_ru.qch) ## Основные опции сборки ### Стандартные опции (option()) | Опция | Описание | По умолчанию | |-------|----------|--------------| | `ICU` | ICU support для конвертации кодовых страниц | ON (кроме Win/Android/Apple) | | `STD_IOSTREAM` | Поддержка std::iostream операторов | OFF | | `INTROSPECTION` | Сборка с интроспекцией | OFF | | `TESTS` | Сборка тестов | OFF | | `COVERAGE` | Сборка с информацией о покрытии | OFF | | `PIP_FFTW_F` | Поддержка FFTW для float | ON | | `PIP_FFTW_L` | Поддержка FFTW для long double | ON | | `PIP_FFTW_Q` | Поддержка FFTW для quad double | OFF | ### Опции модулей (PIP_BUILD_*) | Опция | Модуль | |-------|--------| | `PIP_BUILD_CONSOLE` | console | | `PIP_BUILD_CRYPT` | crypt (требует libsodium) | | `PIP_BUILD_COMPRESS` | compress (требует zlib) | | `PIP_BUILD_USB` | usb | | `PIP_BUILD_FFTW` | fftw | | `PIP_BUILD_OPENCL` | opencl | | `PIP_BUILD_IO_UTILS` | io_utils | | `PIP_BUILD_CLIENT_SERVER` | client_server | | `PIP_BUILD_CLOUD` | cloud | | `PIP_BUILD_LUA` | lua | | `PIP_BUILD_HTTP_CLIENT` | http_client (требует libcurl) | | `PIP_BUILD_HTTP_SERVER` | http_server (требует libmicrohttpd) | ### Дополнительные переменные | Переменная | Описание | |------------|----------| | `PIP_BUILD_DEBUG` | Сборка debug версии | | `PIP_FREERTOS` | Режим сборки для FreeRTOS | | `CROSSTOOLS` | Собрать инструменты кросс-сборки под хостовую систему (pip_cmg, pip_rc, ...) | | `LOCAL` | Локальная установка (bin/lib/include) | | `PIP_CONTAINERS_MIN_ALLOC` | Переопределить минимальный размер аллокации контейнеров | | `PIP_CONTAINERS_MAX_POT_ALLOC` | Переопределить максимальный размер дополнительной аллокации (поддерживает X_KiB, X_MiB) | ### Примеры использования ```bash # Базовая сборка с тестами cmake -B build -DTESTS=ON # Сборка с покрытием и ICU cmake -B build -DTESTS=ON -DCOVERAGE=ON -DICU=ON # Отключение отдельных модулей cmake -B build -DPIP_BUILD_CRYPT=OFF -DPIP_BUILD_OPENCL=OFF # Переопределение параметров контейнеров cmake -B build -DPIP_CONTAINERS_MIN_ALLOC=64 # Локальная установка cmake -B build -DLOCAL=ON ``` ## PIP Dependencies ### Встроенные (included in 3rd/) | Библиотека | Назначение | Модуль PIP | |------------|------------|------------| | **PCRE2** | Регулярные выражения | main (internal) | | **BLAKE2** | Хеширование | main (internal) | | **SipHash** | Хеширование | main (internal) | | **Lua** | Lua scripting | lua | | **LuaBridge** | Lua bindings | lua | ### Внешние (системные) | Библиотека | Опция | Модуль PIP | |------------|-------|------------| | **ICU** | `-DICU=ON` | main (string conversion) | | **zlib** | `PIP_BUILD_COMPRESS` | compress | | **libsodium** | `PIP_BUILD_CRYPT` | crypt, io_utils, cloud | | **libusb** | `PIP_BUILD_USB` | usb | | **FFTW3** (+ threads) | `PIP_BUILD_FFTW` | fftw | | **OpenCL** | `PIP_BUILD_OPENCL` | opencl | | **libmicrohttpd** | `PIP_BUILD_HTTP_SERVER` | http_server | | **libcurl** | `PIP_BUILD_HTTP_CLIENT` | http_client | ### Опциональные (тесты/документация) | Инструмент | Назначение | |------------|------------| | **Google Test** | Тестирование (fetched automatically) | | **Doxygen** | Генерация документации | ### Схема зависимостей модулей ``` main (core) ├── PCRE2 (встроен) ├── BLAKE2 (встроен) ├── SipHash (встроен) └── ICU (опционально) console → main compress → zlib crypt → libsodium usb → libusb fftw → FFTW3 opencl → OpenCL io_utils → [crypt, если доступен] client_server → io_utils cloud → io_utils, crypt lua → Lua (встроен), LuaBridge (встроен) http_server → libmicrohttpd http_client → libcurl ```