447 lines
16 KiB
CMake
447 lines
16 KiB
CMake
cmake_minimum_required(VERSION 3.28)
|
|
|
|
# grab commands
|
|
include(ExternalProject)
|
|
|
|
# set our stuff for cross compiling
|
|
set(CMAKE_CXX_STANDARD 23)
|
|
set_property(DIRECTORY . PROPERTY INCLUDE_DIRECTORIES "")
|
|
|
|
# -- generate a file or two --
|
|
configure_file(lindows.ld.in lindows.ld @ONLY)
|
|
|
|
# -- macros for managing this nightmare multi toolchain shitshow --
|
|
|
|
# dependencies
|
|
add_executable(LindowsCompilerSpec IMPORTED)
|
|
set_property(TARGET LindowsCompilerSpec PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/lindows.spec")
|
|
#add_executable(LindowsLinkerScript IMPORTED)
|
|
#set_property(TARGET LindowsLinkerScript PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/lindows.ld")
|
|
add_executable(LindowsLinkerScript IMPORTED)
|
|
set_property(TARGET LindowsLinkerScript PROPERTY IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/lindows.ld.in")
|
|
#add_dependencies(LindowsLinkerScript LindowsLinkerScriptSource)
|
|
|
|
# compiler stuff
|
|
set(LW_CROSS_CC "${CMAKE_CURRENT_BINARY_DIR}/gcc/prefix/bin/gcc")
|
|
set(LW_CROSS_CXX "${CMAKE_CURRENT_BINARY_DIR}/gcc/prefix/bin/g++")
|
|
set(LW_CROSS_ASM "${LW_CROSS_CC}")
|
|
set(LW_CROSS_LD "${LW_CROSS_CC}")
|
|
set(LW_CROSS_INCFLAGS -isystem${CMAKE_CURRENT_BINARY_DIR}/gcc/prefix/include/c++/13.2.0 -isystem${CMAKE_CURRENT_BINARY_DIR}/gcc/prefix/lib/gcc/x86_64-pc-linux-gnu/13.2.0/include -isystem${CMAKE_CURRENT_BINARY_DIR}/gcc/prefix/lib/gcc/x86_64-pc-linux-gnu/13.2.0/include-fixed -isystem${CMAKE_CURRENT_BINARY_DIR}/gcc/prefix/include/c++/13.2.0/x86_64-pc-linux-gnu -isystem${CMAKE_CURRENT_BINARY_DIR}/glibc/prefix/include -isystem${CMAKE_CURRENT_BINARY_DIR}/linux/headers/include)
|
|
set(LW_CROSS_CFLAGS -nostdinc ${LW_CROSS_INCFLAGS})
|
|
set(LW_CROSS_CXXFLAGS -nostdinc ${LW_CROSS_INCFLAGS})
|
|
set(LW_CROSS_LIBFLAGS -L${CMAKE_CURRENT_BINARY_DIR}/gcc/prefix/lib -L${CMAKE_CURRENT_BINARY_DIR}/gcc/prefix/lib64 -L${CMAKE_CURRENT_BINARY_DIR}/glibc/lib)
|
|
set(LW_CROSS_LDFLAGS ${LW_CROSS_LIBFLAGS} -Xlinker --dynamic-linker /Windows/System32/ld-linux-x86-64.so.2 -Wl,-T,${CMAKE_CURRENT_BINARY_DIR}/lindows.ld --specs=${CMAKE_CURRENT_SOURCE_DIR}/lindows.spec)
|
|
|
|
string(REPLACE ";" " " LW_CROSS_CFLAGS_FLAT "${LW_CROSS_CFLAGS}")
|
|
string(REPLACE ";" " " LW_CROSS_CXXFLAGS_FLAT "${LW_CROSS_CXXFLAGS}")
|
|
string(REPLACE ";" " " LW_CROSS_LDFLAGS_FLAT "${LW_CROSS_LDFLAGS}")
|
|
|
|
# defines a project
|
|
function(lw_project PROJECTNAME)
|
|
set(cpa_flag)
|
|
set(cpa_single DESCRIPTION TARGET)
|
|
set(cpa_multi)
|
|
cmake_parse_arguments(PARSE_ARGV 1 ARG "${cpa_flag}" "${cpa_single}" "${cpa_multi}")
|
|
|
|
if(NOT ARG_DESCRIPTION)
|
|
set(ARG_DESCRIPTION "No description provided.")
|
|
endif()
|
|
|
|
if(NOT ARG_TARGET)
|
|
set(ARG_TARGET "HOST")
|
|
endif()
|
|
|
|
project(PROJECTNAME
|
|
DESCRIPTION "${ARG_DESCRIPTION}"
|
|
)
|
|
|
|
set(LW_TARGET "${ARG_TARGET}" PARENT_SCOPE)
|
|
|
|
if(${ARG_TARGET} STREQUAL "HOST")
|
|
|
|
elseif(${ARG_TARGET} STREQUAL "LINDOWS")
|
|
set(CMAKE_C_COMPILER "${LW_CROSS_CC}" PARENT_SCOPE)
|
|
set(CMAKE_CXX_COMPILER "${LW_CROSS_CXX}" PARENT_SCOPE)
|
|
set(CMAKE_ASM_COMPILER "${LW_CROSS_ASM}" PARENT_SCOPE)
|
|
set_property(DIRECTORY . PROPERTY INCLUDE_DIRECTORIES "")
|
|
else()
|
|
message(FATAL_ERROR "Unrecognized target type \"${ARG_TARGET}\"")
|
|
endif()
|
|
endfunction()
|
|
|
|
# defines a executable target, this must be used if lw_project is used
|
|
function(lw_add_executable NAME)
|
|
set(cpa_flag)
|
|
set(cpa_single)
|
|
set(cpa_multi SOURCES)
|
|
cmake_parse_arguments(PARSE_ARGV 1 ARG "${cpa_flag}" "${cpa_single}" "${cpa_multi}")
|
|
|
|
add_executable(${NAME})
|
|
if(ARG_SOURCES)
|
|
target_sources(${NAME} PRIVATE ${ARG_SOURCES})
|
|
target_compile_options(${NAME} PRIVATE
|
|
$<$<COMPILE_LANGUAGE:C>:${LW_CROSS_CFLAGS}>
|
|
$<$<COMPILE_LANGUAGE:CXX>:${LW_CROSS_CXXFLAGS}>
|
|
)
|
|
target_link_options(${NAME} PRIVATE ${LW_CROSS_LDFLAGS})
|
|
endif()
|
|
|
|
if(LW_TARGET)
|
|
set_property(TARGET ${NAME} APPEND PROPERTY LINK_DEPENDS
|
|
$<TARGET_FILE:LindowsLinkerScript>
|
|
$<TARGET_FILE:LindowsCompilerSpec>
|
|
)
|
|
|
|
set_property(SOURCE TARGET_DIRECTORY ${NAME} APPEND PROPERTY OBJECT_DEPENDS
|
|
GCC-install
|
|
)
|
|
|
|
target_include_directories(${NAME} PUBLIC "${CMAKE_SOURCE_DIR}/common/include")
|
|
else()
|
|
message(FATAL_ERROR "LW_TARGET not defined, are you in a lw_project?")
|
|
endif()
|
|
endfunction()
|
|
|
|
# defines a library target. this must be used if lw_project is used
|
|
function(lw_add_library NAME)
|
|
set(cpa_flag SHARED)
|
|
set(cpa_single)
|
|
set(cpa_multi SOURCES)
|
|
cmake_parse_arguments(PARSE_ARGV 1 ARG "${cpa_flag}" "${cpa_single}" "${cpa_multi}")
|
|
|
|
if (ARG_SHARED)
|
|
add_library(${NAME} SHARED)
|
|
else()
|
|
add_library(${NAME})
|
|
endif()
|
|
|
|
if(ARG_SOURCES)
|
|
target_sources(${NAME} PRIVATE ${ARG_SOURCES})
|
|
target_compile_options(${NAME} PRIVATE
|
|
$<$<COMPILE_LANGUAGE:C>:${LW_CROSS_CFLAGS}>
|
|
$<$<COMPILE_LANGUAGE:CXX>:${LW_CROSS_CXXFLAGS}>
|
|
)
|
|
target_link_options(${NAME} PRIVATE ${LW_CROSS_LDFLAGS})
|
|
endif()
|
|
|
|
if(LW_TARGET)
|
|
set_property(TARGET ${NAME} APPEND PROPERTY LINK_DEPENDS
|
|
$<TARGET_FILE:LindowsLinkerScript>
|
|
$<TARGET_FILE:LindowsCompilerSpec>
|
|
)
|
|
|
|
set_property(SOURCE TARGET_DIRECTORY ${NAME} APPEND PROPERTY OBJECT_DEPENDS
|
|
GCC-install
|
|
)
|
|
|
|
target_include_directories(${NAME} PUBLIC "${CMAKE_SOURCE_DIR}/common/include")
|
|
else()
|
|
message(FATAL_ERROR "LW_TARGET not defined, are you in a lw_project?")
|
|
endif()
|
|
endfunction()
|
|
|
|
# -- lindows --
|
|
|
|
# dear god
|
|
project(lindows)
|
|
|
|
# find our programs
|
|
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake.d/")
|
|
find_package(NTFS3g REQUIRED)
|
|
find_package(CoreUtils REQUIRED)
|
|
find_package(MTools REQUIRED)
|
|
find_package(Python REQUIRED) # for GRUB
|
|
# TODO: find_package for bison (for GRUB)
|
|
# TODO: find_package for flex (for GRUB)
|
|
# TODO: find_package for sfdisk (for disk image generation)
|
|
|
|
# make c drive mount point
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lindows_c")
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lindows_efi")
|
|
|
|
# build cross compiler
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/gcc")
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/gcc/prefix")
|
|
ExternalProject_Add(GCC
|
|
GIT_REPOSITORY "git://gcc.gnu.org/git/gcc.git"
|
|
GIT_TAG "releases/gcc-13.2.0"
|
|
GIT_PROGRESS TRUE
|
|
UPDATE_COMMAND ""
|
|
CONFIGURE_COMMAND <SOURCE_DIR>/configure
|
|
--prefix=${CMAKE_CURRENT_BINARY_DIR}/gcc/prefix
|
|
--target=x86_64-pc-linux-gnu
|
|
--enable-languages=c,c++
|
|
--disable-nls
|
|
--disable-bootstrap
|
|
BUILD_COMMAND make
|
|
INSTALL_COMMAND make install
|
|
COMMAND cp -r ${CMAKE_BINARY_DIR}/gcc/prefix/lib64 ${CMAKE_BINARY_DIR}/gcc/lib64
|
|
STEP_TARGETS install
|
|
)
|
|
|
|
# build grub
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/grub")
|
|
ExternalProject_Add(GRUB
|
|
GIT_REPOSITORY "https://git.savannah.gnu.org/git/grub.git"
|
|
GIT_TAG "grub-2.12"
|
|
GIT_SHALLOW TRUE
|
|
GIT_PROGRESS TRUE
|
|
UPDATE_COMMAND "" # the commit is fixed, we will never need to update
|
|
# this should make it stop rebuilding every `make`
|
|
CONFIGURE_COMMAND ./bootstrap
|
|
COMMAND ./configure
|
|
--host=x86_64-pc-linux-gnu
|
|
--target=x86_64
|
|
--with-platform=efi
|
|
--disable-efiemu
|
|
--prefix=${CMAKE_CURRENT_BINARY_DIR}/grub
|
|
BUILD_COMMAND make
|
|
BUILD_IN_SOURCE TRUE
|
|
INSTALL_COMMAND make install
|
|
)
|
|
|
|
# build linux
|
|
add_executable(LinuxConfig IMPORTED)
|
|
set_property(TARGET LinuxConfig PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/src/linux/config)
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/linux")
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/linux/modules")
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/linux/headers")
|
|
ExternalProject_Add(Linux
|
|
GIT_REPOSITORY "https://github.com/torvalds/linux"
|
|
GIT_TAG "v6.7"
|
|
GIT_PROGRESS TRUE
|
|
UPDATE_COMMAND ""
|
|
CONFIGURE_COMMAND ${CoreUtils_Copy_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/src/linux/config .config
|
|
BUILD_COMMAND make
|
|
BUILD_IN_SOURCE TRUE
|
|
INSTALL_COMMAND ${CoreUtils_Copy_EXECUTABLE} arch/x86_64/boot/bzImage ${CMAKE_CURRENT_BINARY_DIR}/linux
|
|
COMMAND make modules_install INSTALL_MOD_PATH=${CMAKE_CURRENT_BINARY_DIR}/linux/modules
|
|
COMMAND make headers_install INSTALL_HDR_PATH=${CMAKE_CURRENT_BINARY_DIR}/linux/headers ""
|
|
STEP_TARGETS install
|
|
)
|
|
ExternalProject_Add_StepDependencies(Linux configure LinuxConfig)
|
|
add_executable(LinuxKernel IMPORTED)
|
|
set_property(TARGET LinuxKernel PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/linux/bzImage)
|
|
|
|
# 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/bin")
|
|
ExternalProject_Add(GLibC
|
|
GIT_REPOSITORY "https://sourceware.org/git/glibc.git"
|
|
GIT_TAG "glibc-2.39"
|
|
GIT_PROGRESS TRUE
|
|
UPDATE_COMMAND ""
|
|
PATCH_COMMAND git apply ${CMAKE_CURRENT_SOURCE_DIR}/src/glibc/patches/lindows.patch
|
|
CONFIGURE_COMMAND <SOURCE_DIR>/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
|
|
)
|
|
add_executable(GLibCPatch IMPORTED)
|
|
set_property(TARGET GLibCPatch PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/src/glibc/patches/lindows.patch)
|
|
ExternalProject_Add_StepDependencies(GLibC patch GLibCPatch)
|
|
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/ncurses")
|
|
ExternalProject_Add(NCurses # oh wow no git
|
|
URL "https://invisible-island.net/archives/ncurses/ncurses-6.4.tar.gz"
|
|
URL_MD5 "5a62487b5d4ac6b132fe2bf9f8fad29b" # generated with md5sum at 2024-02-29 12:00
|
|
UPDATE_COMMAND ""
|
|
CONFIGURE_COMMAND env
|
|
"CC=${LW_CROSS_CC}"
|
|
"CXX=${LW_CROSS_CXX}"
|
|
"LD=${LW_CROSS_LD}"
|
|
"CFLAGS=${LW_CROSS_CFLAGS_FLAT}"
|
|
"CXXFLAGS=${LW_CROSS_CXXFLAGS_FLAT}"
|
|
"LDFLAGS=${LW_CROSS_LDFLAGS_FLAT}"
|
|
|
|
<SOURCE_DIR>/./configure
|
|
--prefix=${CMAKE_CURRENT_BINARY_DIR}/ncurses
|
|
--host=x86_64-pc-linux-gnu
|
|
--without-ada
|
|
--without-manpages
|
|
--enable-mixed-case
|
|
--without-gpm
|
|
--with-shared
|
|
BUILD_COMMAND make
|
|
INSTALL_COMMAND make install
|
|
STEP_TARGETS install
|
|
)
|
|
ExternalProject_Add_StepDependencies(NCurses configure GCC)
|
|
ExternalProject_Add_StepDependencies(NCurses build LindowsCompilerSpec LindowsLinkerScript)
|
|
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bash")
|
|
ExternalProject_Add(Bash
|
|
GIT_REPOSITORY "https://git.savannah.gnu.org/git/bash.git"
|
|
GIT_TAG "bash-5.2"
|
|
GIT_PROGRESS TRUE
|
|
UPDATE_COMMAND ""
|
|
CONFIGURE_COMMAND env
|
|
"CC=${LW_CROSS_CC}"
|
|
"LD=${LW_CROSS_LD}"
|
|
"CFLAGS=${LW_CROSS_CFLAGS_FLAT}"
|
|
"LDFLAGS=${LW_CROSS_LDFLAGS_FLAT}"
|
|
|
|
<SOURCE_DIR>/configure
|
|
--prefix=${CMAKE_CURRENT_BINARY_DIR}/bash
|
|
--host=x86_64-pc-linux-gnu
|
|
--with-curses
|
|
BUILD_COMMAND make
|
|
INSTALL_COMMAND make install
|
|
STEP_TARGETS install
|
|
)
|
|
ExternalProject_Add_StepDependencies(Bash configure GCC NCurses)
|
|
ExternalProject_Add_StepDependencies(Bash build LindowsCompilerSpec LindowsLinkerScript)
|
|
|
|
# this should probably be a shell script, i unfortunately do not care
|
|
add_custom_command(OUTPUT lindows_c.img
|
|
# create empty 128MiB disk image
|
|
COMMAND "${CoreUtils_dd_EXECUTABLE}" ARGS
|
|
if=/dev/zero
|
|
of=lindows_c.img
|
|
bs=1M
|
|
count=512
|
|
# format disk with new NTFS filesystem
|
|
COMMAND "${NTFS3g_Mkfs_EXECUTABLE}" ARGS -F # scary!
|
|
-L Windows
|
|
./lindows_c.img
|
|
# mount filesystem
|
|
COMMAND "${NTFS3g_Mount_EXECUTABLE}" ARGS
|
|
-o no_def_opts
|
|
lindows_c.img
|
|
lindows_c
|
|
|
|
# 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/System32/LNXConfig
|
|
COMMAND ${CoreUtils_Mkdir_EXECUTABLE} ARGS lindows_c/Windows/System32/Config
|
|
COMMAND ${CoreUtils_Mkdir_EXECUTABLE} ARGS lindows_c/Windows/GRUB
|
|
COMMAND ${CoreUtils_Mkdir_EXECUTABLE} ARGS lindows_c/Windows/GRUB/x86_64-efi
|
|
COMMAND ${CoreUtils_Mkdir_EXECUTABLE} ARGS 'lindows_c/Windows/Temporary Files'
|
|
|
|
# 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/copylib glibc
|
|
COMMAND ${CoreUtils_Copy_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/src/glibc/ld.so.conf lindows_c/Windows/System32/LNXConfig/ld.so.conf
|
|
|
|
# copy bash to system32
|
|
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/copylib bash
|
|
|
|
# copy curses to system32
|
|
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/copylib ncurses
|
|
|
|
# continuedd
|
|
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/copylib gcc lib64
|
|
|
|
# copy lindows binaries
|
|
COMMAND ${CoreUtils_Copy_EXECUTABLE} ARGS $<TARGET_FILE:lsmss> lindows_c/Windows/System32/lsmss.exe
|
|
COMMAND ${CoreUtils_Copy_EXECUTABLE} ARGS $<TARGET_FILE:lrss> lindows_c/Windows/System32/lrss.exe
|
|
COMMAND ${CoreUtils_Copy_EXECUTABLE} ARGS $<TARGET_FILE:lrssclient> lindows_c/Windows/System32/liblrssclient.so
|
|
COMMAND ${CoreUtils_Copy_EXECUTABLE} ARGS $<TARGET_FILE:lexecutive> lindows_c/Windows/System32/lexecutive.exe
|
|
COMMAND ${CoreUtils_Copy_EXECUTABLE} ARGS $<TARGET_FILE:lcrash> lindows_c/Windows/System32/lcrash.exe
|
|
|
|
# create registry hives
|
|
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/mkhive lindows_c/Windows/System32/Config/System
|
|
COMMAND hivexsh lindows_c/Windows/System32/Config/System -w -f ${CMAKE_CURRENT_SOURCE_DIR}/scripts/hivex/system.hivex
|
|
|
|
# create users folder
|
|
COMMAND ${CoreUtils_Mkdir_EXECUTABLE} ARGS lindows_c/Users
|
|
|
|
# unmount filesystem
|
|
COMMAND umount ARGS lindows_c
|
|
|
|
DEPENDS
|
|
lexecutive lcrash
|
|
lsmss lrss lrssclient
|
|
Linux-install
|
|
GLibC-install
|
|
Bash-install
|
|
NCurses-install
|
|
LinuxKernel
|
|
src/grub/grub.cfg
|
|
src/glibc/ld.so.conf
|
|
scripts/copylib
|
|
scripts/mkhive scripts/hivex/system.hivex
|
|
)
|
|
|
|
# this makes the efi system partition
|
|
add_custom_command(OUTPUT lindows_efi.img
|
|
COMMAND ${CoreUtils_Mkdir_EXECUTABLE} ARGS -p lindows_efi/
|
|
COMMAND "${CMAKE_CURRENT_BINARY_DIR}/grub/bin/grub-mkimage" ARGS
|
|
-p /Windows/GRUB
|
|
-O x86_64-efi
|
|
-o lindows_efi/grubx64.efi
|
|
-c ${CMAKE_CURRENT_SOURCE_DIR}/src/grub/grub-early.cfg
|
|
part_gpt ntfs
|
|
COMMAND "${CoreUtils_dd_EXECUTABLE}" ARGS
|
|
if=/dev/zero
|
|
of=lindows_efi.img
|
|
bs=1M
|
|
count=33
|
|
#COMMAND mkfs.vfat lindows_efi.img -F 32
|
|
COMMAND ${MTools_Format_EXECUTABLE} -i lindows_efi.img
|
|
COMMAND ${MTools_Copy_EXECUTABLE} -i lindows_efi.img ${CMAKE_SOURCE_DIR}/src/startup.nsh ::/STARTUP.NSH
|
|
COMMAND ${MTools_Mkdir_EXECUTABLE} -i lindows_efi.img ::/EFI
|
|
COMMAND ${MTools_Mkdir_EXECUTABLE} -i lindows_efi.img ::/EFI/BOOT
|
|
COMMAND ${MTools_Copy_EXECUTABLE} -i lindows_efi.img lindows_efi/grubx64.efi ::/EFI/BOOT/BOOTX64.EFI
|
|
DEPENDS src/grub/grub-early.cfg src/startup.nsh
|
|
)
|
|
|
|
# make the full disk image
|
|
add_custom_command(OUTPUT lindows.img
|
|
COMMAND echo ARGS label: gpt > disk.sfdisk
|
|
COMMAND echo ARGS unit: sectors >> disk.sfdisk
|
|
COMMAND echo ARGS start=1MiB, size=33MiB, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B >> disk.sfdisk
|
|
COMMAND echo ARGS start=34MiB, size=512MiB, type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, uuid=48D29DA8-2FF8-4F23-BA1A-0E8CCFC329E2 >> disk.sfdisk
|
|
COMMAND "${CoreUtils_dd_EXECUTABLE}" ARGS
|
|
if=/dev/zero
|
|
of=lindows.img
|
|
bs=1M
|
|
count=600
|
|
# partition disk
|
|
COMMAND sfdisk ARGS lindows.img < disk.sfdisk
|
|
# write partitions
|
|
COMMAND "${CoreUtils_dd_EXECUTABLE}" ARGS
|
|
if=lindows_efi.img
|
|
of=lindows.img
|
|
bs=1M
|
|
count=33
|
|
seek=1
|
|
conv=notrunc
|
|
COMMAND "${CoreUtils_dd_EXECUTABLE}" ARGS
|
|
if=lindows_c.img
|
|
of=lindows.img
|
|
bs=1M
|
|
count=512
|
|
seek=34
|
|
conv=notrunc
|
|
DEPENDS lindows_c.img lindows_efi.img
|
|
BYPRODUCTS disk.sfdisk
|
|
)
|
|
|
|
configure_file(config.h.in config.h)
|
|
|
|
add_custom_target(lindows ALL DEPENDS lindows.img)
|
|
|
|
add_subdirectory(executive)
|
|
add_subdirectory(lsmss)
|
|
add_subdirectory(lrss)
|
|
add_subdirectory(lcrash)
|