OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / mklibgcc.in
index be9e875..5973006 100644 (file)
 # Make needs VPATH to be literal.
 echo 'srcdir = @srcdir@'
 echo 'VPATH = @srcdir@'
+echo 'EQ = ='
+echo
+echo 'force:'
 echo
 
 # Detect gcc as OLDCC.  This indicates a target for which LIB1FUNCS
 # is not needed.  This is not quite the same as libgcc1.null, even
 # on a target not using libgcc1-asm.a.
 
-tmp="tmp-$$.c"
-cat > $tmp <<EOF
+if [ "@build_canonical@" = "@target@" ]; then
+  tmp="tmp-$$.c"
+  cat > $tmp <<EOF
 #ifdef __GNUC__
   yes;
 #endif
 EOF
-if $OLDCC -E $tmp | grep yes > /dev/null 2>&1; then
-  LIB1FUNCS=""
+  if $OLDCC -E $tmp | grep yes > /dev/null 2>&1; then
+    LIB1FUNCS=""
+  fi
+  rm -f $tmp
 fi
-rm -f $tmp
-
-
-#
-# Utility functions
-#
 
-emit_gcc_compile() {
-  dst=$1; shift
-  src=$1; shift
-  flags=$*
 
-  echo '       $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)' \
-    $flags -c $src -o $dst
-}
+# Build lines.
 
-emit_oldcc_compile() {
-  dst=$1; shift
-  src=$1; shift
-  flags=$*
-
-  if [ -z "@NO_MINUS_C_MINUS_O@" ]; then
-    echo '     $(OLDCC) -DIN_LIBGCC1 $(CCLIBFLAGS) $(INCLUDES)' \
-      $flags -c $src -o $dst
-  else
-    echo '     $(OLDCC) -DIN_LIBGCC1 $(CCLIBFLAGS) $(INCLUDES)'
-      $flags -c $src
-    tmp=`echo $src | sed -e 's/[.]c$/'${objext}/ -e 's,.*/,,'`
-    echo "     mv $tmp $dst"
-  fi
-}
-
-emit_make_compile() {
-  dst=$1; shift
-  tgt=$1; shift
-  tmp="";
-  if [ "$1" = "T=t" ]; then
-    tmp="T=t"; tgt="t$tgt"; shift
-  fi
-  flags=$*
-
-  echo '       $(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)"' \\
-  echo '         AR_FOR_TARGET="$(AR_FOR_TARGET)"' \\
-  echo '         AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)"' \\
-  echo '         AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)"' \\
-  echo '         AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)"' \\
-  echo '         CC="$(CC)" CFLAGS="$(CFLAGS)"' \\
-  echo '         HOST_PREFIX="$(HOST_PREFIX)"' \\
-  echo '         HOST_PREFIX_1="$(HOST_PREFIX_1)"' \\
-  echo '         LANGUAGES="$(LANGUAGES)"' \\
-  echo '         LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\
-  echo '         MULTILIB_CFLAGS="'$flags'"' $tmp $tgt
-  echo "       mv ${tgt} ${dst}"
-}
+gcc_compile='$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)'
+oldcc_compile='$(OLDCC) -DIN_LIBGCC1 $(CCLIBFLAGS) $(INCLUDES)'
+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)" \
+         HOST_PREFIX="$(HOST_PREFIX)" \
+         HOST_PREFIX_1="$(HOST_PREFIX_1)" \
+         LANGUAGES="$(LANGUAGES)"'
 
 # Dependancies for libgcc1.c
-libgcc1_c_dep='$(srcdir)/libgcc1.c $(CONFIG_H)'
+libgcc1_c_dep='stmp-dirs $(srcdir)/libgcc1.c $(CONFIG_H)'
 
 # Dependancies for libgcc2.c
-libgcc2_c_dep='$(srcdir)/libgcc2.c $(CONFIG_H) $(MACHMODE_H) longlong.h frame.h gbl-ctors.h config.status stmp-int-hdrs tsystem.h'
+libgcc2_c_dep='stmp-dirs $(srcdir)/libgcc2.c $(CONFIG_H) $(MACHMODE_H) longlong.h frame.h gbl-ctors.h config.status stmp-int-hdrs tsystem.h'
 
 # Dependancies for fp-bit.c
-fpbit_c_dep='$(srcdir)/config/fp-bit.c config.status tsystem.h'
+fpbit_c_dep='stmp-dirs config.status tsystem.h'
 
 #
 # Build libgcc1 components.
@@ -112,35 +79,47 @@ fpbit_c_dep='$(srcdir)/config/fp-bit.c config.status tsystem.h'
 
 libgcc1_objs=""
 
