MLIBC adalah perpustakaan standar C yang sepenuhnya ditampilkan yang dirancang dengan mempertimbangkan portabilitas.
Kami mendukung sejumlah arsitektur (x86-64, AARCH64, RISC-V, IA-32, M68K), dan memberikan lapisan abstraksi syscall yang bersih untuk port sistem operasi baru untuk dihubungkan.
Tidak seperti perpustakaan standar C portabel lainnya seperti Newlib, kami bertujuan untuk paritas fitur dengan glibc/musl, yaitu dukungan pthread penuh dan ekstensi GNU.
MLIBC cukup mampu menjalankan berbagai perangkat lunak, termasuk Xorg, beberapa kompositor Wayland, Mesa, dan browser web seperti WebKitGTK - meskipun beberapa fitur masih hilang.
Sistem operasi individu dapat memilih masuk atau keluar dari fitur tertentu seperti yang diinginkan; Misalnya POSIX API seperti pthread berpagar di belakang opsi POSIX ', API Linux seperti epoll berpagar di belakang opsi Linux, dll.
Server Discord Resmi: https://discord.gg/7wb6ur3
Paket AUR (menyediakan mlibc-gcc ): https://aur.archlinux.org/packages/mlibc
| Direktori | Tujuan |
|---|---|
options/ | (Kurang lebih) Header dan kode OS-independen.options/ dibagi menjadi subdirektori yang dapat diaktifkan atau dinonaktifkan oleh port. |
sysdeps/ | Header dan kode khusus OS.sysdeps/ dibagi menjadi subdirektori per-port. Persis salah satu dari subdirektori tersebut diaktifkan di setiap bangunan. |
abis/ | Header antarmuka khusus OS ("header ABI"). Itu berisi konstanta dan struktur antarmuka OS. Misalnya, nilai -nilai numerik dari SEEK_SET atau O_CREAT tinggal di sini, serta struct seperti struct stat . Header ABI hanya diizinkan mengandung konstanta, struct dan serikat pekerja tetapi tidak ada deklarasi atau logika fungsi.abis/ dibagi menjadi subdirektori per-OS tetapi divisi ini hanya untuk tujuan organisasi. Port masih dapat mencampur header dari berbagai abis/ subdirektori. |
Port ke OS baru dipersilakan. Ke port mlibc ke OS lain, perubahan berikut perlu dilakukan:
sysdeps/ sysdeps/some-new-os/ dan meson.build untuk mengkompilasinya. Mengintegrasikan sysdeps/some-new-os/meson.build ke dalam Toplevel meson.build .abis/some-new-os/ . Tambahkan symlink di sysdeps/some-new-os/include/abi-bits ke header ABI Anda. Lihatlah port yang ada untuk mengetahui header ABI yang diperlukan untuk opsi yang diaktifkan oleh sysdeps/some-new-os/meson.build .sysdeps/some-new-os/ , tambahkan kode untuk mengimplementasikan (subset dari) fungsi dari options/internal/include/mlibc/internal-sysdeps.hpp . Subset mana yang Anda butuhkan tergantung pada opsi yang diaktifkan sysdeps/some-new-os/meson.build . Kami merekomendasikan bahwa port baru tidak dibangun dari master karena kami sesekali membuat perubahan internal yang menyebabkan sysdeps out-of-tree rusak. Alih-alih, kami menyarankan Anda menyematkan rilis tertentu (atau berkomitmen), atau untuk meningkatkan perubahan Anda pada repositori ini sehingga kami dapat membangunnya di CI kami dan dengan demikian setiap kerusakan akan diperbaiki oleh kami secara in-tree.
Opsi meson khusus berikut diterima, di samping opsi bawaan. Opsi di bawah ini adalah Booleans yang default ke false (lihat meson_options.txt ).
headers_only : hanya menginstal header; Jangan membangun libc.so atau ld.sono_headers : jangan menginstal header; hanya membangun libc.so dan ld.sobuild_tests : Bangun suite tes (lihat di bawah).x_option : Aktifkan komponen x fungsionalitas MLIBC. Lihat meson_options.txt untuk daftar lengkap nilai yang mungkin untuk x . Ini dapat digunakan untuk EG menonaktifkan ekstensi POSIX dan GLIBC.linux_kernel_headers : memungkinkan untuk mengarahkan MLIBC ke header Linux yang diinstal. Ini dapat diperoleh dengan mudah, ditempatkan di direktori dan opsi ini diatur ke jalur yang sesuai. Ini diperlukan jika opsi Linux diaktifkan, yaitu ketika opsi Linux tidak dinonaktifkan.debug_allocator : Ganti Allocator Normal dengan Allocator Debug (lihat mlibc/options/internal/generic/allocator.cpp untuk detail implementasi).use_freestnd_hdrs : Gunakan freestnd-c {, xx} -hdrs alih-alih mencari header kompiler. Berguna jika tidak menggunakan kompiler dengan triple target yang benar. Jenis pustaka yang akan dibangun (statis, dibagikan, atau keduanya) dikendalikan oleh opsi default_library meson. Passing -Ddefault_library=static secara efektif menonaktifkan tautan dinamis.
Kami juga mendukung pembangunan dengan -Db_sanitize=undefined untuk menggunakan ubsan di dalam mlibc. Perhatikan bahwa ini tidak memungkinkan UBSAN untuk aplikasi eksternal yang menghubungkan libc.so , tetapi dapat berguna selama pengembangan untuk mendeteksi bug internal (misalnya saat menambahkan sysdeps baru).
Untuk memformat kode Anda sebelum mengirimkan PR, Anda harus menginstal pre-commit . Kemudian lakukan pre-commit install untuk menginstal kait git yang berjalan setiap kali Anda berkomitmen. Atau, Anda dapat melakukan pre-commit run -a untuk memformat semua file secara manual.
Suite tes mlibc dapat dijalankan di bawah host Linux. Untuk melakukan ini, pertama -tama pasang satu set header kernel (seperti yang dijelaskan di sini), lalu jalankan dari root proyek:
meson setup -Dbuild_tests=true -Dlinux_kernel_headers=/path/to/kernel/headers/include build
Ini akan membuat direktori build . Kemudian, cd build dan menjalankan tes (menunjukkan output) dengan:
meson test -v