cmake_minimum_required(VERSION 3.28) # 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) # make c drive mount point file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lindows_c") file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lindows_efi") # this should probably be a shell script, i unfortunately do not care add_custom_command(OUTPUT lindows_c.img # create empty 16MiB disk image COMMAND "${CoreUtils_dd_EXECUTABLE}" ARGS if=/dev/zero of=lindows_c.img bs=1M count=16 # 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 dirs COMMAND mkdir ARGS lindows_c/Windows COMMAND mkdir ARGS lindows_c/Users # unmount filesystem COMMAND "umount" ARGS lindows_c ) # this makes the efi system partition add_custom_command(OUTPUT lindows_efi.img COMMAND "${CoreUtils_dd_EXECUTABLE}" ARGS if=/dev/zero of=lindows_efi.img bs=1M count=16 COMMAND "${MTools_Format_EXECUTABLE}" ARGS -F -i lindows_efi.img ) # 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 1M 16M C12A7328-F81F-11D2-BA4B-00A0C93EC93B - >> disk.sfdisk COMMAND echo ARGS 17M 16M EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 - >> disk.sfdisk COMMAND "${CoreUtils_dd_EXECUTABLE}" ARGS if=/dev/zero of=lindows.img bs=1M count=64 # 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=16 seek=1 COMMAND "${CoreUtils_dd_EXECUTABLE}" ARGS if=lindows_c.img of=lindows.img bs=1M count=16 seek=17 DEPENDS lindows_c.img lindows_efi.img BYPRODUCTS disk.sfdisk ) add_custom_target(lindows ALL DEPENDS lindows.img)