هذا هو نظام هواية آخر ، لكن هذا لا يحاول أن يكون استنساخ UNIX آخر. في الواقع ، ليس لدي أي فكرة عما تحاول أن يكون. انها مجرد نوع من ... هو.
تشمل الميزات الحالية:
نستخدم Cmake لبناء كل شيء. يمكن لـ CMakeLists.txt في هذا الدليل إنشاء kernel ، وجميع مكونات مساحة المستخدمين ، والأدوات تلقائيًا. سيتعين عليك اختيار أحد أدوات الأدوات لاستخدامه وتمريره إلى Cmake في علامة CMAKE_TOOLCHAIN_FILE .
build_toolchain.sh . يحتوي ملف toolchain.diff على تصحيح يجب تطبيقه مقابل مصدر LLVM الذي تم فحصه لإنشاء مخطط الأدوات المطلوب لبناء kernel و userland.
إلى جانب Cmake و Custom LLVM Toolchain ، يحتاج جهاز المضيف إلى تثبيت مكتبة 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
ستتم إزالة معظم الأعلام التي تم تعيينها على OFF ، عندما يقوم مكتب 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.
ليس هناك الكثير من الوثائق حول المشروع حتى الآن.
بعض منشورات المدونة التي تصف تصميم نظام التشغيل ودوافعها متوفرة هنا.