Skip to content

Blinky mbed-os firmware does not link for tb_sense_12 board because of ARM library #4

@maxgerhardt

Description

@maxgerhardt

See https://community.platformio.org/t/silicon-labs-efm32-linker-fail-on-thunderboard-sense-2/18831.

When the example https://github.com/platformio/platform-siliconlabsefm32/tree/develop/examples/mbed-rtos-blink-baremetal

with the platformio.ini

[env:tb_sense_12]
platform = siliconlabsefm32
board = tb_sense_12
framework = mbed

is compiled, one gets

arm-none-eabi-g++ -o .pio\build\tb_sense_12\firmware.elf -T C:\Users\Trevor\Documents\PlatformIO\Projects\Thund_02\.pio\build\tb_sense_12\efr32mg12p.ld.link_script.ld -DMBED_BOOT_STACK_SIZE=1024 -DMBED_RAM_SIZE=0x40000 -DMBED_RAM_START=0x20000000 -DMBED_ROM_SIZE=0x100000 -DMBED_ROM_START=0x0 -DXIP_ENABLE=0 -Wl,--gc-sections -Wl,--wrap,_calloc_r -Wl,--wrap,_free_r -Wl,--wrap,_malloc_r -Wl,--wrap,_memalign_r -Wl,--wrap,_realloc_r -Wl,--wrap,atexit -Wl,--wrap,exit -Wl,--wrap,fprintf -Wl,--wrap,main -Wl,--wrap,printf -Wl,--wrap,snprintf -Wl,--wrap,sprintf -Wl,--wrap,vfprintf -Wl,--wrap,vprintf -Wl,--wrap,vsnprintf -Wl,--wrap,vsprintf -Wl,-n -mcpu=cortex-m4 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -mthumb @"C:\Users\Trevor\Documents\PlatformIO\Projects\Thund_02\.pio\build\tb_sense_12\longcmd-8c9bf32d6ff45c837f164ee574d2018c" -L.pio\build\tb_sense_12 -LC:\Users\Trevor\.platformio\packages\framework-mbed\targets\TARGET_Silicon_Labs\TARGET_SL_RAIL\efr32-rf-driver\rail -LC:\Users\Trevor\.platformio\packages\framework-mbed\targets\TARGET_Silicon_Labs\TARGET_SL_RAIL\efr32-rf-driver\rail\TARGET_EFR32_12 -Wl,--start-group -lrail_efr32xg12_release -lrail_efr32xg12_release.ar -lstdc++ -lsupc++ -lm -lc -lgcc -lnosys -lc -lgcc -Wl,--end-group
c:/users/trevor/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld.exe: cannot find -lrail_efr32xg12_release.ar
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\tb_sense_12\firmware.elf] Error 1

The problem is that the buld system tries wants to link two libraries

-lrail_efr32xg12_release -lrail_efr32xg12_release.ar

And it blindly wants to link all *.ar and *.a files in C:\Users\<user>\.platformio\packages\framework-mbed\targets\TARGET_Silicon_Labs\TARGET_SL_RAIL\efr32-rf-driver\rail\TARGET_EFR32_12.

But the .ar file is only for ARM compiler toolchain and not GCC-ARM, so the .ar file shouldn't be included in the first place.

The CMakeLists.txt logic doesn't seem to be executed at all to prevent this in C:\Users\<user>\.platformio\packages\framework-mbed\targets\TARGET_Silicon_Labs\TARGET_SL_RAIL\CMakeLists.txt.

# Copyright (c) 2020 ARM Limited. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

if("EFR32_12" IN_LIST MBED_TARGET_LABELS)
    if(${MBED_TOOLCHAIN} STREQUAL "ARM")
        set(LIB_RAIL efr32-rf-driver/rail/TARGET_EFR32_12/librail_efr32xg12_release.ar)
    elseif(${MBED_TOOLCHAIN} STREQUAL "GCC_ARM")
        set(LIB_RAIL efr32-rf-driver/rail/TARGET_EFR32_12/librail_efr32xg12_release.a)
    endif()
endif()

target_link_libraries(mbed-core INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/${LIB_RAIL})


target_include_directories(mbed-core
    INTERFACE
        efr32-rf-driver/rail
        efr32-rf-driver/rail/ble
        efr32-rf-driver/rail/ieee802154
)

it makes no difference if I also comment out the target_link_libraries line.

A temporary solution is to rename the librail_efr32xg12_release.ar file to something not ending in .ar or .a, e.g. librail_efr32xg12_release.ar.backup, then linking works.


Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions