build: fixed building on macOS
This commit is contained in:
+7
-2
@@ -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
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -2,4 +2,5 @@
|
||||
|
||||
int main() {
|
||||
ConsolePrint("Test test test \n Meow meow meow \n");
|
||||
return 0;
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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