This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

another libgcc makeury patch


This patch makes libgcc dependencies more sensible.  Changing one of
the C++ runtime sources will cause the C++ runtime code to be rebuilt,
but not libgcc2.c, and vice versa.  It also removes libgcc.ready,
which no longer serves a purpose.

2000-06-05  Jason Merrill  <jason@casey.soma.redhat.com>

	* Makefile.in (libgcc.ready): Lose.
	(libgcc.mk): Just use mv, not move-if-change.
	(LIBGCC_DEPS): New macro.
	(libgcc.a): Use it.
	(stmp-multilib): Likewise.
	* mklibgcc.in (stmp-dirs): New target.  Make everything depend on
	it rather than the directories themselves.
	(LIB2ADD): Depend on the list file rather than 'force'.

Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/egcs/gcc/Makefile.in,v
retrieving revision 1.461
diff -c -p -r1.461 Makefile.in
*** Makefile.in	2000/06/05 06:37:17	1.461
--- Makefile.in	2000/06/06 01:40:57
*************** xlimits.h: glimits.h limitx.h limity.h
*** 941,956 ****
  #
  # Build libgcc.a.
  
- # Compiling libgcc.a requires making sure that cc1, etc. have been compiled.
- # But recompiling cc1 should not force recompilation of libgcc.a.
- # If you want to force recompilation, delete libgcc.a.
- libgcc.ready: $(GCC_PASSES) $(LANGUAGES) stmp-int-hdrs $(STMP_FIXPROTO)
- 	-if [ -f libgcc.ready ] ; then \
- 		true; \
- 	else \
- 		touch libgcc.ready; \
- 	fi
- 
  LIB2ADD = $(LIB2ADDEH) $(LIB2FUNCS_EXTRA) $(LANG_LIB2FUNCS)
  
  libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) xgcc$(exeext)
--- 941,946 ----
*************** libgcc.mk: config.status Makefile mklibg
*** 970,978 ****
  	MULTILIBS=`$(GCC_FOR_TARGET) --print-multi-lib` \
  	EXTRA_MULTILIB_PARTS='$(EXTRA_MULTILIB_PARTS)' \
  	  $(SHELL) mklibgcc > tmp-libgcc.mk
! 	$(SHELL) $(srcdir)/move-if-change tmp-libgcc.mk libgcc.mk
  
! libgcc.a: libgcc.ready libgcc.mk $(FPBIT) $(DPBIT) $(LIB2ADD)
  	$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
  	  HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
  	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
--- 960,974 ----
  	MULTILIBS=`$(GCC_FOR_TARGET) --print-multi-lib` \
  	EXTRA_MULTILIB_PARTS='$(EXTRA_MULTILIB_PARTS)' \
  	  $(SHELL) mklibgcc > tmp-libgcc.mk
! 	mv tmp-libgcc.mk libgcc.mk
! 
! # All the things that might cause us to want to recompile bits of libgcc.
! LIBGCC_DEPS = $(GCC_PASSES) $(LANGUAGES) stmp-int-hdrs $(STMP_FIXPROTO) \
! 	libgcc.mk $(srcdir)/libgcc1.c $(srcdir)/libgcc2.c $(CONFIG_H) \
! 	$(MACHMODE_H) longlong.h frame.h gbl-ctors.h config.status \
! 	stmp-int-hdrs tsystem.h $(FPBIT) $(DPBIT) $(LIB2ADD)
  
! libgcc.a: $(LIBGCC_DEPS)
  	$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
  	  HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
  	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
*************** s-mlib: $(srcdir)/genmultilib Makefile
*** 1003,1009 ****
  	touch s-mlib
  
  # Build multiple copies of libgcc.a, one for each target switch.
! stmp-multilib: libgcc.ready libgcc.mk $(FPBIT) $(DPBIT)
  	$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
  	  HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
  	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
