X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fmklibgcc.in;h=12f54460a6f0f840017080289cb83fd5ea01ee16;hp=151dd4977531ea32cc1cf8db8832aa6a5bbe5c4d;hb=160b212363ad6cd0735e94edc7fe5e6aa00c3a7d;hpb=4db52f5b45fe4253c519494d883e6a9b74365454 diff --git a/gcc/mklibgcc.in b/gcc/mklibgcc.in index 151dd497753..12f54460a6f 100644 --- a/gcc/mklibgcc.in +++ b/gcc/mklibgcc.in @@ -1,15 +1,16 @@ #!/bin/sh # Construct makefile for libgcc. -# Copyright (C) 2000 Free Software Foundation, Inc. +# Copyright (C) 2000, 2002 Free Software Foundation, Inc. # -# This file is part of GNU CC. +# 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 +# LIB2FUNCS_1 +# LIB2FUNCS_2 # LIB2FUNCS_ST # LIB2ADD # LIB2ADD_ST @@ -27,9 +28,11 @@ # SHLIB_LINK # SHLIB_MULTILIB # SHLIB_MKMAP +# SHLIB_MKMAP_OPTS # SHLIB_MAPFILES # SHLIB_NM_FLAGS # SHLIB_INSTALL +# SHLIB_SLIBDIR_SUFFIXES # Make needs VPATH to be literal. echo 'srcdir = @srcdir@' @@ -53,8 +56,8 @@ make_compile='$(MAKE) GCC_FOR_TARGET="$(GCC_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)" \ + BUILD_PREFIX="$(BUILD_PREFIX)" \ + BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \ LANGUAGES="$(LANGUAGES)"' # Dependencies for libgcc2.c @@ -79,11 +82,17 @@ for name in $LIB1ASMFUNCS; do 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'$//'` + # Remove any objects from LIB2FUNCS and LIB2_DIVMOD_FUNCS that are + # defined as optimized assembly code in LIB1ASMFUNCS. + LIB2FUNCS_1=`echo $LIB2FUNCS_1 | sed -e 's/^'$name' //' \ + -e 's/ '$name' / /' \ + -e 's/ '$name'$//'` + LIB2FUNCS_2=`echo $LIB2FUNCS_2 | 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 libgcc1_objs="$libgcc1_objs ${name}${objext}" done @@ -94,8 +103,9 @@ done libgcc2_objs="" libgcc2_st_objs="" +libgcc2_eh_objs="" -for name in $LIB2FUNCS; do +for name in $LIB2FUNCS_1 $LIB2FUNCS_2; do for ml in $MULTILIBS; do dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; @@ -197,7 +207,11 @@ for file in $LIB2ADDEH; do echo $out: stmp-dirs $file echo " $gcc_compile" $flags -fexceptions -c $file -o $out done - libgcc2_objs="$libgcc2_objs ${oname}${objext}" + if [ "$SHLIB_LINK" ]; then + libgcc2_eh_objs="$libgcc2_eh_objs ${oname}${objext}" + else + libgcc2_objs="$libgcc2_objs ${oname}${objext}" + fi done for file in $LIB2ADD_ST; do @@ -219,31 +233,41 @@ for file in $LIB2ADD_ST; do done # SHLIB_MKMAP +# SHLIB_MKMAP_OPTS # SHLIB_MAPFILES for ml in $MULTILIBS; do dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; libgcc_objs="" + libgcc_eh_objs="" for o in $libgcc1_objs; do libgcc_objs="$libgcc_objs libgcc/${dir}/$o" done for o in $libgcc2_objs; do libgcc_objs="$libgcc_objs libgcc/${dir}/$o" done - shlib_deps="$libgcc_objs" + for o in $libgcc2_eh_objs; do + libgcc_eh_objs="$libgcc_eh_objs libgcc/${dir}/$o" + done + libgcc_sh_objs="$libgcc_objs $libgcc_eh_objs" + shlib_deps="$libgcc_sh_objs" libgcc_st_objs="" for o in $libgcc2_st_objs; do libgcc_st_objs="$libgcc_st_objs libgcc/${dir}/$o" done - if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" -a -z "$mapfile" ]; then - mapfile="libgcc.map" + if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" ]; then + mapfile="libgcc/${dir}/libgcc.map" + tmpmapfile="libgcc/${dir}/tmp-libgcc.map" echo "" - echo "${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_objs" - echo ' { $(NM_FOR_TARGET)'" $SHLIB_NM_FLAGS $libgcc_objs; echo %%; cat $SHLIB_MAPFILES; } | "'$(AWK)'" -f $SHLIB_MKMAP > "'tmp-$@' - echo ' mv tmp-$@ $@' + echo "${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_sh_objs" + echo ' { $(NM_FOR_TARGET)'" $SHLIB_NM_FLAGS $libgcc_sh_objs; echo %%; \\" + echo " cat $SHLIB_MAPFILES | sed -e "'"/^[ ]*#/d" -e '\''s/^%\(if\|else\|elif\|endif\|define\)/#\1/'\'" \\" + echo " | $gcc_compile $flags -E -xassembler-with-cpp -; \\" + echo ' } | $(AWK)'" -f $SHLIB_MKMAP $SHLIB_MKMAP_OPTS > ${tmpmapfile}" + echo ' mv '"$tmpmapfile"' $@' fi shlib_deps="$shlib_deps $mapfile" @@ -253,29 +277,74 @@ for ml in $MULTILIBS; do shlib_deps="$shlib_deps $dir/$f" done + libgcc_a_objs="$libgcc_objs $libgcc_st_objs" + + if [ "@libgcc_visibility@" = yes -a "$SHLIB_LINK" ]; then + libgcc_a_objs= + echo "" + for o in $libgcc_objs $libgcc_st_objs; do + # .oS objects will have all non-local symbol definitions .hidden + oS=`echo ${o} | sed s~${objext}'$~.oS~g'` + echo "${oS}: stmp-dirs ${o}" + echo ' @$(NM_FOR_TARGET) '${SHLIB_NM_FLAGS} ${o}' | $(AWK) '\''NF == 3 { print "\t.hidden", $$3 }'\'' | $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) '${flags}' -r -nostdinc -nostdlib -o $@ '${o}' -xassembler -' + libgcc_a_objs="${libgcc_a_objs} ${oS}" + done + fi + echo "" - echo "${dir}/libgcc.a: $libgcc_objs $libgcc_st_objs" + echo "${dir}/libgcc.a: $libgcc_a_objs" echo " -rm -rf ${dir}/libgcc.a" - echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc.a $libgcc_objs $libgcc_st_objs + echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc.a $libgcc_a_objs echo ' if $(RANLIB_TEST_FOR_TARGET) ; then' \\ echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc.a ';' \\ echo ' else true; fi;' if [ "$SHLIB_LINK" ]; then + + echo "" + echo "${dir}/libgcc_eh.a: $libgcc_eh_objs" + echo " -rm -rf ${dir}/libgcc_eh.a" + echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a $libgcc_eh_objs + echo ' if $(RANLIB_TEST_FOR_TARGET) ; then' \\ + echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a ';' \\ + echo ' else true; fi;' + if [ -z "$SHLIB_MULTILIB" ]; then - if [ "$dir" = "." ]; then - shlib_base_name="libgcc_s"; + if [ "$dir" = . ]; then + shlib_base_name=libgcc_s else shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g` fi + shlib_so_name="$shlib_base_name" + shlib_dir= + if [ -n "$SHLIB_SLIBDIR_SUFFIXES" ]; then + if [ "$dir" != . ]; then + shlib_dir="$dir"/ + for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do + base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'` + if [ "$dir" = "$base_ml_dir" ]; then + shlib_so_name=libgcc_s + break + else + canon_dir=`echo $dir | sed -n -e "s:$base_ml_dir/::p"` + if [ -n "$canon_dir" ]; then + shlib_so_name=libgcc_s_`echo $canon_dir | sed s,/,_,g` + break + fi + fi + done + fi + fi echo "" echo "${dir}/${shlib_base_name}${SHLIB_EXT}: $shlib_deps" echo " $SHLIB_LINK" \ | sed -e "s%@multilib_flags@%$flags%g" \ -e "s%@multilib_dir@%$dir%g" \ - -e "s%@shlib_objs@%$libgcc_objs%g" \ + -e "s%@shlib_objs@%$libgcc_sh_objs%g" \ -e "s%@shlib_base_name@%$shlib_base_name%g" \ - -e "s%@shlib_map_file@%$mapfile%g" + -e "s%@shlib_map_file@%$mapfile%g" \ + -e "s%@shlib_so_name@%$shlib_so_name%g" \ + -e "s%@shlib_dir@%$shlib_dir%g" elif [ "$SHLIB_MULTILIB" = "$dir" ]; then shlib_base_name="libgcc_s"; echo "" @@ -283,9 +352,11 @@ for ml in $MULTILIBS; do echo " $SHLIB_LINK" \ | sed -e "s%@multilib_flags@%$flags%g" \ -e "s%@multilib_dir@%$dir%g" \ - -e "s%@shlib_objs@%$libgcc_objs%g" \ + -e "s%@shlib_objs@%$libgcc_sh_objs%g" \ -e "s%@shlib_base_name@%$shlib_base_name%g" \ - -e "s%@shlib_map_file@%$mapfile%g" + -e "s%@shlib_map_file@%$mapfile%g" \ + -e "s%@shlib_so_name@%$shlib_base_name%g" \ + -e "s%@shlib_dir@%%g" fi fi done @@ -317,6 +388,7 @@ for ml in $MULTILIBS; do fi all="$all ${dir}/libgcc.a" if [ "$SHLIB_LINK" ]; then + all="$all ${dir}/libgcc_eh.a" if [ -z "$SHLIB_MULTILIB" ]; then if [ "$dir" = "." ]; then suff=""; @@ -332,7 +404,7 @@ done echo 'stmp-dirs: force' echo ' for d in '"$dirs"'; do \' -echo ' if [ -d $$d ]; then true; else mkdir $$d; fi \' +echo ' if [ -d $$d ]; then true; else '$mkinstalldirs' $$d; fi; \' echo ' done' echo ' if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi' @@ -376,18 +448,65 @@ for ml in $MULTILIBS; do echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a if [ "$SHLIB_LINK" ]; then + echo ' $(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/ + echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a + if [ -z "$SHLIB_MULTILIB" ]; then - if [ "$dir" = "." ]; then - shlib_base_name="libgcc_s"; + if [ "$dir" = . ]; then + shlib_base_name=libgcc_s else shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g` fi + shlib_so_name="$shlib_base_name" + shlib_dir= + shlib_slibdir_qual= + if [ -n "$SHLIB_SLIBDIR_SUFFIXES" ]; then + shlib_slibdir_qual=none + if [ "$dir" != . ]; then + shlib_dir="$dir"/ + for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do + base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'` + if [ "$dir" = "$base_ml_dir" ]; then + shlib_so_name=libgcc_s + shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'` + break + else + canon_dir=`echo $dir | sed -n -e "s:$base_ml_dir/::p"` + if [ -n "$canon_dir" ]; then + shlib_so_name=libgcc_s_`echo $canon_dir | sed s,/,_,g` + shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'` + break + fi + fi + done + fi + if [ "$shlib_slibdir_qual" = none ]; then + for suffix_pair in $SHLIB_SLIBDIR_SUFFIXES ; do + base_ml_dir=`echo ${suffix_pair} | sed -e 's/:.*$//' -e 's/=/$(EQ)/g'` + shlib_slibdir_qual=`echo ${suffix_pair} | sed -e 's/^[^:]*://'` + for ml2 in $MULTILIBS; do + dir2=`echo ${ml2} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` + if [ "$base_ml_dir" = "$dir2" ]; then + shlib_slibdir_qual= + break + fi + done + if [ -n "$shlib_slibdir_qual" ]; then break; fi + done + fi + fi echo " $SHLIB_INSTALL" \ - | sed -e "s%@shlib_base_name@%$shlib_base_name%g" + | sed -e "s%@shlib_base_name@%$shlib_base_name%g" \ + -e "s%@shlib_so_name@%$shlib_so_name%g" \ + -e "s%@shlib_dir@%$shlib_dir%g" \ + -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g" elif [ "$SHLIB_MULTILIB" = "$dir" ]; then shlib_base_name="libgcc_s"; echo " $SHLIB_INSTALL" \ - | sed -e "s%@shlib_base_name@%$shlib_base_name%g" + | sed -e "s%@shlib_base_name@%$shlib_base_name%g" \ + -e "s%@shlib_so_name@%$shlib_base_name%g" \ + -e "s%@shlib_dir@%%g" \ + -e "s%@shlib_slibdir_qual@%%g" fi fi done