83 lines
2.0 KiB
CMake
83 lines
2.0 KiB
CMake
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)
|