build: fixed building on macOS
This commit is contained in:
+17
-1
@@ -11,6 +11,17 @@ endif()
|
||||
|
||||
message(STATUS "Dewar kernel: Building for architecture '${ARCH}'")
|
||||
|
||||
set(TERMOS_OBJCOPY objcopy)
|
||||
if(APPLE)
|
||||
find_program(TERMOS_LD_LLD NAMES ld.lld HINTS /usr/local/bin /opt/homebrew/bin REQUIRED)
|
||||
find_program(TERMOS_OBJCOPY NAMES llvm-objcopy objcopy HINTS /usr/local/opt/llvm/bin /opt/homebrew/opt/llvm/bin REQUIRED)
|
||||
set(CMAKE_C_LINK_FLAGS "")
|
||||
set(CMAKE_ASM_NASM_COMPILE_OBJECT
|
||||
"<CMAKE_ASM_NASM_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -MD <DEP_FILE> -MT <DEP_TARGET> -f elf64 -o <OBJECT> <SOURCE>")
|
||||
set(CMAKE_C_LINK_EXECUTABLE
|
||||
"${TERMOS_LD_LLD} <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
|
||||
endif()
|
||||
|
||||
|
||||
file(GLOB_RECURSE KERNEL_SOURCES CMAKE_CONFIGURE_DEPENDS
|
||||
"src/kmain.c"
|
||||
@@ -30,6 +41,7 @@ file(GLOB_RECURSE KERNEL_SOURCES CMAKE_CONFIGURE_DEPENDS
|
||||
)
|
||||
|
||||
add_executable(kernel ${KERNEL_SOURCES})
|
||||
set_target_properties(kernel PROPERTIES NASM_OBJ_FORMAT elf64)
|
||||
|
||||
target_include_directories(kernel PRIVATE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/../common"
|
||||
@@ -40,6 +52,7 @@ target_include_directories(kernel PRIVATE
|
||||
|
||||
target_compile_options(kernel PRIVATE
|
||||
$<$<COMPILE_LANGUAGE:C>:
|
||||
$<$<BOOL:${APPLE}>:--target=x86_64-none-elf>
|
||||
-ffreestanding
|
||||
-mno-red-zone
|
||||
-fno-stack-protector
|
||||
@@ -49,6 +62,7 @@ target_compile_options(kernel PRIVATE
|
||||
-g
|
||||
-mno-sse -mno-sse2 -msoft-float
|
||||
>
|
||||
$<$<AND:$<BOOL:${APPLE}>,$<COMPILE_LANGUAGE:ASM>>:--target=x86_64-none-elf>
|
||||
)
|
||||
|
||||
target_link_options(kernel PRIVATE
|
||||
@@ -65,6 +79,8 @@ set_target_properties(kernel PROPERTIES
|
||||
)
|
||||
|
||||
add_custom_command(TARGET kernel POST_BUILD
|
||||
COMMAND objcopy -O binary $<TARGET_FILE:kernel> $<TARGET_FILE_DIR:kernel>/kernel.bin
|
||||
COMMAND ${CMAKE_COMMAND} -E env
|
||||
"PATH=/usr/local/opt/llvm/bin:/opt/homebrew/opt/llvm/bin:$ENV{PATH}"
|
||||
llvm-objcopy -O binary $<TARGET_FILE:kernel> $<TARGET_FILE_DIR:kernel>/kernel.bin
|
||||
COMMENT "Generating raw binary kernel.bin..."
|
||||
)
|
||||
Reference in New Issue
Block a user