-case "$LIBGCC1" in
-  libgcc1.null)
+case X"$LIBGCC1" in
+  Xlibgcc1.null | X)
     ;;
 
-  libgcc1.cross)
+  Xlibgcc1.cross)
     echo "You must find a way to make libgcc1 components yourself" 1>&2
     ;;
 
-  libgcc1-asm.a)
+  Xlibgcc1-asm.a)
     for name in $LIB1ASMFUNCS; do
       for ml in $MULTILIBS; do
-        dir=`echo ${ml} | sed -e 's/;.*$//'`
+        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}: '$(srcdir)/config/$(LIB1ASMSRC)'
-        emit_gcc_compile $out '$(srcdir)/config/$(LIB1ASMSRC)' \
-         $flags -DL$name -xassembler-with-cpp
+        echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
+       echo "  $gcc_compile" $flags -DL$name -xassembler-with-cpp \
+         -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out
+
+       # Remove any objects from LIB2FUNCS that are defined as optimized
+       # assembly code in LIB1ASMFUNCS.
+       LIB2FUNCS=`echo $LIB2FUNCS | sed -e 's/^'$name' //' \
+                                        -e 's/ '$name' / /' \
+                                        -e 's/ '$name'$//'`
       done
       libgcc1_objs="$libgcc1_objs ${name}${objext}"
     done
     ;;
 
-  *)
+  Xlibgcc1.a)
     for name in $LIB1FUNCS; do
       out="libgcc/${name}${objext}"
 
       echo $out: $libgcc1_c_dep
-      emit_oldcc_compile $out '$(srcdir)/libgcc1.c' -DL${name}
+      if [ -z "@NO_MINUS_C_MINUS_O@" ]; then
+       echo "  $oldcc_compile" -DL$name $flags -c '$(srcdir)/libgcc1.c' -o $out
+      else
+       echo "  $oldcc_compile" -DL$name $flags -c '$(srcdir)/libgcc1.c'
+       echo "  mv libgcc1${objext} $out"
+      fi
+
       libgcc1_objs="$libgcc1_objs ${name}${objext}"
     done
 
@@ -153,10 +132,22 @@ case "$LIBGCC1" in
         echo " cp $file ${name}.s"
         file=${name}.s
       fi
-      emit_oldcc_compile $out $file
+
+      if [ -z "@NO_MINUS_C_MINUS_O@" ]; then
+       echo "  $oldcc_compile" -c $file -o $out
+      else
+       echo "  $oldcc_compile" -c $file
+       tmp=`echo $file | sed -e 's/[.][cs]$/'${objext}/ -e 's,.*/,,'`
+       echo "  mv $tmp $out"
+      fi
+
       libgcc1_objs="$libgcc1_objs ${name}${objext}"
     done
     ;;
+  *)
+    echo "I'm confused about libgcc1." 1>&2
+    exit 1
+    ;;
 esac
 
 #
@@ -167,26 +158,26 @@ libgcc2_objs=""
 
 for name in $LIB2FUNCS; do
   for ml in $MULTILIBS; do
-    dir=`echo ${ml} | sed -e 's/;.*$//'`
+    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: $libgcc2_c_dep
-    emit_gcc_compile $out '$(srcdir)/libgcc2.c' '$(MAYBE_USE_COLLECT2)' \
-      $flags -DL$name
+    echo "     $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
+      -c '$(srcdir)/libgcc2.c' -o $out
   done
   libgcc2_objs="$libgcc2_objs ${name}${objext}"
 done
 
 for name in $LIB2FUNCS_EH; do
   for ml in $MULTILIBS; do
-    dir=`echo ${ml} | sed -e 's/;.*$//'`
+    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: $libgcc2_c_dep
-    emit_gcc_compile $out '$(srcdir)/libgcc2.c' '$(MAYBE_USE_COLLECT2)' \
-      -fexceptions $flags -DL$name
+    echo "     $gcc_compile" '$(MAYBE_USE_COLLECT2)' -fexceptions \
+      $flags -DL$name -c '$(srcdir)/libgcc2.c' -o $out
   done
   libgcc2_objs="$libgcc2_objs ${name}${objext}"
 done
@@ -194,13 +185,13 @@ done
 if [ "$FPBIT" ]; then
   for name in $FPBIT_FUNCS; do
     for ml in $MULTILIBS; do
