cmake_minimum_required(VERSION 3.22) # # This file is generated only once, # and is not re-generated if converter is called multiple times. # # User is free to modify the file as much as necessary # # Core project settings project(CLS_Master) enable_language(C CXX ASM) message("Build type: " ${CMAKE_BUILD_TYPE}) # Setup compiler settings set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS ON) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS ON) # Core MCU flags, CPU type, instruction set and FPU setup set(cpu_PARAMS) # Sources set(sources_SRCS) # Include directories for all compilers set(include_DIRS) # Include directories for each compiler set(include_c_DIRS) set(include_cxx_DIRS) set(include_asm_DIRS) # Symbols definition for all compilers set(symbols_SYMB) # Symbols definition for each compiler set(symbols_c_SYMB) set(symbols_cxx_SYMB) set(symbols_asm_SYMB) # Link directories and names of libraries set(link_DIRS) set(link_LIBS) # Linker script set(linker_script_SRC) # Compiler options set(compiler_OPTS) # Linker options set(linker_OPTS) # Now call generated cmake # This will add script generated # information to the project include("cmake_generated/cmake_generated.cmake") # Link directories setup # Must be before executable is added link_directories(${CMAKE_PROJECT_NAME} ${link_DIRS}) # Create an executable object type add_executable(${CMAKE_PROJECT_NAME}) # Add sources to executable target_sources(${CMAKE_PROJECT_NAME} PUBLIC ${sources_SRCS}) # Add include paths target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${include_DIRS} $<$: ${include_c_DIRS}> $<$: ${include_cxx_DIRS}> $<$: ${include_asm_DIRS}> ) # Add project symbols (macros) target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE ${symbols_SYMB} $<$: ${symbols_c_SYMB}> $<$: ${symbols_cxx_SYMB}> $<$: ${symbols_asm_SYMB}> # Configuration specific $<$:DEBUG> $<$: > ) # Add linked libraries target_link_libraries(${CMAKE_PROJECT_NAME} ${link_LIBS}) # Compiler options target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE ${cpu_PARAMS} ${compiler_OPTS} -Wall -Wextra -Wpedantic -Wno-unused-parameter $<$: > $<$: # -Wno-volatile # -Wold-style-cast # -Wuseless-cast # -Wsuggest-override > $<$:-x assembler-with-cpp -MMD -MP> $<$:-Og -g3 -ggdb> $<$:-Og -g0> ) # Linker options target_link_options(${CMAKE_PROJECT_NAME} PRIVATE -T${linker_script_SRC} ${cpu_PARAMS} ${linker_OPTS} -Wl,-Map=${CMAKE_PROJECT_NAME}.map -u _printf_float # STDIO float formatting support (remove if not used) --specs=nosys.specs -Wl,--start-group -lc -lm -lstdc++ -lsupc++ -Wl,--end-group -Wl,-z,max-page-size=8 # Allow good software remapping across address space (with proper GCC section making) -Wl,--print-memory-usage ) # Execute post-build to print size, generate hex and bin add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_SIZE} $ COMMAND ${CMAKE_OBJCOPY} -O ihex $ ${CMAKE_PROJECT_NAME}.hex COMMAND ${CMAKE_OBJCOPY} -O binary $ ${CMAKE_PROJECT_NAME}.bin )