cmake_minimum_required(VERSION 3.22) # # Core project settings # set(PROJ_PATH ${CMAKE_CURRENT_SOURCE_DIR}) project(lwcell_stm32f429zi_nucleo_mqtt_client_api_rtos) 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_PARAMETERS -mthumb # Other parameters # -mcpu, -mfloat, -mfloat-abi, ... -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard ) # Set linker script set(linker_script_SRC ${PROJ_PATH}/STM32CubeIDE/Debug_STM32F429ZI_FLASH.ld) set(EXECUTABLE ${CMAKE_PROJECT_NAME}) # # Source files # set(src_freertos_SRCS ${PROJ_PATH}/../../lib/FreeRTOS/CMSIS_RTOS_V2/cmsis_os2.c ${PROJ_PATH}/../../lib/FreeRTOS/croutine.c ${PROJ_PATH}/../../lib/FreeRTOS/event_groups.c ${PROJ_PATH}/../../lib/FreeRTOS/portable/MemMang/heap_4.c ${PROJ_PATH}/../../lib/FreeRTOS/list.c ${PROJ_PATH}/../../lib/FreeRTOS/portable/GCC/ARM_CM4F/port.c ${PROJ_PATH}/../../lib/FreeRTOS/queue.c ${PROJ_PATH}/../../lib/FreeRTOS/tasks.c ${PROJ_PATH}/../../lib/FreeRTOS/timers.c) set(src_lwcell_api_SRCS ${PROJ_PATH}/../../../lwcell/src/api/lwcell_netconn.c ${PROJ_PATH}/../../../lwcell/src/api/lwcell_network_api.c) set(src_lwcell_SRCS ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_buff.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_call.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_conn.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_debug.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_device_info.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_evt.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_ftp.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_http.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_input.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_int.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_mem.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_network.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_operator.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_parser.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_pbuf.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_phonebook.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_ping.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_sim.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_sms.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_threads.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_timeout.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_unicode.c ${PROJ_PATH}/../../../lwcell/src/lwcell/lwcell_utils.c) set(src_lwcell_ll_SRCS ${PROJ_PATH}/../../../lwcell/src/system/lwcell_ll_stm32f429zi_nucleo.c ${PROJ_PATH}/../../../lwcell/src/system/lwcell_sys_cmsis_os.c) set(src_lwcell_apps_SRCS ${PROJ_PATH}/../../../lwcell/src/apps/mqtt/lwcell_mqtt_client.c ${PROJ_PATH}/../../../lwcell/src/apps/mqtt/lwcell_mqtt_client_api.c ${PROJ_PATH}/../../../lwcell/src/apps/mqtt/lwcell_mqtt_client_evt.c) set(src_lwcell_snippets_SRCS ${PROJ_PATH}/../../../snippets/mqtt_client_api.c ${PROJ_PATH}/../../../snippets/network_utils.c ${PROJ_PATH}/../../../snippets/sim_manager.c) set(src_stm32f4xx_hal_driver_SRCS ${PROJ_PATH}/../../lib/st/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_dma.c ${PROJ_PATH}/../../lib/st/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_exti.c ${PROJ_PATH}/../../lib/st/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_gpio.c ${PROJ_PATH}/../../lib/st/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_pwr.c ${PROJ_PATH}/../../lib/st/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_rcc.c ${PROJ_PATH}/../../lib/st/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usart.c ${PROJ_PATH}/../../lib/st/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_utils.c) set(src_user_SRCS ${PROJ_PATH}/src/main.c ${PROJ_PATH}/src/stm32f4xx_it.c ${PROJ_PATH}/src/syscalls.c ${PROJ_PATH}/src/system_stm32f4xx.c) set(src_startup_SRCS ${PROJ_PATH}/STM32CubeIDE/startup/startup_stm32f429xx.s) # # Include directories # set(include_c_DIRS ${PROJ_PATH}/inc ${PROJ_PATH}/../../../snippets/include ${PROJ_PATH}/../../../lwcell/src/include ${PROJ_PATH}/../../../lwcell/src/include/system/port/cmsis_os ${PROJ_PATH}/../../lib/st/CMSIS/Device/ST/STM32F4xx/Include ${PROJ_PATH}/../../lib/st/STM32F4xx_HAL_Driver/Inc ${PROJ_PATH}/../../lib/st/CMSIS/Include ${PROJ_PATH}/../../lib/FreeRTOS/include ${PROJ_PATH}/../../lib/FreeRTOS/CMSIS_RTOS_V2 ${PROJ_PATH}/../../lib/FreeRTOS/portable/GCC/ARM_CM4F ) set(include_cxx_DIRS ) set(include_asm_DIRS ) # # Symbols definition # set(symbols_c_SYMB "__weak=__attribute__((weak))" "HSE_VALUE=8000000" "__packed=__attribute__((__packed__))" "STM32F429xx" "USE_FULL_LL_DRIVER" ) set(symbols_cxx_SYMB "STM32F10X_MD" "USE_STDPERIPH_DRIVER" ) set(symbols_asm_SYMB ) # # Link directories setup # Must be before executable is added # set(link_DIRS ) link_directories(${EXECUTABLE} ${link_DIRS}) # # Executable files # add_executable(${EXECUTABLE} ${src_freertos_SRCS} ${src_lwcell_api_SRCS} ${src_lwcell_SRCS} ${src_lwcell_ll_SRCS} ${src_lwcell_apps_SRCS} ${src_lwcell_snippets_SRCS} ${src_stm32f4xx_hal_driver_SRCS} ${src_user_SRCS} ${src_startup_SRCS}) # # Add linked libraries for linker # set(link_LIBS ) target_link_libraries(${EXECUTABLE} ${link_LIBS}) # # Project symbols # target_compile_definitions(${EXECUTABLE} PRIVATE # Language specific only $<$: ${symbols_c_SYMB}> $<$: ${symbols_cxx_SYMB}> $<$: ${symbols_asm_SYMB}> # Configuration specific $<$: DEBUG > $<$: > ) # # Add include paths for each of the compiler # target_include_directories(${EXECUTABLE} PRIVATE # Language specific only $<$: ${include_c_DIRS}> $<$: ${include_cxx_DIRS}> $<$: ${include_asm_DIRS}> # Configuration specific $<$: > $<$: > ) # Compiler and linker options target_compile_options(${EXECUTABLE} PRIVATE ${CPU_PARAMETERS} -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 > ) # Setup linker parameters target_link_options(${EXECUTABLE} PRIVATE -T${linker_script_SRC} ${CPU_PARAMETERS} -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,--print-memory-usage ) # Execute post-build to print size add_custom_command(TARGET ${EXECUTABLE} POST_BUILD COMMAND ${CMAKE_SIZE} $ ) # Convert output to hex and binary add_custom_command(TARGET ${EXECUTABLE} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -O ihex $ ${EXECUTABLE}.hex ) # Convert to bin file -> add conditional check? add_custom_command(TARGET ${EXECUTABLE} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -O binary $ ${EXECUTABLE}.bin )