これはさらに別の趣味ですが、これはさらに別のUnixクローンになろうとはしません。実際、私はそれが何になろうとしているのか本当に分かりません。それはただ…です。
現在の機能は次のとおりです。
Cmakeを使用してすべてを構築します。このディレクトリの単一のCMakeLists.txtは、カーネル、すべてのユーザースペースコンポーネント、およびツールを自動的に構築できます。使用するツールチェーンのいずれかを選択し、 CMAKE_TOOLCHAIN_FILEフラグでcmakeに渡す必要があります。
build_toolchain.shスクリプトによって作成されました。 toolchain.diffファイルには、チェックアウトLLVMソースに対して適用するパッチが含まれており、カーネルとユーザーランドの構築に必要なツールチェーンを構築します。
CmakeとカスタムLLVMツールチェーンに加えて、ホストマシンには、RPCサービスのプロトコルファイルを更新すると正しく構築できるように、CAP'N Protoライブラリとツールをインストールする必要があります。ただし、生成されたソースの現在のバージョンはリポジトリに含まれています。
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の設計と動機を説明するいくつかのブログ投稿は、こちらから入手できます。