--- 999,1005 ----
  	touch s-mlib
  
  # Build multiple copies of libgcc.a, one for each target switch.
! stmp-multilib: $(LIBGCC_DEPS)
  	$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
  	  HOST_PREFIX="$(HOST_PREFIX)" HOST_PREFIX_1="$(HOST_PREFIX_1)" \
  	  AR_FOR_TARGET="$(AR_FOR_TARGET)" \
*************** mostlyclean: $(INTL_MOSTLYCLEAN) lang.mo
*** 2137,2143 ****
  # that don't exist in the distribution.
  INTL_CLEAN = intl.clean
  clean: mostlyclean $(INTL_CLEAN) lang.clean
! 	-rm -f libgcc.a libgcc.ready
  	-rm -f *.dvi
  	-rm -f */*.dvi
  	-if [ -f md.pre-cpp ]; then \
--- 2133,2139 ----
  # that don't exist in the distribution.
  INTL_CLEAN = intl.clean
  clean: mostlyclean $(INTL_CLEAN) lang.clean
! 	-rm -f libgcc.a
  	-rm -f *.dvi
  	-rm -f */*.dvi
  	-if [ -f md.pre-cpp ]; then \
Index: mklibgcc.in
===================================================================
RCS file: /cvs/gcc/egcs/gcc/mklibgcc.in,v
retrieving revision 1.12
diff -c -p -r1.12 mklibgcc.in
*** mklibgcc.in	2000/06/03 01:39:51	1.12
--- mklibgcc.in	2000/06/06 01:40:57
*************** make_compile='$(MAKE) GCC_FOR_TARGET="$(
*** 65,77 ****
  	  LANGUAGES="$(LANGUAGES)"'
  
  # Dependancies for libgcc1.c
! libgcc1_c_dep='$(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'
  
  # Dependancies for fp-bit.c
! fpbit_c_dep='config.status tsystem.h'
  
  #
  # Build libgcc1 components.
--- 65,77 ----
  	  LANGUAGES="$(LANGUAGES)"'
  
  # Dependancies for libgcc1.c
! libgcc1_c_dep='stmp-dirs $(srcdir)/libgcc1.c $(CONFIG_H)'
  
  # Dependancies for libgcc2.c
! 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='stmp-dirs config.status tsystem.h'
  
  #
  # Build libgcc1 components.
*************** case X"$LIBGCC1" in
*** 94,105 ****
          flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
          out="libgcc/${dir}/${name}${objext}"
  
! 	if [ $dir = . ]; then
! 	  libgccdir="libgcc"
! 	else
! 	  libgccdir="libgcc/${dir}"
! 	fi
!         echo ${out}: ${libgccdir} '$(srcdir)/config/$(LIB1ASMSRC)'
  	echo "	$gcc_compile" $flags -DL$name -xassembler-with-cpp \
  	  -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out
        done
--- 94,100 ----
          flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
          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
        done
*************** for name in $LIB2FUNCS; do
*** 161,172 ****
      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
      out="libgcc/${dir}/${name}${objext}"
  
!     if [ $dir = . ]; then
!       libgccdir="libgcc"
!     else
!       libgccdir="libgcc/${dir}"
!     fi
!     echo $out: $libgccdir $libgcc2_c_dep
      echo "	$gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
        -c '$(srcdir)/libgcc2.c' -o $out
    done
--- 156,162 ----
      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
      out="libgcc/${dir}/${name}${objext}"
  
!     echo $out: $libgcc2_c_dep
      echo "	$gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
        -c '$(srcdir)/libgcc2.c' -o $out
    done
*************** for name in $LIB2FUNCS_EH; do
*** 179,190 ****
      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
      out="libgcc/${dir}/${name}${objext}"
  
!     if [ $dir = . ]; then
!       libgccdir="libgcc"
!     else
!       libgccdir="libgcc/${dir}"
!     fi
!     echo $out: $libgccdir $libgcc2_c_dep
      echo "	$gcc_compile" '$(MAYBE_USE_COLLECT2)' -fexceptions \
        $flags -DL$name -c '$(srcdir)/libgcc2.c' -o $out
    done
