นี่เป็นงานอดิเรกอื่น ๆ แต่อันนี้ไม่ได้พยายามที่จะเป็นโคลน Unix อื่น อันที่จริงฉันไม่รู้จริงๆว่ามันกำลังพยายามที่จะเป็นอย่างไร มันแค่…คือ
คุณสมบัติปัจจุบัน ได้แก่ :
เราใช้ cmake เพื่อสร้างทุกอย่าง CMakeLists.txt เดียวในไดเรกทอรีนี้สามารถสร้างเคอร์เนลส่วนประกอบผู้ใช้พื้นที่ทั้งหมดและเครื่องมือโดยอัตโนมัติ คุณจะต้องเลือกหนึ่งในเครื่องมือที่จะใช้และส่งผ่านไปยัง cmake ในธง CMAKE_TOOLCHAIN_FILE
build_toolchain.sh ไฟล์ toolchain.diff มีแพตช์ที่ควรใช้กับแหล่ง LLVM ที่เช็คเอาท์เพื่อสร้างเครื่องมือที่จำเป็นในการสร้างเคอร์เนลและผู้ใช้
นอกจาก CMake และเครื่องมือ LLVM ที่กำหนดเองแล้วเครื่องโฮสต์ต้องมีไลบรารี Cap'n Proto และเครื่องมือที่ติดตั้งเพื่อให้ไฟล์โปรโตคอลสำหรับบริการ RPC สามารถสร้างได้อย่างถูกต้องหากมีการอัปเดต อย่างไรก็ตามแหล่งข้อมูลที่สร้างขึ้นในปัจจุบันรวมอยู่ในที่เก็บ
คุณสามารถใช้สคริปต์ build_toolchain.sh เพื่อสร้าง toolchain เพื่อใช้สำหรับการรวบรวมระบบ สิ่งนี้ตั้งค่าไลบรารีส่วนใหญ่ที่จำเป็น: คุณจะต้องสร้างห้องสมุดรองรับบางส่วน
ก่อนที่จะรวบรวมไลบรารีด้านล่างคุณอาจต้องรวบรวมและติดตั้งไลบรารี C ลงใน Sysroot; ห้องสมุดเหล่านี้คาดว่าจะพบส่วนหัวบางอย่างที่นั่น แทนที่สตริงเป้าหมายคอมไพเลอร์ตามความจำเป็นสำหรับเป้าหมาย/แพลตฟอร์มปัจจุบัน
สิ่งนี้มีฟังก์ชั่นผู้ช่วยและสิ่งอื่น ๆ ที่คอมไพเลอร์จะพึ่งพาการอยู่ในห้องสมุดที่ไม่ได้ใช้งานทั้งหมด โดยค่าเริ่มต้นสคริปต์ดูเหมือนจะไม่รวบรวม Compiler-RT สำหรับแพลตฟอร์มของเรา
ในการสร้างให้ดำเนินการต่อไปนี้จากภายในโฟลเดอร์แหล่งข้อมูลของ Toolchain:
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
เราสามารถเปิดใช้งาน LIBUNWIND_ENABLE_THREADS เมื่อเรามีเลเยอร์ความเข้ากันได้ของ pthreads
ยังไม่มีเอกสารมากมายเกี่ยวกับโครงการในตอนนี้
โพสต์บล็อกบางรายการที่อธิบายถึงการออกแบบระบบปฏิบัติการและแรงจูงใจที่นี่