#!/bin/sh
# Construct makefile for libgcc.
#   Copyright (C) 2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
#
# This file is part of GCC.

# Arguments, taken from the environment, since there are a lot
# of them, and positional args becomes quite ugly.
#
# objext
# LIB1ASMFUNCS
# LIB2FUNCS_ST
# LIBGCOV
# LIB2ADD
# LIB2ADD_ST 
# LIB2ADDEH
# LIB2ADDEHSTATIC
# LIB2ADDEHSHARED
# LIB2ADDEHDEP
# LIBUNWIND
# LIBUNWINDDEP
# SHLIBUNWIND_LINK
# SHLIBUNWIND_INSTALL
# FPBIT
# FPBIT_FUNCS
# LIB2_DIVMOD_FUNCS
# DPBIT
# DPBIT_FUNCS
# TPBIT
# TPBIT_FUNCS
# LIBGCC
# MULTILIBS
# EXTRA_MULTILIB_PARTS
# SHLIB_EXT
# SHLIB_LINK
# SHLIB_MKMAP
# SHLIB_MKMAP_OPTS
# SHLIB_MAPFILES
# SHLIB_NM_FLAGS
# SHLIB_INSTALL
# MULTILIB_OSDIRNAMES
# ASM_HIDDEN_OP

# Make needs VPATH to be literal.
echo 'srcdir = @srcdir@'
echo 'VPATH = @srcdir@'
echo 'EQ = ='
echo 'objects = $(filter %'$objext',$^)'
echo
echo '# Dependencies are accumulated as we go.'
echo 'all: stmp-dirs'
echo 'dirs = libgcc'
echo

# Library members defined in libgcc2.c.
lib2funcs='_muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3
	_cmpdi2 _ucmpdi2 _floatdidf _floatdisf _fixunsdfsi _fixunssfsi
	_fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi _fixxfdi _fixunsxfdi
	_floatdixf _fixunsxfsi _fixtfdi _fixunstfdi _floatditf _clear_cache
	_enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3
	_addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors
	_ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab
	_popcountsi2 _popcountdi2 _paritysi2 _paritydi2 _powisf2 _powidf2
	_powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3
	_divxc3 _divtc3'

# Disable SHLIB_LINK if shared libgcc not enabled.
if [ "@enable_shared@" = "no" ]; then
  SHLIB_LINK=""
fi

# Build lines.

gcc_compile='$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)'
gcc_s_compile="$gcc_compile -DSHARED"
make_compile='$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
	  AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
	  AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \
	  AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
	  CC="$(CC)" CFLAGS="$(CFLAGS)" \
	  BUILD_PREFIX="$(BUILD_PREFIX)" \
	  BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \
	  LANGUAGES="$(LANGUAGES)"'

# Generic dependencies for libgcc
libgcc_dep='$(CONFIG_H) coretypes.h $(TM_H) $(MACHMODE_H) longlong.h config.status stmp-int-hdrs tsystem.h'

# Dependencies for libgcc2.c
libgcc2_c_dep='stmp-dirs $(srcdir)/libgcc2.c $(srcdir)/libgcc2.h gbl-ctors.h'" $libgcc_dep"

# Dependencies for libgcov.c
libgcov_c_dep='stmp-dirs $(srcdir)/libgcov.c $(srcdir)/gcov-io.h $(srcdir)/gcov-io.c gcov-iov.h'" $libgcc_dep"

# Dependencies for fp-bit.c
fpbit_c_dep='stmp-dirs config.status tsystem.h'

# Flag whether we need eh_dummy.c
need_eh_dummy=

