cmake_minimum_required(VERSION 3.22) # # User is free to modify the file as much as necessary # set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_PROCESSOR arm) # Some default GCC settings # arm-none-eabi- must be part of path environment set(TOOLCHAIN_PREFIX arm-none-eabi-) set(FLAGS "-fdata-sections -ffunction-sections -Wl,--gc-sections") set(CPP_FLAGS "${FLAGS} -fno-rtti -fno-exceptions -fno-threadsafe-statics") set(CMAKE_C_FLAGS ${FLAGS}) set(CMAKE_CXX_FLAGS ${CPP_FLAGS}) set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy) set(CMAKE_SIZE ${TOOLCHAIN_PREFIX}size) set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf") set(CMAKE_EXECUTABLE_SUFFIX_C ".elf") set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf") set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) list(APPEND CMAKE_MODULE_PATH "{{sr:cmake_path}}") message("Build CMAKE_MODULE_PATH: " ${CMAKE_MODULE_PATH}) # Core project settings project(flexptp-tiva) 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, instruction set and FPU setup set(cpu_PARAMS ${cpu_PARAMS} -mthumb # Other parameters # -mcpu, -mfloat, -mfloat-abi, ... -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard ) # Linker script set(linker_script_SRC ${linker_script_SRC} ${CMAKE_CURRENT_SOURCE_DIR}/tm4c1294ncpdt.ld ) # Sources set(sources_SRCS ${sources_SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/Startup/tm4c1294ncpdt_startup.s ${CMAKE_CURRENT_SOURCE_DIR}/Startup/tm4c1294ncpdt_system.c ) # Include directories set(include_c_DIRS ${include_c_DIRS} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/Inc ${CMAKE_CURRENT_SOURCE_DIR}/Middlewares/Inc ${CMAKE_CURRENT_SOURCE_DIR}/Src ) 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 PART_TM4C1294NCPDT TARGET_IS_TM4C129_RA0 UART_BUFFERED DEBUG _FREERTOS RTOS_FREERTOS=1 UART_TX_BUFFER_SIZE=8192 gcc ) set(symbols_cxx_SYMB) set(symbols_asm_SYMB) # Link directories and names of libraries set(link_DIRS) set(link_LIBS freertos_kernel) # Compiler options set(compiler_OPTS) # Linker options set(linker_OPTS) # 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 Middlewares add_subdirectory(Middlewares) add_compile_definitions(CMSIS_device_header="${device_header}") # exported from Middlewares # Add Drivers add_subdirectory(Drivers) # Add Src add_subdirectory(Src) # Add Modules add_subdirectory(Modules) # 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-strict-prototypes -Wno-unused-parameter -ffunction-sections $<$: > $<$: # -Wno-volatile # -Wold-style-cast # -Wuseless-cast # -Wsuggest-override > $<$:-x assembler-with-cpp -MMD -MP> $<$:-O0 -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=nano.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 )