Il s'agit d'un autre hobby OS, mais celui-ci n'essaie pas d'être un autre clone Unix. En fait, je n'ai vraiment aucune idée de ce qu'il essaie d'être. C'est juste un peu… l'est.
Les fonctionnalités actuelles comprennent:
Nous utilisons Cmake pour tout construire. Le seul CMakeLists.txt dans ce répertoire peut construire le noyau, tous les composants de l'espace utilisateur et les outils automatiquement. Vous devrez sélectionner l'une des chaînes d'outils à utiliser et la transmettre à Cmake dans le drapeau CMAKE_TOOLCHAIN_FILE .
build_toolchain.sh . Le fichier toolchain.diff contient un correctif qui doit être appliqué par rapport à la source LLVM cochée pour construire la chaîne d'outils requise pour construire le noyau et l'utilisateur.
Outre CMake et la chaîne d'outils LLVM personnalisée, la machine hôte doit avoir la bibliothèque et les outils Cap'n Proto installés de telle sorte que les fichiers de protocole pour les services RPC puissent être construits correctement s'ils sont mis à jour. Cependant, les versions actuelles des sources générées sont incluses dans le référentiel.
Vous pouvez utiliser le script build_toolchain.sh pour construire une chaîne d'outils à utiliser pour compiler le système. Cela met en place la plupart des bibliothèques requises: vous devrez également créer quelques bibliothèques de support.
Avant de compiler les bibliothèques ci-dessous, vous devrez probablement compiler et installer la bibliothèque C dans le Sysroot; Ces bibliothèques s'attendent à y trouver certains en-têtes. Remplacez la chaîne cible du compilateur si nécessaire pour la cible / la plate-forme actuelle.
Cela contient des fonctions d'assistance et d'autres éléments que le compilateur s'appuiera sur le fait d'être présent dans toutes les bibliothèques non pré-conjointes. Par défaut, le script ne semble pas compiler le compilateur-RT pour notre plate-forme.
Pour le construire, exécutez ce qui suit à l'intérieur du dossier Sources de la chaîne d'outils:
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 fournit la couche portable de niveau inférieur pour la bibliothèque d'exécution C ++. Construisez-le comme tel:
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
Une fois construite, vous devez construire le libcxx, le runtime C ++ réel:
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
La plupart des drapeaux définis seront éventuellement supprimés, lorsque les bibliothèques C et le système lui-même implémentent les fonctionnalités requises.
Requis pour les backtraces de pile et la prise en charge de l'exception 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
Nous pouvons activer LIBUNWIND_ENABLE_THREADS lorsque nous avons une couche de compatibilité PTHEADS.
Il n'y a pas encore beaucoup de documentation sur le projet.
Certains articles de blog décrivant la conception et les motivations du système d'exploitation sont disponibles ici.