kush os
1.0.0
這是另一個愛好操作系統,但這並沒有試圖成為另一個Unix克隆。實際上,我真的不知道要成為什麼。只是……是。
當前功能包括:
我們使用CMAKE來構建所有內容。此目錄中的單個CMakeLists.txt可以自動構建內核,所有用戶空間組件和工具。您將必須選擇其中一個用於使用的工具鏈,然後將其傳遞給CMAKE_TOOLCHAIN_FILE標誌中。
build_toolchain.sh腳本創建。 toolchain.diff文件包含一個補丁程序,該補丁應針對簽署的LLVM源,以構建構建內核和用戶界所需的工具鏈。
除了CMAKE和自定義LLVM工具鏈外,主機還需要安裝CAP'N Proto庫和工具,以便可以在更新時正確構建RPC服務的協議文件。但是,當前生成的來源的版本包含在存儲庫中。
您可以使用build_toolchain.sh腳本來構建用於編譯系統的工具鏈。這設置了所需的大多數庫:您還必須構建一些支持庫。
在編譯下面的庫之前,您可能需要編譯並將C庫安裝到Sysroot中;這些圖書館希望在那裡找到某些標題。根據當前目標/平台的需要,替換編譯器目標字符串。
這包含輔助功能和其他編譯器將依靠在所有非籌集庫中存在的內容。默認情況下,該腳本似乎沒有為我們的平台編譯編譯器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
構建後,您必須構建libcxx,即實際的C ++運行時:
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設計和動機。