Este es otro sistema operativo de pasatiempo, pero este no intenta ser otro clon de Unix. De hecho, realmente no tengo idea de lo que está tratando de ser. Simplemente es un poco ... es.
Las características actuales incluyen:
Usamos Cmake para construir todo. La sola CMakeLists.txt en este directorio puede construir el kernel, todos los componentes del espacio de usuario y las herramientas automáticamente. Tendrá que seleccionar una de las cadenas de herramientas para usar y pasarlo a CMake en el indicador CMAKE_TOOLCHAIN_FILE .
build_toolchain.sh . El archivo toolchain.diff contiene un parche que debe aplicarse contra la fuente LLVM verificada para construir la cadena de herramientas requerida para construir el kernel y el usuario de usuarios.
Además de CMake y la cadena de herramientas LLVM personalizada, la máquina host debe tener la biblioteca y las herramientas Cap'n Proto instaladas de manera que los archivos de protocolo para los servicios RPC se puedan construir correctamente si se actualizan. Sin embargo, las versiones actuales de las fuentes generadas se incluyen en el repositorio.
Puede usar el script build_toolchain.sh para crear una cadena de herramientas para usar para compilar el sistema. Esto establece la mayoría de las bibliotecas requeridas: también tendrá que construir algunas bibliotecas de soporte.
Antes de compilar las bibliotecas a continuación, es probable que necesite compilar e instalar la biblioteca C en el sysroot; Estas bibliotecas esperan encontrar ciertos encabezados allí. Reemplace la cadena de destino del compilador según sea necesario para el objetivo/plataforma actual.
Esto contiene funciones auxiliares y otras cosas que el compilador dependerá de estar presente en todas las bibliotecas que no son de fraguado. Por defecto, el script no parece compilar el compilador-rt para nuestra plataforma.
Para construirlo, ejecute lo siguiente desde el interior de la carpeta de fuentes de la cadena de herramientas:
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 proporciona la capa portátil de nivel inferior para la biblioteca de tiempo de ejecución C ++. Construirlo así:
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
Una vez construido, debe construir el LibCXX, el tiempo de ejecución de 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
La mayoría de las banderas establecidas en OFF se eliminarán eventualmente, cuando las bibliotecas C y el sistema mismo implementan las características necesarias.
Requerido para trackas de pila y soporte de excepción 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 habilitar LIBUNWIND_ENABLE_THREADS cuando tenemos una capa de compatibilidad PTHREADS.
Todavía no hay mucha documentación sobre el proyecto.
Algunas publicaciones de blog que describen el diseño del sistema operativo y las motivaciones están disponibles aquí.