Dies ist ein weiteres Hobby -Betriebssystem, aber dieser versucht nicht, ein weiterer Unix -Klon zu sein. Tatsächlich habe ich wirklich keine Ahnung, was es versucht zu sein. Es ist einfach irgendwie ... ist.
Aktuelle Funktionen umfassen:
Wir verwenden CMake, um alles zu bauen. Die einzelne CMakeLists.txt in diesem Verzeichnis kann den Kernel, alle Benutzerspace -Komponenten und Tools automatisch erstellen. Sie müssen einen der zu verwendenden Toolchains auswählen und an cmake in der Flag CMAKE_TOOLCHAIN_FILE weitergeben.
build_toolchain.sh . Die Datei toolchain.diff enthält einen Patch, der gegen die geprüfte LLVM-Quelle angewendet werden sollte, um die Toolchain zu erstellen, die zum Erstellen des Kernels und des Userlands erforderlich ist.
Neben CMake und dem benutzerdefinierten LLVM -Toolchain muss der Host -Computer die Cap'n -Proto -Bibliothek und die Tools so installieren lassen, dass die Protokolldateien für RPC -Dienste korrekt erstellt werden können, wenn sie aktualisiert werden. Die aktuellen Versionen generierter Quellen sind jedoch im Repository enthalten.
Sie können das Skript build_toolchain.sh verwenden, um eine Toolchain zu erstellen, um das System zu kompilieren. Dies legt die meisten erforderlichen Bibliotheken fest: Sie müssen auch einige Nebenbibliotheken erstellen.
Bevor Sie die folgenden Bibliotheken zusammenstellen, müssen Sie wahrscheinlich die C -Bibliothek in die Systeme zusammenstellen und installieren. Diese Bibliotheken erwarten dort bestimmte Header. Ersetzen Sie die Compiler -Zielzeichenfolge nach Bedarf für das aktuelle Ziel/die aktuelle Plattform.
Dies enthält Helferfunktionen und andere Dinge, die der Compiler darauf angewiesen ist, in allen nicht freeststehenden Bibliotheken präsent zu sein. Standardmäßig scheint das Skript den Compiler-RT für unsere Plattform nicht zu kompilieren.
Um es zu erstellen, führen Sie Folgendes aus dem Quellenordner des Toolchains aus:
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 bietet die tragbare Schicht auf niedrigerer Ebene für die C ++ - Laufzeitbibliothek. Baue es so so:
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
Nach dem Bau müssen Sie die libcxx, die tatsächliche C ++ -Rim -Laufzeit, erstellen:
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
Die meisten auf OFF eingestellten Flags werden schließlich entfernt, wenn die C -Bibliotheken und das System selbst die erforderlichen Merkmale implementiert.
Erforderlich für Stackbacktraces und C ++ -Aushilfeunterstützung.
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
Wir können LIBUNWIND_ENABLE_THREADS aktivieren, wenn wir eine PThreads -Kompatibilitätsschicht haben.
Es gibt noch keine Menge Dokumentation über das Projekt.
Einige Blog -Beiträge, die das OS -Design und die Motivationen beschreiben, finden Sie hier.