9588b48105ba52c469d712d86412749c089eebd7
Reviewed-on: #194 Co-authored-by: andrey.bychkov <andrey@signalmodelling.ru> Co-committed-by: andrey.bychkov <andrey@signalmodelling.ru>
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(<out_var> 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 ${<out_var>} to your target.
pip_resources(<out_var> file)
Generate C++ files for resource file. You should add ${<out_var>} to your target.
Documentation
Основные опции сборки
Стандартные опции (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) |
Примеры использования
# Базовая сборка с тестами
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
Description
Languages
C
51.4%
C++
46.6%
CMake
1.3%
M4
0.6%