cmake_minimum_required(VERSION 3.10) project(ksOSKernel LANGUAGES ASM C) set(SWIFT_TOOLCHAIN "$ENV{HOME}/Library/Developer/Toolchains/swift-6.2.3-RELEASE.xctoolchain") set(SWIFTC "${SWIFT_TOOLCHAIN}/usr/bin/swiftc") set(SWIFT_RESOURCE_DIR "${SWIFT_TOOLCHAIN}/usr/lib/swift") add_compile_options(-ffreestanding -nostdlib -O0 -g) set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld) add_link_options( -fuse-ld=lld -nostdlib -static -Wl,-T,${LINKER_SCRIPT} ) set(SWIFT_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Source/kernel.swift) set(SWIFT_OBJ ${CMAKE_CURRENT_BINARY_DIR}/kernel_swift.o) add_custom_command( OUTPUT ${SWIFT_OBJ} COMMAND ${SWIFTC} -target aarch64-none-none-elf -enable-experimental-feature Embedded -parse-as-library -wmo -O -Xcc -fno-stack-protector -resource-dir ${SWIFT_RESOURCE_DIR} -c ${SWIFT_SOURCES} -o ${SWIFT_OBJ} DEPENDS ${SWIFT_SOURCES} COMMENT "Compiling Swift kernel" ) set_source_files_properties(${SWIFT_OBJ} PROPERTIES EXTERNAL_OBJECT TRUE GENERATED TRUE ) add_executable(kernel.elf Source/entry.S Source/stubs.c ${SWIFT_OBJ}) add_custom_command(TARGET kernel.elf POST_BUILD COMMAND ${LLVM_OBJCOPY} -O binary kernel.elf kernel.bin COMMENT "kernel.elf -> kernel.bin" )