c++config.h is architecture/multilib specific so it s located in the <install_dir>\arm-none-eabi\include\c++\4.7.3\arm-none-eabi\<architecture>\bits\ directory.
But it is not clear yet why this would be failing. Can you tell me which version of the SDK you are building, exact options passed to build_sdk, and host (Linux (distro/ver) OR Windows with cygwin (ver)), and exact build error that you see?
Development Platform: RHEL6.3 64 bit Linux 2.6.32-279.19.1.el6.x86_64
Compile ./tools/build_sdk -clean -target=mx6dq -board=smart_device -board_rev=a
This compile fails with Code Sourcery Pro newest two version
To prove the SDK works, I can:
Use Code Sourcery Lite version gcc version 4.7.2 (Sourcery CodeBench Lite 2012.09-63) which is listed as working by Freescale
./tools/build_sdk -clean -target=mx6dq -board=smart_device -board_rev=a -app=smp_primes
dd if=/home/mike/Realtime/iMX6_Platform_SDK/output/mx6dq/smp_primes/smart_device_rev_a/smp_primes.bin of=/dev/sdb seek=2 skip=2 bs=512 && sync
Take the resulting SD image, boot, and see proper output on the terminal.
Also, a full compile succeeds.
A search in the pro version for the include file:
[mike@localhost Sourcery_CodeBench_for_ARM_EABI]$ find ./ -name c++config.h
This seems to imply that the problem is related to search paths. I don't see a path that looks like cortex-a. So perhaps the tool chain was not compiled properly?
Searching the lite version:
[mike@localhost Sourcery_CodeBench_Lite_for_ARM_EABI]$ find ./ -name c++config.h
For the pro version from 2012:
[mike@localhost Sourcery_CodeBench_for_ARM_EABI_2012]$ find ./ -name c++config.h
The actual compile failure:
In file included from /opt/CodeSourcery/Sourcery_CodeBench_for_ARM_EABI_2012/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/include/c++/4.7.2/algorithm:61:0,
/opt/CodeSourcery/Sourcery_CodeBench_for_ARM_EABI_2012/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/include/c++/4.7.2/utility:70:28: fatal error: bits/c++config.h: No such file or directory
The make files have:
common.mk:CC_INCLUDE = $(CC_PREFIX)/lib/gcc/$(CROSS_COMPILE_STRIP)/$(CC_VERSION)/include
common.mk:CC_INCLUDE_FIXED = $(CC_PREFIX)/lib/gcc/$(CROSS_COMPILE_STRIP)/$(CC_VERSION)/include-fixed
common.mk:LIBC_INCLUDE = $(CC_PREFIX)/$(CROSS_COMPILE_STRIP)/include
So I am guessing that GCC somehow cooks a new path to replace "include" at the end and add the proper subdirectory, and somehow this is not working.
The make file has:
# Generate code specifically for ARMv7-A, cortex-ax CPU.
# Use the ARM Procedure Call Standard.
ARM_FLAGS = -march=armv7-a -mcpu=$(CPU) -mtune=$(CPU) -mapcs
ifeq "$(USE_THUMB)" "1"
# Generate thumb2 instructions (mixed 16/32-bit).
ARM_FLAGS += -mthumb
# Allow mixed ARM and thumb code. All C code will generate thumb instructions
# but there is hand-written asm that requires ARM.
ARM_FLAGS += -mthumb-interwork
# Indicate that we're using thumb.
ARM_FLAGS += -DUSE_THUMB
CC_LIB_POST = thumb2
# Generate ARM-only code.
ARM_FLAGS += -marm
So I assume this might control the include path. There is no armv7-a in the file structure. Then there is an -marm. USE_THUMB is 0. I don't see any arm path in the include dirs, so I can't see that as a way to match either. So I am not even clear how the lite version works.
But clearly the pro versions have all the same paths as the lite version.
As you are aware, since you have an active 30-day evaluation subscription for CodeBench, we promoted this issue to be worked directly in the Mentor Embedded Support Portal ( https://sourcery.mentor.com/GNUToolchain/).