annotate gcc/config/csky/print-sysroot-suffix.sh @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 #! /bin/sh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 # Script to generate SYSROOT_SUFFIX_SPEC equivalent to MULTILIB_OSDIRNAMES
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 # Arguments are MULTILIB_OSDIRNAMES, MULTILIB_OPTIONS and MULTILIB_MATCHES.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
5 # Copyright (C) 2018-2020 Free Software Foundation, Inc.
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 # Contributed by C-SKY Microsystems and Mentor Graphics.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 # This file is part of GCC.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 # GCC is free software; you can redistribute it and/or modify it under
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 # the terms of the GNU General Public License as published by the Free
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 # Software Foundation; either version 3, or (at your option) any later
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 # version.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 # GCC is distributed in the hope that it will be useful, but WITHOUT
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 # for more details.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 # You should have received a copy of the GNU General Public License
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 # along with GCC; see the file COPYING3. If not see
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 # <http://www.gnu.org/licenses/>.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 # This shell script produces a header file fragment that defines
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 # SYSROOT_SUFFIX_SPEC. It assumes that the sysroots will have the same
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 # structure and names used by the multilibs.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 # Invocation:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 # print-sysroot-suffix.sh \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 # MULTILIB_OSDIRNAMES \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 # MULTILIB_OPTIONS \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 # MULTILIB_MATCHES \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 # > t-sysroot-suffix.h
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 # The three options exactly correspond to the variables of the same
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 # names defined in the tmake_file fragments.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 # Example:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 # sh ./gcc/config/print-sysroot-suffix.sh "a=A" "a b/c/d" ""
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 # =>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 # #undef SYSROOT_SUFFIX_SPEC
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 # #define SYSROOT_SUFFIX_SPEC "" \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 # "%{a:" \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 # "%{b:A/b/;" \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 # "c:A/c/;" \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 # "d:A/d/;" \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 # ":A/};" \
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 # ":}"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 # The script uses temporary subscripts in order to permit a recursive
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 # algorithm without the use of functions.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 set -e
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 dirnames="$1"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 options="$2"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 matches="$3"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 cat > print-sysroot-suffix3.sh <<\EOF
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 #! /bin/sh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 # Print all the multilib matches for this option
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 result="$1"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 EOF
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 for x in $matches; do
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 l=`echo $x | sed -e 's/=.*$//' -e 's/?/=/g'`
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 r=`echo $x | sed -e 's/^.*=//' -e 's/?/=/g'`
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 echo "[ \"\$1\" = \"$l\" ] && result=\"\$result|$r\"" >> print-sysroot-suffix3.sh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 done
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 echo 'echo $result' >> print-sysroot-suffix3.sh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 chmod +x print-sysroot-suffix3.sh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 cat > print-sysroot-suffix2.sh <<\EOF
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 #! /bin/sh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 # Recursive script to enumerate all multilib combinations, match against
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 # multilib directories and output a spec string of the result.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 # Will fold identical trees.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 padding="$1"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 optstring="$2"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 shift 2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 n="\" \\
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 $padding\""
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 if [ $# = 0 ]; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 EOF
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 pat=
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 for x in $dirnames; do
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 # p=`echo $x | sed -e 's,=!,/$=/,'`
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 p=`echo $x | sed -e 's/=//g'`
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 # pat="$pat -e 's=^//$p='"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 pat="$pat -e 's/$p/g'"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 done
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 echo ' optstring=`echo "/$optstring" | sed '"$pat\`" >> print-sysroot-suffix2.sh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 cat >> print-sysroot-suffix2.sh <<\EOF
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 case $optstring in
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 //*)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 *)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 echo "$optstring"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 esac
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 thisopt="$1"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 shift
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 bit=
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 lastcond=
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 result=
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 for x in `echo "$thisopt" | sed -e 's,/, ,g'`; do
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 case $x in
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 EOF
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 for x in `echo "$options" | sed -e 's,/, ,g'`; do
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 match=`./print-sysroot-suffix3.sh "$x"`
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 echo "$x) optmatch=\"$match\" ;;" >> print-sysroot-suffix2.sh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 done
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 cat >> print-sysroot-suffix2.sh <<\EOF
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 esac
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 bit=`"$0" "$padding " "$optstring$x/" "$@"`
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
118 if [ -z "$lastopt" ]; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
119 lastopt="$optmatch"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
120 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
121 if [ "$lastbit" = "$bit" ]; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
122 lastopt="$lastopt|$optmatch"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
123 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
124 result="$result$lastopt:$lastbit;$n"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
125 lastopt="$optmatch"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
126 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
127 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
128 lastbit="$bit"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
129 done
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
130 bit=`"$0" "$padding " "$optstring" "$@"`
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
131 if [ "$bit" = "$lastbit" ]; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
132 if [ -z "$result" ]; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
133 echo "$bit"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
134 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
135 echo "$n%{$result:$bit}"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
136 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
137 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
138 echo "$n%{$result$lastopt:$lastbit;$n:$bit}"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
139 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
140 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
141 EOF
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
142 chmod +x ./print-sysroot-suffix2.sh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
143 result=`./print-sysroot-suffix2.sh \"\" \"\" $options`
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
144 echo "#undef SYSROOT_SUFFIX_SPEC"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
145 echo "#define SYSROOT_SUFFIX_SPEC \"$result\""
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
146 rm print-sysroot-suffix2.sh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
147 rm print-sysroot-suffix3.sh