build: fixed building on macOS

This commit is contained in:
karina
2026-04-21 00:09:30 +04:00
parent d42fc79c25
commit 41578c29d6
7 changed files with 57 additions and 9 deletions
+7 -2
View File
@@ -1,5 +1,9 @@
project(termOS_Bootloader LANGUAGES C ASM)
if(APPLE)
set(CMAKE_C_LINK_FLAGS "")
endif()
set(UEFI_COMPILE_OPTIONS
-std=c23
-target x86_64-unknown-windows-msvc
@@ -20,14 +24,15 @@ set(POSIX_UEFI_SOURCES
src/uefi/unistd.c
)
add_library(posix_uefi_lib STATIC ${POSIX_UEFI_SOURCES})
add_library(posix_uefi_lib OBJECT ${POSIX_UEFI_SOURCES})
target_compile_options(posix_uefi_lib PRIVATE ${UEFI_COMPILE_OPTIONS})
target_include_directories(posix_uefi_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src/uefi)
add_executable(BOOTX64 src/main.c)
target_compile_options(BOOTX64 PRIVATE ${UEFI_COMPILE_OPTIONS})
target_sources(BOOTX64 PRIVATE $<TARGET_OBJECTS:posix_uefi_lib>)
target_link_libraries(BOOTX64 PRIVATE posix_uefi_lib)
target_include_directories(BOOTX64 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/uefi)
target_link_options(BOOTX64 PRIVATE
-fuse-ld=lld
+3 -1
View File
@@ -64,7 +64,9 @@ if(QEMU_EXE)
add_custom_target(run
COMMAND ${QEMU_EXE}
#-enable-kvm
-bios ${OVMF_PATH}
$<$<BOOL:${APPLE}>:-machine> $<$<BOOL:${APPLE}>:q35>
$<$<BOOL:${APPLE}>:-drive> $<$<BOOL:${APPLE}>:if=pflash,format=raw,readonly=on,file=${OVMF_PATH}>
$<$<NOT:$<BOOL:${APPLE}>>:-bios> $<$<NOT:$<BOOL:${APPLE}>>:${OVMF_PATH}>
-drive file=${IMG_FILE},format=raw
-vga std
-net none
+11
View File
@@ -7,6 +7,17 @@ set(CMAKE_C_EXTENSIONS OFF)
message(STATUS "Building termOS's userspace")
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()
add_subdirectory(libterm)
add_subdirectory(init)
add_subdirectory(rust)
+1
View File
@@ -2,4 +2,5 @@
int main() {
ConsolePrint("Test test test \n Meow meow meow \n");
return 0;
}
+9 -1
View File
@@ -19,7 +19,13 @@ set(USER_C_FLAGS
-O2
)
set(CMAKE_ASM_NASM_FLAGS "-f elf64")
if(APPLE)
list(APPEND USER_C_FLAGS --target=x86_64-none-elf)
endif()
set(USER_C_FLAGS "${USER_C_FLAGS}" PARENT_SCOPE)
set(CMAKE_ASM_NASM_OBJECT_FORMAT elf64)
set(LIBTERM_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/OSServices.asm
@@ -31,12 +37,14 @@ set(LIBTERM_SOURCES
)
add_library(term STATIC ${LIBTERM_SOURCES})
set_target_properties(term PROPERTIES NASM_OBJ_FORMAT elf64)
target_compile_options(term PRIVATE $<$<COMPILE_LANGUAGE:C>:${USER_C_FLAGS}>)
target_include_directories(term PUBLIC inc)
add_library(RuntimeEntryObject OBJECT src/RuntimeEntry.asm)
set_target_properties(RuntimeEntryObject PROPERTIES NASM_OBJ_FORMAT elf64)
target_compile_options(RuntimeEntryObject PRIVATE $<$<COMPILE_LANGUAGE:C>:${USER_C_FLAGS}>)
function(add_termos_executable NAME SOURCES)
+8 -3
View File
@@ -3,7 +3,8 @@ project(rustApps NONE)
function(add_rust_app NAME)
set(RUST_TARGET "x86_64-termos")
set(RUST_ELF_FILE "${CMAKE_CURRENT_SOURCE_DIR}/target/${RUST_TARGET}/release/${NAME}")
set(RUST_TARGET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/target")
set(RUST_ELF_FILE "${RUST_TARGET_DIR}/${RUST_TARGET}/release/${NAME}")
set(STARTUP_VOLUME_DIR "${CMAKE_BINARY_DIR}/StartupVolume/System/CoreServices")
set(FINAL_HOT_PATH "${STARTUP_VOLUME_DIR}/${NAME}")
@@ -13,9 +14,13 @@ function(add_rust_app NAME)
file(MAKE_DIRECTORY "${STARTUP_VOLUME_DIR}")
add_custom_target(${NAME} ALL
COMMAND cargo build --package ${NAME} --release --target ${RUST_TARGET}
COMMAND ${CMAKE_COMMAND} -E env
"CARGO_TARGET_DIR=${RUST_TARGET_DIR}"
cargo build --package ${NAME} --release --target ${RUST_TARGET}
COMMAND objcopy --strip-all ${RUST_ELF_FILE} ${STRIPPED_ELF}
COMMAND ${CMAKE_COMMAND} -E env
"PATH=/usr/local/opt/llvm/bin:/opt/homebrew/opt/llvm/bin:$ENV{PATH}"
llvm-objcopy --strip-all ${RUST_ELF_FILE} ${STRIPPED_ELF}
COMMAND ${CMAKE_COMMAND} -E chdir ${ELF2HOT_DIR} cargo run --release --quiet -- ${STRIPPED_ELF} ${FINAL_HOT_PATH}
+17 -1
View File
@@ -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..."
)