diff options
| author | Alexey Gavrilov <alexey.gavrilov@mail.com> | 2026-03-30 17:50:25 +0700 |
|---|---|---|
| committer | Alexey Gavrilov <alexey.gavrilov@mail.com> | 2026-03-30 17:50:25 +0700 |
| commit | e5eb32a5123920d18a55819bcea8a23b3a3e0f4d (patch) | |
| tree | dfd7935ba4e911ba4354b5f611d841769c264c62 | |
| parent | 256b2c871a0f3ac0175de298b78c6ea527f42f60 (diff) | |
Cmake status information output
Reinforce of compiler, C runtime, architecture checks at cmake
configuration.
Compiler check means continue building at the cmake configure
stage only for supported compilers. Use unsupported compiler
involves immediate build process stopping.
C runtime check means finding of runtime objects. Especially for
*crtbegin.o* and *crtend.o* files.
Architecture means *ObjectiveProject_ARCHITECTURE* variable is set.
That variable configure at toolchain file by default and cannot
override if toolchain file is passed.
TODO
- Image creation
- Build under window platform (optional)
Signed-off-by: Alexey Gavrilov <alexey.gavrilov@mail.com>
| -rw-r--r-- | CMakeLists.txt | 53 | ||||
| -rw-r--r-- | arch/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | cmake/toolchain/x86_generic_clang.cmake | 1 | ||||
| -rw-r--r-- | cmake/toolchain/x86_generic_gcc.cmake | 1 | ||||
| -rw-r--r-- | libgcc/CMakeLists.txt | 7 |
5 files changed, 51 insertions, 13 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c6d9912..d9e5643 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,12 +2,20 @@ # which include farther subprojects source codes # Expected input variables: -# ARCH: type of architecture +# ObjectiveProject_ARCHITECTURE: type of architecture cmake_minimum_required(VERSION 3.25) +list(APPEND CMAKE_MESSAGE_CONTEXT ObjectiveProject) project(ObjectiveProject LANGUAGES CXX ASM_NASM) +# Check on supported compiler +if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") + message(STATUS "${CMAKE_CXX_COMPILER_ID} compiler is supported") +else() + message(FATAL_ERROR "${CMAKE_CXX_COMPILER_ID} compiler isn't supported") +endif() + set(ObjectiveProject_CXX_FLAGS $<$<CONFIG:Debug>:-Wall -Wextra -ggdb -g3 -O0> $<$<CONFIG:Release>:-Wall -Werror> @@ -36,11 +44,19 @@ set(CMAKE_CXX_EXTENSIONS OFF) add_executable(Objective) # Set architecture by default if not present -if(NOT ARCH IN_LIST OBJECTIVE_SUPPORTED_PROCESSORS) - list(GET OBJECTIVE_SUPPORTED_PROCESSORS 0 ARCH) +if(NOT ObjectiveProject_ARCHITECTURE IN_LIST OBJECTIVE_SUPPORTED_PROCESSORS) + if(ObjectiveProject_ARCHITECTURE STREQUAL "" OR NOT DEFINED ObjectiveProject_ARCHITECTURE) + message(FATAL_ERROR "Architecture isn't set") + else() + message(FATAL_ERROR "${ObjectiveProject_ARCHITECTURE} - unknown architecture") + endif() + list(GET OBJECTIVE_SUPPORTED_PROCESSORS 0 ObjectiveProject_ARCHITECTURE) + message(STATUS "Set up architecture by default - ${ObjectiveProject_ARCHITECTURE}") +else() + message(STATUS "${ObjectiveProject_ARCHITECTURE} - choosed architecture") endif() -# Create target with compiler requirements (include directories, flags and etc) +# Create targets with compilers requirements (include directories, flags and etc) add_library(CXX_COMPILER_REQUIREMENTS INTERFACE) add_library(ASM_NASM_COMPILER_REQUIREMENTS INTERFACE) @@ -53,13 +69,12 @@ target_link_libraries(CXX_LINKER_REQUIREMENTS INTERFACE gcc ) -# Set compiler flags -if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") - target_compile_options(CXX_COMPILER_REQUIREMENTS INTERFACE - ${ObjectiveProject_CXX_FLAGS} - ) -endif() +# Set cxx compiler flags +target_compile_options(CXX_COMPILER_REQUIREMENTS INTERFACE + ${ObjectiveProject_CXX_FLAGS} +) +# Set nasm compiler flags target_compile_options(ASM_NASM_COMPILER_REQUIREMENTS INTERFACE ${ObjectiveProject_ASM_NASM_FLAGS} ) @@ -69,7 +84,7 @@ target_include_directories(CXX_COMPILER_REQUIREMENTS ${ObjectiveProject_SOURCE_DIR}/include ) -# Subscribe compiler requirements to Object executable +# Subscribe compiler requirements to Objective executable target_link_libraries(Objective PUBLIC CXX_COMPILER_REQUIREMENTS) add_subdirectory(arch) @@ -90,4 +105,20 @@ target_link_libraries(Objective PRIVATE CRTN ) +# Set cxx linker options target_link_libraries(Objective PRIVATE CXX_LINKER_REQUIREMENTS) + +# Targets to show output of generator expression +add_custom_target(options + COMMENT "Toolset passed options" + COMMAND ${CMAKE_COMMAND} -E echo + "CXX compiler options: " + "$<JOIN:$<TARGET_PROPERTY:CXX_COMPILER_REQUIREMENTS,INTERFACE_COMPILE_OPTIONS>, >" + COMMAND ${CMAKE_COMMAND} -E echo + "NASM compiler options: " + "$<JOIN:$<TARGET_PROPERTY:ASM_NASM_COMPILER_REQUIREMENTS,INTERFACE_COMPILE_OPTIONS>, >" + COMMAND ${CMAKE_COMMAND} -E echo + "Linker options: " + "$<JOIN:$<TARGET_PROPERTY:CXX_LINKER_REQUIREMENTS,INTERFACE_LINK_OPTIONS>, >" + VERBATIM +) diff --git a/arch/CMakeLists.txt b/arch/CMakeLists.txt index c8719ce..0491df7 100644 --- a/arch/CMakeLists.txt +++ b/arch/CMakeLists.txt @@ -14,4 +14,4 @@ target_sources(Initialization ${CMAKE_CURRENT_LIST_DIR}/SecondaryInit.h ) -add_subdirectory(${ARCH}) +add_subdirectory(${ObjectiveProject_ARCHITECTURE}) diff --git a/cmake/toolchain/x86_generic_clang.cmake b/cmake/toolchain/x86_generic_clang.cmake index 696568e..23b3b80 100644 --- a/cmake/toolchain/x86_generic_clang.cmake +++ b/cmake/toolchain/x86_generic_clang.cmake @@ -1,6 +1,7 @@ set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_CROSSCOMPILING true) set(CMAKE_SYSTEM_PROCESSOR i686) +set(ObjectiveProject_ARCHITECTURE x86) set(CMAKE_ASM_NASM_OBJECT_FORMAT elf32) diff --git a/cmake/toolchain/x86_generic_gcc.cmake b/cmake/toolchain/x86_generic_gcc.cmake index 8ea769e..a284bb3 100644 --- a/cmake/toolchain/x86_generic_gcc.cmake +++ b/cmake/toolchain/x86_generic_gcc.cmake @@ -1,6 +1,7 @@ set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_CROSSCOMPILING true) set(CMAKE_SYSTEM_PROCESSOR i686) +set(ObjectiveProject_ARCHITECTURE x86) set(CMAKE_ASM_NASM_OBJECT_FORMAT elf32) diff --git a/libgcc/CMakeLists.txt b/libgcc/CMakeLists.txt index b5b2abc..6fd97b6 100644 --- a/libgcc/CMakeLists.txt +++ b/libgcc/CMakeLists.txt @@ -1,3 +1,6 @@ +list(APPEND CMAKE_MESSAGE_CONTEXT libgcc) +message(STATUS "Searching CRT objects") + macro(setup_crt_object_file object_file target_name) execute_process( COMMAND ${CMAKE_CXX_COMPILER} --print-file-name=${object_file} @@ -11,6 +14,7 @@ macro(setup_crt_object_file object_file target_name) message(FATAL_ERROR ${ERROR_MESSAGE}) endif() + message(STATUS "${object_file} was found at the ${PATH} path") add_library(${target_name} OBJECT IMPORTED GLOBAL) set_target_properties(${target_name} PROPERTIES IMPORTED_OBJECTS ${PATH} @@ -22,4 +26,5 @@ endmacro() setup_crt_object_file(crtbegin.o CRTBEGIN) setup_crt_object_file(crtend.o CRTEND) -add_subdirectory(${ARCH}) +message(STATUS "The CRT objects were found") +add_subdirectory(${ObjectiveProject_ARCHITECTURE}) |
