79 lines
3.5 KiB
CMake
79 lines
3.5 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 irq.c irq.s 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 mm/virt.c driver/sysbus.c driver/vga.c driver/cap/textdisplay.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
|
|
)
|