105 lines
3.3 KiB
CMake
105 lines
3.3 KiB
CMake
function(stm32_configure_linker_addresses target)
|
|
if(FLASH_ORIGIN)
|
|
target_link_options(${target}
|
|
PRIVATE "LINKER:--defsym=flash_origin=${FLASH_ORIGIN}"
|
|
)
|
|
else()
|
|
# We always need to set FLASH_ORIGIN so that the script
|
|
# toolchain/flash.in gets configured correctly.
|
|
set(FLASH_ORIGIN 0x00000000 PARENT_SCOPE)
|
|
endif()
|
|
|
|
if(FLASH_LENGTH)
|
|
target_link_options(${target}
|
|
PRIVATE "LINKER:--defsym=flash_length=${FLASH_LENGTH}"
|
|
)
|
|
endif()
|
|
|
|
if(RAM_ORIGIN)
|
|
target_link_options(${target}
|
|
PRIVATE "LINKER:--defsym=ram_origin=${RAM_ORIGIN}"
|
|
)
|
|
endif()
|
|
|
|
if(RAM_LENGTH)
|
|
target_link_options(${target}
|
|
PRIVATE "LINKER:--defsym=ram_length=${RAM_LENGTH}"
|
|
)
|
|
endif()
|
|
endfunction(stm32_configure_linker_addresses)
|
|
|
|
if (NOT DEFINED DEVICE)
|
|
message(FATAL_ERROR "No processor defined")
|
|
endif ()
|
|
message("Device: ${DEVICE}")
|
|
|
|
# Convert to upper case
|
|
string(TOUPPER ${DEVICE} DEVICE_U)
|
|
message("Processor: ${DEVICE_U}")
|
|
|
|
set(CPU_TYPE "m0plus")
|
|
|
|
|
|
# Set compiler flags
|
|
# Common arguments
|
|
add_definitions("-D${DEVICE}")
|
|
add_definitions("-DUSE_HAL_DRIVER")
|
|
set(COMMON_DEFINITIONS "-Wextra -Wall -Wno-unused-parameter -mcpu=cortex-${CPU_TYPE} -mthumb -fno-builtin -ffunction-sections -fdata-sections -fomit-frame-pointer -mfpu=fpv4-sp-d16 -mfloat-abi=soft ${OPTIONAL_DEBUG_SYMBOLS}")
|
|
set(DEPFLAGS "-MMD -MP")
|
|
|
|
# Enable FLTO optimization if required
|
|
if (USE_FLTO)
|
|
set(OPTFLAGS "-Os -flto")
|
|
else ()
|
|
set(OPTFLAGS "-Os")
|
|
endif ()
|
|
|
|
# Build flags
|
|
set(CMAKE_C_FLAGS "-std=gnu99 ${COMMON_DEFINITIONS} ${CPU_FIX} --specs=nano.specs ${DEPFLAGS}")
|
|
set(CMAKE_CXX_FLAGS "${COMMON_DEFINITIONS} ${CPU_FIX} --specs=nano.specs ${DEPFLAGS}")
|
|
set(CMAKE_ASM_FLAGS "${COMMON_DEFINITIONS} -x assembler-with-cpp -DLOOP_ADDR=0x8000")
|
|
|
|
# Set default inclusions
|
|
set(LIBS ${LIBS} -lgcc -lc -lnosys -lgcc -lc -lnosys)
|
|
|
|
# Debug Flags
|
|
set(COMMON_DEBUG_FLAGS "-O0 -g -gdwarf-2")
|
|
set(CMAKE_C_FLAGS_DEBUG "${COMMON_DEBUG_FLAGS}")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${COMMON_DEBUG_FLAGS}")
|
|
set(CMAKE_ASM_FLAGS_DEBUG "${COMMON_DEBUG_FLAGS}")
|
|
|
|
# Release Flags
|
|
set(COMMON_RELEASE_FLAGS "${OPTFLAGS} -DNDEBUG=1 -DRELEASE=1")
|
|
set(CMAKE_C_FLAGS_RELEASE "${COMMON_RELEASE_FLAGS}")
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${COMMON_RELEASE_FLAGS}")
|
|
set(CMAKE_ASM_FLAGS_RELEASE "${COMMON_RELEASE_FLAGS}")
|
|
|
|
# Print debug info helper function
|
|
function(print_debug_info)
|
|
message("COMPILER_PREFIX =${COMPILER_PREFIX}")
|
|
message("CMAKE_SOURCE_DIR =${CMAKE_SOURCE_DIR}")
|
|
message("CMAKE_C_COMPILER =${CMAKE_C_COMPILER}")
|
|
message("CMAKE_C_FLAGS =${CMAKE_C_FLAGS}")
|
|
message("CMAKE_C_LINK_EXECUTABLE =${CMAKE_C_LINK_EXECUTABLE}")
|
|
message("CMAKE_EXE_LINKER_FLAGS =${CMAKE_EXE_LINKER_FLAGS}")
|
|
message("CMAKE_AR =${CMAKE_AR}")
|
|
|
|
message("Definitions: ")
|
|
get_directory_property(defs DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS)
|
|
foreach (def ${defs})
|
|
message(STATUS "-D${def}")
|
|
endforeach ()
|
|
|
|
get_property(dirs TARGET ${PROJECT_NAME} PROPERTY INCLUDE_DIRECTORIES)
|
|
message("Includes: ")
|
|
foreach (dir ${dirs})
|
|
message(STATUS "${dir}")
|
|
endforeach ()
|
|
|
|
get_property(libs TARGET ${PROJECT_NAME} PROPERTY LINK_LIBRARIES)
|
|
message("Libraries:")
|
|
foreach (libs ${libs})
|
|
message(STATUS "${libs}")
|
|
endforeach ()
|
|
endfunction()
|