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)
Solved! Go to Solution.
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
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
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
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)
Give it a try, it should work. Honestly, I have not use other values other than those set by the script....
Leo