Files
claude-os/CMakeLists.txt

59 lines
2.8 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(ClaudeOS C ASM)
set(CMAKE_C_STANDARD 99)
# We are building a kernel, so we don't want standard libraries
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffreestanding -m32 -fno-pie -fno-pic -fno-builtin -fno-stack-protector -g -O2 -Wall -Wextra")
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -m32 -fno-pie -fno-pic")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32 -nostdlib -no-pie")
# Define build output directory
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
add_subdirectory(src)
# Create output directories
file(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/release)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/isodir/boot/grub)
# Create grub.cfg for ISO
file(WRITE ${CMAKE_BINARY_DIR}/isodir/boot/grub/grub.cfg "set timeout=0\nset default=0\nsearch --set=root --file /boot/kernel.bin\nmenuentry \"ClaudeOS\" { multiboot /boot/kernel.bin }")
# Create grub.cfg for Floppy
file(WRITE ${CMAKE_BINARY_DIR}/floppy.cfg "set timeout=0\nset default=0\nmenuentry \"ClaudeOS\" { set root=(fd0); multiboot /boot/kernel.bin }")
# ISO Generation
add_custom_target(iso ALL
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/kernel ${CMAKE_BINARY_DIR}/isodir/boot/kernel.bin
COMMAND grub-mkrescue -o ${CMAKE_SOURCE_DIR}/release/claude-os.iso ${CMAKE_BINARY_DIR}/isodir
DEPENDS kernel
COMMENT "Generating bootable ISO image"
)
# Floppy Generation
add_custom_target(floppy ALL
COMMAND dd if=/dev/zero of=${CMAKE_SOURCE_DIR}/release/claude-os.img bs=512 count=2880
COMMAND mkfs.fat -F 12 -n "CLAUDEOS" ${CMAKE_SOURCE_DIR}/release/claude-os.img
COMMAND mmd -i ${CMAKE_SOURCE_DIR}/release/claude-os.img ::/boot
COMMAND mcopy -i ${CMAKE_SOURCE_DIR}/release/claude-os.img ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/kernel ::/boot/kernel.bin
COMMAND mmd -i ${CMAKE_SOURCE_DIR}/release/claude-os.img ::/boot/grub
COMMAND mcopy -i ${CMAKE_SOURCE_DIR}/release/claude-os.img ${CMAKE_BINARY_DIR}/floppy.cfg ::/boot/grub/grub.cfg
COMMAND grub-mkimage -O i386-pc -o ${CMAKE_BINARY_DIR}/core.img -p \"(fd0)/boot/grub\" -c ${CMAKE_BINARY_DIR}/floppy.cfg biosdisk part_msdos fat multiboot normal boot configfile search_fs_file
COMMAND cat /usr/lib/grub/i386-pc/boot.img ${CMAKE_BINARY_DIR}/core.img > ${CMAKE_BINARY_DIR}/grub_boot.img
COMMAND dd if=${CMAKE_BINARY_DIR}/grub_boot.img of=${CMAKE_SOURCE_DIR}/release/claude-os.img conv=notrunc
DEPENDS kernel
COMMENT "Generating bootable Floppy image"
)
# Test target
add_custom_target(test_images
COMMAND sh ${CMAKE_SOURCE_DIR}/test_images.sh
DEPENDS iso floppy
COMMENT "Testing generated images in QEMU"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)