X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fmklibgcc.in;h=60e390500ea03d3d5c30bdfa47409d6808bc28a6;hb=3dfef819d79660d4c38cf6ad2f9e09fa912a3f6b;hp=b36d31ef5113db14a727e631b9acd17aa857909f;hpb=ae515cebd6a707ca34bc39e89094b7838bbc3a2e;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/mklibgcc.in b/gcc/mklibgcc.in index b36d31ef511..60e390500ea 100644 --- a/gcc/mklibgcc.in +++ b/gcc/mklibgcc.in @@ -1,6 +1,7 @@ #!/bin/sh # Construct makefile for libgcc. -# Copyright (C) 2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2000, 2002, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. # # This file is part of GCC. @@ -10,6 +11,7 @@ # objext # LIB1ASMFUNCS # LIB2FUNCS_ST +# LIB2FUNCS_EXCLUDE # LIBGCOV # LIB2ADD # LIB2ADD_ST @@ -24,10 +26,19 @@ # FPBIT # FPBIT_FUNCS # LIB2_DIVMOD_FUNCS +# LIB2_SIDITI_CONV_FUNCS +# DFP_ENABLE +# DFP_CFLAGS # DPBIT # DPBIT_FUNCS # TPBIT # TPBIT_FUNCS +# D32PBIT +# D32PBIT_FUNCS +# D64PBIT +# D64PBIT_FUNCS +# D128PBIT +# D128PBIT_FUNCS # LIBGCC # MULTILIBS # EXTRA_MULTILIB_PARTS @@ -54,16 +65,48 @@ echo 'dirs = libgcc' echo # Library members defined in libgcc2.c. + +# The floating-point conversion routines that involve a single-word integer. +# XX stands for the integer mode. +swfloatfuncs= +for mode in sf df xf; do + swfloatfuncs="$swfloatfuncs _fixuns${mode}XX" +done + +# Likewise double-word routines. +dwfloatfuncs= +for mode in sf df xf tf; do + dwfloatfuncs="$dwfloatfuncs _fix${mode}XX _fixuns${mode}XX" + dwfloatfuncs="$dwfloatfuncs _floatXX${mode} _floatunXX${mode}" +done + +# Entries of the form :: indicate that libgcc2.c +# should be compiled with L defined and with LIBGCC2_UNITS_PER_WORD +# set to . is the name of the associated object file + 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 + _cmpdi2 _ucmpdi2 _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' + _divxc3 _divtc3 _bswapsi2 _bswapdi2' + +if [ "$LIB2_SIDITI_CONV_FUNCS" ]; then + for func in $swfloatfuncs; do + sifunc=`echo $func | sed -e 's/XX/si/'` + lib2funcs="$lib2funcs $sifunc:$sifunc:4" + done + for func in $dwfloatfuncs; do + difunc=`echo $func | sed -e 's/XX/di/'` + tifunc=`echo $func | sed -e 's/XX/ti/'` + lib2funcs="$lib2funcs $difunc:$difunc:4 $tifunc:$difunc:8" + done +else + lib2funcs="$lib2funcs `echo $swfloatfuncs | sed -e 's/XX/si/g'`" + lib2funcs="$lib2funcs `echo $dwfloatfuncs | sed -e 's/XX/di/g'`" +fi # Disable SHLIB_LINK if shared libgcc not enabled. if [ "@enable_shared@" = "no" ]; then @@ -96,6 +139,12 @@ libgcov_c_dep='stmp-dirs $(srcdir)/libgcov.c $(srcdir)/gcov-io.h $(srcdir)/gcov- # Dependencies for fp-bit.c fpbit_c_dep='stmp-dirs config.status tsystem.h' +# Dependencies for decnumber and friends. This is an overzealous set, +# but at least we can be sure to recompile if anything gets modified. +decnumber_dep='stmp-dirs $(srcdir)/../libdecnumber/decContext.h $(srcdir)/../libdecnumber/decNumber.h + $(srcdir)/../libdecnumber/decNumberLocal.h $(srcdir)/../libdecnumber/decimal32.h $(srcdir)/../libdecnumber/decimal64.h + $(srcdir)/../libdecnumber/decimal128.h $(srcdir)/../libdecnumber/decDPD.h $(srcdir)/../libdecnumber/decUtility.h' + # Flag whether we need eh_dummy.c need_eh_dummy= @@ -143,10 +192,11 @@ else 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' / /' \ +# defined as optimized assembly code in LIB1ASMFUNCS or as C code +# in LIB2FUNCS_EXCLUDE. +for name in $LIB1ASMFUNCS $LIB2FUNCS_EXCLUDE; 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' / /' \ @@ -248,16 +298,25 @@ for ml in $MULTILIBS; do # for name in $lib2funcs; do + case $name in + *:*:*) + defines=`echo $name | sed -e 's/.*:\(.*\):\(.*\)/-DL\1 -DLIBGCC2_UNITS_PER_WORD=\2/'` + name=`echo $name | sed -e 's/\(.*\):.*:.*/\1/'` + ;; + *) + defines="-DL$name" + ;; + esac 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' \ + echo " $gcc_s_compile" $flags $defines -c '$(srcdir)/libgcc2.c' \ -o $outS echo $out: $libgcc2_c_dep - echo " $gcc_compile" $flags -DL$name '$(vis_hide)' \ + echo " $gcc_compile" $flags $defines '$(vis_hide)' \ -c '$(srcdir)/libgcc2.c' -o $out echo $libgcc_a: $out @@ -268,7 +327,7 @@ for ml in $MULTILIBS; do 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 " $gcc_compile" $flags $defines -c '$(srcdir)/libgcc2.c' -o $out echo $libgcc_a: $out fi done @@ -313,92 +372,95 @@ for ml in $MULTILIBS; do # 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 + for fpbit_var in FPBIT DPBIT TPBIT ; do + fpfuncs_var="${fpbit_var}_FUNCS" + eval fpbit=\$$fpbit_var + eval fpfuncs=\$$fpfuncs_var + + if [ "$fpbit" ] ; then + for name in $fpfuncs; do + case "$name" in + # _sf_to_tf and _df_to_tf require tp-bit.c + # being compiled in. + _[sd]f_to_tf) [ -z "$TPBIT" ] && continue;; + esac + 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 - 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}" + done - echo $outS: $DPBIT $fpbit_c_dep - echo " $gcc_s_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \ - -c $DPBIT -o $outS + if [ "@enable_decimal_float@" = "yes" -a -z "$libgcc_so" ]; then + # If $DFP_ENABLE is set, then we want all data type sizes. + if [ "$DFP_ENABLE" ] ; then + D32PBIT=1; D64PBIT=1; D128PBIT=1 + fi - echo $out: $DPBIT $fpbit_c_dep - echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \ - '$(vis_hide)' -c $DPBIT -o $out + # Bring in the DFP support code if D32PBIT, D64PBIT or D128PBIT are set. + if [ -n "$D32PBIT" -o -n "$D64PBIT" -o -n "$D128PBIT" ] ; then + dec_filenames="decContext decNumber decRound decLibrary decUtility" + fi - 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 + # Only bring in decimal*.c files for types we support. + if [ -n "$D32PBIT" ] ; then + dec_filenames="$dec_filenames decimal32" + fi + if [ -n "$D64PBIT" ] ; then + dec_filenames="$dec_filenames decimal64" + fi + if [ -n "$D128PBIT" ] ; then + dec_filenames="$dec_filenames decimal128" + fi - echo $libgcc_a: $out - fi + for name in $dec_filenames ; do + out="libgcc/${dir}/${name}${objext}" + echo $out: "\$(srcdir)/../libdecnumber/${name}.c" $decnumber_dep + echo " $gcc_compile" $flags -c "\$(srcdir)/../libdecnumber/${name}.c" -o $out + echo $libgcc_a: $out 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 + # For individual functions, loop over each variable by name. + for dpbit_var in D32PBIT D64PBIT D128PBIT ; do + dpfuncs_var="${dpbit_var}_FUNCS" + eval dpbit=\$$dpbit_var + eval dpfuncs=\$$dpfuncs_var + case "$dpbit_var" in + D32PBIT) dpwidth=32 ;; + D64PBIT) dpwidth=64 ;; + D128PBIT) dpwidth=128 ;; + esac - echo $libgcc_a: $out + if [ "$dpbit" ]; then + for name in $dpfuncs; do + out="libgcc/${dir}/${name}${objext}" + echo $out: config/dfp-bit.h config/dfp-bit.c $fpbit_c_dep + echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name -DWIDTH=$dpwidth \ + $DFP_CFLAGS -c $\(srcdir\)/config/dfp-bit.c -o $out + echo $libgcc_a: $out + done fi done fi @@ -806,7 +868,7 @@ 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;' > \$@" + echo " echo 'int __libgcc_eh_dummy;' > \$@" fi echo "" @@ -821,12 +883,15 @@ for ml in $MULTILIBS; do ldir='$(DESTDIR)$(libsubdir)' fi echo ' $(INSTALL_DATA)' ${dir}/libgcc.a ${ldir}/ + echo ' chmod 644' ${ldir}/libgcc.a echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a echo ' $(INSTALL_DATA)' ${dir}/libgcov.a ${ldir}/ + echo ' chmod 644' ${ldir}/libgcov.a echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcov.a if [ "$SHLIB_LINK" ]; then echo ' $(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/ + echo ' chmod 644' ${ldir}/libgcc_eh.a echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a shlib_slibdir_qual= @@ -845,6 +910,7 @@ for ml in $MULTILIBS; do -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 ' chmod 644' ${dir}/libunwind.a echo ' $(RANLIB_FOR_TARGET)' ${libunwinddir}/libunwind.a fi fi