MLIBC는 이식성을 염두에두고 설계된 완전히 특징 C 표준 라이브러리입니다.
우리는 다수의 아키텍처 (x86-64, Aarch64, RISC-V, IA-32, M68K)를 지원하고 새로운 운영 체제 포트가 연결할 수있는 깨끗한 SyScall 추상화 레이어를 제공합니다.
Newlib와 같은 다른 휴대용 C 표준 라이브러리와 달리, 우리는 Glibc/Musl, 즉 전체 pthread 지원 및 GNU 확장 기능을 갖춘 특징 패리티를 목표로합니다.
MLIBC는 Xorg, 여러 Wayland Compositors, MESA 및 WebKitgtk와 같은 웹 브라우저를 포함한 다양한 소프트웨어를 실행할 수 있습니다.
개별 운영 체제는 원하는대로 특정 기능을 선택할 수 있습니다. 예를 들어 pthread 와 같은 posix apis는 posix '옵션'뒤에 게이트되며, epoll 같은 Linux API는 Linux 옵션 등에 게이트됩니다.
공식 불화 서버 : 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/ 는 PER-OS 하위 디렉토리로 나뉩니다. 그러나이 부서는 조직의 목적에만 해당됩니다. 포트는 여전히 다른 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 헤더를 만듭니다. ABI 헤더에 sysdeps/some-new-os/include/abi-bits 에 Symlinks를 추가하십시오. 기존 포트를보고 sysdeps/some-new-os/meson.build 가 활성화 한 옵션에 필요한 ABI 헤더를 알아냅니다.sysdeps/some-new-os/ 에서 options/internal/include/mlibc/internal-sysdeps.hpp 의 함수를 구현할 코드를 추가하십시오 (서브 세트). 필요한 서브 세트는 sysdeps/some-new-os/meson.build 활성화하는 옵션에 따라 다릅니다. 우리는 때때로 트리 밖의 sysdeps를 깨뜨리는 내부 변경을 할 때 새 포트가 master 로부터 구축되지 않는 것이 좋습니다. 대신 우리는 특정 릴리스 (또는 커밋)를 고정 하거나이 저장소의 변경 사항을 상류하여 CI에 구축 할 수 있도록하는 것이 좋습니다.
내장 옵션 외에도 다음과 같은 맞춤형 메손 옵션이 허용됩니다. 아래 옵션은 부울으로 거짓으로 거짓으로옵니다 ( meson_options.txt 참조).
headers_only : 헤더 만 설치합니다. libc.so 또는 ld.so 구축하지 마십시오.no_headers : 헤더를 설치하지 마십시오. libc.so 및 ld.so 만 구축하십시오.build_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 동적 링커를 효과적으로 비활성화합니다.
또한 MLIBC 내부에서 UBSAN을 사용하기 위해 -Db_sanitize=undefined 건물도 지원합니다. 이를 통해 libc.so 와 연결되는 외부 응용 프로그램에 대한 UBSAN은 가능하지 않지만 내부 버그 (예 : 새 SYSDEP를 추가 할 때)를 감지하는 데 유용 할 수 있습니다.
PR을 제출하기 전에 코드를 작성하려면 pre-commit 설치해야합니다. 그런 다음 pre-commit install 수행하여 커밋 할 때마다 실행되는 GIT 후크를 설치하십시오. 또는 모든 파일을 수동으로 포맷하려면 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