이것은 또 다른 취미 OS이지만, 이것은 또 다른 유닉스 클론이 되려고하지 않습니다. 사실, 나는 그것이 무엇을하려고하는지 전혀 모른다. 그것은 단지 일종의…입니다.
현재 기능은 다음과 같습니다.
우리는 cmake를 사용하여 모든 것을 구축합니다. 이 디렉토리의 단일 CMakeLists.txt 는 커널, 모든 사용자 공간 구성 요소 및 도구를 자동으로 빌드 할 수 있습니다. 사용하려면 툴체인 중 하나를 선택하고 CMAKE_TOOLCHAIN_FILE 플래그에서 CMAKE로 전달해야합니다.
build_toolchain.sh 스크립트에 의해 생성되었습니다. toolchain.diff 파일에는 확인 된 LLVM 소스에 적용 해야하는 패치가 포함되어있어 커널 및 사용자 랜드를 빌드하는 데 필요한 도구 체인을 작성합니다.
CMAKE 및 CUSTIM LLVM 툴체인 외에도 호스트 머신에는 CAP'N 프로토 라이브러리와 도구가 설치되어있어 RPC 서비스 용 프로토콜 파일이 업데이트되면 올바르게 구축 할 수 있도록 도구를 설치해야합니다. 그러나 현재 생성 된 소스의 현재 버전은 저장소에 포함됩니다.
build_toolchain.sh 스크립트를 사용하여 시스템 컴파일에 사용할 도구 체인을 빌드 할 수 있습니다. 이것은 대부분의 필요한 라이브러리를 설정합니다. 또한 몇 가지 지원 라이브러리를 구축해야합니다.
아래 라이브러리를 컴파일하기 전에 C 라이브러리를 Sysroot에 컴파일하고 설치해야 할 것입니다. 이 라이브러리는 특정 헤더를 찾을 것으로 예상합니다. 현재 대상/플랫폼에 필요한 경우 컴파일러 대상 문자열을 교체하십시오.
여기에는 헬퍼 기능 및 다른 물건이 포함되어 있습니다. 컴파일러가 모든 비정부 라이브러리에 존재하는 데 의존 할 것입니다. 기본적으로 스크립트는 플랫폼의 Compiler-RT를 컴파일하지 않는 것 같습니다.
이를 빌드하려면 툴 체인 소스 폴더 내부에서 다음을 실행하십시오.
cd llvm-project
mkdir build-compiler-rt
cd build-compiler-rt
cmake ../compiler-rt -DLLVM_CONFIG_PATH=../../../llvm/bin/llvm-config -DCMAKE_C_COMPILER_TARGET="i386-pc-kush-elf" -DCMAKE_ASM_COMPILER_TARGET="i386-pc-kush-elf" -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON -DCMAKE_TOOLCHAIN_FILE=~/kush/cmake/toolchain-i386-clang.cmake -Wno-dev -DCMAKE_SIZEOF_VOID_P=4 -DCOMPILER_RT_BAREMETAL_BUILD=ON
make -j40
mkdir -p ../../../llvm/lib/clang/12.0.0/lib/kush
cp lib/i386-kush/libclang_rt.builtins-i386.a ../../../llvm/lib/clang/12.0.0/lib/kush
Libcxxabi는 C ++ 런타임 라이브러리의 하위 레벨 휴대용 레이어를 제공합니다. 그렇게 빌드하십시오.
cd llvm-project
mkdir build-libcxxabi
cd build-libcxxabi
cmake ../libcxxabi -DCMAKE_TOOLCHAIN_FILE=~/kush/cmake/toolchain-i386-clang.cmake -DLIBCXX_TARGET_TRIPLE="i386-pc-kush-elf" -DLIBCXXABI_INSTALL_PREFIX=/Users/tristan/kush/sysroot/ -Wno-dev -DLIBCXXABI_ENABLE_THREADS=OFF
make install -j40
일단 제작되면 실제 C ++ 런타임 인 Libcxx를 구축해야합니다.
cd llvm-project
mkdir build-libcxx
cd build-libcxx
cmake ../libcxx -DCMAKE_TOOLCHAIN_FILE=~/kush/cmake/toolchain-i386-clang.cmake -DLLVM_CONFIG_PATH=../../../llvm/bin/llvm-config -DLIBCXX_TARGET_TRIPLE="i386-pc-kush-elf" -DLIBCXX_INSTALL_PREFIX=/Users/tristan/kush/sysroot/ -DLIBCXX_INSTALL_HEADER_PREFIX=/Users/tristan/kush/sysroot/usr/ -DLIBCXX_CXX_ABI=libcxxabi -DLIBCXX_ENABLE_STDIN=OFF -DLIBCXX_ENABLE_RANDOM_DEVICE=OFF -DLIBCXX_ENABLE_FILESYSTEM=OFF -DLIBCXX_ENABLE_ABI_LINKER_SCRIPT=OFF -D_LIBCPP_HAS_THREAD_API_EXTERNAL=ON
make install -j40
C 라이브러리와 시스템 자체가 필수 기능을 구현할 때 대부분의 깃발이 제거됩니다.
스택 배치 및 C ++ 예외 지원에 필요합니다.
cd llvm-project
mkdir build-libunwind
cd build-libunwind
cmake ../libunwind -DCMAKE_TOOLCHAIN_FILE=~/kush/cmake/toolchain-i386-clang.cmake -DLLVM_CONFIG_PATH=../../../llvm/bin/llvm-config -DLIBUNWIND_TARGET_TRIPLE="i386-pc-kush-elf" -DLIBUNWIND_INSTALL_PREFIX=/Users/tristan/kush/sysroot/ -DLIBUNWIND_USE_COMPILER_RT=ON -DLIBUNWIND_ENABLE_THREADS=OFF
make install -j40
pthreads 호환성 레이어가있을 때 LIBUNWIND_ENABLE_THREADS 활성화 할 수 있습니다.
아직 프로젝트에 대한 문서가 많지 않습니다.
OS 디자인 및 동기를 설명하는 일부 블로그 게시물은 여기에서 제공됩니다.