mirror of
https://github.com/johndoe6345789/MetalOS.git
synced 2026-04-24 13:45:02 +00:00
Add Clang compiler support alongside GCC
Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
This commit is contained in:
@@ -18,6 +18,17 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
# Export compile commands for IDE support
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Compiler detection and configuration
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
message(STATUS "Using Clang compiler")
|
||||
set(USING_CLANG TRUE)
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
message(STATUS "Using GCC compiler")
|
||||
set(USING_GCC TRUE)
|
||||
else()
|
||||
message(WARNING "Unsupported compiler: ${CMAKE_CXX_COMPILER_ID}")
|
||||
endif()
|
||||
|
||||
# Default to Release build if not specified
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
|
||||
|
||||
18
README.md
18
README.md
@@ -87,6 +87,24 @@ ninja
|
||||
ninja qemu
|
||||
```
|
||||
|
||||
### Building with Clang
|
||||
|
||||
MetalOS supports both GCC and Clang compilers. To build with Clang:
|
||||
|
||||
```bash
|
||||
mkdir build && cd build
|
||||
CC=clang CXX=clang++ cmake ..
|
||||
cmake --build .
|
||||
```
|
||||
|
||||
Or with Ninja:
|
||||
|
||||
```bash
|
||||
mkdir build && cd build
|
||||
CC=clang CXX=clang++ cmake -G Ninja ..
|
||||
ninja
|
||||
```
|
||||
|
||||
### Conan (With Package Management)
|
||||
|
||||
```bash
|
||||
|
||||
@@ -30,12 +30,21 @@ set(UEFI_CFLAGS
|
||||
)
|
||||
|
||||
# Linker flags for UEFI
|
||||
set(UEFI_LDFLAGS
|
||||
-shared
|
||||
-Bsymbolic
|
||||
-nostdlib
|
||||
-znocombreloc
|
||||
)
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
set(UEFI_LDFLAGS
|
||||
-shared
|
||||
-Bsymbolic
|
||||
-nostdlib
|
||||
-Wl,-z,nocombreloc
|
||||
)
|
||||
else()
|
||||
set(UEFI_LDFLAGS
|
||||
-shared
|
||||
-Bsymbolic
|
||||
-nostdlib
|
||||
-znocombreloc
|
||||
)
|
||||
endif()
|
||||
|
||||
# Create object library
|
||||
add_library(bootloader_obj OBJECT ${BOOTLOADER_SOURCES})
|
||||
|
||||
@@ -55,6 +55,16 @@ set(KERNEL_CXXFLAGS
|
||||
-O2
|
||||
)
|
||||
|
||||
# Add Clang-specific flags
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
list(APPEND KERNEL_CXXFLAGS
|
||||
-target x86_64-unknown-none-elf
|
||||
-fno-builtin
|
||||
-fno-pie
|
||||
)
|
||||
message(STATUS "Added Clang-specific flags for kernel")
|
||||
endif()
|
||||
|
||||
# Create object library
|
||||
add_library(kernel_obj OBJECT ${KERNEL_SOURCES})
|
||||
target_include_directories(kernel_obj PRIVATE include)
|
||||
@@ -67,11 +77,22 @@ set_target_properties(kernel_elf PROPERTIES
|
||||
LINKER_LANGUAGE CXX
|
||||
POSITION_INDEPENDENT_CODE OFF
|
||||
)
|
||||
target_link_options(kernel_elf PRIVATE
|
||||
-nostdlib
|
||||
-no-pie
|
||||
-T ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld
|
||||
)
|
||||
|
||||
# Set linker options based on compiler
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
target_link_options(kernel_elf PRIVATE
|
||||
-nostdlib
|
||||
-Wl,--no-pie
|
||||
-T ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld
|
||||
-target x86_64-unknown-none-elf
|
||||
)
|
||||
else()
|
||||
target_link_options(kernel_elf PRIVATE
|
||||
-nostdlib
|
||||
-no-pie
|
||||
-T ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld
|
||||
)
|
||||
endif()
|
||||
|
||||
# Custom command to create flat binary
|
||||
add_custom_command(
|
||||
|
||||
Reference in New Issue
Block a user