mknative-gcc revision 1.74
11.1Smrg#!/bin/sh
21.74Smrg#	$NetBSD: mknative-gcc,v 1.74 2013/11/28 12:08:57 mrg Exp $
31.1Smrg#
41.1Smrg# Shell script for generating all the constants needed for a native
51.68Sskrll# platform build of gcc.
61.1Smrg#
71.1Smrg
81.9Smrg# initialise
91.9Smrg
101.9Smrg_TMPDIR=$2
111.9Smrg_TOP=$3
121.71Smrg_SRC=$4
131.71Smrg_PLATFORM=$5
141.71Smrg_DESTDIR=$6
151.71Smrg_ABI=$7
161.15Smrg_VPATH=`grep VPATH ${_TMPDIR}/Makefile | sed 's,^.*=[ 	]*,,'`
171.9Smrg_GNU_DIST=`cd ${_VPATH}; pwd`
181.9Smrg
191.61Smrgif [ -z "$_DESTDIR" ]; then
201.61Smrg	echo "\$_DESTDIR is empty" 2>&1
211.61Smrg	exit 1
221.61Smrgfi
231.61Smrg
241.9Smrg. $_TOP/tools/gcc/mknative.common
251.1Smrg
261.46Smrg# default to GCC 4.1 for now
271.46Smrg_OUTDIR="$_TOP/gnu"
281.46Smrg_OUTDIRBASE="gnu"
291.46Smrg
301.70Sskrllsanitise_includes () {
311.70Sskrll	sed \
321.70Sskrll		-e "s,-I$_DESTDIR/usr/include,,g" \
331.71Smrg		-e "s,-I$_SRC/external/lgpl3/mpfr/dist,,g" \
341.74Smrg		-e "s,-I$_SRC/external/lgpl3/mpc/dist/src,,g" \
351.71Smrg		-e "s,-I$_SRC/external/lgpl3/gmp/lib/libgmp/arch/$MACHINE_ARCH,,g" \
361.71Smrg		-e "s,-I/usr/include/[^ 	]*,,"
371.70Sskrll}
381.70Sskrll
391.14Sthorpej##### gnu/lib/crtstuff #####
401.14Sthorpej
411.14Sthorpejget_crtstuff () {
421.16Smrg	_subdir="$1"
431.46Smrg	mkdir -p $_OUTDIR/lib/$_subdir/arch
441.14Sthorpej
451.14Sthorpej	getvars gcc/Makefile \
461.67Sskrll		INCLUDES CRTSTUFF_CFLAGS CRTSTUFF_T_CFLAGS CRTSTUFF_T_CFLAGS_S \
471.14Sthorpej		tm_defines xm_file xm_defines \
481.70Sskrll		| sanitise_includes \
491.46Smrg		| write_mk $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH.mk
501.14Sthorpej}
511.14Sthorpej
521.1Smrg##### gnu/lib/libg2c #####
531.1Smrg
541.1Smrgget_libg2c () {
551.46Smrg	mkdir -p $_OUTDIR/lib/libg2c3/arch/$MACHINE_ARCH
561.1Smrg
571.46Smrg	write_c $_OUTDIRBASE/lib/libg2c3/arch/$MACHINE_ARCH/config.h <$_TMPDIR/$_PLATFORM/libf2c/libU77/config.h
581.46Smrg	write_c $_OUTDIRBASE/lib/libg2c3/arch/$MACHINE_ARCH/g2c.h <$_TMPDIR/$_PLATFORM/libf2c/g2c.h
591.1Smrg
601.1Smrg	{
611.1Smrg		getvars $_PLATFORM/libf2c/Makefile \
621.1Smrg			F2CEXT
631.1Smrg		getvars $_PLATFORM/libf2c/libF77/Makefile \
641.1Smrg			ALL_CFLAGS OBJS
651.1Smrg		getvars $_PLATFORM/libf2c/libI77/Makefile \
661.1Smrg			ALL_CFLAGS OBJS | sed 's,=,+=,'
671.1Smrg		getvars $_PLATFORM/libf2c/libU77/Makefile \
681.1Smrg			ALL_CFLAGS OBJS | sed 's,=,+=,'
691.46Smrg	} | write_mk $_OUTDIRBASE/lib/libg2c3/arch/$MACHINE_ARCH/defs.mk
701.1Smrg}
711.1Smrg
721.1Smrg##### gnu/lib/libgcc #####
731.1Smrg
741.28Suebayasiget_libgcc_list_funcs_asm () {
751.42Suebayasi	{
761.42Suebayasi		getvars gcc/Makefile LIB1ASMFUNCS | {
771.42Suebayasi			# print newline separated list
781.42Suebayasi			sed -e '
791.42Suebayasi				s,^.*=,,
801.42Suebayasi				s, *$,,
811.42Suebayasi				s,  *, ,g
821.42Suebayasi				s, ,\
831.28Suebayasi,g'
841.42Suebayasi		}
851.42Suebayasi		getvars gcc/Makefile LIB2FUNCS_EXTRA | {
861.42Suebayasi			# print newline separated list
871.42Suebayasi			sed -e '
881.42Suebayasi				s,^.*=,,
891.42Suebayasi				s, *$,,
901.42Suebayasi				s,  *, ,g
911.42Suebayasi				s, ,\
921.42Suebayasi,g' | \
931.42Suebayasi			sed -ne '
941.42Suebayasi				/\.S$/ { s,^.*/,,; s,\.S$,,; p; }
951.42Suebayasi				/\.asm$/ { s,^.*/,,; s,\.asm$,,; p; }
961.42Suebayasi			'
971.42Suebayasi		}
981.28Suebayasi	} | {
991.28Suebayasi		# print foo and foo_s
1001.28Suebayasi		sed -ne '
1011.28Suebayasi			/./ {
1021.28Suebayasi				p
1031.28Suebayasi				s,$,_s,
1041.28Suebayasi				p
1051.28Suebayasi			}
1061.28Suebayasi		'
1071.28Suebayasi	} | sort
1081.28Suebayasi}
1091.28Suebayasi
1101.29Suebayasiget_libgcc_list_funcs_lib () {
1111.29Suebayasi	local _lib=$1
1121.29Suebayasi	local _lib_prefix=${_lib%.*}
1131.29Suebayasi	local _lib_suffix=${_lib#*.}
1141.44Suebayasi	local _abi=${2:-'\.'}
1151.29Suebayasi
1161.43Suebayasi	cat build/gcc/libgcc.mk | \
1171.44Suebayasi	grep '/'${_abi}'/' | \
1181.29Suebayasi	sed -ne '
1191.45Suebayasi		/^'${_abi}'\/'${_lib_prefix}'\.'${_lib_suffix}': .*\.o$/ {
1201.29Suebayasi			s,^.*/,,
1211.29Suebayasi			s,\.o$,,
1221.29Suebayasi			p
1231.29Suebayasi		}
1241.43Suebayasi	' | sort
1251.29Suebayasi}
1261.29Suebayasi
1271.30Suebayasiget_libgcc_list_objs_libs () {
1281.44Suebayasi	local _abi=${1:-'\.'}
1291.44Suebayasi
1301.30Suebayasi	cat build/gcc/libgcc.mk | \
1311.44Suebayasi	grep '/'${_abi}'/' | \
1321.45Suebayasi	egrep '^'${_abi}'\/(libgcc_s\.so|libgcc\.a|libgcc_eh\.a|libgcov\.a): (libgcc_s|libgcc|libgcc_eh|libgcov)\/.*\.o$' | \
1331.30Suebayasi	sed -e '
1341.44Suebayasi		s,^'${_abi}'\/,,
1351.30Suebayasi		s,: .*/,	,
1361.30Suebayasi		s,^\(.*\)	\(.*\)$,\2	\1,
1371.30Suebayasi	' | sort
1381.30Suebayasi}
1391.30Suebayasi
1401.30Suebayasiget_libgcc_list_objs_srcs () {
1411.44Suebayasi	local _abi=${1:-'\.'}	# XXX not used
1421.44Suebayasi
1431.41Suebayasi	if [ -e $_TOP/${libgcc_db_funcs}.S ]; then
1441.30Suebayasi		cut -f1 $_TOP/${libgcc_db_objs_libs} | sed -e 's,\.o$,,' | \
1451.30Suebayasi		comm -23 /dev/stdin $_TOP/${libgcc_db_funcs}.S | \
1461.30Suebayasi		sed -e 's,\(.*\),\1.o	\1.c,'
1471.30Suebayasi
1481.30Suebayasi		cut -f1 $_TOP/${libgcc_db_objs_libs} | sed -e 's,\.o$,,' | \
1491.30Suebayasi		comm -12 /dev/stdin $_TOP/${libgcc_db_funcs}.S | \
1501.30Suebayasi		sed -e 's,\(.*\),\1.o	\1.S,'
1511.41Suebayasi	else
1521.41Suebayasi		cut -f1 $_TOP/${libgcc_db_objs_libs} | sed -e 's,\.o$,,' | \
1531.41Suebayasi		sed -e 's,\(.*\),\1.o	\1.c,'
1541.41Suebayasi	fi | sort
1551.30Suebayasi}
1561.30Suebayasi
1571.40Suebayasiget_libgcc_list_objs_tmplsrcs () {
1581.44Suebayasi	local _abi=${1:-'\.'}
1591.44Suebayasi
1601.32Suebayasi	grep 'GCC_FOR_TARGET.*\.o$' build/gcc/libgcc.mk | \
1611.44Suebayasi	grep '/'${_abi}'/' | \
1621.32Suebayasi	sed -ne '
1631.32Suebayasi		s,^.* -c \([^ ]*\).* -o .*/\([^ ]*\.o\)$,\2	\1,
1641.32Suebayasi		# basename
1651.32Suebayasi		/\$/ { s,\$.*/,,; }
1661.32Suebayasi		/\// { s,\/.*/,,; }
1671.32Suebayasi		p
1681.43Suebayasi	' | sort -u
1691.32Suebayasi}
1701.32Suebayasi
1711.31Suebayasiget_libgcc_list_objs_xflags () {
1721.31Suebayasi	local _flags=$1
1731.44Suebayasi	local _abi=${2:-'\.'}
1741.31Suebayasi
1751.31Suebayasi	grep 'GCC_FOR_TARGET.*\.o$' build/gcc/libgcc.mk | \
1761.44Suebayasi	grep '/'${_abi}'/' | \
1771.31Suebayasi	sed -n '
1781.31Suebayasi		x
1791.31Suebayasi	:loop
1801.31Suebayasi		g
1811.31Suebayasi		s/^\(.*\) \(-['${_flags}'][^ ][^ ]*\) \(.*\) \(-o .*\)\/\(.*\.o\)$/\5	\2/p
1821.31Suebayasi		g
1831.31Suebayasi		s/^\(.*\) \(-['${_flags}'][^ ][^ ]*\) \(.*\) \(-o .*\)\/\(.*\.o\)$/\1 \3 \4\/\5/
1841.31Suebayasi		h
1851.31Suebayasi		t loop
1861.31Suebayasi	' | sort
1871.31Suebayasi}
1881.31Suebayasi
1891.31Suebayasiget_libgcc_list_objs_cppflags () {
1901.44Suebayasi	get_libgcc_list_objs_xflags D $1
1911.31Suebayasi}
1921.31Suebayasi
1931.31Suebayasiget_libgcc_list_objs_copts () {
1941.44Suebayasi	get_libgcc_list_objs_xflags fmx $1
1951.31Suebayasi}
1961.31Suebayasi
1971.40Suebayasiget_libgcc_list_tmplsrcs () {
1981.33Suebayasi	local _lib=$1
1991.44Suebayasi	local _abi=$2	# XXX not used
2001.40Suebayasi	local _tmplallsrcs=$( mktemp /tmp/mknative-gcc._tmplallsrcs.XXXXXX )
2011.33Suebayasi
2021.40Suebayasi	touch $_TOP/${libgcc_db_tmplsrcs}.tmplsrcs.${_lib%.*}
2031.40Suebayasi	touch $_TOP/${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*}
2041.40Suebayasi	touch $_TOP/${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*}
2051.33Suebayasi
2061.33Suebayasi	# all files
2071.33Suebayasi	local _lib_prefix=${_lib%.*}
2081.33Suebayasi	local _lib_suffix=${_lib#*.}
2091.40Suebayasi	join $_TOP/$libgcc_db_objs_libs $_TOP/$libgcc_db_objs_tmplsrcs | \
2101.33Suebayasi	grep ${_lib_prefix}'\.'${_lib_suffix} | cut -d' ' -f 3 | sort -u > \
2111.40Suebayasi	$_tmplallsrcs
2121.33Suebayasi
2131.40Suebayasi	# TMPLFPSRCS = [fdp]p-bit.c
2141.40Suebayasi	grep '[fdt]p-bit\.c' <$_tmplallsrcs | sort -u | \
2151.40Suebayasi	writefile ${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*}
2161.40Suebayasi
2171.40Suebayasi	# TMPLASMSRCS = $(LIB1ASMSRC)
2181.40Suebayasi	grep '\$(LIB1ASMSRC)' <$_tmplallsrcs | sort -u | \
2191.40Suebayasi	writefile ${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*}
2201.40Suebayasi
2211.40Suebayasi	# TMPLSRCS is anything else; exclude TMPLFPSRCS and TMPLASMSRCS
2221.40Suebayasi	cat $_tmplallsrcs | \
2231.40Suebayasi	comm -23 /dev/stdin $_TOP/${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*} | \
2241.40Suebayasi	comm -23 /dev/stdin $_TOP/${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*} | \
2251.40Suebayasi	writefile ${libgcc_db_tmplsrcs}.tmplsrcs.${_lib%.*}
2261.33Suebayasi
2271.40Suebayasi	rm -f $_tmplallsrcs
2281.33Suebayasi}
2291.33Suebayasi
2301.35Suebayasiget_libgcc_new_analyze () {
2311.44Suebayasi	local _abi=$1
2321.44Suebayasi
2331.35Suebayasi	mkdir -p $_TOP/${_machine_arch_subdir}
2341.35Suebayasi
2351.41Suebayasi	touch $_TOP/${libgcc_db_funcs}.S
2361.35Suebayasi	get_libgcc_list_funcs_asm | \
2371.35Suebayasi	writefile ${libgcc_db_funcs}.S
2381.35Suebayasi
2391.35Suebayasi	for _lib in libgcc_s.so libgcc.a libgcc_eh.a libgcov.a; do
2401.41Suebayasi		touch $_TOP/${libgcc_db_funcs}.${_lib%.*}
2411.44Suebayasi		get_libgcc_list_funcs_lib $_lib $_abi | \
2421.35Suebayasi		writefile ${libgcc_db_funcs}.${_lib%.*}
2431.35Suebayasi	done
2441.35Suebayasi
2451.44Suebayasi	get_libgcc_list_objs_libs $_abi | writefile ${libgcc_db_objs_libs}
2461.44Suebayasi	get_libgcc_list_objs_srcs $_abi | writefile ${libgcc_db_objs_srcs}
2471.44Suebayasi	get_libgcc_list_objs_tmplsrcs $_abi | writefile ${libgcc_db_objs_tmplsrcs}
2481.44Suebayasi	get_libgcc_list_objs_cppflags $_abi | writefile ${libgcc_db_objs_cppflags}
2491.44Suebayasi	get_libgcc_list_objs_copts $_abi | writefile ${libgcc_db_objs_copts}
2501.35Suebayasi
2511.35Suebayasi	for _lib in libgcc_s.so libgcc.a libgcc_eh.a libgcov.a; do
2521.44Suebayasi		get_libgcc_list_tmplsrcs $_lib $_abi
2531.35Suebayasi	done
2541.35Suebayasi}
2551.35Suebayasi
2561.35Suebayasi#####
2571.35Suebayasi
2581.40Suebayasiget_libgcc_gen_tmplsrcs_tmplsrcs () {
2591.37Suebayasi	local _lib=$1
2601.37Suebayasi
2611.37Suebayasi	printf '\n'
2621.40Suebayasi	printf 'TMPLSRCS.%s = \\\n' $_lib
2631.40Suebayasi	sed -e 's,^,	,; s,$, \\,' $_TOP/${libgcc_db_tmplsrcs}.tmplsrcs.${_lib%.*}
2641.37Suebayasi}
2651.37Suebayasi
2661.40Suebayasiget_libgcc_gen_tmplsrcs_tmplfpsrcs () {
2671.37Suebayasi	local _lib=$1
2681.37Suebayasi
2691.37Suebayasi	printf '\n'
2701.40Suebayasi	printf 'TMPLFPSRCS.%s = \\\n' $_lib
2711.40Suebayasi	sed -e 's,^,	,; s,$, \\,' $_TOP/${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*}
2721.37Suebayasi}
2731.37Suebayasi
2741.40Suebayasiget_libgcc_gen_tmplsrcs_tmplasmsrcs () {
2751.37Suebayasi	local _lib=$1
2761.37Suebayasi
2771.37Suebayasi	printf '\n'
2781.40Suebayasi	printf 'TMPLASMSRCS.%s = \\\n' $_lib
2791.40Suebayasi	sed -e 's,^,	,; s,$, \\,' $_TOP/${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*} | \
2801.37Suebayasi	sed -e 's,LIB1ASMSRC,G_&,'
2811.37Suebayasi}
2821.37Suebayasi
2831.36Suebayasiget_libgcc_gen_srcs () {
2841.36Suebayasi	local _lib=$1
2851.36Suebayasi
2861.36Suebayasi	printf '\n'
2871.36Suebayasi	printf 'SRCS.%s = \\\n' $_lib
2881.41Suebayasi	if [ -e $_TOP/${libgcc_db_funcs}.S ]; then
2891.36Suebayasi		comm -23 $_TOP/${libgcc_db_funcs}.${_lib%.*} $_TOP/${libgcc_db_funcs}.S | \
2901.36Suebayasi		sed -e 's,$,.c,; s,^,tmp_,'
2911.36Suebayasi		comm -12 $_TOP/${libgcc_db_funcs}.${_lib%.*} $_TOP/${libgcc_db_funcs}.S | \
2921.36Suebayasi		sed -e 's,$,.S,; s,^,tmp_,'
2931.41Suebayasi	else
2941.41Suebayasi		cat $_TOP/${libgcc_db_funcs}.${_lib%.*} | \
2951.41Suebayasi		sed -e 's,$,.c,; s,^,tmp_,'
2961.41Suebayasi	fi | sort | \
2971.36Suebayasi	sed -e 's,^,	,; s,$, \\,'
2981.36Suebayasi}
2991.36Suebayasi
3001.38Suebayasi_lookup_objs () {
3011.38Suebayasi	local _obj=$1; local _key=$2
3021.38Suebayasi
3031.38Suebayasi	eval grep \^$_obj\\\	 \$_TOP/\${libgcc_db_objs_${_key}} | cut -f2
3041.38Suebayasi}
3051.38Suebayasi
3061.40Suebayasiget_libgcc_gen_srcs_tmplsrcs () {
3071.38Suebayasi	cut -f1 $_TOP/${libgcc_db_objs_libs} | \
3081.38Suebayasi	while read _obj; do
3091.38Suebayasi		printf 'SRCS.tmp_%s=%s\n' \
3101.38Suebayasi			"$( _lookup_objs $_obj srcs )" \
3111.40Suebayasi			"$( _lookup_objs $_obj tmplsrcs )"
3121.38Suebayasi	done | \
3131.38Suebayasi	sed -e 's,\$(\(.*\)),${G_\1},'
3141.38Suebayasi}
3151.38Suebayasi
3161.38Suebayasiget_libgcc_gen_srcs_cppflags () {
3171.38Suebayasi	cut -f1 $_TOP/${libgcc_db_objs_libs} | \
3181.38Suebayasi	while read _obj; do
3191.38Suebayasi		printf '_CPPFLAGS.tmp_%s=%s\n' \
3201.38Suebayasi			"$( _lookup_objs $_obj srcs )" \
3211.38Suebayasi			"$( _lookup_objs $_obj cppflags | xargs )"
3221.38Suebayasi	done
3231.38Suebayasi}
3241.38Suebayasi
3251.38Suebayasiget_libgcc_gen_srcs_copts () {
3261.38Suebayasi	cut -f1 $_TOP/${libgcc_db_objs_libs} | \
3271.38Suebayasi	while read _obj; do
3281.38Suebayasi		printf 'COPTS.tmp_%s=%s\n' \
3291.38Suebayasi			"$( _lookup_objs $_obj srcs )" \
3301.38Suebayasi			"$( _lookup_objs $_obj copts | xargs )"
3311.38Suebayasi	done
3321.38Suebayasi}
3331.38Suebayasi
3341.35Suebayasiget_libgcc_new_generate () {
3351.44Suebayasi	local _abi=$1
3361.44Suebayasi
3371.36Suebayasi	for _lib in libgcc_s.so libgcc.a libgcc_eh.a libgcov.a; do
3381.40Suebayasi		for _tmpl in tmplsrcs tmplfpsrcs tmplasmsrcs; do
3391.40Suebayasi			eval get_libgcc_gen_tmplsrcs_${_tmpl} $_lib | \
3401.40Suebayasi			write_mk ${libgcc_libs_mk}.${_lib%.*}.tmplsrcs.${_tmpl}.mk
3411.37Suebayasi		done
3421.37Suebayasi
3431.36Suebayasi		get_libgcc_gen_srcs $_lib | \
3441.39Suebayasi		write_mk ${libgcc_libs_mk}.${_lib%.*}.srcs.mk
3451.36Suebayasi	done
3461.38Suebayasi
3471.40Suebayasi	for _arg in tmplsrcs cppflags copts; do
3481.38Suebayasi		eval get_libgcc_gen_srcs_${_arg} | \
3491.38Suebayasi		eval writefile \$libgcc_srcs_mk_${_arg}
3501.38Suebayasi	done
3511.35Suebayasi}
3521.35Suebayasi
3531.33Suebayasi#####
3541.33Suebayasi
3551.28Suebayasiget_libgcc_new () {
3561.28Suebayasi	_subdir="$1"
3571.44Suebayasi	_abi="$2"
3581.27Suebayasi
3591.29Suebayasi	# List of generated files.
3601.29Suebayasi
3611.46Smrg	_machine_arch_subdir=$_OUTDIRBASE/lib/lib$_subdir/arch${_archsubdir}/$MACHINE_ARCH/$_abi
3621.27Suebayasi
3631.28Suebayasi	libgcc_db_funcs=${_machine_arch_subdir}/funcs
3641.40Suebayasi	libgcc_db_tmplsrcs=${_machine_arch_subdir}/tmplsrcs
3651.28Suebayasi	libgcc_db_objs_libs=${_machine_arch_subdir}/objs.libs
3661.28Suebayasi	libgcc_db_objs_srcs=${_machine_arch_subdir}/objs.srcs
3671.40Suebayasi	libgcc_db_objs_tmplsrcs=${_machine_arch_subdir}/objs.tmplsrcs
3681.28Suebayasi	libgcc_db_objs_cppflags=${_machine_arch_subdir}/objs.cppflags
3691.28Suebayasi	libgcc_db_objs_copts=${_machine_arch_subdir}/objs.copts
3701.28Suebayasi
3711.44Suebayasi	get_libgcc_new_analyze $_abi
3721.36Suebayasi
3731.39Suebayasi	libgcc_libs_mk=${_machine_arch_subdir}/libs
3741.28Suebayasi	libgcc_srcs_mk=${_machine_arch_subdir}/srcs.mk
3751.40Suebayasi	libgcc_srcs_mk_tmplsrcs=${_machine_arch_subdir}/srcs.tmplsrcs.mk
3761.28Suebayasi	libgcc_srcs_mk_cppflags=${_machine_arch_subdir}/srcs.cppflags.mk
3771.28Suebayasi	libgcc_srcs_mk_copts=${_machine_arch_subdir}/srcs.copts.mk
3781.28Suebayasi
3791.44Suebayasi	get_libgcc_new_generate $_abi
3801.26Suebayasi}
3811.26Suebayasi
3821.1Smrgget_libgcc () {
3831.16Smrg	_subdir="$1"
3841.46Smrg	mkdir -p $_OUTDIR/lib/lib$_subdir/arch
3851.16Smrg
3861.16Smrg	case "$_subdir" in
3871.46Smrg	gcc4|gcc)
3881.16Smrg		_extravars="COLLECT2 UNWIND_H xm_include_list"
3891.16Smrg		_archsubdir=""
3901.16Smrg		;;
3911.16Smrg	esac
3921.1Smrg
3931.1Smrg	# DPBIT, FPBIT only used on mn10[23]00, we don't need them.
3941.4Smrg	# XXX we should probably grab everything Just In Case for
3951.4Smrg	# the future.
3961.16Smrg	{
3971.16Smrg		getvars gcc/Makefile \
3981.58Smrg			INCLUDES LIB2ADD LIB2ADDEH LIB2ADD_ST \
3991.16Smrg			LIB1ASMFUNCS LIB1ASMSRC \
4001.16Smrg			LIB2_DIVMOD_FUNCS LIB2FUNCS_ST \
4011.42Suebayasi			LIB2FUNCS_EXTRA \
4021.16Smrg			LIBGCC2_CFLAGS \
4031.16Smrg			SHLIB_MKMAP SHLIB_MKMAP_OPTS \
4041.16Smrg			SHLIB_MAPFILES SHLIB_NM_FLAGS \
4051.16Smrg			EXTRA_HEADERS xm_defines \
4061.16Smrg			tm_defines ${_extravars}
4071.70Sskrll	}	| sanitise_includes \
4081.69Sskrll		| write_mk $_OUTDIRBASE/lib/lib$_subdir/arch${_archsubdir}/$MACHINE_ARCH.mk
4091.26Suebayasi
4101.26Suebayasi	# Generate new style files.
4111.27Suebayasi	if [ -n "${MKNATIVE_LIBGCC_NEW}" ]; then
4121.44Suebayasi		get_libgcc_new $_subdir $_ABI
4131.26Suebayasi	fi
4141.1Smrg}
4151.1Smrg
4161.24Sskrll##### gnu/lib/libgcov #####
4171.24Sskrll
4181.24Sskrllget_libgcov () {
4191.24Sskrll	_subdir="$1"
4201.24Sskrll
4211.46Smrg	mkdir -p $_OUTDIR/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH
4221.24Sskrll
4231.24Sskrll	{
4241.24Sskrll		getvars gcc/Makefile \
4251.24Sskrll			LIBGCOV
4261.46Smrg	} | write_mk $_OUTDIRBASE/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH/defs.mk
4271.24Sskrll
4281.46Smrg	write_c $_OUTDIRBASE/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH/gcov-iov.h \
4291.24Sskrll	   <$_TMPDIR/gcc/gcov-iov.h
4301.24Sskrll
4311.24Sskrll}
4321.24Sskrll
4331.16Smrg##### gnu/usr.bin/gcc[34]/libiberty #####
4341.1Smrg
4351.16Smrgget_gcc_libiberty () {
4361.16Smrg	_subdir="$1"
4371.46Smrg	case "$_subdir" in
4381.46Smrg	gcc4)
4391.46Smrg		_libibertydir="usr.bin/$_subdir/libiberty"
4401.46Smrg		;;
4411.46Smrg	gcc)
4421.48Smrg		_libibertydir="lib/libiberty"
4431.46Smrg		;;
4441.46Smrg	esac
4451.46Smrg	mkdir -p $_OUTDIR/$_libibertydir/arch/$MACHINE_ARCH
4461.1Smrg
4471.1Smrg	getvars libiberty/Makefile \
4481.1Smrg		ALLOCA EXTRA_OFILES LIBOBJS REQUIRED_OFILES \
4491.46Smrg		| write_mk $_OUTDIRBASE/$_libibertydir/defs.mk
4501.1Smrg
4511.46Smrg	write_c $_OUTDIRBASE/$_libibertydir/arch/$MACHINE_ARCH/config.h \
4521.1Smrg		<$_TMPDIR/libiberty/config.h
4531.1Smrg}
4541.1Smrg
4551.51Smrg##### lib/libdecnumber #####
4561.51Smrg
4571.51Smrgget_libdecnumber () {
4581.51Smrg	_subdir="$1"
4591.51Smrg
4601.52Smrg	mkdir -p $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH
4611.52Smrg	write_c $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/config.h \
4621.51Smrg		<$_TMPDIR/libdecnumber/config.h
4631.51Smrg}
4641.51Smrg
4651.63Smrg##### lib/libgomp #####
4661.63Smrg
4671.63Smrgget_libgomp () {
4681.63Smrg	_subdir="$1"
4691.63Smrg
4701.63Smrg	mkdir -p $_OUTDIR/lib/$_subdir/arch/$MACHINE_ARCH
4711.63Smrg	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/config.h \
4721.63Smrg		<$_TMPDIR/$_PLATFORM/libgomp/config.h
4731.63Smrg	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/libgomp_f.h \
4741.63Smrg		<$_TMPDIR/$_PLATFORM/libgomp/libgomp_f.h
4751.63Smrg	write_mk $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/libgomp.spec \
4761.63Smrg		<$_TMPDIR/$_PLATFORM/libgomp/libgomp.spec
4771.64Smrg	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/omp.h \
4781.64Smrg		<$_TMPDIR/$_PLATFORM/libgomp/omp.h
4791.63Smrg}
4801.63Smrg
4811.1Smrg##### gnu/lib/libobjc #####
4821.1Smrg
4831.1Smrgget_libobjc () {
4841.46Smrg	_subdir="$1/arch/$MACHINE_ARCH"
4851.46Smrg	_options="ALL_OPT_FILES"
4861.46Smrg	_unwind="UNWIND_H"
4871.18Smrg
4881.46Smrg	mkdir -p $_OUTDIR/lib/$_subdir
4891.1Smrg
4901.16Smrg	{
4911.18Smrg		if [ -n "$_options" ]; then
4921.18Smrg			getvars gcc/Makefile $_options
4931.18Smrg		fi
4941.16Smrg		getvars $_PLATFORM/libobjc/Makefile \
4951.16Smrg			ALL_CFLAGS INCLUDES OBJS OBJC_H \
4961.16Smrg			| sed "s,$_GNU_DIST,\${GNUHOSTDIST},g"
4971.20Sskrll		if [ -n "$_unwind" ]; then
4981.20Sskrll			getvars gcc/Makefile $_unwind
4991.20Sskrll		fi
5001.46Smrg	} | write_mk $_OUTDIRBASE/lib/$_subdir/defs.mk
5011.23Sskrll
5021.46Smrg	write_c $_OUTDIRBASE/lib/$_subdir/config.h \
5031.23Sskrll		<$_TMPDIR/$_PLATFORM/libobjc/config.h
5041.1Smrg}
5051.1Smrg
5061.1Smrg##### gnu/lib/libstdc++-v3 #####
5071.1Smrg
5081.1Smrgget_libstdcxx_v3 () {
5091.16Smrg	_subdir="$1"
5101.46Smrg	mkdir -p $_OUTDIR/lib/$_subdir/arch/$MACHINE_ARCH
5111.1Smrg
5121.16Smrg	case ${_subdir} in
5131.46Smrg	*)
5141.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"
5151.55Smrg		_headers1="host_headers debug_headers tr1_headers c_compatibility_headers_extra tr1_impl_headers parallel_headers decimal_headers"
5161.55Smrg		_headers2="thread_host_headers host_headers_extra"
5171.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"
5181.20Sskrll		_unwind="UNWIND_H"
5191.16Smrg		;;
5201.16Smrg	esac
5211.16Smrg
5221.19Smrg	# build files
5231.19Smrg	for h in $_build_headers; do
5241.46Smrg		write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/$h \
5251.19Smrg			<$_TMPDIR/$_PLATFORM/libstdc++-v3/include/$_PLATFORM/bits/$h
5261.19Smrg	done
5271.19Smrg
5281.46Smrg	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/config.h \
5291.6Smrg		<$_TMPDIR/$_PLATFORM/libstdc++-v3/config.h
5301.49Smrg	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/gstdint.h \
5311.49Smrg		<$_TMPDIR/$_PLATFORM/libstdc++-v3/include/gstdint.h
5321.6Smrg
5331.1Smrg	{
5341.1Smrg		# libsupc++
5351.1Smrg		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
5361.1Smrg			sources | sed 's/^G_sources=/G_LIBSUPCXX_SOURCES=/'
5371.1Smrg		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
5381.1Smrg			c_sources | sed 's/^G_c_sources=/G_LIBSUPCXX_C_SOURCES=/'
5391.1Smrg
5401.1Smrg		# src
5411.1Smrg		getvars $_PLATFORM/libstdc++-v3/src/Makefile \
5421.16Smrg			sources $_src_CC_files SECTION_FLAGS | sed 's/^G_sources=/G_SRC_SOURCES=/'
5431.1Smrg
5441.1Smrg		# include
5451.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
5461.49Smrg			c_base_headers std_headers | sed -e 's#/[^ 	][^ 	]*/##g' -e 's/\${GNUHOSTDIST}//g'
5471.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
5481.1Smrg			bits_headers backward_headers ext_headers c_base_headers_extra \
5491.17Smrg			$_headers1 | sed -e 's#/[^ 	][^ 	]*/##g' -e 's/\${GNUHOSTDIST}//g'
5501.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
5511.17Smrg			$_headers2 | sed -e 's#\./[^ 	][^ 	]*/##g' -e 's/\${GNUHOSTDIST}//g'
5521.16Smrg
5531.20Sskrll		if [ -n "$_unwind" ]; then
5541.20Sskrll			getvars gcc/Makefile $_unwind
5551.20Sskrll		fi
5561.46Smrg	} | write_mk $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/defs.mk
5571.1Smrg}
5581.1Smrg
5591.72Sskrll##### gnu/usr.bin/gcc* #####
5601.1Smrg
5611.68Sskrllget_gcc_bootstrap () {
5621.68Sskrll	_subdir="$1"
5631.68Sskrll	mkdir -p $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH
5641.68Sskrll	for f in auto-host tm config gthr-default; do
5651.68Sskrll		write_c $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f.h <$_TMPDIR/gcc/$f.h
5661.68Sskrll	done
5671.68Sskrll}
5681.68Sskrll
5691.1Smrgget_gcc () {
5701.16Smrg	_subdir="$1"
5711.46Smrg	mkdir -p $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH
5721.57Smrg	mkdir -p $_OUTDIR/usr.bin/libcpp/arch/$MACHINE_ARCH
5731.19Smrg	case ${_subdir} in
5741.19Smrg	gcc4)
5751.19Smrg		_buildname="BUILD_"
5761.19Smrg		_libcppsubdir=""
5771.20Sskrll		_extravars="TM_H ALL_OPT_FILES"
5781.20Sskrll		_hconfig_h=""
5791.20Sskrll		_extravars2="tm_file_list build_xm_include_list"
5801.20Sskrll		_extravars3="tm_p_include_list"
5811.47Smrg		;;
5821.70Sskrll
5831.47Smrg	gcc)
5841.47Smrg		_buildname="BUILD_"
5851.47Smrg		_libcppsubdir=""
5861.47Smrg		_extravars="TM_H ALL_OPT_FILES"
5871.47Smrg		_hconfig_h=""
5881.47Smrg		_extravars2="tm_file_list build_xm_include_list"
5891.47Smrg		_extravars3="tm_p_include_list"
5901.19Smrg		;;
5911.19Smrg	esac
5921.1Smrg
5931.1Smrg	{
5941.1Smrg		getvars gcc/Makefile \
5951.19Smrg			${_buildname}EARLY_SUPPORT ${_buildname}ERRORS ${_buildname}PRINT \
5961.19Smrg			${_buildname}RTL ${_buildname}SUPPORT ${_buildname}VARRAY | \
5971.16Smrg		    sed -e 's#build/errors.o#build-errors.o#g' \
5981.16Smrg			-e 's#build/print-rtl.o#build-print-rtl.o#g' \
5991.16Smrg			-e 's#build/rtl.o#build-rtl.o#g' \
6001.16Smrg			-e 's#build/varray.o#build-varray.o#g' \
6011.22Smrg			-e 's#build/ggc-none.o#build-ggc-none.o#g' \
6021.16Smrg			-e 's#build/##g'
6031.16Smrg		getvars gcc/Makefile \
6041.1Smrg			ALL_CFLAGS ALL_CPPFLAGS C_AND_OBJC_OBJS C_OBJS CCCP_OBJS \
6051.20Sskrll			GCOV_OBJS PROTO_OBJS ${_extravars1} \
6061.1Smrg			INCLUDES md_file OBJC_OBJS OBJS out_file version \
6071.20Sskrll			BUILD_PREFIX RTL_H TREE_H ${_hconfig_h} BASIC_BLOCK_H GCC_H \
6081.1Smrg			GTFILES_SRCDIR GTFILES_FILES_FILES GTFILES_FILES_LANGS \
6091.1Smrg			GTFILES GTFILES_LANG_DIR_NAMES \
6101.1Smrg			tm_defines host_xm_file host_xm_defines tm_p_file \
6111.21Smrg			target_cpu_default ${_extravars} ${_extravars2} \
6121.60Smrg			lang_specs_files ${_extravars3} \
6131.70Sskrll				| sanitise_includes
6141.1Smrg		getvars gcc/Makefile \
6151.1Smrg			LIB2ADDEHDEP | sed 's/unwind.inc//'
6161.1Smrg		getvars gcc/Makefile \
6171.1Smrg			CXX_OBJS CXX_C_OBJS | sed 's/cp\///g'
6181.1Smrg		getvars gcc/Makefile \
6191.1Smrg			F77_OBJS | sed 's/f\///g'
6201.19Smrg		case ${_subdir} in
6211.51Smrg		gcc4 | gcc)
6221.19Smrg			getvars libcpp/Makefile \
6231.19Smrg				libcpp_a_OBJS
6241.19Smrg			;;
6251.73Sskrll		esac
6261.12Sskrll		getvars gcc/Makefile \
6271.16Smrg			ENABLE_SHARED
6281.20Sskrll		case ${_subdir} in
6291.46Smrg		gcc4 | gcc)
6301.20Sskrll			echo G_SHLIB_LINK="$CC -shared"
6311.20Sskrll			echo G_SHLIB_MULTILIB=.
6321.20Sskrll			;;
6331.20Sskrll		esac
6341.46Smrg	} | write_mk $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/defs.mk
6351.16Smrg
6361.16Smrg	case "$_subdir" in
6371.46Smrg	gcc4)
6381.46Smrg		write_c $_OUTDIRBASE/usr.bin/$_subdir/libcpp/arch/$MACHINE_ARCH/config.h <$_TMPDIR/libcpp/config.h
6391.46Smrg		hfiles='auto-host gencheck configargs gthr-default tm bconfig config multilib'
6401.16Smrg		;;
6411.46Smrg	gcc)
6421.51Smrg		write_c $_OUTDIRBASE/usr.bin/libcpp/arch/$MACHINE_ARCH/config.h <$_TMPDIR/libcpp/config.h
6431.51Smrg		hfiles='auto-host configargs gthr-default tm bconfig config multilib bversion plugin-version'
6441.16Smrg		;;
6451.16Smrg	esac
6461.16Smrg	for f in $hfiles; do
6471.46Smrg		write_c $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f.h <$_TMPDIR/gcc/$f.h
6481.62Smatt		if [ "${MACHINE_ARCH}" = "powerpc" -a "${f}" = "configargs" ]
6491.62Smatt		then
6501.62Smatt			ex <<__EOF__ $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f.h
6511.62Smatt/configuration_arguments/ s/$//
6521.62Smattya
6531.62Smatti
6541.65Smatt#ifdef _SOFT_FLOAT
6551.62Smatt.
6561.62Smattpu
6571.62Smatts/";$/ -with-float=soft";/
6581.62Smatta
6591.62Smatt#else
6601.62Smatt#endif
6611.62Smatt.
6621.62Smatt. m +1
6631.62Smatt/configure_default_options/ s/{ NULL.*$//
6641.62Smatta
6651.65Smatt#ifdef _SOFT_FLOAT
6661.62Smatt  { "float", "soft" },
6671.62Smatt#endif
6681.62Smatt  { NULL, NULL }
6691.62Smatt};
6701.62Smatt.
6711.62Smattwq
6721.62Smatt__EOF__
6731.62Smatt		fi
6741.1Smrg	done
6751.50Smrg
6761.56Smrg	# keep identical
6771.56Smrg	for f in all-tree.def; do
6781.53Smrg		cp $_TMPDIR/gcc/$f $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f
6791.51Smrg	done
6801.56Smrg
6811.56Smrg	# special transforms
6821.56Smrg	for f in gtyp-input.list; do
6831.56Smrg		sed -e 's/^.*external\/gpl3\/gcc\/dist/SRCDIR/' < $_TMPDIR/gcc/$f > $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f
6841.56Smrg	done
6851.59Smrg
6861.59Smrg	# special platforms
6871.59Smrg	if [ "${MACHINE_ARCH}" = "sh3el" -o "${MACHINE_ARCH}" = "sh3eb" ]; then
6881.59Smrg		write_c $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/sysroot-suffix.h <$_TMPDIR/gcc/sysroot-suffix.h
6891.59Smrg	fi
6901.1Smrg}
6911.1Smrg
6921.1Smrg##### main #####
6931.1Smrg
6941.16Smrgcase "$1" in
6951.16Smrg# .mk and .h files for libgcc bootstrap (from host build)
6961.16Smrg
6971.16Smrglibgcc4)
6981.16Smrg	get_libgcc gcc4
6991.16Smrg	get_crtstuff crtstuff4
7001.16Smrg	exit 0
7011.16Smrg	;;
7021.16Smrg
7031.66Sskrlllibgcc45)
7041.66Sskrll	_OUTDIR="$_TOP/external/gpl3/gcc"
7051.66Sskrll	_OUTDIRBASE="external/gpl3/gcc"
7061.66Sskrll	get_libgcc gcc
7071.66Sskrll	get_crtstuff crtstuff
7081.66Sskrll	get_libgcov gcc
7091.68Sskrll	get_gcc_bootstrap gcc
7101.66Sskrll	exit 0
7111.66Sskrll	;;
7121.66Sskrll
7131.16Smrg# gcc files
7141.16Smrggcc4)
7151.16Smrg	get_gcc gcc4
7161.16Smrg	get_libgcc gcc4
7171.24Sskrll	get_libgcov gcc4
7181.16Smrg	get_crtstuff crtstuff4
7191.16Smrg	get_gcc_libiberty gcc4
7201.16Smrg	get_libobjc libobjc4
7211.16Smrg	get_libstdcxx_v3 libstdc++-v3_4
7221.1Smrg	exit 0
7231.1Smrg	;;
7241.1Smrg
7251.46Smrggcc45)
7261.46Smrg	_OUTDIR="$_TOP/external/gpl3/gcc"
7271.46Smrg	_OUTDIRBASE="external/gpl3/gcc"
7281.46Smrg	get_gcc gcc
7291.46Smrg	get_libgcc gcc
7301.46Smrg	get_libgcov gcc
7311.46Smrg	get_crtstuff crtstuff
7321.46Smrg	get_gcc_libiberty gcc
7331.46Smrg	get_libobjc libobjc
7341.16Smrg	get_libstdcxx_v3 libstdc++-v3
7351.51Smrg	get_libdecnumber libdecnumber
7361.63Smrg	get_libgomp libgomp
7371.1Smrg	exit 0
7381.1Smrg	;;
7391.1Smrg
7401.46Smrg
7411.1Smrg*)	echo invalid arguments; exit 1;;
7421.1Smrgesac
743