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