Skip to content

Fix ST targets naming and linker script issues #14275

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 14 additions & 9 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,20 @@ target_compile_definitions(mbed-core
${MBED_CONFIG_DEFINITIONS}
)

# We need to generate a "response file" to pass to the C preprocessor when we preprocess the linker
# script, because of path length limitations on Windows. We set the response file and bind the path
# to a global property here. The MBED_TARGET being built queries this global property when it sets
# the linker script.
#
# We must set this global property before the targets subdirectory is added to the project. This is
# required because the MBED_TARGET depends on the response file. If the path to the response file
# is not defined when the target requests it the config definitions will not be passed to CPP.
#
# TODO: Remove this and find a more idiomatic way of passing compile definitions to CPP without
# using response files or global properties.
mbed_generate_options_for_linker(mbed-core RESPONSE_FILE_PATH)
set_property(GLOBAL PROPERTY COMPILE_DEFS_RESPONSE_FILE ${RESPONSE_FILE_PATH})

# Add compile definitions for backward compatibility with the toolchain
# supported. New source files should instead check for __GNUC__ and __clang__
# for the GCC_ARM and ARM toolchains respectively.
Expand Down Expand Up @@ -144,15 +158,6 @@ endif()
# Note, this function will be removed in the next revisions
#
function(mbed_configure_app_target target)
# We need to generate a "response file" to pass to the C preprocessor because of path length
# limitations on Windows. We set the response file and bind the path to a global property here.
# We query this global property when we set the linker script for the MBED_TARGET being built.
#
# TODO: Remove this and find a more idiomatic way of passing compile definitions to CPP without
# using global properties.
mbed_generate_options_for_linker(${target} LINKER_PREPROCESS_DEFINITIONS)
set_property(GLOBAL PROPERTY COMPILE_DEFS_RESPONSE_FILE ${LINKER_PREPROCESS_DEFINITIONS})

# Gcc Arm requires memap to be set with app name, equally to ARMClang
# TODO: move this to toolchain and set properly
if(MBED_TOOLCHAIN STREQUAL "GCC_ARM")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,19 @@ elseif(${MBED_TOOLCHAIN} STREQUAL "ARM")
set(LINKER_FILE TOOLCHAIN_ARM/stm32f072xb.sct)
endif()

add_library(mbed-stm32f072xB INTERFACE)
add_library(mbed-stm32f072xb INTERFACE)