--- 169,175 ----
      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
      out="libgcc/${dir}/${name}${objext}"
  
!     echo $out: $libgcc2_c_dep
      echo "	$gcc_compile" '$(MAYBE_USE_COLLECT2)' -fexceptions \
        $flags -DL$name -c '$(srcdir)/libgcc2.c' -o $out
    done
*************** if [ "$FPBIT" ]; then
*** 198,209 ****
        flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
        out="libgcc/${dir}/${name}${objext}"
  
!       if [ $dir = . ]; then
! 	libgccdir="libgcc"
!       else
! 	libgccdir="libgcc/${dir}"
!       fi
!       echo $out: $libgccdir $FPBIT $fpbit_c_dep
        echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
  	-c $FPBIT -o $out
      done
--- 183,189 ----
        flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
        out="libgcc/${dir}/${name}${objext}"
  
!       echo $out: $FPBIT $fpbit_c_dep
        echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
  	-c $FPBIT -o $out
      done
*************** if [ "$DPBIT" ]; then
*** 218,229 ****
        flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
        out="libgcc/${dir}/${name}${objext}"
  
!       if [ $dir = . ]; then
! 	libgccdir="libgcc"
!       else
! 	libgccdir="libgcc/${dir}"
!       fi
!       echo $out: $libgccdir $DPBIT $fpbit_c_dep
        echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
  	-c $DPBIT -o $out
      done
--- 198,204 ----
        flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
        out="libgcc/${dir}/${name}${objext}"
  
!       echo $out: $DPBIT $fpbit_c_dep
        echo "	$gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
  	-c $DPBIT -o $out
      done
*************** for file in $LIB2ADD; do
*** 239,245 ****
      fprime=`cat $file`
      for f in $fprime; do
  
!       lastout="force"
        for ml in $MULTILIBS; do
          dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
          flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
--- 214,220 ----
      fprime=`cat $file`
      for f in $fprime; do
  
!       lastout="stmp-dirs $file"
        for ml in $MULTILIBS; do
          dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
          flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
*************** for file in $LIB2ADD; do
*** 268,279 ****
  	flags="$flags -xassembler-with-cpp"
        fi
  
!       if [ $dir = . ]; then
! 	libgccdir="libgcc"
!       else
! 	libgccdir="libgcc/${dir}"
!       fi
!       echo $out: $libgccdir $file
        echo "	$gcc_compile" $flags -c $file -o $out
      done
      libgcc2_objs="$libgcc2_objs ${oname}${objext}"
--- 243,249 ----
  	flags="$flags -xassembler-with-cpp"
        fi
  
!       echo $out: stmp-dirs $file
        echo "	$gcc_compile" $flags -c $file -o $out
      done
      libgcc2_objs="$libgcc2_objs ${oname}${objext}"
*************** for ml in $MULTILIBS; do
*** 305,325 ****
  done
  
  echo ""
! all="libgcc"
  
- echo "libgcc:; -mkdir libgcc"
  for ml in $MULTILIBS; do
    dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
    if [ $dir != . ]; then
!     echo "libgcc/${dir}: libgcc; -mkdir libgcc/${dir}"
!     echo "${dir}:; -mkdir ${dir}"
!     all="$all ${dir} libgcc/${dir}"
    fi
    all="$all ${dir}/libgcc.a"
  done
  
  for f in $EXTRA_MULTILIB_PARTS; do
!   lastout="force"
    for ml in $MULTILIBS; do
      dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
--- 275,299 ----
  done
  
  echo ""
! all=stmp-dirs
! dirs=libgcc
  
  for ml in $MULTILIBS; do
    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="stmp-dirs force"
    for ml in $MULTILIBS; do
      dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
      flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]