Re: problems building a BME680 app: zephyr_prebuilt.elf uses VFP register arguments ....


Carles Cufi
 

On the same note, and to add to what Sebastian said, you should also know that you can change the floating point ABI in Zephyr by setting:

CONFIG_FP_SOFTABI=y
or
CONFIG_FP_HARDABI=y

in your prj.conf.

Carles

´╗┐On 07/05/2018, 18:50, "devel@... on behalf of Sebastian Boe" <devel@... on behalf of Sebastian.Boe@...> wrote:

Hi,

what the toolchain is saying is that it can't link

libgcc.a into zephyr_prebuilt.elf because they have an incompatible floating point ABI.

Perhaps

c:/program files (x86)/gnu tools arm embedded/7.0 2017q4/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m\libgcc.a(_popcountsi2.o)

uses a soft float ABI. You can determine this by running

"readelf -a libgcc.a"

on the library and grepping for "Tag_FP",
you should see something like

Tag_FP_arch: VFPv2

If it is indeed a soft-float library you could run "find c:/program files (x86)/gnu tools arm embedded/7.0 2017q4 -name libgcc.a"
to see if your toolchain has another libgcc.a that is built for hard-float.

See the similair, but different issue: https://github.com/zephyrproject-rtos/zephyr/issues/5771

________________________________________
From: devel@... <devel@...> on behalf of Abderrezak Mekkaoui <ab.mekka@...>
Sent: Monday, 7 May 2018 6:04:36 PM
To: devel@...
Subject: [Zephyr-devel] problems building a BME680 app: zephyr_prebuilt.elf uses VFP register arguments ....

Hi All,
I am having problems porting a BME680 app to Zephyr. This app uses a
pre-compiled library (libalgobsec.a) provided by Bosch.
It builds and runs correctly on mynewt (using the exact same tool chain
and the same flags). After solving few issues related to stdint I am
struggling with the last issues possibly related incompatibilities
between different libraries.
I think I am using the right compiler and linker flags (see below) but I
may be wrong.
Any hints/help would be greatly appreciated.
Regards
Abderrezak

P.S. I have other apps that build and run correctly using the same tool
chain (but use the default zephyr flags and have no need for an external
binary library). I am using a custom nrf52840 based board.



###########################################################################################################################################################
CMakelists.txt (latest flag settings, many other combinations all failed)

target_link_libraries(app libalgobsec.a)
target_link_libraries(app libm.a)

set(FPU_FOR_cortex-m4 fpv4-sp-d16)
target_link_libraries(app m.a)
zephyr_cc_option(-DFLOAT_ABI_HARD -mcpu=cortex-m4 -mthumb-interwork
-mthumb -mabi=aapcs -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fno-exceptions
-ffunction-sections -fdata-sections )
zephyr_ld_options(-static -specs=nosys.specs -lgcc -Wl,--gc-sections
-nostartfiles -mthumb -mabi=aapcs -mfloat-abi=hard -mfpu=fpv4-sp-d16
-DFLOAT_ABI_HARD -lalgobsec -lm)
#

###########################################################################################################################################################
Error messages (only few lines)

/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld.exe:
error: zephyr\zephyr_prebuilt.elf uses VFP register arguments,
c:/program files (x86)/gnu tools arm embedded/7.0
2017q4/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m\libgcc.a(_popcountsi2.o)
does not
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld.exe:
failed to merge target specific data of file c:/program files (x86)/gnu
tools arm embedded/7.0
2017q4/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m\libgcc.a(_popcountsi2.o)
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld.exe:
error: zephyr\zephyr_prebuilt.elf uses VFP register arguments,
c:/program files (x86)/gnu tools arm embedded/7.0
2017q4/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m\libgcc.a(_udivmoddi4.o)
does not
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld.exe:
failed to merge target specific data of file c:/program files (x86)/gnu
tools arm embedded/7.0
2017q4/bin/../lib/gcc/arm-none-eabi/7.2.1/thumb/v7e-m\libgcc.a(_udivmoddi4.o)
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld.exe:
error: zephyr\zephyr_prebuilt.elf uses VFP register arguments,
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib\libm.a(lib_a-sf_exp.o)
does not
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld.exe:
failed to merge target specific data of file
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib\libm.a(lib_a-sf_exp.o)
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld.exe:
error: zephyr\zephyr_prebuilt.elf uses VFP register arguments,
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib\libm.a(lib_a-sf_exp2_data.o)
does not
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld.exe:
failed to merge target specific data of file
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib\libm.a(lib_a-sf_exp2_data.o)
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld.exe:
error: zephyr\zephyr_prebuilt.elf uses VFP register arguments,
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib\libm.a(lib_a-sf_fabs.o)
does not
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/bin/ld.exe:
failed to merge target specific data of file
c:/progra~2/gnutoo~1/70922~1.020/bin/../lib/gcc/arm-none-eabi/7.2.1/../../../../arm-none-eabi/lib\libm.a(lib_a-sf_fabs.o)

Join devel@lists.zephyrproject.org to automatically receive all group messages.