mknative-gcc revision 1.65
11.1Smrg#!/bin/sh
21.65Smatt#	$NetBSD: mknative-gcc,v 1.65 2011/10/13 19:52:33 matt Exp $
31.1Smrg#
41.1Smrg# Shell script for generating all the constants needed for a native
51.10Smrg# platform build of src/gnu/dist/gcc.
61.1Smrg#
71.1Smrg
81.9Smrg# initialise
91.9Smrg
101.9Smrg_TMPDIR=$2
111.9Smrg_TOP=$3
121.9Smrg_PLATFORM=$4
131.61Smrg_DESTDIR=$5
141.61Smrg_ABI=$6
151.15Smrg_VPATH=`grep VPATH ${_TMPDIR}/Makefile | sed 's,^.*=[ 	]*,,'`
161.9Smrg_GNU_DIST=`cd ${_VPATH}; pwd`
171.9Smrg
181.61Smrgif [ -z "$_DESTDIR" ]; then
191.61Smrg	echo "\$_DESTDIR is empty" 2>&1
201.61Smrg	exit 1
211.61Smrgfi
221.61Smrg
231.9Smrg. $_TOP/tools/gcc/mknative.common
241.1Smrg
251.46Smrg# default to GCC 4.1 for now
261.46Smrg_OUTDIR="$_TOP/gnu"
271.46Smrg_OUTDIRBASE="gnu"
281.46Smrg
291.14Sthorpej##### gnu/lib/crtstuff #####
301.14Sthorpej
311.14Sthorpejget_crtstuff () {
321.16Smrg	_subdir="$1"
331.46Smrg	mkdir -p $_OUTDIR/lib/$_subdir/arch
341.14Sthorpej
351.14Sthorpej	getvars gcc/Makefile \
361.14Sthorpej		INCLUDES CRTSTUFF_CFLAGS CRTSTUFF_T_CFLAGS \
371.14Sthorpej		tm_defines xm_file xm_defines \
381.61Smrg		| sed "s,-I$_DESTDIR/usr/include,,g" \
391.46Smrg		| write_mk $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH.mk
401.14Sthorpej}
411.14Sthorpej
421.1Smrg##### gnu/lib/libg2c #####
431.1Smrg
441.1Smrgget_libg2c () {
451.46Smrg	mkdir -p $_OUTDIR/lib/libg2c3/arch/$MACHINE_ARCH
461.1Smrg
471.46Smrg	write_c $_OUTDIRBASE/lib/libg2c3/arch/$MACHINE_ARCH/config.h <$_TMPDIR/$_PLATFORM/libf2c/libU77/config.h
481.46Smrg	write_c $_OUTDIRBASE/lib/libg2c3/arch/$MACHINE_ARCH/g2c.h <$_TMPDIR/$_PLATFORM/libf2c/g2c.h
491.1Smrg
501.1Smrg	{
511.1Smrg		getvars $_PLATFORM/libf2c/Makefile \
521.1Smrg			F2CEXT
531.1Smrg		getvars $_PLATFORM/libf2c/libF77/Makefile \
541.1Smrg			ALL_CFLAGS OBJS
551.1Smrg		getvars $_PLATFORM/libf2c/libI77/Makefile \
561.1Smrg			ALL_CFLAGS OBJS | sed 's,=,+=,'
571.1Smrg		getvars $_PLATFORM/libf2c/libU77/Makefile \
581.1Smrg			ALL_CFLAGS OBJS | sed 's,=,+=,'
591.46Smrg	} | write_mk $_OUTDIRBASE/lib/libg2c3/arch/$MACHINE_ARCH/defs.mk
601.1Smrg}
611.1Smrg
621.1Smrg##### gnu/lib/libgcc #####
631.1Smrg
641.28Suebayasiget_libgcc_list_funcs_asm () {
651.42Suebayasi	{
661.42Suebayasi		getvars gcc/Makefile LIB1ASMFUNCS | {
671.42Suebayasi			# print newline separated list
681.42Suebayasi			sed -e '
691.42Suebayasi				s,^.*=,,
701.42Suebayasi				s, *$,,
711.42Suebayasi				s,  *, ,g
721.42Suebayasi				s, ,\
731.28Suebayasi,g'
741.42Suebayasi		}
751.42Suebayasi		getvars gcc/Makefile LIB2FUNCS_EXTRA | {
761.42Suebayasi			# print newline separated list
771.42Suebayasi			sed -e '
781.42Suebayasi				s,^.*=,,
791.42Suebayasi				s, *$,,
801.42Suebayasi				s,  *, ,g
811.42Suebayasi				s, ,\
821.42Suebayasi,g' | \
831.42Suebayasi			sed -ne '
841.42Suebayasi				/\.S$/ { s,^.*/,,; s,\.S$,,; p; }
851.42Suebayasi				/\.asm$/ { s,^.*/,,; s,\.asm$,,; p; }
861.42Suebayasi			'
871.42Suebayasi		}
881.28Suebayasi	} | {
891.28Suebayasi		# print foo and foo_s
901.28Suebayasi		sed -ne '
911.28Suebayasi			/./ {
921.28Suebayasi				p
931.28Suebayasi				s,$,_s,
941.28Suebayasi				p
951.28Suebayasi			}
961.28Suebayasi		'
971.28Suebayasi	} | sort
981.28Suebayasi}
991.28Suebayasi
1001.29Suebayasiget_libgcc_list_funcs_lib () {
1011.29Suebayasi	local _lib=$1
1021.29Suebayasi	local _lib_prefix=${_lib%.*}
1031.29Suebayasi	local _lib_suffix=${_lib#*.}
1041.44Suebayasi	local _abi=${2:-'\.'}
1051.29Suebayasi
1061.43Suebayasi	cat build/gcc/libgcc.mk | \
1071.44Suebayasi	grep '/'${_abi}'/' | \
1081.29Suebayasi	sed -ne '
1091.45Suebayasi		/^'${_abi}'\/'${_lib_prefix}'\.'${_lib_suffix}': .*\.o$/ {
1101.29Suebayasi			s,^.*/,,
1111.29Suebayasi			s,\.o$,,
1121.29Suebayasi			p
1131.29Suebayasi		}
1141.43Suebayasi	' | sort
1151.29Suebayasi}
1161.29Suebayasi
1171.30Suebayasiget_libgcc_list_objs_libs () {
1181.44Suebayasi	local _abi=${1:-'\.'}
1191.44Suebayasi
1201.30Suebayasi	cat build/gcc/libgcc.mk | \
1211.44Suebayasi	grep '/'${_abi}'/' | \
1221.45Suebayasi	egrep '^'${_abi}'\/(libgcc_s\.so|libgcc\.a|libgcc_eh\.a|libgcov\.a): (libgcc_s|libgcc|libgcc_eh|libgcov)\/.*\.o$' | \
1231.30Suebayasi	sed -e '
1241.44Suebayasi		s,^'${_abi}'\/,,
1251.30Suebayasi		s,: .*/,	,
1261.30Suebayasi		s,^\(.*\)	\(.*\)$,\2	\1,
1271.30Suebayasi	' | sort
1281.30Suebayasi}
1291.30Suebayasi
1301.30Suebayasiget_libgcc_list_objs_srcs () {
1311.44Suebayasi	local _abi=${1:-'\.'}	# XXX not used
1321.44Suebayasi
1331.41Suebayasi	if [ -e $_TOP/${libgcc_db_funcs}.S ]; then
1341.30Suebayasi		cut -f1 $_TOP/${libgcc_db_objs_libs} | sed -e 's,\.o$,,' | \
1351.30Suebayasi		comm -23 /dev/stdin $_TOP/${libgcc_db_funcs}.S | \
1361.30Suebayasi		sed -e 's,\(.*\),\1.o	\1.c,'
1371.30Suebayasi
1381.30Suebayasi		cut -f1 $_TOP/${libgcc_db_objs_libs} | sed -e 's,\.o$,,' | \
1391.30Suebayasi		comm -12 /dev/stdin $_TOP/${libgcc_db_funcs}.S | \
1401.30Suebayasi		sed -e 's,\(.*\),\1.o	\1.S,'
1411.41Suebayasi	else
1421.41Suebayasi		cut -f1 $_TOP/${libgcc_db_objs_libs} | sed -e 's,\.o$,,' | \
1431.41Suebayasi		sed -e 's,\(.*\),\1.o	\1.c,'
1441.41Suebayasi	fi | sort
1451.30Suebayasi}
1461.30Suebayasi
1471.40Suebayasiget_libgcc_list_objs_tmplsrcs () {
1481.44Suebayasi	local _abi=${1:-'\.'}
1491.44Suebayasi
1501.32Suebayasi	grep 'GCC_FOR_TARGET.*\.o$' build/gcc/libgcc.mk | \
1511.44Suebayasi	grep '/'${_abi}'/' | \
1521.32Suebayasi	sed -ne '
1531.32Suebayasi		s,^.* -c \([^ ]*\).* -o .*/\([^ ]*\.o\)$,\2	\1,
1541.32Suebayasi		# basename
1551.32Suebayasi		/\$/ { s,\$.*/,,; }
1561.32Suebayasi		/\// { s,\/.*/,,; }
1571.32Suebayasi		p
1581.43Suebayasi	' | sort -u
1591.32Suebayasi}
1601.32Suebayasi
1611.31Suebayasiget_libgcc_list_objs_xflags () {
1621.31Suebayasi	local _flags=$1
1631.44Suebayasi	local _abi=${2:-'\.'}
1641.31Suebayasi
1651.31Suebayasi	grep 'GCC_FOR_TARGET.*\.o$' build/gcc/libgcc.mk | \
1661.44Suebayasi	grep '/'${_abi}'/' | \
1671.31Suebayasi	sed -n '
1681.31Suebayasi		x
1691.31Suebayasi	:loop
1701.31Suebayasi		g
1711.31Suebayasi		s/^\(.*\) \(-['${_flags}'][^ ][^ ]*\) \(.*\) \(-o .*\)\/\(.*\.o\)$/\5	\2/p
1721.31Suebayasi		g
1731.31Suebayasi		s/^\(.*\) \(-['${_flags}'][^ ][^ ]*\) \(.*\) \(-o .*\)\/\(.*\.o\)$/\1 \3 \4\/\5/
1741.31Suebayasi		h
1751.31Suebayasi		t loop
1761.31Suebayasi	' | sort
1771.31Suebayasi}
1781.31Suebayasi
1791.31Suebayasiget_libgcc_list_objs_cppflags () {
1801.44Suebayasi	get_libgcc_list_objs_xflags D $1
1811.31Suebayasi}
1821.31Suebayasi
1831.31Suebayasiget_libgcc_list_objs_copts () {
1841.44Suebayasi	get_libgcc_list_objs_xflags fmx $1
1851.31Suebayasi}
1861.31Suebayasi
1871.40Suebayasiget_libgcc_list_tmplsrcs () {
1881.33Suebayasi	local _lib=$1
1891.44Suebayasi	local _abi=$2	# XXX not used
1901.40Suebayasi	local _tmplallsrcs=$( mktemp /tmp/mknative-gcc._tmplallsrcs.XXXXXX )
1911.33Suebayasi
1921.40Suebayasi	touch $_TOP/${libgcc_db_tmplsrcs}.tmplsrcs.${_lib%.*}
1931.40Suebayasi	touch $_TOP/${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*}
1941.40Suebayasi	touch $_TOP/${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*}
1951.33Suebayasi
1961.33Suebayasi	# all files
1971.33Suebayasi	local _lib_prefix=${_lib%.*}
1981.33Suebayasi	local _lib_suffix=${_lib#*.}
1991.40Suebayasi	join $_TOP/$libgcc_db_objs_libs $_TOP/$libgcc_db_objs_tmplsrcs | \
2001.33Suebayasi	grep ${_lib_prefix}'\.'${_lib_suffix} | cut -d' ' -f 3 | sort -u > \
2011.40Suebayasi	$_tmplallsrcs
2021.33Suebayasi
2031.40Suebayasi	# TMPLFPSRCS = [fdp]p-bit.c
2041.40Suebayasi	grep '[fdt]p-bit\.c' <$_tmplallsrcs | sort -u | \
2051.40Suebayasi	writefile ${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*}
2061.40Suebayasi
2071.40Suebayasi	# TMPLASMSRCS = $(LIB1ASMSRC)
2081.40Suebayasi	grep '\$(LIB1ASMSRC)' <$_tmplallsrcs | sort -u | \
2091.40Suebayasi	writefile ${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*}
2101.40Suebayasi
2111.40Suebayasi	# TMPLSRCS is anything else; exclude TMPLFPSRCS and TMPLASMSRCS
2121.40Suebayasi	cat $_tmplallsrcs | \
2131.40Suebayasi	comm -23 /dev/stdin $_TOP/${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*} | \
2141.40Suebayasi	comm -23 /dev/stdin $_TOP/${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*} | \
2151.40Suebayasi	writefile ${libgcc_db_tmplsrcs}.tmplsrcs.${_lib%.*}
2161.33Suebayasi
2171.40Suebayasi	rm -f $_tmplallsrcs
2181.33Suebayasi}
2191.33Suebayasi
2201.35Suebayasiget_libgcc_new_analyze () {
2211.44Suebayasi	local _abi=$1
2221.44Suebayasi
2231.35Suebayasi	mkdir -p $_TOP/${_machine_arch_subdir}
2241.35Suebayasi
2251.41Suebayasi	touch $_TOP/${libgcc_db_funcs}.S
2261.35Suebayasi	get_libgcc_list_funcs_asm | \
2271.35Suebayasi	writefile ${libgcc_db_funcs}.S
2281.35Suebayasi
2291.35Suebayasi	for _lib in libgcc_s.so libgcc.a libgcc_eh.a libgcov.a; do
2301.41Suebayasi		touch $_TOP/${libgcc_db_funcs}.${_lib%.*}
2311.44Suebayasi		get_libgcc_list_funcs_lib $_lib $_abi | \
2321.35Suebayasi		writefile ${libgcc_db_funcs}.${_lib%.*}
2331.35Suebayasi	done
2341.35Suebayasi
2351.44Suebayasi	get_libgcc_list_objs_libs $_abi | writefile ${libgcc_db_objs_libs}
2361.44Suebayasi	get_libgcc_list_objs_srcs $_abi | writefile ${libgcc_db_objs_srcs}
2371.44Suebayasi	get_libgcc_list_objs_tmplsrcs $_abi | writefile ${libgcc_db_objs_tmplsrcs}
2381.44Suebayasi	get_libgcc_list_objs_cppflags $_abi | writefile ${libgcc_db_objs_cppflags}
2391.44Suebayasi	get_libgcc_list_objs_copts $_abi | writefile ${libgcc_db_objs_copts}
2401.35Suebayasi
2411.35Suebayasi	for _lib in libgcc_s.so libgcc.a libgcc_eh.a libgcov.a; do
2421.44Suebayasi		get_libgcc_list_tmplsrcs $_lib $_abi
2431.35Suebayasi	done
2441.35Suebayasi}
2451.35Suebayasi
2461.35Suebayasi#####
2471.35Suebayasi
2481.40Suebayasiget_libgcc_gen_tmplsrcs_tmplsrcs () {
2491.37Suebayasi	local _lib=$1
2501.37Suebayasi
2511.37Suebayasi	printf '\n'
2521.40Suebayasi	printf 'TMPLSRCS.%s = \\\n' $_lib
2531.40Suebayasi	sed -e 's,^,	,; s,$, \\,' $_TOP/${libgcc_db_tmplsrcs}.tmplsrcs.${_lib%.*}
2541.37Suebayasi}
2551.37Suebayasi
2561.40Suebayasiget_libgcc_gen_tmplsrcs_tmplfpsrcs () {
2571.37Suebayasi	local _lib=$1
2581.37Suebayasi
2591.37Suebayasi	printf '\n'
2601.40Suebayasi	printf 'TMPLFPSRCS.%s = \\\n' $_lib
2611.40Suebayasi	sed -e 's,^,	,; s,$, \\,' $_TOP/${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*}
2621.37Suebayasi}
2631.37Suebayasi
2641.40Suebayasiget_libgcc_gen_tmplsrcs_tmplasmsrcs () {
2651.37Suebayasi	local _lib=$1
2661.37Suebayasi
2671.37Suebayasi	printf '\n'
2681.40Suebayasi	printf 'TMPLASMSRCS.%s = \\\n' $_lib
2691.40Suebayasi	sed -e 's,^,	,; s,$, \\,' $_TOP/${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*} | \
2701.37Suebayasi	sed -e 's,LIB1ASMSRC,G_&,'
2711.37Suebayasi}
2721.37Suebayasi
2731.36Suebayasiget_libgcc_gen_srcs () {
2741.36Suebayasi	local _lib=$1
2751.36Suebayasi
2761.36Suebayasi	printf '\n'
2771.36Suebayasi	printf 'SRCS.%s = \\\n' $_lib
2781.41Suebayasi	if [ -e $_TOP/${libgcc_db_funcs}.S ]; then
2791.36Suebayasi		comm -23 $_TOP/${libgcc_db_funcs}.${_lib%.*} $_TOP/${libgcc_db_funcs}.S | \
2801.36Suebayasi		sed -e 's,$,.c,; s,^,tmp_,'
2811.36Suebayasi		comm -12 $_TOP/${libgcc_db_funcs}.${_lib%.*} $_TOP/${libgcc_db_funcs}.S | \
2821.36Suebayasi		sed -e 's,$,.S,; s,^,tmp_,'
2831.41Suebayasi	else
2841.41Suebayasi		cat $_TOP/${libgcc_db_funcs}.${_lib%.*} | \
2851.41Suebayasi		sed -e 's,$,.c,; s,^,tmp_,'
2861.41Suebayasi	fi | sort | \
2871.36Suebayasi	sed -e 's,^,	,; s,$, \\,'
2881.36Suebayasi}
2891.36Suebayasi
2901.38Suebayasi_lookup_objs () {
2911.38Suebayasi	local _obj=$1; local _key=$2
2921.38Suebayasi
2931.38Suebayasi	eval grep \^$_obj\\\	 \$_TOP/\${libgcc_db_objs_${_key}} | cut -f2
2941.38Suebayasi}
2951.38Suebayasi
2961.40Suebayasiget_libgcc_gen_srcs_tmplsrcs () {
2971.38Suebayasi	cut -f1 $_TOP/${libgcc_db_objs_libs} | \
2981.38Suebayasi	while read _obj; do
2991.38Suebayasi		printf 'SRCS.tmp_%s=%s\n' \
3001.38Suebayasi			"$( _lookup_objs $_obj srcs )" \
3011.40Suebayasi			"$( _lookup_objs $_obj tmplsrcs )"
3021.38Suebayasi	done | \
3031.38Suebayasi	sed -e 's,\$(\(.*\)),${G_\1},'
3041.38Suebayasi}
3051.38Suebayasi
3061.38Suebayasiget_libgcc_gen_srcs_cppflags () {
3071.38Suebayasi	cut -f1 $_TOP/${libgcc_db_objs_libs} | \
3081.38Suebayasi	while read _obj; do
3091.38Suebayasi		printf '_CPPFLAGS.tmp_%s=%s\n' \
3101.38Suebayasi			"$( _lookup_objs $_obj srcs )" \
3111.38Suebayasi			"$( _lookup_objs $_obj cppflags | xargs )"
3121.38Suebayasi	done
3131.38Suebayasi}
3141.38Suebayasi
3151.38Suebayasiget_libgcc_gen_srcs_copts () {
3161.38Suebayasi	cut -f1 $_TOP/${libgcc_db_objs_libs} | \
3171.38Suebayasi	while read _obj; do
3181.38Suebayasi		printf 'COPTS.tmp_%s=%s\n' \
3191.38Suebayasi			"$( _lookup_objs $_obj srcs )" \
3201.38Suebayasi			"$( _lookup_objs $_obj copts | xargs )"
3211.38Suebayasi	done
3221.38Suebayasi}
3231.38Suebayasi
3241.35Suebayasiget_libgcc_new_generate () {
3251.44Suebayasi	local _abi=$1
3261.44Suebayasi
3271.36Suebayasi	for _lib in libgcc_s.so libgcc.a libgcc_eh.a libgcov.a; do
3281.40Suebayasi		for _tmpl in tmplsrcs tmplfpsrcs tmplasmsrcs; do
3291.40Suebayasi			eval get_libgcc_gen_tmplsrcs_${_tmpl} $_lib | \
3301.40Suebayasi			write_mk ${libgcc_libs_mk}.${_lib%.*}.tmplsrcs.${_tmpl}.mk
3311.37Suebayasi		done
3321.37Suebayasi
3331.36Suebayasi		get_libgcc_gen_srcs $_lib | \
3341.39Suebayasi		write_mk ${libgcc_libs_mk}.${_lib%.*}.srcs.mk
3351.36Suebayasi	done
3361.38Suebayasi
3371.40Suebayasi	for _arg in tmplsrcs cppflags copts; do
3381.38Suebayasi		eval get_libgcc_gen_srcs_${_arg} | \
3391.38Suebayasi		eval writefile \$libgcc_srcs_mk_${_arg}
3401.38Suebayasi	done
3411.35Suebayasi}
3421.35Suebayasi
3431.33Suebayasi#####
3441.33Suebayasi
3451.28Suebayasiget_libgcc_new () {
3461.28Suebayasi	_subdir="$1"
3471.44Suebayasi	_abi="$2"
3481.27Suebayasi
3491.29Suebayasi	# List of generated files.
3501.29Suebayasi
3511.46Smrg	_machine_arch_subdir=$_OUTDIRBASE/lib/lib$_subdir/arch${_archsubdir}/$MACHINE_ARCH/$_abi
3521.27Suebayasi
3531.28Suebayasi	libgcc_db_funcs=${_machine_arch_subdir}/funcs
3541.40Suebayasi	libgcc_db_tmplsrcs=${_machine_arch_subdir}/tmplsrcs
3551.28Suebayasi	libgcc_db_objs_libs=${_machine_arch_subdir}/objs.libs
3561.28Suebayasi	libgcc_db_objs_srcs=${_machine_arch_subdir}/objs.srcs
3571.40Suebayasi	libgcc_db_objs_tmplsrcs=${_machine_arch_subdir}/objs.tmplsrcs
3581.28Suebayasi	libgcc_db_objs_cppflags=${_machine_arch_subdir}/objs.cppflags
3591.28Suebayasi	libgcc_db_objs_copts=${_machine_arch_subdir}/objs.copts
3601.28Suebayasi
3611.44Suebayasi	get_libgcc_new_analyze $_abi
3621.36Suebayasi
3631.39Suebayasi	libgcc_libs_mk=${_machine_arch_subdir}/libs
3641.28Suebayasi	libgcc_srcs_mk=${_machine_arch_subdir}/srcs.mk
3651.40Suebayasi	libgcc_srcs_mk_tmplsrcs=${_machine_arch_subdir}/srcs.tmplsrcs.mk
3661.28Suebayasi	libgcc_srcs_mk_cppflags=${_machine_arch_subdir}/srcs.cppflags.mk
3671.28Suebayasi	libgcc_srcs_mk_copts=${_machine_arch_subdir}/srcs.copts.mk
3681.28Suebayasi
3691.44Suebayasi	get_libgcc_new_generate $_abi
3701.26Suebayasi}
3711.26Suebayasi
3721.1Smrgget_libgcc () {
3731.16Smrg	_subdir="$1"
3741.46Smrg	mkdir -p $_OUTDIR/lib/lib$_subdir/arch
3751.16Smrg
3761.16Smrg	case "$_subdir" in
3771.46Smrg	gcc4|gcc)
3781.16Smrg		_extravars="COLLECT2 UNWIND_H xm_include_list"
3791.16Smrg		_archsubdir=""
3801.16Smrg		;;
3811.16Smrg	esac
3821.1Smrg
3831.1Smrg	# DPBIT, FPBIT only used on mn10[23]00, we don't need them.
3841.4Smrg	# XXX we should probably grab everything Just In Case for
3851.4Smrg	# the future.
3861.16Smrg	{
3871.16Smrg		getvars gcc/Makefile \
3881.58Smrg			INCLUDES LIB2ADD LIB2ADDEH LIB2ADD_ST \
3891.16Smrg			LIB1ASMFUNCS LIB1ASMSRC \
3901.16Smrg			LIB2_DIVMOD_FUNCS LIB2FUNCS_ST \
3911.42Suebayasi			LIB2FUNCS_EXTRA \
3921.16Smrg			LIBGCC2_CFLAGS \
3931.16Smrg			SHLIB_MKMAP SHLIB_MKMAP_OPTS \
3941.16Smrg			SHLIB_MAPFILES SHLIB_NM_FLAGS \
3951.16Smrg			EXTRA_HEADERS xm_defines \
3961.16Smrg			tm_defines ${_extravars}
3971.61Smrg	} | sed "s,-I$_DESTDIR/usr/include,,g" \
3981.60Smrg	| write_mk $_OUTDIRBASE/lib/lib$_subdir/arch${_archsubdir}/$MACHINE_ARCH.mk
3991.26Suebayasi
4001.26Suebayasi	# Generate new style files.
4011.27Suebayasi	if [ -n "${MKNATIVE_LIBGCC_NEW}" ]; then
4021.44Suebayasi		get_libgcc_new $_subdir $_ABI
4031.26Suebayasi	fi
4041.1Smrg}
4051.1Smrg
4061.24Sskrll##### gnu/lib/libgcov #####
4071.24Sskrll
4081.24Sskrllget_libgcov () {
4091.24Sskrll	_subdir="$1"
4101.24Sskrll
4111.46Smrg	mkdir -p $_OUTDIR/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH
4121.24Sskrll
4131.24Sskrll	{
4141.24Sskrll		getvars gcc/Makefile \
4151.24Sskrll			LIBGCOV
4161.46Smrg	} | write_mk $_OUTDIRBASE/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH/defs.mk
4171.24Sskrll
4181.46Smrg	write_c $_OUTDIRBASE/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH/gcov-iov.h \
4191.24Sskrll	   <$_TMPDIR/gcc/gcov-iov.h
4201.24Sskrll
4211.24Sskrll}
4221.24Sskrll
4231.16Smrg##### gnu/usr.bin/gcc[34]/libiberty #####
4241.1Smrg
4251.16Smrgget_gcc_libiberty () {
4261.16Smrg	_subdir="$1"
4271.46Smrg	case "$_subdir" in
4281.46Smrg	gcc4)
4291.46Smrg		_libibertydir="usr.bin/$_subdir/libiberty"
4301.46Smrg		;;
4311.46Smrg	gcc)
4321.48Smrg		_libibertydir="lib/libiberty"
4331.46Smrg		;;
4341.46Smrg	esac
4351.46Smrg	mkdir -p $_OUTDIR/$_libibertydir/arch/$MACHINE_ARCH
4361.1Smrg
4371.1Smrg	getvars libiberty/Makefile \
4381.1Smrg		ALLOCA EXTRA_OFILES LIBOBJS REQUIRED_OFILES \
4391.46Smrg		| write_mk $_OUTDIRBASE/$_libibertydir/defs.mk
4401.1Smrg
4411.46Smrg	write_c $_OUTDIRBASE/$_libibertydir/arch/$MACHINE_ARCH/config.h \
4421.1Smrg		<$_TMPDIR/libiberty/config.h
4431.1Smrg}
4441.1Smrg
4451.51Smrg##### lib/libdecnumber #####
4461.51Smrg
4471.51Smrgget_libdecnumber () {
4481.51Smrg	_subdir="$1"
4491.51Smrg
4501.52Smrg	mkdir -p $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH
4511.52Smrg	write_c $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/config.h \
4521.51Smrg		<$_TMPDIR/libdecnumber/config.h
4531.51Smrg}
4541.51Smrg
4551.63Smrg##### lib/libgomp #####
4561.63Smrg
4571.63Smrgget_libgomp () {
4581.63Smrg	_subdir="$1"
4591.63Smrg
4601.63Smrg	mkdir -p $_OUTDIR/lib/$_subdir/arch/$MACHINE_ARCH
4611.63Smrg	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/config.h \
4621.63Smrg		<$_TMPDIR/$_PLATFORM/libgomp/config.h
4631.63Smrg	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/libgomp_f.h \
4641.63Smrg		<$_TMPDIR/$_PLATFORM/libgomp/libgomp_f.h
4651.63Smrg	write_mk $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/libgomp.spec \
4661.63Smrg		<$_TMPDIR/$_PLATFORM/libgomp/libgomp.spec
4671.64Smrg	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/omp.h \
4681.64Smrg		<$_TMPDIR/$_PLATFORM/libgomp/omp.h
4691.63Smrg}
4701.63Smrg
4711.1Smrg##### gnu/lib/libobjc #####
4721.1Smrg
4731.1Smrgget_libobjc () {
4741.46Smrg	_subdir="$1/arch/$MACHINE_ARCH"
4751.46Smrg	_options="ALL_OPT_FILES"
4761.46Smrg	_unwind="UNWIND_H"
4771.18Smrg
4781.46Smrg	mkdir -p $_OUTDIR/lib/$_subdir
4791.1Smrg
4801.16Smrg	{
4811.18Smrg		if [ -n "$_options" ]; then
4821.18Smrg			getvars gcc/Makefile $_options
4831.18Smrg		fi
4841.16Smrg		getvars $_PLATFORM/libobjc/Makefile \
4851.16Smrg			ALL_CFLAGS INCLUDES OBJS OBJC_H \
4861.16Smrg			| sed "s,$_GNU_DIST,\${GNUHOSTDIST},g"
4871.20Sskrll		if [ -n "$_unwind" ]; then
4881.20Sskrll			getvars gcc/Makefile $_unwind
4891.20Sskrll		fi
4901.46Smrg	} | write_mk $_OUTDIRBASE/lib/$_subdir/defs.mk
4911.23Sskrll
4921.46Smrg	write_c $_OUTDIRBASE/lib/$_subdir/config.h \
4931.23Sskrll		<$_TMPDIR/$_PLATFORM/libobjc/config.h
4941.1Smrg}
4951.1Smrg
4961.1Smrg##### gnu/lib/libstdc++-v3 #####
4971.1Smrg
4981.1Smrgget_libstdcxx_v3 () {
4991.16Smrg	_subdir="$1"
5001.46Smrg	mkdir -p $_OUTDIR/lib/$_subdir/arch/$MACHINE_ARCH
5011.1Smrg
5021.16Smrg	case ${_subdir} in
5031.46Smrg	*)
5041.16Smrg		_src_CC_files="atomicity_file CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_CC CLOCALE_CC BASIC_FILE_CC"
5051.55Smrg		_headers1="host_headers debug_headers tr1_headers c_compatibility_headers_extra tr1_impl_headers parallel_headers decimal_headers"
5061.55Smrg		_headers2="thread_host_headers host_headers_extra"
5071.19Smrg		_build_headers="c++allocator.h c++config.h cxxabi_tweaks.h gthr-default.h gthr-posix.h gthr-single.h gthr-tpf.h gthr.h"
5081.20Sskrll		_unwind="UNWIND_H"
5091.16Smrg		;;
5101.16Smrg	esac
5111.16Smrg
5121.19Smrg	# build files
5131.19Smrg	for h in $_build_headers; do
5141.46Smrg		write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/$h \
5151.19Smrg			<$_TMPDIR/$_PLATFORM/libstdc++-v3/include/$_PLATFORM/bits/$h
5161.19Smrg	done
5171.19Smrg
5181.46Smrg	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/config.h \
5191.6Smrg		<$_TMPDIR/$_PLATFORM/libstdc++-v3/config.h
5201.49Smrg	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/gstdint.h \
5211.49Smrg		<$_TMPDIR/$_PLATFORM/libstdc++-v3/include/gstdint.h
5221.6Smrg
5231.1Smrg	{
5241.1Smrg		# libsupc++
5251.1Smrg		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
5261.1Smrg			sources | sed 's/^G_sources=/G_LIBSUPCXX_SOURCES=/'
5271.1Smrg		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
5281.1Smrg			c_sources | sed 's/^G_c_sources=/G_LIBSUPCXX_C_SOURCES=/'
5291.1Smrg
5301.1Smrg		# src
5311.1Smrg		getvars $_PLATFORM/libstdc++-v3/src/Makefile \
5321.16Smrg			sources $_src_CC_files SECTION_FLAGS | sed 's/^G_sources=/G_SRC_SOURCES=/'
5331.1Smrg
5341.1Smrg		# include
5351.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
5361.49Smrg			c_base_headers std_headers | sed -e 's#/[^ 	][^ 	]*/##g' -e 's/\${GNUHOSTDIST}//g'
5371.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
5381.1Smrg			bits_headers backward_headers ext_headers c_base_headers_extra \
5391.17Smrg			$_headers1 | sed -e 's#/[^ 	][^ 	]*/##g' -e 's/\${GNUHOSTDIST}//g'
5401.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
5411.17Smrg			$_headers2 | sed -e 's#\./[^ 	][^ 	]*/##g' -e 's/\${GNUHOSTDIST}//g'
5421.16Smrg
5431.20Sskrll		if [ -n "$_unwind" ]; then
5441.20Sskrll			getvars gcc/Makefile $_unwind
5451.20Sskrll		fi
5461.46Smrg	} | write_mk $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/defs.mk
5471.1Smrg}
5481.1Smrg
5491.1Smrg##### gnu/usr.bin/gcc3 #####
5501.1Smrg
5511.1Smrgget_gcc () {
5521.16Smrg	_subdir="$1"
5531.46Smrg	mkdir -p $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH
5541.57Smrg	mkdir -p $_OUTDIR/usr.bin/libcpp/arch/$MACHINE_ARCH
5551.19Smrg	case ${_subdir} in
5561.19Smrg	gcc4)
5571.19Smrg		_buildname="BUILD_"
5581.19Smrg		_libcppsubdir=""
5591.20Sskrll		_extravars="TM_H ALL_OPT_FILES"
5601.20Sskrll		_hconfig_h=""
5611.20Sskrll		_extravars2="tm_file_list build_xm_include_list"
5621.20Sskrll		_extravars3="tm_p_include_list"
5631.47Smrg		;;
5641.20Sskrll		
5651.47Smrg	gcc)
5661.47Smrg		_buildname="BUILD_"
5671.47Smrg		_libcppsubdir=""
5681.47Smrg		_extravars="TM_H ALL_OPT_FILES"
5691.47Smrg		_hconfig_h=""
5701.47Smrg		_extravars2="tm_file_list build_xm_include_list"
5711.47Smrg		_extravars3="tm_p_include_list"
5721.19Smrg		;;
5731.19Smrg	esac
5741.1Smrg
5751.1Smrg	{
5761.1Smrg		getvars gcc/Makefile \
5771.19Smrg			${_buildname}EARLY_SUPPORT ${_buildname}ERRORS ${_buildname}PRINT \
5781.19Smrg			${_buildname}RTL ${_buildname}SUPPORT ${_buildname}VARRAY | \
5791.16Smrg		    sed -e 's#build/errors.o#build-errors.o#g' \
5801.16Smrg			-e 's#build/print-rtl.o#build-print-rtl.o#g' \
5811.16Smrg			-e 's#build/rtl.o#build-rtl.o#g' \
5821.16Smrg			-e 's#build/varray.o#build-varray.o#g' \
5831.22Smrg			-e 's#build/ggc-none.o#build-ggc-none.o#g' \
5841.16Smrg			-e 's#build/##g'
5851.16Smrg		getvars gcc/Makefile \
5861.1Smrg			ALL_CFLAGS ALL_CPPFLAGS C_AND_OBJC_OBJS C_OBJS CCCP_OBJS \
5871.20Sskrll			GCOV_OBJS PROTO_OBJS ${_extravars1} \
5881.1Smrg			INCLUDES md_file OBJC_OBJS OBJS out_file version \
5891.20Sskrll			BUILD_PREFIX RTL_H TREE_H ${_hconfig_h} BASIC_BLOCK_H GCC_H \
5901.1Smrg			GTFILES_SRCDIR GTFILES_FILES_FILES GTFILES_FILES_LANGS \
5911.1Smrg			GTFILES GTFILES_LANG_DIR_NAMES \
5921.1Smrg			tm_defines host_xm_file host_xm_defines tm_p_file \
5931.21Smrg			target_cpu_default ${_extravars} ${_extravars2} \
5941.60Smrg			lang_specs_files ${_extravars3} \
5951.61Smrg				| sed "s,-I$_DESTDIR/usr/include,,g"
5961.1Smrg		getvars gcc/Makefile \
5971.1Smrg			LIB2ADDEHDEP | sed 's/unwind.inc//'
5981.1Smrg		getvars gcc/Makefile \
5991.1Smrg			CXX_OBJS CXX_C_OBJS | sed 's/cp\///g'
6001.1Smrg		getvars gcc/Makefile \
6011.1Smrg			F77_OBJS | sed 's/f\///g'
6021.19Smrg		case ${_subdir} in
6031.51Smrg		gcc4 | gcc)
6041.19Smrg			getvars libcpp/Makefile \
6051.19Smrg				libcpp_a_OBJS
6061.19Smrg			;;
6071.19Smrg		gcc3)
6081.19Smrg			getvars gcc/Makefile \
6091.19Smrg				LIBCPP_OBJS LIBCPP_H
6101.19Smrg			;;
6111.19Smrg		esac
6121.12Sskrll		getvars gcc/Makefile \
6131.16Smrg			ENABLE_SHARED
6141.20Sskrll		case ${_subdir} in
6151.46Smrg		gcc4 | gcc)
6161.20Sskrll			echo G_SHLIB_LINK="$CC -shared"
6171.20Sskrll			echo G_SHLIB_MULTILIB=.
6181.20Sskrll			;;
6191.20Sskrll		esac
6201.46Smrg	} | write_mk $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/defs.mk
6211.16Smrg
6221.16Smrg	case "$_subdir" in
6231.46Smrg	gcc4)
6241.46Smrg		write_c $_OUTDIRBASE/usr.bin/$_subdir/libcpp/arch/$MACHINE_ARCH/config.h <$_TMPDIR/libcpp/config.h
6251.46Smrg		hfiles='auto-host gencheck configargs gthr-default tm bconfig config multilib'
6261.16Smrg		;;
6271.46Smrg	gcc)
6281.51Smrg		write_c $_OUTDIRBASE/usr.bin/libcpp/arch/$MACHINE_ARCH/config.h <$_TMPDIR/libcpp/config.h
6291.51Smrg		hfiles='auto-host configargs gthr-default tm bconfig config multilib bversion plugin-version'
6301.16Smrg		;;
6311.16Smrg	esac
6321.16Smrg	for f in $hfiles; do
6331.46Smrg		write_c $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f.h <$_TMPDIR/gcc/$f.h
6341.62Smatt		if [ "${MACHINE_ARCH}" = "powerpc" -a "${f}" = "configargs" ]
6351.62Smatt		then
6361.62Smatt			ex <<__EOF__ $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f.h
6371.62Smatt/configuration_arguments/ s/$//
6381.62Smattya
6391.62Smatti
6401.65Smatt#ifdef _SOFT_FLOAT
6411.62Smatt.
6421.62Smattpu
6431.62Smatts/";$/ -with-float=soft";/
6441.62Smatta
6451.62Smatt#else
6461.62Smatt#endif
6471.62Smatt.
6481.62Smatt. m +1
6491.62Smatt/configure_default_options/ s/{ NULL.*$//
6501.62Smatta
6511.65Smatt#ifdef _SOFT_FLOAT
6521.62Smatt  { "float", "soft" },
6531.62Smatt#endif
6541.62Smatt  { NULL, NULL }
6551.62Smatt};
6561.62Smatt.
6571.62Smattwq
6581.62Smatt__EOF__
6591.62Smatt		fi
6601.1Smrg	done
6611.50Smrg
6621.56Smrg	# keep identical
6631.56Smrg	for f in all-tree.def; do
6641.53Smrg		cp $_TMPDIR/gcc/$f $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f
6651.51Smrg	done
6661.56Smrg
6671.56Smrg	# special transforms
6681.56Smrg	for f in gtyp-input.list; do
6691.56Smrg		sed -e 's/^.*external\/gpl3\/gcc\/dist/SRCDIR/' < $_TMPDIR/gcc/$f > $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f
6701.56Smrg	done
6711.59Smrg
6721.59Smrg	# special platforms
6731.59Smrg	if [ "${MACHINE_ARCH}" = "sh3el" -o "${MACHINE_ARCH}" = "sh3eb" ]; then
6741.59Smrg		write_c $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/sysroot-suffix.h <$_TMPDIR/gcc/sysroot-suffix.h
6751.59Smrg	fi
6761.1Smrg}
6771.1Smrg
6781.1Smrg##### main #####
6791.1Smrg
6801.16Smrgcase "$1" in
6811.16Smrg# .mk and .h files for libgcc bootstrap (from host build)
6821.16Smrglibgcc)
6831.16Smrg	get_libgcc gcc3
6841.16Smrg	get_crtstuff crtstuff3
6851.16Smrg	exit 0
6861.16Smrg	;;
6871.16Smrg
6881.16Smrglibgcc4)
6891.16Smrg	get_libgcc gcc4
6901.16Smrg	get_crtstuff crtstuff4
6911.16Smrg	exit 0
6921.16Smrg	;;
6931.16Smrg
6941.16Smrg# gcc files
6951.16Smrggcc4)
6961.16Smrg	get_gcc gcc4
6971.16Smrg	get_libgcc gcc4
6981.24Sskrll	get_libgcov gcc4
6991.16Smrg	get_crtstuff crtstuff4
7001.16Smrg	get_gcc_libiberty gcc4
7011.16Smrg	get_libobjc libobjc4
7021.16Smrg	get_libstdcxx_v3 libstdc++-v3_4
7031.1Smrg	exit 0
7041.1Smrg	;;
7051.1Smrg
7061.46Smrggcc45)
7071.46Smrg	_OUTDIR="$_TOP/external/gpl3/gcc"
7081.46Smrg	_OUTDIRBASE="external/gpl3/gcc"
7091.46Smrg	get_gcc gcc
7101.46Smrg	get_libgcc gcc
7111.46Smrg	get_libgcov gcc
7121.46Smrg	get_crtstuff crtstuff
7131.46Smrg	get_gcc_libiberty gcc
7141.46Smrg	get_libobjc libobjc
7151.16Smrg	get_libstdcxx_v3 libstdc++-v3
7161.51Smrg	get_libdecnumber libdecnumber
7171.63Smrg	get_libgomp libgomp
7181.1Smrg	exit 0
7191.1Smrg	;;
7201.1Smrg
7211.46Smrg
7221.1Smrg*)	echo invalid arguments; exit 1;;
7231.1Smrgesac
724