MLIBC - это полностью изготовленная стандартная библиотека C, разработанная с учетом портативности.
Мы поддерживаем ряд архитектур (x86-64, AARCH64, RISC-V, IA-32, M68K) и предоставляем чистый слой абстракции Syscall для новых портов операционной системы для подключения.
В отличие от других портативных стандартных библиотек C, таких как Newlib, мы стремимся к паритету функции с Glibc/Musl, т.е. полная поддержка Pthread и расширения GNU.
MLIBC достаточно способен запускать ряд программ, включая Xorg, несколько композиторов Wayland, MESA и веб -браузеры, такие как WebKitGTK, хотя некоторые функции все еще отсутствуют.
Индивидуальные операционные системы могут выбирать или выходить из определенных функций по желанию; Например, APIS POSIX, такие как pthread , закрыты за опцией POSIX ', API Linux, такие как epoll закрыты за опцией Linux и т. Д.
Официальный сервер Discord: https://discord.gg/7wb6ur3
Пакет AUR (предоставляет mlibc-gcc ): https://aur.archlinux.org/packages/mlibc
| Каталог | Цель |
|---|---|
options/ | (Более или менее) ОС-независимые заголовки и код.options/ разделены на подкатарии, которые могут быть включены или отключены с помощью портов. |
sysdeps/ | ОС-специфические заголовки и код.sysdeps/ разделены на суб-портации для каждого порта. Точно один из этих подкаталогов включен в каждой сборке. |
abis/ | ОС-специфические заголовки интерфейса («Заголовки ABI»). Они содержат константы и структуры интерфейса ОС. Например, числовые значения SEEK_SET или O_CREAT живут здесь, а также структуры, такие как struct stat . Заголовкам ABI разрешено только содержать константы, структуры и профсоюзы, но не объявляют функции или логику.abis/ делится на подкатарии для каждого, но это разделение предназначено только для организационных целей. Порты все еще могут смешивать заголовки из разных abis/ Sub -Supercorections. |
Порты до нового OSE приветствуются. Для порта MLIBC в другую ОС необходимо внести следующие изменения:
sysdeps/ subercectory sysdeps/some-new-os/ и meson.build для его составления. Интегрировать sysdeps/some-new-os/meson.build в Toplevel meson.build .abis/some-new-os/ . Добавьте символики в sysdeps/some-new-os/include/abi-bits в ваши заголовки ABI. Посмотрите на существующие порты, чтобы выяснить заголовки ABI, необходимые для опций, включенных sysdeps/some-new-os/meson.build .sysdeps/some-new-os/ , добавьте код в реализацию (подмножество) функций из options/internal/include/mlibc/internal-sysdeps.hpp . Какое подмножество вам нужно зависит от опций, которые позволяют sysdeps/some-new-os/meson.build . Мы рекомендуем, чтобы новые порты не строились из master , поскольку мы иногда вносим внутренние изменения, которые вызывают нарушение SysDeps вне дерева. Вместо этого мы рекомендуем вам прикрепить конкретный релиз (или совершать) или воскресить ваши изменения в этот репозиторий, чтобы мы могли построить их на нашем CI, и, таким образом, любые поломки будут исправлены нами в три.
Следующие пользовательские параметры Meson принимаются, в дополнение к встроенным параметрам. Параметры ниже являются логическими, которые по умолчанию в False (см. meson_options.txt ).
headers_only : только установить заголовки; Не строите libc.so или ld.sono_headers : не устанавливайте заголовки; Только строить libc.so и ld.sobuild_tests : Постройте тестовый набор (см. Ниже).x_option : включить x компонент функциональности MLIBC. См. meson_options.txt для полного списка возможных значений для x . Это может быть использовано, например, отключить расширения POSIX и GLIBC.linux_kernel_headers : позволяет направлять MLIBC на установленные заголовки Linux. Их можно легко получить, помещать в каталог, и эта опция установлена на соответствующий путь. Это требуется, если опция Linux включена, то есть, когда опция Linux не отключена.debug_allocator : замените обычный распределитель на распределитель отладки (см. mlibc/options/internal/generic/allocator.cpp для деталей реализации).use_freestnd_hdrs : используйте Freestnd-C {, xx} -ddrs вместо поиска заголовков компилятора. Полезно, если не использовать компилятор с правильной целевой тройной тройной. Тип библиотеки, которая будет построена (статическая, общая или оба) контролируется опцией Meson default_library . Прохождение -Ddefault_library=static Эффективно отключает динамический линкер.
Мы также поддерживаем здание с -Db_sanitize=undefined , чтобы использовать UBSAN внутри MLIBC. Обратите внимание, что это не позволяет UBSAN для внешних приложений, которые связаны с libc.so , но во время разработки он может быть полезен для обнаружения внутренних ошибок (например, при добавлении новых SYSDEP).
Чтобы форматировать ваш код перед отправкой PR, вы должны установить pre-commit . Затем сделайте pre-commit install , чтобы установить Git Hook, который работает каждый раз, когда вы совершаете. В качестве альтернативы, вы можете выполнить pre-commit run -a , чтобы вручную форматировать все файлы.
Набор тестов mlibc может быть запущен под хостом Linux. Для этого сначала установите набор заголовков ядра (как описано здесь), затем запустите из корневого проекта:
meson setup -Dbuild_tests=true -Dlinux_kernel_headers=/path/to/kernel/headers/include build
Это создаст каталог build . Затем cd build и запустите тесты (показывая вывод) с:
meson test -v