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