Index: gnu/lib/libgcc4/Makefile.inc =================================================================== RCS file: /cvsroot/src/gnu/lib/libgcc4/Makefile.inc,v retrieving revision 1.6 diff -u -r1.6 Makefile.inc --- gnu/lib/libgcc4/Makefile.inc 8 Apr 2007 09:56:08 -0000 1.6 +++ gnu/lib/libgcc4/Makefile.inc 19 Nov 2007 12:23:41 -0000 @@ -16,43 +16,57 @@ CPPFLAGS+= -I${G_EXTRA_HEADERS:H:u} CPPFLAGS+= -I${DIST}/gcc/cp -I${DIST}/gcc/config -I${GCCARCHXX} -I. -# This is copied from gcc/mklibgcc.in:$lib2funcs -LIB2FUNCS_ALL= _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 \ - -.if ${MACHINE_ARCH} != "vax" -LIB2FUNCS_ALL+= \ - _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 _divxc3 _divtc3 -.endif - -LIB2FUNCS_SHORT:=${LIB2FUNCS_ALL} -LIB2_DIVMOD_FUNCS:=${G_LIB2_DIVMOD_FUNCS} -.for f in ${G_LIB1ASMFUNCS}; do -LIB2FUNCS_SHORT:=${LIB2FUNCS_SHORT:N${f}} -LIB2_DIVMOD_FUNCS:=${LIB2_DIVMOD_FUNCS:N${f}} -.endfor +# Some looks like +# "_fixunssfsi:_fixunssfsi:4" +# where +# "::" +# It's compiled as +# cc -D${define_name} -DLIBGCC2_UNITS_PER_WORD=${units_per_word} ${filename}.c +.if !empty(G_LIB1ASMFUNCS) +. for f in ${G_lib2funcs} +. if empty(G_LIB1ASMFUNCS:M${f}) +LIB2FUNCS_SPECS+= $f +. endif +. endfor +.else +LIB2FUNCS_SPECS+= ${G_lib2funcs} +.endif + +.if defined(G_LIB1ASMFUNCS) +. for f in ${G_LIB2_DIVMOD_FUNCS} +. if empty(G_LIB1ASMFUNCS:M${f}) +LIB2_DIVMOD_FUNCS+= $f +. endif +. endfor +.else +LIB2_DIVMOD_FUNCS+= ${G_LIB2_DIVMOD_FUNCS} +.endif -LIB2FUNCS= ${LIB2FUNCS_SHORT:=.c} +LIB2FUNCS= ${LIB2FUNCS_SPECS:C/:.*$//g:=.c} LIB2FUNCS_ST= ${G_LIB2FUNCS_ST:=.c} +LIB2FUNCS_EXTRA=${G_LIB2FUNCS_EXTRA:=.c} LIB2DIVMOD= ${LIB2_DIVMOD_FUNCS:=.c} LIB2_EH= ${G_LIB2ADDEH:M*.c:T} .if !empty(G_LIB1ASMFUNCS) LIB1ASMFUNCS= ${G_LIB1ASMFUNCS:=.S} .endif +.if !empty(G_FPBIT_FUNCS) || !empty(G_DPBIT_FUNCS) || !empty(G_TPBIT_FUNCS) +FPBIT_FUNCS= ${G_FPBIT_FUNCS:=.c} +DPBIT_FUNCS= ${G_DPBIT_FUNCS:=.c} +TPBIT_FUNCS= ${G_TPBIT_FUNCS:=.c} +.endif DPSRCS+= ${.CURDIR}/../arch/${MACHINE_ARCH}.mk tconfig.h -CLEANFILES+= ${LIB2FUNCS} ${LIB2FUNCS_ST} ${LIB2DIVMOD} cs-tconfig.h \ +CLEANFILES+= ${LIB2FUNCS} ${LIB2FUNCS_ST} ${LIB2FUNCS_EXTRA} ${LIB2DIVMOD} cs-tconfig.h \ tconfig.h .if !empty(G_LIB1ASMFUNCS) CLEANFILES+= ${LIB1ASMFUNCS} .endif +.if !empty(G_FPBIT_FUNCS) || !empty(G_DPBIT_FUNCS) || !empty(G_TPBIT_FUNCS) +CLEANFILES= ${FPBIT_FUNCS} +CLEANFILES= ${DPBIT_FUNCS} +CLEANFILES= ${TPBIT_FUNCS} +.endif # XXX .if ${MACHINE_ARCH} == "m68000" @@ -78,7 +92,21 @@ COPTS+= -mlong-double-128 .endif -${LIB2FUNCS} ${LIB2FUNCS_ST}: ${.CURDIR}/Makefile +# XXX See mklibgcc.in for the detail. +${LIB2FUNCS_SPECS:N*\:*\:*:=.c}: ${.CURDIR}/Makefile + ${_MKTARGET_CREATE} + printf '#define L${.PREFIX}\n#include \n' >${.TARGET} + +${LIB2FUNCS_SPECS:M*\:*\:*:C/:.*//g:=.c}: ${.CURDIR}/Makefile + ${_MKTARGET_CREATE} + { \ + IFS=:; set -- $$( echo ${LIB2FUNCS_SPECS:M${.TARGET:R}*} ); \ + printf "#define L$${2}\n"; \ + printf "#define LIBGCC2_UNITS_PER_WORD $${3}\n"; \ + printf "#include \n"; \ + } >${.TARGET} + +${LIB2FUNCS_ST} ${LIB2FUNCS_EXTRA}: ${.CURDIR}/Makefile ${_MKTARGET_CREATE} printf '#define L${.PREFIX}\n#include \n' >${.TARGET} @@ -92,6 +120,44 @@ printf '#define L${.PREFIX}\n#include <${G_LIB1ASMSRC}>\n' >${.TARGET} .endif +.if !empty(G_FPBIT_FUNCS) +${FPBIT_FUNCS}: ${.CURDIR}/Makefile + ${_MKTARGET_CREATE} + { \ + printf '#define FLOAT\n'; \ + printf '#define FINE_GRAINED_LIBRARIES\n'; \ + printf '#define L${.PREFIX}\n'; \ + printf '#include \n'; \ + } >${.TARGET} +.endif + +.if !empty(G_DPBIT_FUNCS) +${DPBIT_FUNCS}: ${.CURDIR}/Makefile + ${_MKTARGET_CREATE} + { \ + printf '#define FINE_GRAINED_LIBRARIES\n'; \ + printf '#define L${.PREFIX}\n'; \ + printf '#include \n'; \ + } >${.TARGET} +.endif + +.if !empty(G_TPBIT_FUNCS) +${TPBIT_FUNCS}: ${.CURDIR}/Makefile + ${_MKTARGET_CREATE} + { \ + printf '#ifdef __MIPSEL__\n'; \ + printf '#define FLOAT_BIT_ORDER_MISMATCH\n'; \ + printf '#endif\n'; \ + printf '#if __LDBL_MANT_DIG__ == 113\n'; \ + printf '#define QUIET_NAN_NEGATED\n'; \ + printf '#define TFLOAT\n'; \ + printf '#define FINE_GRAINED_LIBRARIES\n'; \ + printf '#define L${.PREFIX}\n'; \ + printf '#include \n'; \ + printf '#endif\n'; \ + } >${.TARGET} +.endif + ${G_LIB2ADD:M${GNUHOSTDIST}/*:T:S/.asm/.S/}: ${.CURDIR}/Makefile ${G_LIB2ADD} @echo copying ${G_LIB2ADD} for i in ${G_LIB2ADD}; do \ @@ -117,10 +183,6 @@ ${_MKTARGET_COMPILE} ${COMPILE.c} ${CPICFLAGS} -fexceptions -fnon-call-exceptions ${COPTS.${.IMPSRC:T}} -o ${.TARGET} ${.IMPSRC} -dp-bit.c: ${.CURDIR}/Makefile - ${_MKTARGET_CREATE} - printf '#define FLOAT\n#include \n' >${.TARGET} - .PATH: ${DIST}/gcc ${DIST}/gcc/cp ${DIST}/gcc/cp/inc ${DIST}/gcc/config \ ${G_CONFIGDIR} Index: gnu/lib/libgcc4/libgcc/Makefile =================================================================== RCS file: /cvsroot/src/gnu/lib/libgcc4/libgcc/Makefile,v retrieving revision 1.3 diff -u -r1.3 Makefile --- gnu/lib/libgcc4/libgcc/Makefile 9 Mar 2007 04:40:38 -0000 1.3 +++ gnu/lib/libgcc4/libgcc/Makefile 19 Nov 2007 12:23:41 -0000 @@ -15,8 +15,9 @@ .cc: # disable .cc->NULL transform -SRCS+= ${LIB2FUNCS} ${LIB2FUNCS_ST} ${LIB2DIVMOD} \ - ${G_LIB2ADD:T:S/.asm/.S/} ${LIB1ASMFUNCS} +SRCS+= ${LIB2FUNCS} ${LIB2FUNCS_ST} ${LIB2FUNCS_EXTRA} ${LIB2DIVMOD} \ + ${G_LIB2ADD:T:S/.asm/.S/} ${LIB1ASMFUNCS} \ + ${FPBIT_FUNCS} ${DPBIT_FUNCS} ${TPBIT_FUNCS} .if ${MKPIC} == "no" SRCS+= ${LIB2_EH} .endif Index: gnu/lib/libgcc4/libgcc_s/Makefile =================================================================== RCS file: /cvsroot/src/gnu/lib/libgcc4/libgcc_s/Makefile,v retrieving revision 1.3 diff -u -r1.3 Makefile --- gnu/lib/libgcc4/libgcc_s/Makefile 9 Nov 2006 04:08:50 -0000 1.3 +++ gnu/lib/libgcc4/libgcc_s/Makefile 19 Nov 2007 12:23:41 -0000 @@ -23,8 +23,9 @@ LDFLAGS+= -nodefaultlibs LDFLAGS+= -Wl,--version-script=${.OBJDIR}/libgcc.map -SRCS+= ${LIB2FUNCS} ${LIB2DIVMOD} ${LIB2_EH} \ - ${G_LIB2ADD:T:S/.asm/.S/} ${LIB1ASMFUNCS} +SRCS+= ${LIB2FUNCS} ${LIB2FUNCS_EXTRA} ${LIB2DIVMOD} ${LIB2_EH} \ + ${G_LIB2ADD:T:S/.asm/.S/} ${LIB1ASMFUNCS} \ + ${FPBIT_FUNCS} ${DPBIT_FUNCS} ${TPBIT_FUNCS} COPTS.unwind-dw2.c = -Wno-stack-protector Index: tools/gcc/mknative-gcc =================================================================== RCS file: /cvsroot/src/tools/gcc/mknative-gcc,v retrieving revision 1.22 diff -u -r1.22 mknative-gcc --- tools/gcc/mknative-gcc 25 Jun 2006 03:06:15 -0000 1.22 +++ tools/gcc/mknative-gcc 19 Nov 2007 12:23:41 -0000 @@ -49,6 +49,39 @@ ##### gnu/lib/libgcc ##### +# XXX XXX XXX This is really a hack. XXX XXX XXX +get_lib2funcs() { + ( + # To be able to run `./xgcc'. + cd $_TMPDIR/gcc + + . ./libgcc_vars.sh + sed -ne '/^libgcc\.mk/,/^$/p' Makefile | \ + sed -e 's/\\$//' | \ + { + while read _line; do + case $_line in + *=*) + _vars="${_vars} $( + # FOO='$(FOO)' -> FOO="${FOO}" + echo $_line | \ + sed -e 's,(,{,g' \ + -e 's,),},g' \ + -e s,\',\",g + )" + ;; + *) + ;; + esac + done + eval env "${_vars}" sh </dev/null +echo G_lib2funcs=\$lib2funcs +EOF + } + ) +} + get_libgcc () { _subdir="$1" mkdir -p $_TOP/gnu/lib/lib$_subdir/arch @@ -64,10 +97,11 @@ ;; esac - # DPBIT, FPBIT only used on mn10[23]00, we don't need them. # XXX we should probably grab everything Just In Case for # the future. { + rm -f "$_TMPDIR/gcc/libgcc_vars.sh" + getvars gcc/Makefile \ INCLUDES LIB2ADD LIB2ADDEH \ LIB1ASMFUNCS LIB1ASMSRC \ @@ -75,8 +109,20 @@ LIBGCC2_CFLAGS \ SHLIB_MKMAP SHLIB_MKMAP_OPTS \ SHLIB_MAPFILES SHLIB_NM_FLAGS \ + LIB2_SIDITI_CONV_FUNCS \ + FPBIT_FUNCS DPBIT_FUNCS TPBIT_FUNCS \ + GCC_FOR_TARGET \ EXTRA_HEADERS xm_defines \ - tm_defines ${_extravars} + tm_defines ${_extravars} | \ + while read _line; do + echo "$_line" + + # XXX Save definitions in libgcc_vars.sh too. + # G_FOO=a b c -> FOO="a b c" + echo "$_line" | sed -e "s,^G_,," -e 's,^\(.*\)=\(.*\),\1="\2",' \ + >>"$_TMPDIR/gcc/libgcc_vars.sh" + done + get_lib2funcs } | write_mk gnu/lib/lib$_subdir/arch${_archsubdir}/$MACHINE_ARCH.mk }