-      dir=`echo ${ml} | sed -e 's/;.*$//'`
+      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: $fpbit_c_dep
-      emit_gcc_compile $out '$(srcdir)/config/fp-bit.c' \
-       -DFLOAT -DFINE_GRAINED_LIBRARIES $flags -DL$name
+      echo $out: $FPBIT $fpbit_c_dep
+      echo "   $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
+       -c $FPBIT -o $out
     done
     libgcc2_objs="$libgcc2_objs ${name}${objext}"
   done
@@ -209,13 +200,13 @@ fi
 if [ "$DPBIT" ]; then
   for name in $DPBIT_FUNCS; do
     for ml in $MULTILIBS; do
-      dir=`echo ${ml} | sed -e 's/;.*$//'`
+      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: $fpbit_c_dep
-      emit_gcc_compile $out '$(srcdir)/config/fp-bit.c' \
-       -DFINE_GRAINED_LIBRARIES $flags -DL$name
+      echo $out: $DPBIT $fpbit_c_dep
+      echo "   $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
+       -c $DPBIT -o $out
     done
     libgcc2_objs="$libgcc2_objs ${name}${objext}"
   done
@@ -229,9 +220,9 @@ for file in $LIB2ADD; do
     fprime=`cat $file`
     for f in $fprime; do
 
-      lastout=""
+      lastout="stmp-dirs $file"
       for ml in $MULTILIBS; do
-        dir=`echo ${ml} | sed -e 's/;.*$//'`
+        dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
         flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
         out="libgcc/${dir}/${f}"
 
@@ -239,7 +230,10 @@ for file in $LIB2ADD; do
        # target file.  This because ./$f is used as a temporary in
        # each case before being moved to libgcc/$dir/.
        echo $out: $lastout
-       emit_make_compile $out $f $flags
+       echo "  $make_compile" \\
+       echo '    LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\
+       echo '    MULTILIB_CFLAGS="'$flags'"' $f
+       echo "  mv $f $out"
 
        lastout="$out"
       done
@@ -248,22 +242,22 @@ for file in $LIB2ADD; do
     done
   else
     for ml in $MULTILIBS; do
-      dir=`echo ${ml} | sed -e 's/;.*$//'`
+      dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
       flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
       out="libgcc/${dir}/${oname}${objext}"
       if [ ${name}.asm = ${file} ]; then
        flags="$flags -xassembler-with-cpp"
       fi
 
-      echo $out: $file
-      emit_gcc_compile $out $file $flags
+      echo $out: stmp-dirs $file
+      echo "   $gcc_compile" $flags -c $file -o $out
     done
     libgcc2_objs="$libgcc2_objs ${oname}${objext}"
   fi
 done
 
 for ml in $MULTILIBS; do
-  dir=`echo ${ml} | sed -e 's/;.*$//'`
+  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
 
   libgcc_objs=""
   for o in $libgcc1_objs; do
@@ -287,25 +281,27 @@ for ml in $MULTILIBS; do
 done
 
 echo ""
-all=""
+all=stmp-dirs
+dirs=libgcc
 
 for ml in $MULTILIBS; do
-  dir=`echo ${ml} | sed -e 's/;.*$//'`
-  if [ $dir = . ]; then
-    echo "libgcc:; mkdir libgcc"
-    all="$all libgcc"
-  else
-    echo "${dir}:; mkdir ${dir}"
-    echo "libgcc/${dir}:; mkdir libgcc/${dir}"
-    all="$all libgcc/${dir} ${dir}"
+  dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
+  if [ $dir != . ]; then
+    dirs="$dirs ${dir} libgcc/${dir}"
   fi
   all="$all ${dir}/libgcc.a"
 done
 
+echo 'stmp-dirs: force'
+echo ' for d in '"$dirs"'; do \'
+echo '   if [ -d $$d ]; then true; else mkdir $$d; fi \'
+echo ' done'
+echo ' if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi'
+
 for f in $EXTRA_MULTILIB_PARTS; do
-  lastout=""
+  lastout="stmp-dirs force"
   for ml in $MULTILIBS; do
-    dir=`echo ${ml} | sed -e 's/;.*$//'`
+    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
     flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
     out="$dir/$f"
 
@@ -313,7 +309,10 @@ for f in $EXTRA_MULTILIB_PARTS; do
     # target file.  This because ./$f is used as a temporary in
     # each case before being moved to libgcc/$dir/.
     echo $out: $lastout
-    emit_make_compile $out $f T=t $flags
+    echo "     $make_compile" \\
+    echo '       LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\
+    echo '       MULTILIB_CFLAGS="'$flags'"' T=t t$f
+    echo "     mv t$f $out"
 
     all="$all $out"
     lastout="$out"