Это еще одна хобби -ОС, но эта не пытается быть еще одним клоном Unix. На самом деле, я действительно понятия не имею, кем он пытается быть. Это просто… есть.
Текущие функции включают в себя:
Мы используем Cmake, чтобы построить все. Single CMakeLists.txt в этом каталоге может автоматически создавать ядро, все компоненты пользователя и инструменты. Вам нужно будет выбрать один из инструментов для использования и передать его в Cmake в флаге CMAKE_TOOLCHAIN_FILE .
build_toolchain.sh . Файл toolchain.diff содержит патч, который должен применяться к проверенному источнику LLVM для создания инструментального оборудования, необходимого для создания ядра и пользователя.
Помимо Cmake и пользовательского инструментального оборудования LLVM, хост -машина должна быть установлена библиотека Proto Cap'n, так что файлы протокола для сервисов 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
Большинство флагов, установленных на выкл. В конечном итоге будут удалены, когда библиотеки 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.
Пока нет много документации о проекте.
Некоторые посты в блоге, описывающие дизайн ОС и мотивы, доступны здесь.