This commit is contained in:
xwashere 2024-02-26 11:03:42 -05:00
commit 386bbd0dfd
Signed by: XWasHere
GPG Key ID: 042F8BFA1B0EF93B
4 changed files with 191 additions and 0 deletions

82
CMakeLists.txt Normal file
View File

@ -0,0 +1,82 @@
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)

View File

@ -0,0 +1,47 @@
#[=============================[.rst:
FindCoreUtils
----------
finds coreutils. crazy, isnt it?
Imported Targets
^^^^^^^^^^^^^^^
Provides the following imported targets:
``CoreUtils::dd``
The dd command
Result Variables
^^^^^^^^^^^^^^^^
Defines the following variables:
``CoreUtils_FOUND``
True if the system has coreutils
``CoreUtils_dd_EXECUTABLE``
Path to dd
#]=============================]
include(FindPackageHandleStandardArgs)
# dd
find_program(CoreUtils_dd_EXECUTABLE
NAMES dd
)
find_package_handle_standard_args(CoreUtils
FOUND_VAR CoreUtils_FOUND
REQUIRED_VARS
CoreUtils_dd_EXECUTABLE
)
# coreutils really only looks good lowercase, but it doesnt fit with cmakes other stuff then
if (CoreUtils_Found)
# add dd
add_executable(CoreUtils::dd UNKNOWN IMPORTED)
set_target_properties(CoreUtils::dd PROPERTIES
IMPORTED_LOCATION "${CoreUtils_dd_EXECUTABLE}"
)
endif()

28
cmake.d/FindMTools.cmake Normal file
View File

@ -0,0 +1,28 @@
#[=============================[.rst:
FindMTools
----------
finds mtools. holy crap wow.
Result Variables
^^^^^^^^^^^^^^^^
Defines the following variables:
``MTools_FOUND``
True if the system has mtools
``MTools_Format_EXECUTABLE``
Path to mformat
#]=============================]
include(FindPackageHandleStandardArgs)
# mformat
find_program(MTools_Format_EXECUTABLE NAMES mformat)
find_package_handle_standard_args(MTools
FOUND_VAR MTools_FOUND
REQUIRED_VARS
MTools_Format_EXECUTABLE
)

34
cmake.d/FindNTFS3g.cmake Normal file
View File

@ -0,0 +1,34 @@
#[=============================[.rst:
FindNTFS3g
----------
finds nsfs-3g. who woulda guessed.
Result Variables
^^^^^^^^^^^^^^^^
Defines the following variables:
``NTFS3g_FOUND``
True if the system has ntfs-3g
``NTFS3g_Mkfs_EXECUTABLE``
Path to mkfs.ntfs
``NTFS3g_Mount_EXECUTABLE``
Path to ntfs-3g
#]=============================]
include(FindPackageHandleStandardArgs)
# mkfs.ntfs
find_program(NTFS3g_Mkfs_EXECUTABLE NAMES mkfs.ntfs)
# ntfs-3g
find_program(NTFS3g_Mount_EXECUTABLE NAMES ntfs-3g)
find_package_handle_standard_args(NTFS3g
FOUND_VAR NTFS3g_FOUND
REQUIRED_VARS
NTFS3g_Mkfs_EXECUTABLE
NTFS3g_Mount_EXECUTABLE
)