target_sources(mbed-stm32f072xB
target_sources(mbed-stm32f072xb
INTERFACE
system_clock.c
${STARTUP_FILE}
)

target_include_directories(mbed-stm32f072xB
target_include_directories(mbed-stm32f072xb
INTERFACE
.
)

mbed_set_linker_script(mbed-stm32f072xB ${CMAKE_CURRENT_SOURCE_DIR}/${LINKER_FILE})
mbed_set_linker_script(mbed-stm32f072xb ${CMAKE_CURRENT_SOURCE_DIR}/${LINKER_FILE})

target_link_libraries(mbed-stm32f072xB INTERFACE mbed-stm32f0)
target_link_libraries(mbed-stm32f072xb INTERFACE mbed-stm32f0)
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,19 @@ elseif(${MBED_TOOLCHAIN} STREQUAL "ARM")
set(LINKER_FILE TOOLCHAIN_ARM/stm32f103xb.sct)
endif()

add_library(mbed-stm32f103xB INTERFACE)
add_library(mbed-stm32f103xb INTERFACE)

target_sources(mbed-stm32f103xB
target_sources(mbed-stm32f103xb
INTERFACE
system_clock.c
${STARTUP_FILE}
)

target_include_directories(mbed-stm32f103xB
target_include_directories(mbed-stm32f103xb
INTERFACE
.
)

mbed_set_linker_script(mbed-stm32f103xB ${CMAKE_CURRENT_SOURCE_DIR}/${LINKER_FILE})
mbed_set_linker_script(mbed-stm32f103xb ${CMAKE_CURRENT_SOURCE_DIR}/${LINKER_FILE})

target_link_libraries(mbed-stm32f103xB INTERFACE mbed-stm32f1)
target_link_libraries(mbed-stm32f103xb INTERFACE mbed-stm32f1)
2 changes: 1 addition & 1 deletion targets/TARGET_STM/TARGET_STM32G0/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ target_include_directories(mbed-stm32g0
.
)

target_link_libraries(mbed-stm32g0 INTERFACE mbed-stm mbed-stm32g0cube-few)
target_link_libraries(mbed-stm32g0 INTERFACE mbed-stm mbed-stm32g0cube-fw)
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
# Copyright (c) 2020 ARM Limited. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

add_library(mbed-nucleo-h743ZI2 INTERFACE)
add_library(mbed-nucleo-h743zi2 INTERFACE)

target_sources(mbed-nucleo-h743ZI2
target_sources(mbed-nucleo-h743zi2
INTERFACE
PeripheralPins.c
system_clock.c
)

target_include_directories(mbed-nucleo-h743ZI2
target_include_directories(mbed-nucleo-h743zi2
INTERFACE
.
)

target_link_libraries(mbed-nucleo-h743ZI2 INTERFACE mbed-stm32h743xi)
target_link_libraries(mbed-nucleo-h743zi2 INTERFACE mbed-stm32h743xi)
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ target_link_libraries(mbed-xdot-l151cc INTERFACE mbed-stm32l1)


# Same target as XDOT_L151CC
add_library(mbed-ff-1705-l151cc INTERFACE)
add_library(mbed-ff1705-l151cc INTERFACE)

target_link_libraries(mbed-xdot-l151cc INTERFACE mbed-xdot-l151cc)
target_link_libraries(mbed-ff1705-l151cc INTERFACE mbed-xdot-l151cc)

Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,7 @@ target_include_directories(mbed-nucleo-l496zg
)

target_link_libraries(mbed-nucleo-l496zg INTERFACE mbed-stm32l496xg)


add_library(mbed-nucleo-l496zg-p INTERFACE)
target_link_libraries(mbed-nucleo-l496zg-p INTERFACE mbed-nucleo-l496zg)
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,19 @@ elseif(${MBED_TOOLCHAIN} STREQUAL "ARM")
set(LINKER_FILE TOOLCHAIN_ARM/stm32l4r9xi.sct)
endif()

add_library(mbed-stm32l4r9xI INTERFACE)
add_library(mbed-stm32l4r9xi INTERFACE)

target_sources(mbed-stm32l4r9xI
target_sources(mbed-stm32l4r9xi
INTERFACE
system_clock.c
${STARTUP_FILE}
)

target_include_directories(mbed-stm32l4r9xI
target_include_directories(mbed-stm32l4r9xi
INTERFACE
.
)

mbed_set_linker_script(mbed-stm32l4r9xI ${CMAKE_CURRENT_SOURCE_DIR}/${LINKER_FILE})
mbed_set_linker_script(mbed-stm32l4r9xi ${CMAKE_CURRENT_SOURCE_DIR}/${LINKER_FILE})

target_link_libraries(mbed-stm32l4r9xI INTERFACE mbed-stm32l4)
target_link_libraries(mbed-stm32l4r9xi INTERFACE mbed-stm32l4)
6 changes: 3 additions & 3 deletions tools/cmake/toolchain.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
# SPDX-License-Identifier: Apache-2.0

# Generate a file containing compile definitions
function(mbed_generate_options_for_linker target definitions_file)
function(mbed_generate_options_for_linker target output_response_file_path)
set(_compile_definitions
"$<TARGET_PROPERTY:${target},COMPILE_DEFINITIONS>"
"$<TARGET_PROPERTY:${target},INTERFACE_COMPILE_DEFINITIONS>"
)

# Remove macro definitions that contain spaces as the lack of escape sequences and quotation marks
Expand All @@ -20,7 +20,7 @@ function(mbed_generate_options_for_linker target definitions_file)
"$<$<BOOL:${_compile_definitions}>:-D$<JOIN:${_compile_definitions}, -D>>"
)
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/compile_time_defs.txt" CONTENT "${_compile_definitions}\n")
set(${definitions_file} @${CMAKE_CURRENT_BINARY_DIR}/compile_time_defs.txt PARENT_SCOPE)
set(${output_response_file_path} @${CMAKE_CURRENT_BINARY_DIR}/compile_time_defs.txt PARENT_SCOPE)
endfunction()
# Set the system processor depending on the CPU core type
if (MBED_CPU_CORE STREQUAL Cortex-A9)
Expand Down