Compiler options when using SDK built from 'bitbake meta-toolchain'

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Compiler options when using SDK built from 'bitbake meta-toolchain'

Jump to solution
7,008 Views
admin
Specialist II

If I am building code using arm-poky-linux-gnueabi-g++ / arm-poky-linux-gnueabi-gcc from the SDK generated by 'bitbake meta-toolchain', should I be using options like -mcpu=cortex-a9, -mfpu=neon, -mfloat-abi=softfp, etc.. ? And if so what would be the recommended options for the best performance? (This code would be specific to the iMX6D)

Labels (2)
0 Kudos
1 Solution
2,973 Views
LeonardoSandova
Specialist I

Have you run the script which setup the cross compiler's environment?

/opt/poky/1.5/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi

It has some environment variables and I believe these are tuned for the ARM platform.

Leo

View solution in original post

0 Kudos
4 Replies
2,973 Views
hchristo
Contributor I

I am having difficulty linking. I am using Poky 1.8.

I used bitbake meta-toolchain to create the toolchain.

Ran the environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi.sh script

source environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi

However, the linker cannot find some object files and libraries:

10:17:28 **** Incremental Build of configuration Debug for project remote_test ****

make pre-build main-build

/opt/poky/1.8/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi

Building target: remote_test

Invoking: Cross ARM C Linker

arm-poky-linux-gnueabi-gcc -mcpu=cortex-a9 -march=armv7-a -mthumb -O2 -Wall  -g3 -ggdb -Xlinker --gc-sections -L/opt/poky/1.8/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/lib/ -L/opt/poky/1.8/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/ -L/opt/poky/1.8/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/lib/arm-poky-linux-gnueabi/4.9.2/ -Wl,-Map,"remote_test.map" -v -g3 -o "remote_test"  ./src/remote_test.o  

Using built-in specs.

COLLECT_GCC=arm-poky-linux-gnueabi-gcc

COLLECT_LTO_WRAPPER=/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/lto-wrapper

Target: arm-poky-linux-gnueabi

Configured with: /mnt/80G_DRIVE/pheonix/fsl-community-bsp/build/tmp/work-shared/gcc-4.9.2-r0/gcc-4.9.2/configure --build=i686-linux --host=i686-pokysdk-linux --target=arm-poky-linux-gnueabi --prefix=/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr --exec_prefix=/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr --bindir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi --sbindir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi --libexecdir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi --datadir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/share --sysconfdir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/etc --sharedstatedir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/com --localstatedir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/var --libdir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/lib/arm-poky-linux-gnueabi --includedir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/include --oldincludedir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/include --infodir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/share/info --mandir=/opt/poky/1.8/sysroots/i686-pokysdk-linux/usr/share/man --disable-silent-rules --disable-dependency-tracking --with-libtool-sysroot=/mnt/80G_DRIVE/pheonix/fsl-community-bsp/build/tmp/sysroots/i686-nativesdk-pokysdk-linux --with-gnu-ld --enable-shared --enable-languages=c,c++ --enable-threads=posix --enable-multilib --enable-c99 --enable-long-long --enable-symvers=gnu --enable-libstdcxx-pch --program-prefix=arm-poky-linux-gnueabi- --without-local-prefix --enable-target-optspace --enable-lto --enable-libssp --disable-bootstrap --disable-libmudflap --with-system-zlib --with-linker-hash-style=gnu --enable-linker-build-id --with-ppl=no --with-cloog=no --enable-checking=release --enable-cheaders=c_global --with-gxx-include-dir=/not/exist/usr/include/c++/4.9.2 --with-build-time-tools=/mnt/80G_DRIVE/pheonix/fsl-community-bsp/build/tmp/sysroots/i686-linux/usr/arm-poky-linux-gnueabi/bin --with-sysroot=/not/exist --with-build-sysroot=/mnt/80G_DRIVE/pheonix/fsl-community-bsp/build/tmp/sysroots/imx6sxsabresd --enable-poison-system-directories --with-mpfr=/mnt/80G_DRIVE/pheonix/fsl-community-bsp/build/tmp/sysroots/i686-nativesdk-pokysdk-linux --with-mpc=/mnt/80G_DRIVE/pheonix/fsl-community-bsp/build/tmp/sysroots/i686-nativesdk-pokysdk-linux --enable-nls --with-arch=armv7-a

