MLIBC هي مكتبة قياسية مميزة بالكامل مصممة مع وضع قابلية للنقل في الاعتبار.
نحن ندعم عددًا من البنية (x86-64 ، AARCH64 ، RISC-V ، IA-32 ، M68K) ، ونوفر طبقة تجريد نظيفة لمنافذ نظام التشغيل الجديدة لتوصيلها.
على عكس المكتبات القياسية المحمولة الأخرى مثل Newlib ، فإننا نهدف إلى تكافؤ الميزات مع GLIBC/MUSL ، أي دعم PTHREAD الكامل والتمديدات GNU.
MLIBC قادرة بما يكفي لتشغيل مجموعة من البرامج ، بما في ذلك XORG ، العديد من الملحنين في Wayland ، MESA ، ومتصفحات الويب مثل WebKitgTK - على الرغم من أن بعض الميزات لا تزال مفقودة.
يمكن أن تختار أنظمة التشغيل الفردية أو خارجها على بعض الميزات حسب الرغبة ؛ على سبيل المثال ، يتم وضع واجهات برمجة تطبيقات POSIX مثل pthread خلف خيار "Posix" ، و APIs 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/ Diddreacties. |
الموانئ إلى أنظمة جديدة مرحب بها. إلى منفذ MLIBC إلى نظام تشغيل آخر ، يجب إجراء التغييرات التالية:
sysdeps/ subsdirectory sysdeps/some-new-os/ و meson.build لتجميعها. دمج sysdeps/some-new-os/meson.build في toplevel meson.build .abis/some-new-os/ . أضف symlinks في 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 المخصصة التالية ، بالإضافة إلى الخيارات المدمجة. الخيارات أدناه هي المنطقية التي تتخلف عن خطأ (انظر 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} -hdrs بدلاً من البحث عن رؤوس البروتوكيل مفيد إذا لم يكن يستخدم برنامج التحويل البرمجي مع الهدف الصحيح الثلاثي. يتم التحكم في نوع المكتبة المراد تصميمها (ثابت ، مشترك ، أو كليهما) بواسطة خيار Meson default_library . تمرير -Ddefault_library=static يعطل بشكل فعال الرابط الديناميكي.
نحن ندعم أيضًا المبنى باستخدام -Db_sanitize=undefined لاستخدام UBSAN داخل MLIBC. لاحظ أن هذا لا يمكّن UBSAN من التطبيقات الخارجية التي تربط مع libc.so ، ولكن قد يكون من المفيد أثناء التطوير اكتشاف الأخطاء الداخلية (على سبيل المثال عند إضافة SYSDEPs جديدة).
لتنسيق الرمز الخاص بك قبل إرسال العلاقات العامة ، يجب عليك تثبيت pre-commit . ثم قم pre-commit install لتثبيت خطاف Git الذي يتم تشغيله في كل مرة تلتزم بها. بدلاً من ذلك ، يمكنك القيام pre-commit run -a -لتنسيق جميع الملفات يدويًا.
يمكن تشغيل جناح اختبار mlibc تحت مضيف Linux. للقيام بذلك ، قم أولاً بتثبيت مجموعة من رؤوس kernel (كما هو موضح هنا) ، ثم قم بالتشغيل من جذر المشروع:
meson setup -Dbuild_tests=true -Dlinux_kernel_headers=/path/to/kernel/headers/include build
هذا سيؤدي إلى إنشاء دليل build . ثم ، cd build وتشغيل الاختبارات (التي تظهر الإخراج) مع:
meson test -v