cmake_minimum_required(VERSION 3.10) # Toolchain setup (Must be before project()) include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/toolchain_arm_gcc.cmake") # Project Name project(rtthread-nano-stm32f407ve C ASM) # Toolchain setup set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") # set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/cmake/toolchain_arm_gcc.cmake") set(CMAKE_C_LINK_EXECUTABLE " -o ") set(CMAKE_CXX_LINK_EXECUTABLE " -o ") set(CMAKE_ASM_LINK_EXECUTABLE " -o ") # Clear Windows libraries set(CMAKE_C_STANDARD_LIBRARIES "") set(CMAKE_CXX_STANDARD_LIBRARIES "") set(CMAKE_ASM_STANDARD_LIBRARIES "") # Definitions add_definitions( -DSTM32F407xx -DUSE_HAL_DRIVER -DRT_USING_NEWLIB ) # Include Directories include_directories( app board/stm32f407ve rt-thread/include rt-thread/components/finsh drivers/CMSIS/Include drivers/CMSIS/Device/ST/STM32F4xx/Include drivers/STM32F4xx_HAL_Driver/Inc drivers/STM32F4xx_HAL_Driver/Inc/Legacy drivers/hal osal/include lwip/lwip-2.2.1/src/include lwip/port lwip/port/arch ) # Source Files file(GLOB_RECURSE APP_SOURCES "app/*.c") file(GLOB_RECURSE BOARD_SOURCES "board/stm32f407ve/*.c") file(GLOB_RECURSE DRIVER_SOURCES "drivers/STM32F4xx_HAL_Driver/Src/*.c") list(FILTER DRIVER_SOURCES EXCLUDE REGEX ".*_template.c$") file(GLOB_RECURSE HAL_SOURCES "drivers/hal/*.c") file(GLOB_RECURSE RTTHREAD_SOURCES "rt-thread/src/*.c") file(GLOB_RECURSE OSAL_SOURCES "osal/src/rtthread/*.c") file(GLOB_RECURSE LWIP_SOURCES "lwip/lwip-2.2.1/src/core/*.c" "lwip/lwip-2.2.1/src/api/*.c" "lwip/lwip-2.2.1/src/netif/*.c") file(GLOB_RECURSE LWIP_PORT_SOURCES "lwip/port/*.c") # System & Startup set(SYSTEM_SOURCES drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f407xx.s ) # Kernel Port (Cortex-M4) set(KERNEL_PORT_SOURCES rt-thread/libcpu/arm/cortex-m4/cpuport.c rt-thread/libcpu/arm/cortex-m4/context_gcc.S ) # Linker Script set(LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/board/stm32f407ve/link.lds") # Executable add_executable(${PROJECT_NAME} ${APP_SOURCES} ${BOARD_SOURCES} ${DRIVER_SOURCES} ${HAL_SOURCES} ${RTTHREAD_SOURCES} ${OSAL_SOURCES} ${LWIP_SOURCES} ${LWIP_PORT_SOURCES} ${SYSTEM_SOURCES} ${KERNEL_PORT_SOURCES} ) # Linker Options target_link_options(${PROJECT_NAME} PUBLIC -T${LINKER_SCRIPT} -Wl,-Map=${PROJECT_NAME}.map ) # Output Binary & Hex add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -O binary ${PROJECT_NAME}.elf ${PROJECT_NAME}.bin COMMAND ${CMAKE_OBJCOPY} -O ihex ${PROJECT_NAME}.elf ${PROJECT_NAME}.hex COMMAND ${CMAKE_SIZE} ${PROJECT_NAME}.elf )