if [ "$SHLIB_LINK" ]; then
  # Test -fvisibility=hidden.  We need both a -fvisibility=hidden on
  # the command line, and a #define to prevent libgcc2.h etc from
  # overriding that with #pragmas.  The dance with @ is to prevent
  # echo from seeing anything it might take for an option.
  # echo turns the \$\$\$\$ into $$$$ and when make sees it it
  # becomes $$ and the shell substitutes the pid. Makes for a
  # slightly safer temp file.
  echo "vis_hide := \$(strip \$(subst @,-,\\"
  echo "    \$(shell if echo 'void foo(void); void foo(void) {}' | \\"
  echo "          $gcc_compile -fvisibility=hidden -Werror \\"
  echo "          -c -xc - -o vis_temp_file\$\$\$\$.o 2> /dev/null; \\"
  echo "          then echo @fvisibility=hidden @DHIDE_EXPORTS; \\"
  echo "          rm vis_temp_file\$\$\$\$.o 2> /dev/null; \\"
  echo "          fi)))"
  echo

  # If we have -fvisibility=hidden, then we need to generate hide
  # lists for object files implemented in assembly.  The default
  # pseudo-op for this is ".hidden", but can be overridden with
  # ASM_HIDDEN_OP.
  [ "$ASM_HIDDEN_OP" ] || ASM_HIDDEN_OP=".hidden"
  
  echo "ifneq (,\$(vis_hide))"
  echo "define gen-hide-list"
  echo "\$(NM_FOR_TARGET) ${SHLIB_NM_FLAGS} \$< | \\"
  # non-GNU nm emits three fields even for undefined and typeless symbols,
  # so explicitly omit them
  echo "  \$(AWK) 'NF == 3 && \$\$2 !~ /^[UN]\$\$/ { print \"\\t${ASM_HIDDEN_OP}\", \$\$3 }' > \$@T"
  echo "mv -f \$@T \$@"
  echo "endef"
  echo "else"
  echo "gen-hide-list = echo > \$@"
  echo "endif"
  echo
else
  # It is too hard to guarantee that vis_hide and gen-hide-list will never
  # be referenced if SHLIB_LINK is not set, so set them to the values they'd
  # have if SHLIB_LINK were set and we didn't have visibility support.
  echo "vis_hide ="
  echo "gen-hide-list = echo > \$@"
fi

# Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
# defined as optimized assembly code in LIB1ASMFUNCS.
for name in $LIB1ASMFUNCS; do
  lib2funcs=`echo $lib2funcs | sed -e 's/^'$name' //' \
				   -e 's/ '$name' / /' \
				   -e 's/ '$name'$//'`
  LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \
				                   -e 's/ '$name' / /' \
				                   -e 's/ '$name'$//'`
done

#
# Rules to generate object files.
#

for ml in $MULTILIBS; do

  # Work out relevant parameters that depend only on the multilib.
  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
  flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
  shlib_slibdir_qual=
  libgcc_a=$dir/libgcc.a
  libgcov_a=$dir/libgcov.a
  libgcc_eh_a=
  libgcc_s_so=
  libunwind_a=
  libunwind_so=

  if [ "$LIBUNWIND" ]; then
    libunwind_a=$dir/libunwind.a
  fi
  if [ "$SHLIB_LINK" ]; then
    libgcc_eh_a=$dir/libgcc_eh.a
    libgcc_s_so=$dir/libgcc_s${SHLIB_EXT}
    if [ "$LIBUNWIND" ]; then
      libunwind_so=$dir/libunwind${SHLIB_EXT}
    fi
    os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
    if [ "$os_multilib_dir" != . ]; then
      shlib_slibdir_qual="/$os_multilib_dir"
    fi
  fi

  libgcc_s_so_extra=
  libunwind_so_extra=

  echo
  echo \#
  echo \# ml: $ml
  echo \# dir: $dir
  echo \# flags: $flags
  echo \# libgcc_a: $libgcc_a
  echo \# libgcov_a: $libgcov_a
  echo \# libgcc_eh_a: $libgcc_eh_a
  echo \# libunwind_a: $libunwind_a
  echo \#
  echo \# shlib_slibdir_qual: $shlib_slibdir_qual
  echo \# libgcc_s_so: $libgcc_s_so
  echo \# libunwind_so: $libunwind_so
  echo \#
  echo

  # Update list of directories.
  if [ $dir != . ]; then
    echo "dirs += ${dir} libgcc/${dir}"
    echo
  fi

  #
  # Build libgcc1 components.
  #
  for name in $LIB1ASMFUNCS; do
    if [ "$libgcc_s_so" ]; then
      out="libgcc/${dir}/${name}${objext}"
      outS="libgcc/${dir}/${name}_s${objext}"
      outV="libgcc/${dir}/${name}.vis"

      echo ${outS}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
      echo "	$gcc_s_compile" $flags -DL$name -xassembler-with-cpp \
	  -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $outS

      echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)' ${outV}
      echo "	$gcc_compile" $flags -DL$name -xassembler-with-cpp \
	  -c '$(srcdir)/config/$(LIB1ASMSRC)' -include $outV -o $out

      echo "${outV}: ${outS}; \$(gen-hide-list)"

      echo $libgcc_a: $out
      echo $libgcc_s_so: $outS
      if [ "$SHLIB_MKMAP" ]; then
        echo libgcc/${dir}/libgcc.map: $outS
      fi
    else
      out="libgcc/${dir}/${name}${objext}"
      echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
      echo "	$gcc_compile" $flags -DL$name -xassembler-with-cpp \
	  -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out
      echo $libgcc_a: $out
    fi
  done

  #
  # Build libgcc2 components.
  #

  for name in $lib2funcs; do
    if [ "$libgcc_s_so" ]; then
      out="libgcc/${dir}/${name}${objext}"
      outS="libgcc/${dir}/${name}_s${objext}"

      echo $outS: $libgcc2_c_dep
      echo "	$gcc_s_compile" $flags -DL$name -c '$(srcdir)/libgcc2.c' \
	-o $outS

      echo $out: $libgcc2_c_dep
      echo "	$gcc_compile" $flags -DL$name '$(vis_hide)' \
        -c '$(srcdir)/libgcc2.c' -o $out

      echo $libgcc_a: $out
      echo $libgcc_s_so: $outS
      if [ "$SHLIB_MKMAP" ]; then
        echo libgcc/${dir}/libgcc.map: $outS
      fi
    else
      out="libgcc/${dir}/${name}${objext}"
      echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
      echo "	$gcc_compile" $flags -DL$name -c '$(srcdir)/libgcc2.c' -o $out
      echo $libgcc_a: $out
    fi
  done

  for name in $LIB2FUNCS_ST; do
    out="libgcc/${dir}/${name}${objext}"

    echo $out: $libgcc2_c_dep
    echo "	$gcc_compile" $flags -DL$name '$(vis_hide)' \
      -c '$(srcdir)/libgcc2.c' -o $out
    echo ${dir}/libgcc.a: $out
  done

  for name in $LIB2_DIVMOD_FUNCS; do
    if [ "$libgcc_s_so" ]; then
      out="libgcc/${dir}/${name}${objext}"
      outS="libgcc/${dir}/${name}_s${objext}"

# APPLE LOCAL begin libcc_kext move options to start of line for overriding --bowdidge
      echo $outS: $libgcc2_c_dep
      echo "	$gcc_s_compile" -fexceptions -fnon-call-exceptions $flags -DL$name \
        -c '$(srcdir)/libgcc2.c' -o $outS

      echo $out: $libgcc2_c_dep
      echo "	$gcc_compile" -fexceptions -fnon-call-exceptions $flags -DL$name '$(vis_hide)' \
        -c '$(srcdir)/libgcc2.c' -o $out
# APPLE LOCAL end libcc_kext move options to start of line for overriding --bowdidge

      echo $libgcc_a: $out
      echo $libgcc_s_so: $outS
      if [ "$SHLIB_MKMAP" ]; then
        echo libgcc/${dir}/libgcc.map: $outS
      fi
    else
      out="libgcc/${dir}/${name}${objext}"
      echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
      echo "	$gcc_compile" $flags -DL$name \
        -fexceptions -fnon-call-exceptions -c '$(srcdir)/libgcc2.c' -o $out
      echo $libgcc_a: $out
    fi
  done

  #
  # Build software floating point functions.
  #

  if [ "$FPBIT" ]; then
    for name in $FPBIT_FUNCS; do
      if [ "$libgcc_s_so" ]; then
	out="libgcc/${dir}/${name}${objext}"
	outS="libgcc/${dir}/${name}_s${objext}"

	echo $outS: $FPBIT $fpbit_c_dep
	echo "	$gcc_s_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	  -c $FPBIT -o $outS

        echo $out: $FPBIT $fpbit_c_dep
        echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	  '$(vis_hide)' -c $FPBIT -o $out

	echo $libgcc_a: $out
	echo $libgcc_s_so: $outS
	if [ "$SHLIB_MKMAP" ]; then
	  echo libgcc/${dir}/libgcc.map: $outS
	fi
      else
	out="libgcc/${dir}/${name}${objext}"
	echo $out: $FPBIT $fpbit_c_dep
	echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	  -c $FPBIT -o $out

	echo $libgcc_a: $out
      fi
    done
  fi

  if [ "$DPBIT" ]; then
    for name in $DPBIT_FUNCS; do
      if [ "$libgcc_s_so" ]; then
	out="libgcc/${dir}/${name}${objext}"
	outS="libgcc/${dir}/${name}_s${objext}"

	echo $outS: $DPBIT $fpbit_c_dep
	echo "	$gcc_s_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	  -c $DPBIT -o $outS

        echo $out: $DPBIT $fpbit_c_dep
        echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	  '$(vis_hide)' -c $DPBIT -o $out

	echo $libgcc_a: $out
	echo $libgcc_s_so: $outS
	if [ "$SHLIB_MKMAP" ]; then
	  echo libgcc/${dir}/libgcc.map: $outS
	fi
      else
	out="libgcc/${dir}/${name}${objext}"
	echo $out: $DPBIT $fpbit_c_dep
	echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	  -c $DPBIT -o $out

	echo $libgcc_a: $out
      fi
    done
  fi

  if [ "$TPBIT" ]; then
    for name in $TPBIT_FUNCS; do
      if [ "$libgcc_s_so" ]; then
	out="libgcc/${dir}/${name}${objext}"
	outS="libgcc/${dir}/${name}_s${objext}"

	echo $outS: $TPBIT $fpbit_c_dep
	echo "	$gcc_s_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	  -c $TPBIT -o $outS

        echo $out: $TPBIT $fpbit_c_dep
        echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	  '$(vis_hide)' -c $TPBIT -o $out

	echo $libgcc_a: $out
	echo $libgcc_s_so: $outS
	if [ "$SHLIB_MKMAP" ]; then
	  echo libgcc/${dir}/libgcc.map: $outS
	fi
      else
	out="libgcc/${dir}/${name}${objext}"
	echo $out: $TPBIT $fpbit_c_dep
	echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
	  -c $TPBIT -o $out

	echo $libgcc_a: $out
      fi
    done
  fi

  for file in $LIB2ADD; do
    name=`echo $file | sed -e 's/[.][cS]$//' -e 's/[.]asm$//'`
    oname=`echo $name | sed -e 's,.*/,,'`

    if [ "$libgcc_s_so" ]; then
      out="libgcc/${dir}/${oname}${objext}"
      outS="libgcc/${dir}/${oname}_s${objext}"

      case $file in
	*.c)
	  echo $outS: stmp-dirs $file $libgcc_dep
	  echo "	$gcc_s_compile" $flags -c $file -o $outS

	  echo $out: stmp-dirs $file $libgcc_dep
	  echo "	$gcc_compile" $flags '$(vis_hide)' -c $file -o $out
	;;

	*.asm | *.S)
	  outV="libgcc/${dir}/${oname}.vis"

	  echo $outS: stmp-dirs $file $libgcc_dep
	  echo "	$gcc_s_compile" $flags -xassembler-with-cpp \
	         -c $file -o $outS

	  echo $out: stmp-dirs $file $libgcc_dep $outV
	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
	         -include $outV -c $file -o $out
	  echo "${outV}: ${outS}; \$(gen-hide-list)"
	;;
	
        *)
	  echo "Unhandled extension: $file" >&2
	  exit 1
	;;
      esac

      echo $libgcc_a: $out
      echo $libgcc_s_so: $outS
      if [ "$SHLIB_MKMAP" ]; then
	echo libgcc/${dir}/libgcc.map: $outS
      fi
    else
      out="libgcc/${dir}/${oname}${objext}"
      case $file in
	*.c)
	  echo $out: stmp-dirs $file $libgcc_dep
	  echo "	$gcc_compile" $flags -c $file -o $out
	;;

	*.asm | *.S)
	  echo $out: stmp-dirs $file $libgcc_dep
	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
	         -c $file -o $out
	;;
	
        *)
	  echo "Unhandled extension: $file" >&2
	  exit 1
	;;
      esac
      
      echo $libgcc_a: $out
    fi
  done


  for file in $LIB2ADD_ST; do
    name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//'`
    oname=`echo $name | sed -e 's,.*/,,'`
    out="libgcc/${dir}/${oname}${objext}"

    case $file in
      *.c)
	echo $out: stmp-dirs $file $libgcc_dep
	echo "	$gcc_compile" $flags '$(vis_hide)' -c $file -o $out
      ;;

      *.asm | *.S)
        # We may have to compile it twice in order to establish the list
        # of symbols to be marked hidden.
	if [ "$libgcc_so" ]; then
	  outV="libgcc/${dir}/${oname}.vis"
	  outT="libgcc/${dir}/${oname}_t${objext}"
	  echo ${outT}: stmp-dirs $file $libgcc_dep
	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
	          -c $file -o ${outT}
	  echo $out: stmp-dirs $file $libgcc_dep $outV
	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
	          -include $outV -c $file -o $out
	  echo "${outV}: ${outT}; \$(gen-hide-list)"
	else
	  echo $out: stmp-dirs $file $libgcc_dep
	  echo "	$gcc_compile" $flags -xassembler-with-cpp \
	          -c $file -o $out
	fi
      ;;

      *)
      echo "Unhandled extension: $file" >&2
      exit 1
      ;;
    esac
    echo $libgcc_a: $out
  done

  # If we don't have libgcc_eh.a, only LIB2ADDEH matters.  If we do, only
  # LIB2ADDEHSTATIC and LIB2ADDEHSHARED matter.  (Usually all three are
  # identical.)  We do _not_ handle assembly files in this context.

  if [ "$libgcc_eh_a" ]; then
    for file in $LIB2ADDEHSTATIC; do
      case $file in
        *.c) ;;
	*)   echo "Unhandled extension: $file">&2; exit 1 ;;
       esac

      name=`echo $file | sed -e 's/[.]c$//'`
      oname=`echo $name | sed -e 's,.*/,,'`
      out="libgcc/${dir}/${oname}${objext}"

      echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
      echo "	$gcc_compile" $flags '$(vis_hide)' -fexceptions -c $file -o $out
      echo $libgcc_eh_a: $out
    done

    for file in $LIB2ADDEHSHARED; do
      case $file in
        *.c) ;;
	*)   echo "Unhandled extension: $file">&2; exit 1 ;;
       esac

      name=`echo $file | sed -e 's/[.]c$//'`
      oname=`echo $name | sed -e 's,.*/,,'`
      outS="libgcc/${dir}/${oname}_s${objext}"

      echo $outS: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
      echo "	$gcc_s_compile" $flags -fexceptions -c $file -o $outS
      echo $libgcc_s_so: $outS
      if [ "$SHLIB_MKMAP" ]; then
	echo libgcc/${dir}/libgcc.map: $outS
      fi
    done

    # If nothing went into libgcc_eh.a, create a dummy object -
    # some linkers don't like totally empty archives.
    if [ -z "$LIB2ADDEHSTATIC" ]; then
      file=eh_dummy.c
      out="libgcc/${dir}/eh_dummy${objext}"
      need_eh_dummy=1

      echo $out: stmp-dirs $file
      echo "	$gcc_compile" $flags '$(vis_hide)' -fexceptions -c $file -o $out
      echo $libgcc_eh_a: $out
    fi
   

  else # no libgcc_eh.a
    for file in $LIB2ADDEH; do
      case $file in
        *.c) ;;
	*)   echo "Unhandled extension: $file">&2; exit 1 ;;
       esac

      name=`echo $file | sed -e 's/[.]c$//'`
      oname=`echo $name | sed -e 's,.*/,,'`
      out="libgcc/${dir}/${oname}${objext}"

      echo $out: stmp-dirs $file $LIB2ADDEHDEP $libgcc_dep
      echo "	$gcc_compile" $flags -fexceptions '$(vis_hide)' -c $file -o $out
      echo $libgcc_a: $out
    done
  fi

  # Again, this does not handle assembly.
  if [ "$LIBUNWIND" ]; then
    for file in $LIBUNWIND; do
      case $file in
        *.c) ;;
	*)   echo "Unhandled extension: $file">&2; exit 1 ;;
       esac

      name=`echo $file | sed -e 's/[.]c$//'`
      oname=`echo $name | sed -e 's,.*/,,'`

      if [ "$libunwind_so" ]; then
        out="libgcc/${dir}/${oname}${objext}"
	outS="libgcc/${dir}/${oname}_s${objext}"

	echo $out: stmp-dirs $file $LIBUNWINDDEP
	echo "	$gcc_compile $flags -fexceptions \$(vis_hide) -c $file -o $out"

	echo $outS: stmp-dirs $file $LIBUNWINDDEP
	echo "	$gcc_s_compile $flags -fexceptions -c $file -o $outS"

	echo $libunwind_a: $out
	echo $libunwind_so: $outS
      else
        out="libgcc/${dir}/${oname}${objext}"
	echo $out: stmp-dirs $file $LIBUNWINDDEP
	echo "	$gcc_compile $flags -fexceptions \$(vis_hide) -c $file -o $out"
	echo $libunwind_a: $out
      fi
    done
  fi

  #
  # build libgcov components
  #
  for name in $LIBGCOV; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
    out="libgcc/${dir}/${name}${objext}"

    echo $out: $libgcov_c_dep
    echo "	$gcc_compile $flags -DL$name -c \$(srcdir)/libgcov.c -o $out"
    echo $libgcov_a: $out
  done

  # EXTRA_MULTILIB_PARTS.
  if [ -n "$EXTRA_MULTILIB_PARTS" ]; then
    # Each of the EXTRA_MULTILIB_PARTS is built by recursive invocation
    # of the parent Makefile.  We must do this just once for each
    # multilib, passing it all the EXTRA_MULTILIB_PARTS as
    # simultaneous goal targets, so that rules which cannot execute
    # simultaneously are properly serialized.
    
    extra=
    echo
    for f in $EXTRA_MULTILIB_PARTS; do
      case $dir in
      .) out=$f ; t= ;;
      *) out=$dir/$f ; t=$dir/ ;;
      esac
      case $out in
      # Prevent `make' from interpreting $out as a macro assignment
      *'$(EQ)'*) targ="T_TARGET=$out T_TARGET" ;;
      *) targ=$out ;;
      esac
      extra="$extra $targ"
    done

    if [ "$dir" = . ]; then
      suffix=
    else
      suffix=`echo $dir | sed s,/,_,g`
    fi
    echo extra$suffix: stmp-dirs
    echo "	$make_compile" \\
    echo '	  LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\
    echo '	  MULTILIB_CFLAGS="'$flags'"' T=$t $extra
    echo "all: extra$suffix"

    # Make libunwind.so and libgcc_s.so depend on these, since they
    # are likely to be implicitly used by the link process.
    if [ "$libgcc_s_so" ]; then
      echo "$libgcc_s_so: extra$suffix"
    fi
    if [ "$libunwind_so" ]; then
      echo "$libunwind_so: extra$suffix"
    fi
  fi

  # Library build rules.
  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
  flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;

  # Map-file generation.
  if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" ]; then
    mapfile="libgcc/${dir}/libgcc.map"
    tmpmapfile="libgcc/${dir}/tmp-libgcc.map"
    # This uses a here document instead of echos because some shells
    # will convert the \1 in the second sed command to a control-A.
    # The behavior of here documents is more predictable.
    cat <<EOF

