MLIBC是一个完整的C标准库,考虑到可移植性。
我们支持许多架构(X86-64,AARCH64,RISC-V,IA-32,M68K),并提供一个干净的SYSCALL抽象层,以供新的操作系统端口插入。
与其他便携式C标准库(如Newlib)不同,我们的目标是与GLIBC/MUSL的特色奇偶校验,即完整的Pthread支持和GNU扩展。
MLIBC能够运行一系列软件,包括Xorg,Wayland Compesitors,Mesa和WebKitGTK等网络浏览器 - 尽管仍然缺少某些功能。
单个操作系统可以根据需要选择或超出某些功能;例如,像pthread这样的POSIX API在POSIX“选项”后面门控,Linux API等Linux epoll在Linux选项之后的后面是门控,等等。
官方Discord服务器: https://discord.gg/7wb6ur3
AUR软件包(提供mlibc-gcc ):https://aur.archlinux.org/packages/mlibc
| 目录 | 目的 |
|---|---|
options/ | (或多或少)独立于OS的标题和代码。options/分为可以通过端口启用或禁用的子目录。 |
sysdeps/ | OS特定的标题和代码。sysdeps/分为每个端口子目录。每个构建中都启用了这些子目录之一。 |
abis/ | OS特定的接口标头(“ ABI标头”)。这些包含OS接口的常数和结构。例如, SEEK_SET或O_CREAT的数值在这里生活,以及诸如struct stat之类的结构。 ABI标题仅允许包含常数,结构和工会,但没有功能声明或逻辑。abis/分为每个子目录,但该分区仅用于组织目的。端口仍然可以混合来自不同abis/子目录的标题。 |
欢迎新OS的端口。要将MLIBC移至另一个OS,需要进行以下更改:
sysdeps/ subdirectory sysdeps/some-new-os/和meson.build来编译它。将sysdeps/some-new-os/meson.build集成到toplevel meson.build中。abis/some-new-os/中创建ABI标题。在sysdeps/some-new-os/include/abi-bits中添加符号链接到您的ABI标题。查看现有端口,以找出sysdeps/some-new-os/meson.build启用的选项所需的ABI标头。sysdeps/some-new-os/中,添加代码以实现(一个子集) options/internal/include/mlibc/internal-sysdeps.hpp的函数。您需要哪个子集取决于sysdeps/some-new-os/meson.build启用的选项。我们建议新的端口不会从master构建,因为我们偶尔会进行内部更改,从而导致树外系统破裂。取而代之的是,我们建议您固定特定的版本(或提交),或在此存储库上进行更改,以便我们可以在我们的CI上构建它们,因此,我们的树木将确定任何断裂。
除内置选项外,还接受了以下自定义介子选项。下面的选项是默认为false的布尔值(请参见meson_options.txt )。
headers_only :仅安装标题;不要构建libc.so或ld.sono_headers :不要安装标题;仅构建libc.so和ld.sobuild_tests :构建测试套件(见下文)。x_option :启用MLIBC功能的x组件。有关x的可能值的完整列表,请参见meson_options.txt 。这可以用于禁用POSIX和GLIBC扩展。linux_kernel_headers :允许将MLIBC引向安装的Linux标头。可以轻松地将其放置在目录中,并将此选项设置为相应的路径。如果启用Linux选项,则需要这是必需的,即当未禁用Linux选项时。debug_allocator :用调试分配器替换普通分配器(有关实现详细信息,请参见mlibc/options/internal/generic/allocator.cpp )。use_freestnd_hdrs :使用freestnd-c {,xx} -hdrs,而不是寻找编译器标题。如果不使用具有正确目标三倍的编译器,则有用。要构建的库(静态,共享或两者)的库类型由Meson的default_library选项控制。通过-Ddefault_library=static可以有效地禁用动态链接器。
我们还支持-Db_sanitize=undefined以在MLIBC内使用UBSAN的构建。请注意,这并不能启用与libc.so链接的外部应用程序的瑞银,但是在开发过程中检测内部错误很有用(例如,添加新的sysdeps时)。
要在提交PR之前格式化您的代码,您应该安装pre-commit 。然后,进行pre-commit install以安装每次提交时运行的GIT挂钩。另外,您可以进行pre-commit run -a以手动格式化所有文件。
mlibc测试套件可以在Linux主机下运行。为此,首先安装一组内核标头(如下所述),然后从项目root运行:
meson setup -Dbuild_tests=true -Dlinux_kernel_headers=/path/to/kernel/headers/include build
这将创建一个build目录。然后, cd build并运行测试(显示输出):
meson test -v