-if $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
- cc_type=llvm_gcc
- gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
- cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
- CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
- AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
- cflags_speed='-O3'
- cflags_size='-Os'
-elif $cc -v 2>&1 | grep -qi ^gcc; then
- cc_type=gcc
- gcc_version=$($cc --version | head -n1)
- gcc_basever=$($cc -dumpversion)
- gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
- gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
- cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
- if ! $cc -dumpversion | grep -q '^2\.'; then
- CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
- AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
+probe_cc(){
+ pfx=$1
+ _cc=$2
+
+ unset _type _ident _cc_c _cc_e _cc_o _flags _cflags _ldflags
+ unset _depflags _DEPCMD _DEPFLAGS
+ _flags_filter=echo
+
+ if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
+ _type=llvm_gcc
+ gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
+ _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
+ _depflags='-MMD -MF $(@:.o=.d) -MT $@'
+ _cflags_speed='-O3'
+ _cflags_size='-Os'
+ elif $_cc -v 2>&1 | grep -qi ^gcc; then
+ _type=gcc
+ gcc_version=$($_cc --version | head -n1)
+ gcc_basever=$($_cc -dumpversion)
+ gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
+ gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
+ _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
+ if ! $_cc -dumpversion | grep -q '^2\.'; then
+ _depflags='-MMD -MF $(@:.o=.d) -MT $@'
+ fi
+ _cflags_speed='-O3'
+ _cflags_size='-Os'
+ elif $_cc --version 2>/dev/null | grep -q Intel; then
+ _type=icc
+ _ident=$($_cc --version | head -n1)
+ _depflags='-MMD'
+ _cflags_speed='-O3'
+ _cflags_size='-Os'
+ _cflags_noopt='-O1'
+ elif $_cc -v 2>&1 | grep -q xlc; then
+ _type=xlc
+ _ident=$($_cc -qversion 2>/dev/null | head -n1)
+ _cflags_speed='-O5'
+ _cflags_size='-O5 -qcompact'
+ elif $_cc -V 2>/dev/null | grep -q Compaq; then
+ _type=ccc
+ _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
+ _DEPFLAGS='-M'
+ debuglevel=3
+ _ldflags='-Wl,-z,now' # calls to libots crash without this
+ _cflags_speed='-fast'
+ _cflags_size='-O1'
+ elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
+ test -d "$sysroot" || die "No valid sysroot specified."
+ _type=armcc
+ _ident=$($_cc --vsn | head -n1)
+ armcc_conf="$PWD/armcc.conf"
+ $_cc --arm_linux_configure \
+ --arm_linux_config_file="$armcc_conf" \
+ --configure_sysroot="$sysroot" \
+ --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
+ die "Error creating armcc configuration file."
+ $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
+ _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
+ as_default="${cross_prefix}gcc"
+ _depflags='-MMD'
+ _cflags_speed='-O3'
+ _cflags_size='-Os'
+ elif $_cc -version 2>/dev/null | grep -q TMS470; then
+ _type=tms470
+ _ident=$($_cc -version | head -n1 | tr -s ' ')
+ _flags='--gcc --abi=eabi -me'
+ _cflags='-D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__='
+ _cc_e='-ppl -fe=$@'
+ _cc_o='-fe=$@'
+ as_default="${cross_prefix}gcc"
+ ld_default="${cross_prefix}gcc"
+ _depflags='-ppa -ppd=$(@:.o=.d)'
+ _cflags_speed='-O3 -mf=5'
+ _cflags_size='-O3 -mf=2'
+ _flags_filter=tms470_flags
+ elif $_cc -v 2>&1 | grep -q clang; then
+ _type=clang
+ _ident=$($_cc --version | head -n1)
+ _depflags='-MMD'
+ _cflags_speed='-O3'
+ _cflags_size='-Os'
+ elif $_cc -V 2>&1 | grep -q Sun; then
+ _type=suncc
+ _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
+ _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
+ _DEPFLAGS='-xM1'
+ _ldflags='-std=c99'
+ _cflags_speed='-O5'
+ _cflags_size='-O5 -xspace'
+ _flags_filter=suncc_flags
+ elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
+ _type=pathscale
+ _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
+ _depflags='-MMD -MF $(@:.o=.d) -MT $@'
+ _cflags_speed='-O2'
+ _cflags_size='-Os'
+ _flags_filter='filter_out -Wdisabled-optimization'
+ elif $_cc -v 2>&1 | grep -q Open64; then
+ _type=open64
+ _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
+ _depflags='-MMD -MF $(@:.o=.d) -MT $@'
+ _cflags_speed='-O2'
+ _cflags_size='-Os'
+ _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
+ elif $_cc -V 2>&1 | grep -q Portland; then
+ _type=pgi
+ _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
+ opt_common='-alias=ansi -Mlre -Mpre'
+ _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
+ _cflags_size="-O2 -Munroll=c:1 $opt_common"
+ _cflags_noopt="-O1"
+ _flags_filter=pgi_flags