Este é mais um sistema operacional hobby, mas este não tenta ser mais um clone do Unix. Na verdade, eu realmente não tenho idéia do que está tentando ser. É meio que ... é.
Os recursos atuais incluem:
Usamos o cmake para construir tudo. O único CMakeLists.txt neste diretório pode construir o kernel, todos os componentes do espaço de usuários e ferramentas automaticamente. Você precisará selecionar uma das cadeias de ferramentas para usá -lo e passá -lo para cmake no sinalizador CMAKE_TOOLCHAIN_FILE .
build_toolchain.sh . O arquivo toolchain.diff contém um patch que deve ser aplicado na fonte LLVM check-out para criar a cadeia de ferramentas necessária para construir o kernel e a terra do usuário.
Além do CMake e da cadeia de ferramentas personalizada LLVM, a máquina host precisa ter a biblioteca e as ferramentas do Cap'n Proto instaladas, de modo que os arquivos de protocolo para serviços de RPC possam ser construídos corretamente se forem atualizados. No entanto, as versões atuais das fontes geradas estão incluídas no repositório.
Você pode usar o script build_toolchain.sh para criar uma cadeia de ferramentas para usar para compilar o sistema. Isso configura a maioria das bibliotecas necessárias: você também precisará criar algumas bibliotecas de suporte.
Antes de compilar as bibliotecas abaixo, você provavelmente precisará compilar e instalar a biblioteca C na sysroot; Essas bibliotecas esperam encontrar certos cabeçalhos lá. Substitua a sequência de destino do compilador conforme necessário para o destino/plataforma atual.
Isso contém funções auxiliares e outras coisas que o compilador confiará em estar presente em todas as bibliotecas não frequentes. Por padrão, o script não parece compilar o compilador-RT para nossa plataforma.
Para construí -lo, execute o seguinte de dentro da pasta fontes da cadeia de ferramentas:
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 fornece a camada portátil de nível inferior para a biblioteca de tempo de execução C ++. Construa assim:
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
Uma vez construído, você deve construir o libcxx, o tempo de execução C ++ real:
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
A maioria das bandeiras definidas para desligar será removida, quando as bibliotecas C e o próprio sistema implementarem os recursos necessários.
Necessário para o Backtraces de pilha e suporte de exceção 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
Podemos ativar LIBUNWIND_ENABLE_THREADS quando temos uma camada de compatibilidade do Pthreads.
Ainda não há muita documentação sobre o projeto.
Algumas postagens no blog que descrevem o design e as motivações do sistema operacional estão disponíveis aqui.