Thread model: posix

gcc version 4.9.2 (GCC)

COMPILER_PATH=/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/:/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/

LIBRARY_PATH=/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../lib/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/:/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../lib/arm-poky-linux-gnueabi/gcc/

COLLECT_GCC_OPTIONS='-mcpu=cortex-a9' '-march=armv7-a' '-mthumb' '-O2' '-Wall' '-g3' '-ggdb' '-L/opt/poky/1.8/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/lib/' '-L/opt/poky/1.8/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/' '-L/opt/poky/1.8/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/lib/arm-poky-linux-gnueabi/4.9.2/' '-v' '-g3' '-o' 'remote_test' '-mtls-dialect=gnu'

/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/collect2 -plugin /mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/liblto_plugin.so -plugin-opt=/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/lto-wrapper -plugin-opt=-fresolution=/tmp/ccMzA6PN.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --sysroot=/not/exist --build-id --eh-frame-hdr --hash-style=gnu -dynamic-linker /lib/ld-linux.so.3 -X -m armelf_linux_eabi -o remote_test crt1.o crti.o crtbegin.o -L/opt/poky/1.8/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/lib/ -L/opt/poky/1.8/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/ -L/opt/poky/1.8/sysroots/cortexa9hf-vfp-neon-poky-linux-gnueabi/usr/lib/arm-poky-linux-gnueabi/4.9.2/ -L/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../lib/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2 -L/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../lib/arm-poky-linux-gnueabi/gcc --gc-sections -Map remote_test.map ./src/remote_test.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed crtend.o crtn.o

/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find crt1.o: No such file or directory

/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find crti.o: No such file or directory

/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find crtbegin.o: No such file or directory

/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find -lgcc_s

/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find /lib/libc.so.6

/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find /usr/lib/libc_nonshared.a

/mnt/80G_DRIVE/pheonix/fsl-community-bsp/poky/1.8/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/../../libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/ld: cannot find /lib/ld-linux-armhf.so.3

collect2: error: ld returned 1 exit status

make: *** [remote_test] Error 1

0 Kudos
2,974 Views
LeonardoSandova
Specialist I

Have you run the script which setup the cross compiler's environment?

/opt/poky/1.5/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi

It has some environment variables and I believe these are tuned for the ARM platform.

Leo

0 Kudos
2,973 Views
admin
Specialist II

Thanks!

Specifically I have been developing, compiling, and remote debugging using the Eclipse CDT so that file wasn't being used by default.

The file you mentioned though shows:

export CC="arm-poky-linux-gnueabi-gcc  -march=armv7-a -mthumb-interwork -mfloat-abi=softfp -mfpu=neon --sysroot=/opt/poky/1.4.3/sysroots/armv7a-vfp-neon-poky-linux-gnueabi"

export CXX="arm-poky-linux-gnueabi-g++  -march=armv7-a -mthumb-interwork -mfloat-abi=softfp -mfpu=neon --sysroot=/opt/poky/1.4.3/sysroots/armv7a-vfp-neon-poky-linux-gnueabi"

export CPP="arm-poky-linux-gnueabi-gcc -E  -march=armv7-a -mthumb-interwork -mfloat-abi=softfp -mfpu=neon --sysroot=/opt/poky/1.4.3/sysroots/armv7a-vfp-neon-poky-linux-gnueabi"

So I am going just adding to the end of the Miscellaneous section of "Cross GCC Compiler", "Cross G++ Compiler", and "Cross G++ Linker":

-march=armv7-a -mthumb-interwork -mfloat-abi=softfp -mfpu=neon --sysroot=/opt/poky/1.4.3/sysroots/armv7a-vfp-neon-poky-linux-gnueabi


Does this sound right to you? (It doesn't look like its breaking anything)

2,973 Views
LeonardoSandova
Specialist I

Give it a try, it should work. Honestly, I have not use other values other than those set by the script....

Leo