lindows/lcrash/CMakeLists.txt

79 lines
3.4 KiB
CMake

cmake_minimum_required(VERSION 3.28)
lw_project(lcrash
DESCRIPTION "Lindows BSOD"
TARGET LINDOWS
)
enable_language(ASM)
lw_add_executable(lcrashkern
SOURCES main.c cmdline.c util.c lnxboot.c math.c debug/debug.c acpi/acpi.c efi/efi.c efi/guid.c efi/memmap.c gdb/gdb.c pci/pci.c mm/phys.c mm/kmalloc.c
)
add_executable(lcrashkernld IMPORTED)
set_property(TARGET lcrashkernld PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/lcrash.ld)
set_property(TARGET lcrashkern PROPERTY LINK_DEPENDS
$<TARGET_FILE:lcrashkernld>
$<TARGET_FILE:LindowsCompilerSpec>
)
set_property(TARGET lcrashkern PROPERTY LINK_OPTIONS -nostdlib -Wl,-T,${CMAKE_CURRENT_SOURCE_DIR}/lcrash.ld )
target_compile_options(lcrashkern PRIVATE -ggdb -fpic -pie -Wall -Werror -fanalyzer)
target_link_options(lcrashkern PRIVATE -fpic -pie)
target_include_directories(lcrashkern PRIVATE ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lcrashkern.gz
DEPENDS lcrashkern
COMMAND gzip -fk $<TARGET_FILE:lcrashkern> > ${CMAKE_CURRENT_BINARY_DIR}/lcrashkern.gz
)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lcrashkern_locs.h
DEPENDS lcrashkern ${CMAKE_CURRENT_BINARY_DIR}/lcrashkern.gz
COMMAND nm ${CMAKE_CURRENT_BINARY_DIR}/lcrashkern | sed -E '"s/([0-9a-f]*) . (.*)/#define KK_\\2 0x\\1/g"' > lcrashkern_locs.h
COMMAND echo -n "'#'define _KKCLEN " >> lcrashkern_locs.h
COMMAND du -b lcrashkern.gz | cut -f 1 >> lcrashkern_locs.h
)
# UnityOS cckernel stuffed into the bzImage
lw_add_executable(cckernel
SOURCES setup/compressed/cckernel.S
setup/compressed/entry64.S
setup/compressed/mem.S
setup/compressed/main.c
setup/compressed/gzip.c
setup/compressed/elf.c
)
add_executable(cckernelld IMPORTED)
set_property(TARGET cckernelld PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/setup/compressed/compressed.ld)
set_property(TARGET cckernel PROPERTY LINK_OPTIONS -nostdlib -Wl,-T,${CMAKE_CURRENT_SOURCE_DIR}/setup/compressed/compressed.ld)
target_compile_options(cckernel PRIVATE -ggdb -mno-sse -mno-avx -Wall -Werror -fanalyzer) # disable generating SIMD code since we haven't configured it at this stage of the boot thing
set_property(SOURCE setup/compressed/cckernel.S PROPERTY OBJECT_DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/lcrashkern.gz
)
set_property(TARGET cckernel PROPERTY LINK_DEPENDS
$<TARGET_FILE:cckernelld>
)
set(COMPRESSED_KERNEL_PATH ${CMAKE_CURRENT_BINARY_DIR}/lcrashkern.gz)
configure_file(setup/compressed/cckernel.S.in setup/compressed/cckernel.S)
target_include_directories(cckernel PRIVATE ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
# This is the actual bzImage used by linux/grub
lw_add_executable(lcrash
SOURCES setup/header.S lcrashkern_locs.h
)
target_include_directories(lcrash PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
add_executable(lcrashld IMPORTED)
set_property(TARGET lcrashld PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/setup/setup.ld)
set_property(TARGET lcrash PROPERTY LINK_DEPENDS
$<TARGET_FILE:lcrashld>
$<TARGET_FILE:LindowsCompilerSpec>
$<TARGET_FILE:cckernel>
)
set_property(TARGET lcrash PROPERTY LINK_OPTIONS -nostdlib -Wl,-T,${CMAKE_CURRENT_SOURCE_DIR}/setup/setup.ld)
add_custom_command(TARGET lcrash POST_BUILD
DEPENDS cckernel
COMMAND bash -c "truncate \"$<TARGET_FILE:lcrash>\" -s \"$((0x$(nm \"$<TARGET_FILE:lcrash>\" | grep \" _end$\" | cut -d\" \" -f 1)))\""
COMMAND dd "if=$<TARGET_FILE:cckernel>" "of=$<TARGET_FILE:lcrash>" conv=notrunc oflag=append
VERBATIM
)