This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH][SH] Generate SYSROOT_SUFFIX_SPEC
- From: Andrew Stubbs <ams at codesourcery dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 02 Apr 2009 14:03:36 +0100
- Subject: [PATCH][SH] Generate SYSROOT_SUFFIX_SPEC
Hi all,
This patch allows SYSROOT_SUFFIX_SPEC to be generated automatically from
the selected multilibs, on an SH target.
Unlike the existing scripts used by some targets, there is nothing
target specific about this script, so I have placed it directly in the
config directory where it may be shared by other targets in future.
In theory, the targets that currently have their own scripts could be
adjusted to use this one quite easily. They would need to define
MULTILIB_OSDIRNAMES.
Note that this patch is intended to be applied on top of my recent
multilib patch here:
http://gcc.gnu.org/ml/gcc-patches/2009-04/msg00152.html
OK?
Andrew
2009-01-30 Andrew Stubbs <ams@codesourcery.com>
* config.gcc (sh-*-*): Add sysroot-suffix.h to tm_file.
Add t-sysroot-suffix to tmake_file.
* config/print-sysroot-suffix.sh: New file.
* config/t-sysroot-suffix: New file.
---
src/gcc-mainline/gcc/config.gcc | 2
src/gcc-mainline/gcc/config/print-sysroot-suffix.sh | 98 ++++++++++++++++++++
src/gcc-mainline/gcc/config/t-sysroot-suffix | 6 +
3 files changed, 106 insertions(+)
Index: src/gcc-mainline/gcc/config.gcc
===================================================================
--- src/gcc-mainline/gcc/config.gcc.orig
+++ src/gcc-mainline/gcc/config.gcc
@@ -2147,6 +2147,8 @@ sh-*-symbianelf* | sh[12346l]*-*-symbian
if test x${enable_incomplete_targets} = xyes ; then
tm_defines="$tm_defines SUPPORT_SH1=1 SUPPORT_SH2E=1 SUPPORT_SH4=1 SUPPORT_SH4_SINGLE=1 SUPPORT_SH2A=1 SUPPORT_SH2A_SINGLE=1 SUPPORT_SH5_32MEDIA=1 SUPPORT_SH5_32MEDIA_NOFPU=1 SUPPORT_SH5_64MEDIA=1 SUPPORT_SH5_64MEDIA_NOFPU=1"
fi
+ tm_file="$tm_file ./sysroot-suffix.h"
+ tmake_file="$tmake_file t-sysroot-suffix"
;;
sh-*-rtems*)
tmake_file="sh/t-sh sh/t-elf t-rtems sh/t-rtems"
Index: src/gcc-mainline/gcc/config/print-sysroot-suffix.sh
===================================================================
--- /dev/null
+++ src/gcc-mainline/gcc/config/print-sysroot-suffix.sh
@@ -0,0 +1,98 @@
+#! /bin/sh
+# Script to generate SYSROOT_SUFFIX equivalent to MULTILIB_OSDIRNAMES
+# Arguments are MULTILIB_OSDIRNAMES, MULTILIB_OPTIONS and MULTILIB_MATCHES.
+
+set -e
+
+dirnames="$1"
+options="$2"
+matches="$3"
+
+cat > print-sysroot-suffix3.sh <<\EOF
+#! /bin/sh
+# Print all the multilib matches for this option
+result="$1"
+EOF
+for x in $matches; do
+ l=`echo $x | sed -e 's/=.*$//' -e 's/?/=/g'`
+ r=`echo $x | sed -e 's/^.*=//' -e 's/?/=/g'`
+ echo "[ \"\$1\" = \"$l\" ] && result=\"\$result|$r\"" >> print-sysroot-suffix3.sh
+done
+echo 'echo $result' >> print-sysroot-suffix3.sh
+chmod +x print-sysroot-suffix3.sh
+
+cat > print-sysroot-suffix2.sh <<\EOF
+#! /bin/sh
+# Recursive script to enumerate all multilib combinations, match against
+# multilib directories and optut a spec string of the result.
+# Will fold identical trees.
+
+padding="$1"
+optstring="$2"
+shift 2
+n="\" \\
+$padding\""
+if [ $# = 0 ]; then
+EOF
+
+pat=
+for x in $dirnames; do
+ p=`echo $x | sed -e 's,=!,/$=/,'`
+ pat="$pat -e 's=^//$p='"
+done
+echo ' optstring=`echo "/$optstring" | sed '"$pat\`" >> print-sysroot-suffix2.sh
+cat >> print-sysroot-suffix2.sh <<\EOF
+ case $optstring in
+ //*)
+ ;;
+ *)
+ echo "$optstring"
+ ;;
+ esac
+else
+ thisopt="$1"
+ shift
+ bit=
+ lastcond=
+ result=
+ for x in `echo "$thisopt" | sed -e 's,/, ,g'`; do
+ case $x in
+EOF
+for x in `echo "$options" | sed -e 's,/, ,g'`; do
+ match=`./print-sysroot-suffix3.sh "$x"`
+ echo "$x) optmatch=\"$match\" ;;" >> print-sysroot-suffix2.sh
+done
+cat >> print-sysroot-suffix2.sh <<\EOF
+ esac
+ bit=`"$0" "$padding " "$optstring$x/" "$@"`
+ if [ -z "$lastopt" ]; then
+ lastopt="$optmatch"
+ else
+ if [ "$lastbit" = "$bit" ]; then
+ lastopt="$lastopt|$optmatch"
+ else
+ result="$result$lastopt:$lastbit;$n"
+ lastopt="$optmatch"
+ fi
+ fi
+ lastbit="$bit"
+ done
+ bit=`"$0" "$padding " "$optstring" "$@"`
+ if [ "$bit" = "$lastbit" ]; then
+ if [ -z "$result" ]; then
+ echo "$bit"
+ else
+ echo "$n%{$result:$bit}"
+ fi
+ else
+ echo "$n%{$result$lastopt:$lastbit;$n:$bit}"
+ fi
+fi
+EOF
+
+chmod +x ./print-sysroot-suffix2.sh
+result=`./print-sysroot-suffix2.sh "" "/" $options`
+echo "#undef SYSROOT_SUFFIX_SPEC"
+echo "#define SYSROOT_SUFFIX_SPEC \"$result\""
+rm print-sysroot-suffix2.sh
+rm print-sysroot-suffix3.sh
Index: src/gcc-mainline/gcc/config/t-sysroot-suffix
===================================================================
--- /dev/null
+++ src/gcc-mainline/gcc/config/t-sysroot-suffix
@@ -0,0 +1,6 @@
+# Generate SYSROOT_SUFFIX_SPEC from MULTILIB_OSDIRNAMES
+
+sysroot-suffix.h: $(srcdir)/config/print-sysroot-suffix.sh
+ $(SHELL) $(srcdir)/config/print-sysroot-suffix.sh \
+ "$(MULTILIB_OSDIRNAMES)" "$(MULTILIB_OPTIONS)" \
+ "$(MULTILIB_MATCHES)" > $@