|
|
|
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
|
|
|
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
|
|
|
#
|
|
|
|
# Filename: package/.../gcc/parse-config
|
|
|
|
# Copyright (C) 2008 - 2014 The OpenSDE Project
|
|
|
|
# Copyright (C) 2004 - 2006 The T2 SDE Project
|
|
|
|
# Copyright (C) 1998 - 2003 Clifford Wolf
|
|
|
|
#
|
|
|
|
# More information can be found in the files COPYING and README.
|
|
|
|
#
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation; version 2 of the License. A copy of the
|
|
|
|
# GNU General Public License can be found in the file COPYING.
|
|
|
|
# --- SDE-COPYRIGHT-NOTE-END ---
|
|
|
|
|
|
|
|
# Use the stack protector patch, if not disabled for the pkg
|
|
|
|
#
|
|
|
|
if [ "${SDECFG_DEFAULT_CC:0:3}" = "gcc" -a "$SDECFG_PKG_GCC_STACKPRO" = 1 ]; then
|
|
|
|
if ! hasflag NO-SSP; then
|
|
|
|
if pkginstalled -f gcc; then
|
|
|
|
var_append GCC_WRAPPER_INSERT ' ' '-fstack-protector'
|
|
|
|
else
|
|
|
|
echo_warning 'Disabling GCC stack-protector (not supported by toolchain gcc)'
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo_warning 'Package incompatible with GCC stack-protector, disabled'
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
if [ ! "$SDECFG_PKG_GCC_STACKPRO" = 1 ]; then
|
|
|
|
# some packages have -fstack-protector set by default
|
|
|
|
# remove -fstack-protector options if SSP is not wanted
|
|
|
|
var_append GCC_WRAPPER_REMOVE ' ' '-fstack-protector*'
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# maybe we add something more later. But imo it's better to
|
|
|
|
# let the options of KCC unmodified for gcc[23]. (Clifford)
|
|
|
|
#
|
|
|
|
if [[ $SDECFG_DEFAULT_KCC = gcc* ]] ; then
|
|
|
|
export KCC="${archprefix}kcc"
|
|
|
|
if [ "$SDECFG_OPT" = "size" ] ; then
|
|
|
|
var_insert KCC_WRAPPER_REMOVE " " "-O -O[0-9]"
|
|
|
|
var_insert KCC_WRAPPER_INSERT " " "-Os"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# set CC, CXX and F77 environment variables
|
|
|
|
#
|
|
|
|
for x in CC CXX F77 ; do
|
|
|
|
eval "y=\$SDECFG_DEFAULT_$x"
|
|
|
|
if [[ $y = gcc* ]] ; then
|
|
|
|
case "$x-$stagelevel" in
|
|
|
|
CC-*)
|
|
|
|
z="${archprefix}gcc ${archprefix}gcc" ;;
|
|
|
|
CXX-*)
|
|
|
|
z="${archprefix}g++ ${archprefix}g++" ;;
|
|
|
|
F77-[2-9])
|
|
|
|
z="${archprefix}g77 ${archprefix}g77" ;;
|
|
|
|
*)
|
|
|
|
export $x=${x}_not_available_in_stage_${stagelevel}
|
|
|
|
continue ;;
|
|
|
|
esac
|
|
|
|
for y in $z ; do
|
|
|
|
[ "`type -p $y`" ] && export $x=$y
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# Add the usual gcc optimazation options
|
|
|
|
# Strip or add debug information
|
|
|
|
#
|
|
|
|
if [ "$SDECFG_DEBUG" = 0 ] ; then
|
|
|
|
var_append GCC_WRAPPER_APPEND " " "-s"
|
|
|
|
var_append SYSGCC_WRAPPER_APPEND " " "-s"
|
|
|
|
var_insert GCC_WRAPPER_REMOVE " " "-g*"
|
|
|
|
var_insert SYSGCC_WRAPPER_REMOVE " " "-g*"
|
|
|
|
else
|
|
|
|
if [[ $pkg != glibc* ]] ; then
|
|
|
|
var_append GCC_WRAPPER_APPEND " " "-ggdb"
|
|
|
|
var_insert GCC_WRAPPER_REMOVE " " "-s -g*"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# Remove the optimization options, since we pass generic ones ... In ROCK
|
|
|
|
# history this has been -m*, but this caused -msse and -maltivec style options
|
|
|
|
# to get lost. So we better explicitly only remove some -m options ... -ReneR
|
|
|
|
var_insert GCC_WRAPPER_REMOVE " " "-O -O[0-9s] -mtune* -march* -mcpu*"
|
|
|
|
var_insert SYSGCC_WRAPPER_REMOVE " " "-O -O[0-9s] -mtune* -march* -mcpu*"
|
|
|
|
|
|
|
|
case "$SDECFG_OPT" in
|
|
|
|
speed)
|
|
|
|
var_insert GCC_WRAPPER_INSERT " " "-O2"
|
|
|
|
var_insert SYSGCC_WRAPPER_INSERT " " "-O2"
|
|
|
|
;;
|
|
|
|
size)
|
|
|
|
var_insert GCC_WRAPPER_INSERT " " "-Os"
|
|
|
|
var_insert SYSGCC_WRAPPER_INSERT " " "-Os"
|
|
|
|
;;
|
|
|
|
lazy)
|
|
|
|
var_insert GCC_WRAPPER_INSERT " " "-O"
|
|
|
|
var_insert SYSGCC_WRAPPER_INSERT " " "-O"
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
# gcc-4.1.0 hangs with -v --help -pipe, thus we do not add it in that case
|
|
|
|
var_insert GCC_WRAPPER_INSERT ' ' '--help?:-pipe'
|
|
|
|
var_insert SYSGCC_WRAPPER_INSERT ' ' '--help?:-pipe'
|
|
|
|
|
|
|
|
[ "$SDECFG_LD_AS_NEEDED" != 0 ] &&
|
|
|
|
var_append GCC_WRAPPER_INSERT " " "-c?:-Wl,--as-needed"
|
|
|
|
|
|
|
|
[ "$SDECFG_PIE" != 0 ] &&
|
|
|
|
var_append GCC_WRAPPER_INSERT " " "-c?-fPIE:-pie"
|
|
|
|
|
|
|
|
var_append GCC_WRAPPER_APPEND " " "$SDECFG_C_FLAGS"
|
|
|
|
|
|
|
|
# Compile (i.e. link) all bins statically
|
|
|
|
#
|
|
|
|
if [ "$SDECFG_STATIC" = 1 ]; then
|
|
|
|
var_insert GCC_WRAPPER_INSERT " " "-static"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Compile with no exceptions or rtti, gcc itself must support both
|
|
|
|
#
|
|
|
|
if [ "$SDECFG_LIMITCXX" = 1 ] && [[ $pkg != gcc* ]] ; then
|
|
|
|
var_append CXX_WRAPPER_APPEND " " "-fno-exceptions -fno-rtti"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Passing -I/usr{/local/}include creates a warning in gcc3 which is confusing
|
|
|
|
# some of the configure scripts and Makefiles.
|
|
|
|
#
|
|
|
|
var_insert GCC3_WRAPPER_REMOVE " " "-I/usr/include"
|
|
|
|
var_insert GCC3_WRAPPER_REMOVE " " "-I/usr/local/include"
|
|
|
|
|
|
|
|
# pkg-config and other output or hardcoded configure assumption
|
|
|
|
# do not include the "DESTDIR" we need to adapt the pathes accordingly
|
|
|
|
if atstage cross; then
|
|
|
|
var_append GCC_WRAPPER_FILTER '|' \
|
|
|
|
"sed -e 's,^\(-[LI]\)*\(/\|/usr/\|/usr/[^/]*/\|/opt/[^/]*/\)\(include\|lib\),\1$root\2\3,'"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Add the architecture gcc optimisation options
|
|
|
|
#
|
|
|
|
gcc_arch_options="$(pkgdesc confdir gcc)/arch/options.$arch.in"
|
|
|
|
if [ -s "$gcc_arch_options" ]; then
|
|
|
|
. "$gcc_arch_options"
|
|
|
|
else
|
|
|
|
echo_warning "gcc: no mappings found for $arch architecture"
|
|
|
|
fi
|
|
|
|
unset gcc_arch_options
|
|
|
|
|
|
|
|
# Inject -fPIC if the package is marked to need a quirk ...
|
|
|
|
#
|
|
|
|
hasflag FPIC-QUIRK && var_append GCC_WRAPPER_APPEND ' ' '-fPIC'
|
|
|
|
|
|
|
|
# Remove -W,l,--as-needed, some packages throw up with it...
|
|
|
|
#
|
|
|
|
if hasflag NO-AS-NEEDED; then
|
|
|
|
var_remove_regex GCC_WRAPPER_INSERT ' ' ".*-Wl,--as-needed"
|
|
|
|
var_append GCC_WRAPPER_REMOVE ' ' "-Wl,--as-needed"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if hasflag GNU99; then
|
|
|
|
var_append GCC_WRAPPER_INSERT ' ' '-std=gnu99'
|
|
|
|
var_append SYSGCC_WRAPPER_INSERT ' ' '-std=gnu99'
|
|
|
|
fi
|