MLIBC เป็นห้องสมุดมาตรฐาน C ที่โดดเด่นอย่างเต็มที่ซึ่งออกแบบโดยคำนึงถึงความสามารถในการพกพา
เราสนับสนุนสถาปัตยกรรมจำนวนมาก (x86-64, Aarch64, RISC-V, IA-32, M68K) และให้เลเยอร์ Abstraction Syscall ที่สะอาดสำหรับพอร์ตระบบปฏิบัติการใหม่ที่จะเสียบเข้า
ซึ่งแตกต่างจากไลบรารีมาตรฐาน C แบบพกพาอื่น ๆ เช่น newlib เราตั้งเป้าหมายที่จะมีความเท่าเทียมกันกับคุณสมบัติด้วย Glibc/Musl เช่นการสนับสนุน Pthread เต็มรูปแบบและส่วนขยาย GNU
MLIBC มีความสามารถเพียงพอที่จะเรียกใช้ซอฟต์แวร์ที่หลากหลายรวมถึง Xorg, Compositors Wayland หลายตัว, Mesa และเว็บเบราว์เซอร์เช่น WebKitgtk - แม้ว่าคุณสมบัติบางอย่างจะหายไป
ระบบปฏิบัติการแต่ละระบบสามารถเลือกเข้าหรือออกจากคุณสมบัติบางอย่างตามที่ต้องการ ตัวอย่างเช่น posix apis เช่น pthread มี gated ที่อยู่ด้านหลังตัวเลือก posix 'ตัวเลือก', linux apis เช่น epoll มี gated ที่อยู่ด้านหลังตัวเลือก Linux ฯลฯ
Discord Server อย่างเป็นทางการ: https://discord.gg/7wb6ur3
แพ็คเกจ AUR (ให้ mlibc-gcc ): https://aur.archlinux.org/packages/mlibc
| ไดเรกทอรี | วัตถุประสงค์ |
|---|---|
options/ | (มากหรือน้อย) ส่วนหัวและรหัสที่ไม่ขึ้นกับระบบปฏิบัติการoptions/ แบ่งออกเป็นไดเรกทอรีย่อยที่สามารถเปิดใช้งานหรือปิดใช้งานได้โดยพอร์ต |
sysdeps/ | ส่วนหัวและรหัสเฉพาะของระบบปฏิบัติการsysdeps/ แบ่งออกเป็นไดเรกทอรีย่อยต่อพอร์ต หนึ่งในไดเรกทอรีย่อยเหล่านั้นเปิดใช้งานในแต่ละการสร้าง |
abis/ | ส่วนหัวอินเตอร์เฟสเฉพาะระบบปฏิบัติการ ("ส่วนหัว ABI") ที่มีค่าคงที่และโครงสร้างของอินเทอร์เฟซ OS ตัวอย่างเช่นค่าตัวเลขของ SEEK_SET หรือ O_CREAT อาศัยอยู่ที่นี่รวมถึงโครงสร้างเช่น struct stat ส่วนหัวของ ABI ได้ รับอนุญาตให้มีค่าคงที่โครงสร้างและสหภาพ แต่ ไม่มี การประกาศฟังก์ชั่นหรือตรรกะabis/ ถูกแบ่งออกเป็นไดเรกทอรีย่อย Per-OS แต่แผนกนี้มีวัตถุประสงค์เพื่อองค์กรเท่านั้น พอร์ตยังสามารถผสมส่วนหัวจาก abis/ Subdirectories ที่แตกต่างกัน |
ยินดีต้อนรับพอร์ตไปยังระบบปฏิบัติการใหม่ ในการพอร์ต MLIBC ไปยังระบบปฏิบัติการอื่นจำเป็นต้องมีการเปลี่ยนแปลงต่อไปนี้:
sysdeps/ ไดเรกทอรี sysdeps/some-new-os/ และ meson.build เพื่อรวบรวมมัน รวม sysdeps/some-new-os/meson.build เข้ากับ toplevel meson.buildabis/some-new-os/ เพิ่ม symlinks ใน sysdeps/some-new-os/include/abi-bits ไปยังส่วนหัว ABI ของคุณ ดูพอร์ตที่มีอยู่เพื่อหาส่วนหัวของ ABI ที่จำเป็นสำหรับตัวเลือกที่เปิดใช้งานโดย sysdeps/some-new-os/meson.buildsysdeps/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 แทนที่จะมองหาส่วนหัวคอมไพเลอร์ มีประโยชน์หากไม่ได้ใช้คอมไพเลอร์ที่มีเป้าหมายสามเป้าหมายที่ถูกต้อง ประเภทของไลบรารีที่จะสร้าง (แบบคงที่แชร์หรือทั้งสองอย่าง) ถูกควบคุมโดยตัวเลือก default_library ของ Meson ผ่าน -Ddefault_library=static ใช้งานตัวเชื่อมโยงแบบไดนามิกได้อย่างมีประสิทธิภาพ
นอกจากนี้เรายังสนับสนุนการสร้างด้วย -Db_sanitize=undefined ให้ใช้ UBSAN ภายใน MLIBC โปรดทราบว่าสิ่งนี้ไม่ได้เปิดใช้งาน UBSAN สำหรับแอปพลิเคชันภายนอกที่เชื่อมโยงกับ libc.so แต่จะมีประโยชน์ในระหว่างการพัฒนาเพื่อตรวจจับข้อบกพร่องภายใน (เช่นเมื่อเพิ่ม sysdeps ใหม่)
ในการจัดรูปแบบรหัสของคุณก่อนที่จะส่ง 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