added support for other platforms

This commit is contained in:
2026-04-20 16:11:45 +09:00
parent 2261985e7c
commit 02a99a01b0
4 changed files with 99 additions and 32 deletions
+48 -4
View File
@@ -1,10 +1,53 @@
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")
# --- Locate Swift toolchain with Embedded Swift stdlib ---
# Priority: cmake var > env var > auto-detect
if(NOT SWIFT_TOOLCHAIN AND DEFINED ENV{SWIFT_TOOLCHAIN})
set(SWIFT_TOOLCHAIN "$ENV{SWIFT_TOOLCHAIN}")
endif()
if(SWIFT_TOOLCHAIN)
set(SWIFTC "${SWIFT_TOOLCHAIN}/usr/bin/swiftc")
set(SWIFT_RESOURCE_DIR "${SWIFT_TOOLCHAIN}/usr/lib/swift")
elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
# Scan for a swift.org toolchain that ships the embedded stdlib.
# APPLE is false here (target is Generic), so we check the HOST OS.
file(GLOB _tc_candidates
"$ENV{HOME}/Library/Developer/Toolchains/*.xctoolchain"
"/Library/Developer/Toolchains/*.xctoolchain"
)
foreach(_tc ${_tc_candidates})
if(EXISTS "${_tc}/usr/lib/swift/embedded")
set(SWIFTC "${_tc}/usr/bin/swiftc")
set(SWIFT_RESOURCE_DIR "${_tc}/usr/lib/swift")
break()
endif()
endforeach()
else()
# Linux: find swiftc in PATH, derive resource dir from its location
find_program(_SWIFTC_EXE swiftc)
if(_SWIFTC_EXE)
get_filename_component(_SWIFTC_BIN "${_SWIFTC_EXE}" DIRECTORY)
get_filename_component(_SWIFTC_USR "${_SWIFTC_BIN}" DIRECTORY)
if(EXISTS "${_SWIFTC_USR}/lib/swift/embedded")
set(SWIFTC "${_SWIFTC_EXE}")
set(SWIFT_RESOURCE_DIR "${_SWIFTC_USR}/lib/swift")
endif()
endif()
endif()
if(NOT SWIFTC OR NOT EXISTS "${SWIFT_RESOURCE_DIR}/embedded")
message(FATAL_ERROR
"Swift toolchain with Embedded Swift not found.\n"
"Install a swift.org toolchain and pass -DSWIFT_TOOLCHAIN=<root> "
"or set the SWIFT_TOOLCHAIN env var.")
endif()
message(STATUS "Swift: ${SWIFTC}")
message(STATUS "Swift resource dir: ${SWIFT_RESOURCE_DIR}")
# --- Build ---
add_compile_options(-ffreestanding -nostdlib -O0 -g)
set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld)
@@ -16,7 +59,7 @@ add_link_options(
)
set(SWIFT_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Source/kernel.swift)
set(SWIFT_OBJ ${CMAKE_CURRENT_BINARY_DIR}/kernel_swift.o)
set(SWIFT_OBJ ${CMAKE_CURRENT_BINARY_DIR}/kernel_swift.o)
add_custom_command(
OUTPUT ${SWIFT_OBJ}
@@ -30,6 +73,7 @@ add_custom_command(
-resource-dir ${SWIFT_RESOURCE_DIR}
-c ${SWIFT_SOURCES}
-o ${SWIFT_OBJ}
COMMAND ${LLVM_OBJCOPY} --remove-section=.swift_modhash ${SWIFT_OBJ}
DEPENDS ${SWIFT_SOURCES}
COMMENT "Compiling Swift kernel"
)
+18 -6
View File
@@ -3,14 +3,26 @@ set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
if(NOT LLVM_BIN)
execute_process(COMMAND brew --prefix llvm OUTPUT_VARIABLE LLVM_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
set(LLVM_BIN "${LLVM_PREFIX}/bin")
if(APPLE)
execute_process(
COMMAND brew --prefix llvm
OUTPUT_VARIABLE LLVM_PREFIX
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(LLVM_BIN "${LLVM_PREFIX}/bin")
else()
find_program(_CLANG clang)
if(NOT _CLANG)
message(FATAL_ERROR "clang not found. Install: apt install clang lld / dnf install clang lld")
endif()
get_filename_component(LLVM_BIN "${_CLANG}" DIRECTORY)
endif()
endif()
set(CMAKE_C_COMPILER "${LLVM_BIN}/clang")
set(CMAKE_C_COMPILER "${LLVM_BIN}/clang")
set(CMAKE_ASM_COMPILER "${LLVM_BIN}/clang")
set(LLVM_OBJCOPY "${LLVM_BIN}/llvm-objcopy")
set(LLVM_OBJCOPY "${LLVM_BIN}/llvm-objcopy")
set(TARGET_TRIPLE aarch64-none-elf)
set(CMAKE_C_COMPILER_TARGET ${TARGET_TRIPLE})
set(CMAKE_ASM_COMPILER_TARGET ${TARGET_TRIPLE})
set(CMAKE_C_COMPILER_TARGET ${TARGET_TRIPLE})
set(CMAKE_ASM_COMPILER_TARGET ${TARGET_TRIPLE})
+1
View File
@@ -11,4 +11,5 @@ SECTIONS {
.rodata : { *(.rodata*) }
.data : { *(.data*) }
.bss : { *(.bss*) *(COMMON) }
}