mklibgcc.in revision 132718
1457Serikj#!/bin/sh
21730Sihse# Construct makefile for libgcc.
3457Serikj#   Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
4457Serikj#
5457Serikj# This file is part of GCC.
6457Serikj
7457Serikj# Arguments, taken from the environment, since there are a lot
8457Serikj# of them, and positional args becomes quite ugly.
9457Serikj#
10457Serikj# objext
11457Serikj# LIB1ASMFUNCS
12457Serikj# LIB2FUNCS_ST
13457Serikj# LIBGCOV
14457Serikj# LIB2ADD
15457Serikj# LIB2ADD_ST 
16457Serikj# LIB2ADDEH
17457Serikj# LIB2ADDEHDEP
18457Serikj# FPBIT
19457Serikj# FPBIT_FUNCS
20457Serikj# LIB2_DIVMOD_FUNCS
21457Serikj# DPBIT
22457Serikj# DPBIT_FUNCS
23457Serikj# TPBIT
24457Serikj# TPBIT_FUNCS
25457Serikj# LIBGCC
26457Serikj# MULTILIBS
27457Serikj# EXTRA_MULTILIB_PARTS
281730Sihse# SHLIB_EXT
29837Sihse# SHLIB_LINK
30837Sihse# SHLIB_MULTILIB
31837Sihse# SHLIB_MKMAP
32837Sihse# SHLIB_MKMAP_OPTS
33837Sihse# SHLIB_MAPFILES
34837Sihse# SHLIB_NM_FLAGS
35837Sihse# SHLIB_INSTALL
36837Sihse# MULTILIB_OSDIRNAMES
37837Sihse
38837Sihse# Make needs VPATH to be literal.
39837Sihseecho 'srcdir = @srcdir@'
40837Sihseecho 'VPATH = @srcdir@'
41837Sihseecho 'EQ = ='
42837Sihseecho
43457Serikjecho 'force:'
44457Serikjecho
45457Serikj
46457Serikj# Library members defined in libgcc2.c.
471730Sihselib2funcs='_muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3
48457Serikj	_cmpdi2 _ucmpdi2 _floatdidf _floatdisf _fixunsdfsi _fixunssfsi
491730Sihse	_fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi _fixxfdi _fixunsxfdi
501730Sihse	_floatdixf _fixunsxfsi _fixtfdi _fixunstfdi _floatditf _clear_cache
511730Sihse	_enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3
521730Sihse	_addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors
531730Sihse	_ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab
541730Sihse	_popcountsi2 _popcountdi2 _paritysi2 _paritydi2'
551730Sihse
561730Sihse# Disable SHLIB_LINK if shared libgcc not enabled.
571730Sihseif [ "@enable_shared@" = "no" ]; then
581730Sihse  SHLIB_LINK=""
59457Serikjfi
60457Serikj
61457Serikj# Build lines.
62457Serikj
63837Sihsegcc_compile='$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)'
64837Sihsemake_compile='$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
65457Serikj	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
66837Sihse	  AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
67837Sihse	  AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \
68837Sihse	  AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
69837Sihse	  CC="$(CC)" CFLAGS="$(CFLAGS)" \
70837Sihse	  BUILD_PREFIX="$(BUILD_PREFIX)" \
71837Sihse	  BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \
72837Sihse	  LANGUAGES="$(LANGUAGES)"'
73504Stbell
74504Stbell# Dependencies for libgcc2.c
75504Stbelllibgcc2_c_dep='stmp-dirs $(srcdir)/libgcc2.c $(CONFIG_H) coretypes.h $(TM_H) $(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs tsystem.h'" $LIB2ADDEHDEP"
76504Stbell
77504Stbell# Dependencies for libgcov.c
78837Sihselibgcov_c_dep='stmp-dirs $(srcdir)/libgcov.c $(CONFIG_H) coretypes.h $(TM_H) $(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs tsystem.h $(srcdir)/gcov-io.h $(srcdir)/gcov-io.c gcov-iov.h'
79504Stbell
80504Stbell# Dependencies for fp-bit.c
81504Stbellfpbit_c_dep='stmp-dirs config.status tsystem.h'
82504Stbell
83837Sihse#
84504Stbell# Build libgcc1 components.
85837Sihse#
86457Serikj
871961Salanblibgcc1_objs=""
881961Salanb
891961Salanbfor name in $LIB1ASMFUNCS; do
901961Salanb  for ml in $MULTILIBS; do
911961Salanb    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
921961Salanb    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
931961Salanb    out="libgcc/${dir}/${name}${objext}"
941961Salanb
951961Salanb    echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
961961Salanb    echo "	$gcc_compile" $flags -DL$name -xassembler-with-cpp \
971961Salanb	  -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out
981961Salanb
991961Salanb    # Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
1001961Salanb    # defined as optimized assembly code in LIB1ASMFUNCS.
1011961Salanb    lib2funcs=`echo $lib2funcs | sed -e 's/^'$name' //' \
1021961Salanb				     -e 's/ '$name' / /' \
1031961Salanb				     -e 's/ '$name'$//'`
1041961Salanb    LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \
1051961Salanb				                     -e 's/ '$name' / /' \
1061961Salanb				                     -e 's/ '$name'$//'`
1071961Salanb  done
1081961Salanb  libgcc1_objs="$libgcc1_objs ${name}${objext}"
1091961Salanbdone
1101961Salanb
1111961Salanb#
1121961Salanb# Build libgcc2 components.
1131961Salanb#
1141961Salanb
1151961Salanblibgcc2_objs=""
1161961Salanblibgcc2_st_objs=""
1171961Salanblibgcc2_eh_objs=""
1181961Salanb
1191961Salanbfor name in $lib2funcs; do
1201961Salanb  for ml in $MULTILIBS; do
1211961Salanb    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
1221961Salanb    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
1231961Salanb    out="libgcc/${dir}/${name}${objext}"
1241961Salanb
1251961Salanb    echo $out: $libgcc2_c_dep
1261961Salanb    echo "	$gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
1271961Salanb      -c '$(srcdir)/libgcc2.c' -o $out
1281961Salanb  done
1291961Salanb  libgcc2_objs="$libgcc2_objs ${name}${objext}"
1301961Salanbdone
1311961Salanb
1321961Salanbfor name in $LIB2FUNCS_ST; do
1331961Salanb  for ml in $MULTILIBS; do
1341961Salanb    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
1351961Salanb    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
1361961Salanb    out="libgcc/${dir}/${name}${objext}"
1371961Salanb
1381961Salanb    echo $out: $libgcc2_c_dep
1391961Salanb    echo "	$gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
140      -c '$(srcdir)/libgcc2.c' -o $out
141  done
142  libgcc2_st_objs="$libgcc2_st_objs ${name}${objext}"
143done
144
145for name in $LIB2_DIVMOD_FUNCS; do
146  for ml in $MULTILIBS; do
147    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
148    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
149    out="libgcc/${dir}/${name}${objext}"
150
151    echo $out: $libgcc2_c_dep
152    echo "	$gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
153      -c '$(srcdir)/libgcc2.c' -fexceptions -fnon-call-exceptions -o $out
154  done
155  libgcc2_objs="$libgcc2_objs ${name}${objext}"
156done
157
158if [ "$FPBIT" ]; then
159  for name in $FPBIT_FUNCS; do
160    for ml in $MULTILIBS; do
161      dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
162      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
163      out="libgcc/${dir}/${name}${objext}"
164
165      echo $out: $FPBIT $fpbit_c_dep
166      echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
167	-c $FPBIT -o $out
168    done
169    libgcc2_objs="$libgcc2_objs ${name}${objext}"
170  done
171fi
172
173if [ "$DPBIT" ]; then
174  for name in $DPBIT_FUNCS; do
175    for ml in $MULTILIBS; do
176      dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
177      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
178      out="libgcc/${dir}/${name}${objext}"
179
180      echo $out: $DPBIT $fpbit_c_dep
181      echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
182	-c $DPBIT -o $out
183    done
184    libgcc2_objs="$libgcc2_objs ${name}${objext}"
185  done
186fi
187
188if [ "$TPBIT" ]; then
189  for name in $TPBIT_FUNCS; do
190    for ml in $MULTILIBS; do
191      dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
192      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
193      out="libgcc/${dir}/${name}${objext}"
194
195      echo $out: $TPBIT $fpbit_c_dep
196      echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
197	-c $TPBIT -o $out
198    done
199    libgcc2_objs="$libgcc2_objs ${name}${objext}"
200  done
201fi
202
203for file in $LIB2ADD; do
204  name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
205  oname=`echo $name | sed -e 's,.*/,,'`
206
207  for ml in $MULTILIBS; do
208    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
209    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
210    out="libgcc/${dir}/${oname}${objext}"
211    if [ ${name}.asm = ${file} ]; then
212      flags="$flags -xassembler-with-cpp"
213    fi
214
215    echo $out: stmp-dirs $file
216    echo "	$gcc_compile" $flags -c $file -o $out
217  done
218  libgcc2_objs="$libgcc2_objs ${oname}${objext}"
219done
220
221for file in $LIB2ADDEH; do
222  name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
223  oname=`echo $name | sed -e 's,.*/,,'`
224
225  for ml in $MULTILIBS; do
226    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
227    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
228    out="libgcc/${dir}/${oname}${objext}"
229    if [ ${name}.asm = ${file} ]; then
230      flags="$flags -xassembler-with-cpp"
231    fi
232
233    echo $out: stmp-dirs $file
234    echo "	$gcc_compile" $flags -fexceptions -c $file -o $out
235  done
236  if [ "$SHLIB_LINK" ]; then
237    libgcc2_eh_objs="$libgcc2_eh_objs ${oname}${objext}"
238  else
239    libgcc2_objs="$libgcc2_objs ${oname}${objext}"
240  fi
241done
242
243for file in $LIB2ADD_ST; do
244  name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
245  oname=`echo $name | sed -e 's,.*/,,'`
246
247  for ml in $MULTILIBS; do
248    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
249    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
250    out="libgcc/${dir}/${oname}${objext}"
251    if [ ${name}.asm = ${file} ]; then
252      flags="$flags -xassembler-with-cpp"
253    fi
254
255    echo $out: stmp-dirs $file
256    echo "	$gcc_compile" $flags -c $file -o $out
257  done
258  libgcc2_st_objs="$libgcc2_st_objs ${oname}${objext}"
259done
260
261#
262# build libgcov components
263#
264
265libgcov_objs=""
266
267for name in $LIBGCOV; do
268  for ml in $MULTILIBS; do
269    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
270    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
271    out="libgcc/${dir}/${name}${objext}"
272
273    echo $out: $libgcov_c_dep
274    echo "	$gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
275      -c '$(srcdir)/libgcov.c' -o $out
276  done
277  libgcov_objs="$libgcov_objs ${name}${objext}"
278done
279
280# SHLIB_MKMAP
281# SHLIB_MKMAP_OPTS
282# SHLIB_MAPFILES
283for ml in $MULTILIBS; do
284  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
285  flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
286
287  libgcc_objs=""
288  libgcc_eh_objs=""
289  for o in $libgcc1_objs; do
290    libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
291  done
292  for o in $libgcc2_objs; do
293    libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
294  done
295  for o in $libgcc2_eh_objs; do
296    libgcc_eh_objs="$libgcc_eh_objs libgcc/${dir}/$o"
297  done
298  libgcc_sh_objs="$libgcc_objs $libgcc_eh_objs"
299  shlib_deps="$libgcc_sh_objs"
300
301  libgcc_st_objs=""
302  for o in $libgcc2_st_objs; do
303    libgcc_st_objs="$libgcc_st_objs libgcc/${dir}/$o"
304  done
305
306  libgcov_a_objs=""
307  for o in $libgcov_objs; do
308    libgcov_a_objs="$libgcov_a_objs libgcc/${dir}/$o"
309  done
310  
311  if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" ]; then
312    mapfile="libgcc/${dir}/libgcc.map"
313    tmpmapfile="libgcc/${dir}/tmp-libgcc.map"
314    # This uses a here document instead of echos because some shells
315    # will convert the \1 in the second sed command to a control-A.
316    # The behavior of here documents is more predictable.
317    cat <<EOF
318
319${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_sh_objs
320	{ \$(NM_FOR_TARGET) $SHLIB_NM_FLAGS $libgcc_sh_objs; echo %%; \\
321	  cat $SHLIB_MAPFILES \\
322	    | sed -e '/^[   ]*#/d' \\
323	          -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \\
324	    | $gcc_compile $flags -E -xassembler-with-cpp -; \\
325	} | \$(AWK) -f $SHLIB_MKMAP $SHLIB_MKMAP_OPTS > ${tmpmapfile}
326	mv '$tmpmapfile' \$@
327EOF
328  fi
329  shlib_deps="$shlib_deps $mapfile"
330
331  # Depend on EXTRA_MULTILIB_PARTS, since that's where crtbegin/end
332  # usually are put in a true multilib situation.
333  for f in $EXTRA_MULTILIB_PARTS; do
334    shlib_deps="$shlib_deps $dir/$f"
335  done
336
337  libgcc_a_objs="$libgcc_objs $libgcc_st_objs"
338
339  if [ "@libgcc_visibility@" = yes -a "$SHLIB_LINK" ]; then
340    libgcc_a_objs=
341    echo ""
342    echo "libgcc/${dir}/stacknote.s: stmp-dirs"
343    echo '	@( echo | $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) '${flags}' -S -o - -xc - | grep .note.GNU-stack || : ) > $@.tmp'
344    echo '	@mv -f $@.tmp $@'
345    echo ""
346    for o in $libgcc_objs $libgcc_st_objs; do
347      # .oS objects will have all non-local symbol definitions .hidden
348      oS=`echo ${o} | sed s~${objext}'$~.oS~g'`
349      echo "${oS}: stmp-dirs libgcc/${dir}/stacknote.s ${o}"
350      # non-GNU nm emits three fields even for undefined and typeless symbols,
351      # so explicitly omit them
352      echo '	( $(NM_FOR_TARGET) '${SHLIB_NM_FLAGS} ${o}' | $(AWK) '\''NF == 3 && $$2 !~ /^[UN]$$/ { print "\t.hidden", $$3 }'\''; cat libgcc/${dir}/stacknote.s ) | $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) '${flags}' -r -nostdinc -nostdlib -o $@ '${o}' -xassembler -'
353      libgcc_a_objs="${libgcc_a_objs} ${oS}"
354    done
355  fi
356
357  # Each of these .a files depends on stmp-dirs.  It would seem that
358  # this dependency is redundant, since each of the object files
359  # itself depends on stmp-dirs.  However, it is possible that there
360  # are in fact no object files.  In that case, the stmp-dirs
361  # dependency is required; the directory containing the archive must
362  # exist before the archive itself can be created.
363  echo ""
364  echo "${dir}/libgcc.a: stmp-dirs $libgcc_a_objs"
365  echo "	-rm -rf ${dir}/libgcc.a"
366  echo '	$(AR_CREATE_FOR_TARGET)' ${dir}/libgcc.a $libgcc_a_objs
367  echo '	$(RANLIB_FOR_TARGET)' ${dir}/libgcc.a
368
369  echo ""
370  echo "${dir}/libgcov.a: stmp-dirs $libgcov_a_objs"
371  echo "	-rm -rf ${dir}/libgcov.a"
372  echo '	$(AR_CREATE_FOR_TARGET)' ${dir}/libgcov.a $libgcov_a_objs
373  echo '	$(RANLIB_FOR_TARGET)' ${dir}/libgcov.a
374
375  if [ "$SHLIB_LINK" ]; then
376
377    echo ""
378    echo "${dir}/libgcc_eh.a: stmp-dirs $libgcc_eh_objs"
379    echo "	-rm -rf ${dir}/libgcc_eh.a"
380    echo '	$(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a $libgcc_eh_objs
381    echo '	$(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a
382
383    if [ -z "$SHLIB_MULTILIB" ]; then
384      if [ "$dir" = . ]; then
385	shlib_base_name=libgcc_s
386      else
387	shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g`
388      fi
389      shlib_so_name="$shlib_base_name"
390      shlib_dir=
391      shlib_slibdir_qual=
392      if [ -n "$MULTILIB_OSDIRNAMES" ]; then
393	if [ "$dir" != . ]; then
394	  gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory`
395	  os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
396	  shlib_dir="$dir"/
397	  gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'`
398	  os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"`
399	  if [ -z "$os_multilib_base" ]; then
400	    shlib_so_name=libgcc_s
401	    if [ "$os_multilib_dir" != "." ]; then
402		shlib_slibdir_qual="/$os_multilib_dir"
403	    fi
404	  else
405	    shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g`
406	    shlib_slibdir_qual="/$os_multilib_base"
407	  fi
408	fi
409      fi
410      echo ""
411      echo "${dir}/${shlib_base_name}${SHLIB_EXT}: $shlib_deps"
412      echo "	$SHLIB_LINK" \
413	 | sed -e "s%@multilib_flags@%$flags%g" \
414	       -e "s%@multilib_dir@%$dir%g" \
415	       -e "s%@shlib_objs@%$libgcc_sh_objs%g" \
416	       -e "s%@shlib_base_name@%$shlib_base_name%g" \
417	       -e "s%@shlib_map_file@%$mapfile%g" \
418	       -e "s%@shlib_so_name@%$shlib_so_name%g" \
419	       -e "s%@shlib_dir@%$shlib_dir%g" \
420	       -e "s%@shlib_slibdir_qual@%%g"
421    elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
422      shlib_base_name="libgcc_s";
423      echo ""
424      echo "${shlib_base_name}${SHLIB_EXT}: $shlib_deps"
425      echo "	$SHLIB_LINK" \
426	 | sed -e "s%@multilib_flags@%$flags%g" \
427	       -e "s%@multilib_dir@%$dir%g" \
428	       -e "s%@shlib_objs@%$libgcc_sh_objs%g" \
429	       -e "s%@shlib_base_name@%$shlib_base_name%g" \
430	       -e "s%@shlib_map_file@%$mapfile%g" \
431	       -e "s%@shlib_so_name@%$shlib_base_name%g" \
432	       -e "s%@shlib_dir@%%g" \
433	       -e "s%@shlib_slibdir_qual@%%g"
434    fi
435  fi
436done
437
438dirs=libgcc
439for ml in $MULTILIBS; do
440  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
441  if [ $dir != . ]; then
442    dirs="$dirs ${dir} libgcc/${dir}"
443  fi
444done
445echo ''
446echo 'libgcc-stage-start:'
447echo '	for dir in '"${dirs}"'; do \'
448echo '	  if [ -d $(stage)/$$dir ]; then true; else '$mkinstalldirs' $(stage)/$$dir; fi; \'
449echo '	done'
450echo '	-for dir in '"${dirs}"'; do \'
451echo '	  mv $$dir/*'"${objext}"' $(stage)/$$dir; \'
452echo '	  test ! -f $$dir/stacknote.s || mv $$dir/stacknote.s $(stage)/$$dir; \'
453echo '	  test ! -f $$dir/libgcc.a || mv $$dir/lib* $(stage)/$$dir; \'
454echo '	done'
455
456echo ""
457all=stmp-dirs
458dirs=libgcc
459
460for ml in $MULTILIBS; do
461  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
462  if [ $dir != . ]; then
463    dirs="$dirs ${dir} libgcc/${dir}"
464  fi
465  all="$all ${dir}/libgcc.a ${dir}/libgcov.a"
466  if [ "$SHLIB_LINK" ]; then
467    all="$all ${dir}/libgcc_eh.a"
468    if [ -z "$SHLIB_MULTILIB" ]; then
469      if [ "$dir" = "." ]; then
470	suff="";
471      else
472	suff=_`echo $dir | sed s,/,_,g`
473      fi
474      all="$all ${dir}/libgcc_s${suff}${SHLIB_EXT}"
475    elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
476      all="$all libgcc_s${SHLIB_EXT}"
477    fi
478  fi
479done
480
481echo 'stmp-dirs: force'
482echo '	for d in '"$dirs"'; do \'
483echo '	  if [ -d $$d ]; then true; else '$mkinstalldirs' $$d; fi; \'
484echo '	done'
485echo '	if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi'
486
487for f in $EXTRA_MULTILIB_PARTS; do
488  for ml in $MULTILIBS; do
489    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
490    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
491    case $dir in
492    .) out=$f ; t= ;;
493    *) out=$dir/$f ; t=$dir/ ;;
494    esac
495    case $out in
496    # Prevent `make' from interpreting $out as a macro assignment
497    *'$(EQ)'*) targ="T_TARGET=$out T_TARGET" ;;
498    *) targ=$out ;;
499    esac
500
501    echo $out: stmp-dirs
502    echo "	$make_compile" \\
503    echo '	  LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\
504    echo '	  MULTILIB_CFLAGS="'$flags'"' T=$t $targ
505
506    all="$all $out"
507  done
508done
509
510echo ""
511echo "all: $all"
512
513echo ""
514echo "install: $all"
515for ml in $MULTILIBS; do
516  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
517  flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
518  if [ $dir != . ]; then
519    ldir='$(DESTDIR)$(libsubdir)'/$dir
520    echo "	if [ -d $ldir ]; then true; else $mkinstalldirs $ldir; chmod a+rx $ldir; fi;"
521  else
522    ldir='$(DESTDIR)$(libsubdir)'
523  fi
524  echo '	$(INSTALL_DATA)' ${dir}/libgcc.a ${ldir}/
525  echo '	$(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a
526  echo '	$(INSTALL_DATA)' ${dir}/libgcov.a ${ldir}/
527  echo '	$(RANLIB_FOR_TARGET)' ${ldir}/libgcov.a
528
529  if [ "$SHLIB_LINK" ]; then
530    echo '	$(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/
531    echo '	$(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a
532
533    if [ -z "$SHLIB_MULTILIB" ]; then
534      if [ "$dir" = . ]; then
535	shlib_base_name=libgcc_s
536      else
537	shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g`
538      fi
539      shlib_so_name="$shlib_base_name"
540      shlib_dir=
541      shlib_slibdir_qual=
542      if [ -n "$MULTILIB_OSDIRNAMES" ]; then
543	gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory`
544	os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
545	if [ "$dir" != . ]; then
546	  shlib_dir="$dir"/
547	fi
548	gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'`
549	os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"`
550	if [ -z "$os_multilib_base" ]; then
551	  shlib_so_name=libgcc_s
552	  if [ "$os_multilib_dir" != "." ]; then
553	    shlib_slibdir_qual="/$os_multilib_dir"
554	  fi
555	else
556	  shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g`
557	  shlib_slibdir_qual="/$os_multilib_base"
558	fi
559      fi
560      echo "	$SHLIB_INSTALL" \
561	| sed -e "s%@shlib_base_name@%$shlib_base_name%g" \
562	      -e "s%@shlib_so_name@%$shlib_so_name%g" \
563	      -e "s%@shlib_dir@%$shlib_dir%g" \
564	      -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
565    elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
566      shlib_base_name="libgcc_s";
567      echo "	$SHLIB_INSTALL" \
568	| sed -e "s%@shlib_base_name@%$shlib_base_name%g" \
569	      -e "s%@shlib_so_name@%$shlib_base_name%g" \
570	      -e "s%@shlib_dir@%%g" \
571	      -e "s%@shlib_slibdir_qual@%%g"
572    fi
573  fi
574done
575for f in $EXTRA_MULTILIB_PARTS; do
576  for ml in $MULTILIBS; do
577    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
578    if [ $dir != . ]; then
579      out=${dir}/$f
580      ldir='$(DESTDIR)$(libsubdir)'/$dir
581    else
582      out=$f
583      ldir='$(DESTDIR)$(libsubdir)'
584    fi
585    echo '	$(INSTALL_DATA)' $out $ldir/
586  done
587done
588