${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES
	{ \$(NM_FOR_TARGET) $SHLIB_NM_FLAGS \$(objects); echo %%; \\
	  cat $SHLIB_MAPFILES \\
	    | sed -e '/^[   ]*#/d' \\
	          -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \\
	    | $gcc_compile $flags -E -xassembler-with-cpp -; \\
	} | \$(AWK) -f $SHLIB_MKMAP $SHLIB_MKMAP_OPTS > ${tmpmapfile}
	mv '$tmpmapfile' \$@
$libgcc_s_so: ${mapfile}
EOF
  fi

  # Static libraries.

  # Each of these .a files depends on stmp-dirs.  It would seem that
  # this dependency is redundant, since each of the object files
  # itself depends on stmp-dirs.  However, it is possible that there
  # are in fact no object files.  In that case, the stmp-dirs
  # dependency is required; the directory containing the archive must
  # exist before the archive itself can be created.
  echo ""
  echo "$libgcc_a: stmp-dirs"
  echo "	-rm -f $libgcc_a"
  echo '	$(AR_CREATE_FOR_TARGET)' $libgcc_a '$(objects)'
  echo '	$(RANLIB_FOR_TARGET)' $libgcc_a
  echo "all: $libgcc_a"

  echo ""
  echo "$libgcov_a: stmp-dirs"
  echo "	-rm -f $libgcov_a"
  echo '	$(AR_CREATE_FOR_TARGET)' $libgcov_a '$(objects)'
  echo '	$(RANLIB_FOR_TARGET)' $libgcov_a
  echo "all: $libgcov_a"

  # These libraries are not always built.
  if [ "$libunwind_a" ]; then
    echo ""
    echo "$libunwind_a: stmp-dirs"
    echo "	-rm -f $libunwind_a"
    echo '	$(AR_CREATE_FOR_TARGET)' $libunwind_a '$(objects)'
    echo '	$(RANLIB_FOR_TARGET)' $libunwind_a
    echo "all: $libunwind_a"
  fi

  if [ "$libgcc_eh_a" ]; then
    echo ""
    echo "${dir}/libgcc_eh.a: stmp-dirs"
    echo "	-rm -f ${dir}/libgcc_eh.a"
    echo '	$(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a '$(objects)'
    echo '	$(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a
    echo "all: $libgcc_eh_a"
  fi

  # Shared libraries.
  # APPLE LOCAL libcc_kext
  if [ "$libgcc_s_so" -a  "$dir" != "static" -a "$dir" != "kext" ]; then
    echo ""
    echo "$libgcc_s_so: stmp-dirs $libunwind_so"
    echo "	$SHLIB_LINK" \
	 | sed -e "s%@multilib_flags@%$flags%g" \
	       -e "s%@multilib_dir@%$dir%g" \
	       -e "s%@shlib_objs@%\$(objects)%g" \
	       -e "s%@shlib_base_name@%libgcc_s%g" \
	       -e "s%@shlib_map_file@%$mapfile%g" \
	       -e "s%@shlib_slibdir_qual@%$shlib_dir_qual%g"
    echo "all: $libgcc_s_so"
  fi

  if [ "$libunwind_so" ]; then
    echo ""
    echo "$libunwind_so: stmp-dirs"
    echo "	$SHLIBUNWIND_LINK" \
	   | sed -e "s%@multilib_flags@%$flags%g" \
		 -e "s%@multilib_dir@%$dir%g" \
		 -e "s%@shlib_objs@%\$(objects)%g" \
		 -e "s%@shlib_base_name@%libunwind%g" \
		 -e "s%@shlib_slibdir_qual@%$shlib_dir_qual%g"
    echo "all: $libunwind_so"
  fi

done # ml in MULTILIBS

echo
echo "libgcc-stage-start:"
echo "	for dir in \$(dirs); do \\"
echo "	  if [ -d \$(stage)/\$\$dir ]; then :; \\"
echo "	  else $mkinstalldirs \$(stage)/\$\$dir; fi; \\"
echo "	done"
echo "	-for dir in \$(dirs); do \\"
echo "	  mv \$\$dir/*${objext} \$(stage)/\$\$dir; \\"
echo "	  mv \$\$dir/*.vis \$(stage)/\$\$dir; \\"
echo "    mv \$\$dir/*.map \$(stage)/\$\$dir; \\"
echo "	  test ! -f \$\$dir/libgcc.a || mv \$\$dir/lib* \$(stage)/\$\$dir; \\"
echo "	done"

echo 
echo "stmp-dirs:"
echo "	for d in \$(dirs); do \\"
echo "	  if [ -d \$\$d ]; then true; else $mkinstalldirs \$\$d; fi; \\"
echo "	done"
echo "	if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi"

if [ "$need_eh_dummy" ]; then
  echo "eh_dummy.c:"
  echo "	echo 'struct eh_dummy;' > \$@"
fi

echo ""
echo "install: all"
for ml in $MULTILIBS; do
  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
  flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
  if [ $dir != . ]; then
    ldir='$(DESTDIR)$(libsubdir)'/$dir
    echo "	if [ -d $ldir ]; then true; else $mkinstalldirs $ldir; chmod a+rx $ldir; fi;"
  else
    ldir='$(DESTDIR)$(libsubdir)'
  fi
  echo '	$(INSTALL_DATA)' ${dir}/libgcc.a ${ldir}/
  echo '	$(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a
  echo '	$(INSTALL_DATA)' ${dir}/libgcov.a ${ldir}/
  echo '	$(RANLIB_FOR_TARGET)' ${ldir}/libgcov.a

  if [ "$SHLIB_LINK" ]; then
    echo '	$(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/
    echo '	$(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a

    shlib_slibdir_qual=
    os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
    if [ "$os_multilib_dir" != . ]; then
      shlib_slibdir_qual="/$os_multilib_dir"
    fi
  # APPLE LOCAL libcc_kext
  if [ "$dir" != "static" -a "$dir" != "kext" ]; then
    echo "	$SHLIB_INSTALL" \
      | sed -e "s%@multilib_dir@%$dir%g" \
	    -e "s%@shlib_base_name@%libgcc_s%g" \
	    -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
  # APPLE LOCAL libcc_kext
  fi
    if [ "$LIBUNWIND" ]; then
      echo "	$SHLIBUNWIND_INSTALL" \
	| sed -e "s%@multilib_dir@%$dir%g" \
	      -e "s%@shlib_base_name@%libunwind%g" \
	      -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
      libunwinddir='$(DESTDIR)$(slibdir)$(shlib_slibdir_qual)/$(shlib_dir)'
      echo '	$(INSTALL_DATA)' ${dir}/libunwind.a ${libunwinddir}/
      echo '	$(RANLIB_FOR_TARGET)' ${libunwinddir}/libunwind.a
    fi
  fi
done
for f in $EXTRA_MULTILIB_PARTS; do
  for ml in $MULTILIBS; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    if [ $dir != . ]; then
      out=${dir}/$f
      ldir='$(DESTDIR)$(libsubdir)'/$dir
    else
      out=$f
      ldir='$(DESTDIR)$(libsubdir)'
    fi
    echo '	$(INSTALL_DATA)' $out $ldir/
  done
done

echo '.PHONY: all install'
