diff --git a/CMakeLists.txt b/CMakeLists.txt index 8de072b..def235f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,6 +62,34 @@ ExternalProject_Add(Linux ) ExternalProject_Add_StepDependencies(Linux configure LinuxConfig) +# build glibc +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/glibc") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/glibc/prefix") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/glibc/lib") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/glibc/libexec") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/glibc/bin") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/glibc/sbin") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/glibc/include") +ExternalProject_Add(GLibC + GIT_REPOSITORY "https://sourceware.org/git/glibc.git" + GIT_TAG "glibc-2.39" + GIT_PROGRESS TRUE + UPDATE_COMMAND "" + CONFIGURE_COMMAND /configure + --prefix=${CMAKE_CURRENT_BINARY_DIR}/glibc/prefix + --with-headers=${CMAKE_CURRENT_BINARY_DIR}/linux/headers/include + --enable-kernel=6.7.0 + --host=x86_64-pc-linux-gnu + --enable-shared + BUILD_COMMAND make + INSTALL_COMMAND make install + COMMAND sh -c "cp -r ${CMAKE_CURRENT_BINARY_DIR}/glibc/prefix/sbin/* ${CMAKE_CURRENT_BINARY_DIR}/glibc/bin" + COMMAND sh -c "cp -r ${CMAKE_CURRENT_BINARY_DIR}/glibc/prefix/bin/* ${CMAKE_CURRENT_BINARY_DIR}/glibc/bin" + COMMAND sh -c "cp -r ${CMAKE_CURRENT_BINARY_DIR}/glibc/prefix/libexec/* ${CMAKE_CURRENT_BINARY_DIR}/glibc/lib" + COMMAND sh -c "cp -r ${CMAKE_CURRENT_BINARY_DIR}/glibc/prefix/lib/* ${CMAKE_CURRENT_BINARY_DIR}/glibc/lib" + STEP_TARGETS install +) + # this should probably be a shell script, i unfortunately do not care add_custom_command(OUTPUT lindows_c.img # create empty 128MiB disk image @@ -82,15 +110,20 @@ add_custom_command(OUTPUT lindows_c.img # create system folders COMMAND ${CoreUtils_Mkdir_EXECUTABLE} ARGS lindows_c/Windows + COMMAND ${CoreUtils_Mkdir_EXECUTABLE} ARGS lindows_c/Windows/System32 COMMAND ${CoreUtils_Mkdir_EXECUTABLE} ARGS lindows_c/Windows/GRUB COMMAND ${CoreUtils_Mkdir_EXECUTABLE} ARGS lindows_c/Windows/GRUB/x86_64-efi # grub stuff COMMAND ${CoreUtils_Copy_EXECUTABLE} ARGS ${CMAKE_CURRENT_BINARY_DIR}/grub/lib/grub/x86_64-efi/* lindows_c/Windows/GRUB/x86_64-efi COMMAND ${CoreUtils_Copy_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/src/grub/grub.cfg lindows_c/Windows/GRUB/grub.cfg + # install the kernel COMMAND ${CoreUtils_Copy_EXECUTABLE} ARGS ${CMAKE_CURRENT_BINARY_DIR}/linux/bzImage lindows_c/Windows/vmlinux.exe + # copy glibc files to system32 + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/copyglibc + # create users folder COMMAND ${CoreUtils_Mkdir_EXECUTABLE} ARGS lindows_c/Users @@ -98,8 +131,11 @@ add_custom_command(OUTPUT lindows_c.img COMMAND "umount" ARGS lindows_c DEPENDS + lsmss Linux-install + GLibC-install src/grub/grub.cfg + scripts/copyglibc ) # this makes the efi system partition @@ -157,3 +193,5 @@ add_custom_command(OUTPUT lindows.img ) add_custom_target(lindows ALL DEPENDS lindows.img) + +add_subdirectory(lsmss) diff --git a/lsmss/CMakeLists.txt b/lsmss/CMakeLists.txt new file mode 100644 index 0000000..34cdb76 --- /dev/null +++ b/lsmss/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.28) + +# Preinit process that prepares the os and uh yeah :astolfothumbsup: +#project(lsmss +# DESCRIPTION "Linux Session Manager Subsystem" +#) + +#add_executable(lsmss main.cxx) diff --git a/scripts/copyglibc b/scripts/copyglibc new file mode 100755 index 0000000..e94edfb --- /dev/null +++ b/scripts/copyglibc @@ -0,0 +1,11 @@ +#!/bin/sh + +# copy libs +find glibc/bin glibc/lib -type d | sed -r 's/glibc\/(bin|lib)\///;Tn;s/^/mkdir lindows_c\/Windows\/System32\//;by;:n;d;:y;e' > /dev/null; +find glibc/bin -type f | sed -r 's/glibc\/bin\/(.*)/cp glibc\/bin\/\1 lindows_c\/Windows\/System32\/\1.exe/;e' > /dev/null +find glibc/lib -type f | sed -r 's/glibc\/lib\/(.*)/cp glibc\/lib\/\1 lindows_c\/Windows\/System32\/\1/;e' > /dev/null + +# copy lib links +for lib in $(cd glibc/lib && find -type l); do + ln -sr "lindows_c/Windows/System32/$(readlink glibc/lib/$lib)" "lindows_c/Windows/System32/$lib" +done diff --git a/src/grub/grub.cfg b/src/grub/grub.cfg index 3c26a4b..b137572 100644 --- a/src/grub/grub.cfg +++ b/src/grub/grub.cfg @@ -2,5 +2,5 @@ clear # boot -linux /Windows/vmlinux.exe console=tty0 console=ttyS0 +linux /Windows/vmlinux.exe console=tty0 console=ttyS0 root=PARTUUID=48d29da8-2ff8-4f23-ba1a-0e8ccfc329e2 rw boot