Home | History | Annotate | Line # | Download | only in gcc
mknative-gcc revision 1.55
      1 #!/bin/sh
      2 #	$NetBSD: mknative-gcc,v 1.55 2011/06/30 07:16:59 mrg Exp $
      3 #
      4 # Shell script for generating all the constants needed for a native
      5 # platform build of src/gnu/dist/gcc.
      6 #
      7 
      8 # initialise
      9 
     10 _TMPDIR=$2
     11 _TOP=$3
     12 _PLATFORM=$4
     13 _ABI=$5
     14 _VPATH=`grep VPATH ${_TMPDIR}/Makefile | sed 's,^.*=[ 	]*,,'`
     15 _GNU_DIST=`cd ${_VPATH}; pwd`
     16 
     17 . $_TOP/tools/gcc/mknative.common
     18 
     19 # default to GCC 4.1 for now
     20 _OUTDIR="$_TOP/gnu"
     21 _OUTDIRBASE="gnu"
     22 
     23 ##### gnu/lib/crtstuff #####
     24 
     25 get_crtstuff () {
     26 	_subdir="$1"
     27 	mkdir -p $_OUTDIR/lib/$_subdir/arch
     28 
     29 	getvars gcc/Makefile \
     30 		INCLUDES CRTSTUFF_CFLAGS CRTSTUFF_T_CFLAGS \
     31 		tm_defines xm_file xm_defines \
     32 		| write_mk $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH.mk
     33 }
     34 
     35 ##### gnu/lib/libg2c #####
     36 
     37 get_libg2c () {
     38 	mkdir -p $_OUTDIR/lib/libg2c3/arch/$MACHINE_ARCH
     39 
     40 	write_c $_OUTDIRBASE/lib/libg2c3/arch/$MACHINE_ARCH/config.h <$_TMPDIR/$_PLATFORM/libf2c/libU77/config.h
     41 	write_c $_OUTDIRBASE/lib/libg2c3/arch/$MACHINE_ARCH/g2c.h <$_TMPDIR/$_PLATFORM/libf2c/g2c.h
     42 
     43 	{
     44 		getvars $_PLATFORM/libf2c/Makefile \
     45 			F2CEXT
     46 		getvars $_PLATFORM/libf2c/libF77/Makefile \
     47 			ALL_CFLAGS OBJS
     48 		getvars $_PLATFORM/libf2c/libI77/Makefile \
     49 			ALL_CFLAGS OBJS | sed 's,=,+=,'
     50 		getvars $_PLATFORM/libf2c/libU77/Makefile \
     51 			ALL_CFLAGS OBJS | sed 's,=,+=,'
     52 	} | write_mk $_OUTDIRBASE/lib/libg2c3/arch/$MACHINE_ARCH/defs.mk
     53 }
     54 
     55 ##### gnu/lib/libgcc #####
     56 
     57 get_libgcc_list_funcs_asm () {
     58 	{
     59 		getvars gcc/Makefile LIB1ASMFUNCS | {
     60 			# print newline separated list
     61 			sed -e '
     62 				s,^.*=,,
     63 				s, *$,,
     64 				s,  *, ,g
     65 				s, ,\
     66 ,g'
     67 		}
     68 		getvars gcc/Makefile LIB2FUNCS_EXTRA | {
     69 			# print newline separated list
     70 			sed -e '
     71 				s,^.*=,,
     72 				s, *$,,
     73 				s,  *, ,g
     74 				s, ,\
     75 ,g' | \
     76 			sed -ne '
     77 				/\.S$/ { s,^.*/,,; s,\.S$,,; p; }
     78 				/\.asm$/ { s,^.*/,,; s,\.asm$,,; p; }
     79 			'
     80 		}
     81 	} | {
     82 		# print foo and foo_s
     83 		sed -ne '
     84 			/./ {
     85 				p
     86 				s,$,_s,
     87 				p
     88 			}
     89 		'
     90 	} | sort
     91 }
     92 
     93 get_libgcc_list_funcs_lib () {
     94 	local _lib=$1
     95 	local _lib_prefix=${_lib%.*}
     96 	local _lib_suffix=${_lib#*.}
     97 	local _abi=${2:-'\.'}
     98 
     99 	cat build/gcc/libgcc.mk | \
    100 	grep '/'${_abi}'/' | \
    101 	sed -ne '
    102 		/^'${_abi}'\/'${_lib_prefix}'\.'${_lib_suffix}': .*\.o$/ {
    103 			s,^.*/,,
    104 			s,\.o$,,
    105 			p
    106 		}
    107 	' | sort
    108 }
    109 
    110 get_libgcc_list_objs_libs () {
    111 	local _abi=${1:-'\.'}
    112 
    113 	cat build/gcc/libgcc.mk | \
    114 	grep '/'${_abi}'/' | \
    115 	egrep '^'${_abi}'\/(libgcc_s\.so|libgcc\.a|libgcc_eh\.a|libgcov\.a): (libgcc_s|libgcc|libgcc_eh|libgcov)\/.*\.o$' | \
    116 	sed -e '
    117 		s,^'${_abi}'\/,,
    118 		s,: .*/,	,
    119 		s,^\(.*\)	\(.*\)$,\2	\1,
    120 	' | sort
    121 }
    122 
    123 get_libgcc_list_objs_srcs () {
    124 	local _abi=${1:-'\.'}	# XXX not used
    125 
    126 	if [ -e $_TOP/${libgcc_db_funcs}.S ]; then
    127 		cut -f1 $_TOP/${libgcc_db_objs_libs} | sed -e 's,\.o$,,' | \
    128 		comm -23 /dev/stdin $_TOP/${libgcc_db_funcs}.S | \
    129 		sed -e 's,\(.*\),\1.o	\1.c,'
    130 
    131 		cut -f1 $_TOP/${libgcc_db_objs_libs} | sed -e 's,\.o$,,' | \
    132 		comm -12 /dev/stdin $_TOP/${libgcc_db_funcs}.S | \
    133 		sed -e 's,\(.*\),\1.o	\1.S,'
    134 	else
    135 		cut -f1 $_TOP/${libgcc_db_objs_libs} | sed -e 's,\.o$,,' | \
    136 		sed -e 's,\(.*\),\1.o	\1.c,'
    137 	fi | sort
    138 }
    139 
    140 get_libgcc_list_objs_tmplsrcs () {
    141 	local _abi=${1:-'\.'}
    142 
    143 	grep 'GCC_FOR_TARGET.*\.o$' build/gcc/libgcc.mk | \
    144 	grep '/'${_abi}'/' | \
    145 	sed -ne '
    146 		s,^.* -c \([^ ]*\).* -o .*/\([^ ]*\.o\)$,\2	\1,
    147 		# basename
    148 		/\$/ { s,\$.*/,,; }
    149 		/\// { s,\/.*/,,; }
    150 		p
    151 	' | sort -u
    152 }
    153 
    154 get_libgcc_list_objs_xflags () {
    155 	local _flags=$1
    156 	local _abi=${2:-'\.'}
    157 
    158 	grep 'GCC_FOR_TARGET.*\.o$' build/gcc/libgcc.mk | \
    159 	grep '/'${_abi}'/' | \
    160 	sed -n '
    161 		x
    162 	:loop
    163 		g
    164 		s/^\(.*\) \(-['${_flags}'][^ ][^ ]*\) \(.*\) \(-o .*\)\/\(.*\.o\)$/\5	\2/p
    165 		g
    166 		s/^\(.*\) \(-['${_flags}'][^ ][^ ]*\) \(.*\) \(-o .*\)\/\(.*\.o\)$/\1 \3 \4\/\5/
    167 		h
    168 		t loop
    169 	' | sort
    170 }
    171 
    172 get_libgcc_list_objs_cppflags () {
    173 	get_libgcc_list_objs_xflags D $1
    174 }
    175 
    176 get_libgcc_list_objs_copts () {
    177 	get_libgcc_list_objs_xflags fmx $1
    178 }
    179 
    180 get_libgcc_list_tmplsrcs () {
    181 	local _lib=$1
    182 	local _abi=$2	# XXX not used
    183 	local _tmplallsrcs=$( mktemp /tmp/mknative-gcc._tmplallsrcs.XXXXXX )
    184 
    185 	touch $_TOP/${libgcc_db_tmplsrcs}.tmplsrcs.${_lib%.*}
    186 	touch $_TOP/${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*}
    187 	touch $_TOP/${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*}
    188 
    189 	# all files
    190 	local _lib_prefix=${_lib%.*}
    191 	local _lib_suffix=${_lib#*.}
    192 	join $_TOP/$libgcc_db_objs_libs $_TOP/$libgcc_db_objs_tmplsrcs | \
    193 	grep ${_lib_prefix}'\.'${_lib_suffix} | cut -d' ' -f 3 | sort -u > \
    194 	$_tmplallsrcs
    195 
    196 	# TMPLFPSRCS = [fdp]p-bit.c
    197 	grep '[fdt]p-bit\.c' <$_tmplallsrcs | sort -u | \
    198 	writefile ${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*}
    199 
    200 	# TMPLASMSRCS = $(LIB1ASMSRC)
    201 	grep '\$(LIB1ASMSRC)' <$_tmplallsrcs | sort -u | \
    202 	writefile ${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*}
    203 
    204 	# TMPLSRCS is anything else; exclude TMPLFPSRCS and TMPLASMSRCS
    205 	cat $_tmplallsrcs | \
    206 	comm -23 /dev/stdin $_TOP/${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*} | \
    207 	comm -23 /dev/stdin $_TOP/${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*} | \
    208 	writefile ${libgcc_db_tmplsrcs}.tmplsrcs.${_lib%.*}
    209 
    210 	rm -f $_tmplallsrcs
    211 }
    212 
    213 get_libgcc_new_analyze () {
    214 	local _abi=$1
    215 
    216 	mkdir -p $_TOP/${_machine_arch_subdir}
    217 
    218 	touch $_TOP/${libgcc_db_funcs}.S
    219 	get_libgcc_list_funcs_asm | \
    220 	writefile ${libgcc_db_funcs}.S
    221 
    222 	for _lib in libgcc_s.so libgcc.a libgcc_eh.a libgcov.a; do
    223 		touch $_TOP/${libgcc_db_funcs}.${_lib%.*}
    224 		get_libgcc_list_funcs_lib $_lib $_abi | \
    225 		writefile ${libgcc_db_funcs}.${_lib%.*}
    226 	done
    227 
    228 	get_libgcc_list_objs_libs $_abi | writefile ${libgcc_db_objs_libs}
    229 	get_libgcc_list_objs_srcs $_abi | writefile ${libgcc_db_objs_srcs}
    230 	get_libgcc_list_objs_tmplsrcs $_abi | writefile ${libgcc_db_objs_tmplsrcs}
    231 	get_libgcc_list_objs_cppflags $_abi | writefile ${libgcc_db_objs_cppflags}
    232 	get_libgcc_list_objs_copts $_abi | writefile ${libgcc_db_objs_copts}
    233 
    234 	for _lib in libgcc_s.so libgcc.a libgcc_eh.a libgcov.a; do
    235 		get_libgcc_list_tmplsrcs $_lib $_abi
    236 	done
    237 }
    238 
    239 #####
    240 
    241 get_libgcc_gen_tmplsrcs_tmplsrcs () {
    242 	local _lib=$1
    243 
    244 	printf '\n'
    245 	printf 'TMPLSRCS.%s = \\\n' $_lib
    246 	sed -e 's,^,	,; s,$, \\,' $_TOP/${libgcc_db_tmplsrcs}.tmplsrcs.${_lib%.*}
    247 }
    248 
    249 get_libgcc_gen_tmplsrcs_tmplfpsrcs () {
    250 	local _lib=$1
    251 
    252 	printf '\n'
    253 	printf 'TMPLFPSRCS.%s = \\\n' $_lib
    254 	sed -e 's,^,	,; s,$, \\,' $_TOP/${libgcc_db_tmplsrcs}.tmplfpsrcs.${_lib%.*}
    255 }
    256 
    257 get_libgcc_gen_tmplsrcs_tmplasmsrcs () {
    258 	local _lib=$1
    259 
    260 	printf '\n'
    261 	printf 'TMPLASMSRCS.%s = \\\n' $_lib
    262 	sed -e 's,^,	,; s,$, \\,' $_TOP/${libgcc_db_tmplsrcs}.tmplasmsrcs.${_lib%.*} | \
    263 	sed -e 's,LIB1ASMSRC,G_&,'
    264 }
    265 
    266 get_libgcc_gen_srcs () {
    267 	local _lib=$1
    268 
    269 	printf '\n'
    270 	printf 'SRCS.%s = \\\n' $_lib
    271 	if [ -e $_TOP/${libgcc_db_funcs}.S ]; then
    272 		comm -23 $_TOP/${libgcc_db_funcs}.${_lib%.*} $_TOP/${libgcc_db_funcs}.S | \
    273 		sed -e 's,$,.c,; s,^,tmp_,'
    274 		comm -12 $_TOP/${libgcc_db_funcs}.${_lib%.*} $_TOP/${libgcc_db_funcs}.S | \
    275 		sed -e 's,$,.S,; s,^,tmp_,'
    276 	else
    277 		cat $_TOP/${libgcc_db_funcs}.${_lib%.*} | \
    278 		sed -e 's,$,.c,; s,^,tmp_,'
    279 	fi | sort | \
    280 	sed -e 's,^,	,; s,$, \\,'
    281 }
    282 
    283 _lookup_objs () {
    284 	local _obj=$1; local _key=$2
    285 
    286 	eval grep \^$_obj\\\	 \$_TOP/\${libgcc_db_objs_${_key}} | cut -f2
    287 }
    288 
    289 get_libgcc_gen_srcs_tmplsrcs () {
    290 	cut -f1 $_TOP/${libgcc_db_objs_libs} | \
    291 	while read _obj; do
    292 		printf 'SRCS.tmp_%s=%s\n' \
    293 			"$( _lookup_objs $_obj srcs )" \
    294 			"$( _lookup_objs $_obj tmplsrcs )"
    295 	done | \
    296 	sed -e 's,\$(\(.*\)),${G_\1},'
    297 }
    298 
    299 get_libgcc_gen_srcs_cppflags () {
    300 	cut -f1 $_TOP/${libgcc_db_objs_libs} | \
    301 	while read _obj; do
    302 		printf '_CPPFLAGS.tmp_%s=%s\n' \
    303 			"$( _lookup_objs $_obj srcs )" \
    304 			"$( _lookup_objs $_obj cppflags | xargs )"
    305 	done
    306 }
    307 
    308 get_libgcc_gen_srcs_copts () {
    309 	cut -f1 $_TOP/${libgcc_db_objs_libs} | \
    310 	while read _obj; do
    311 		printf 'COPTS.tmp_%s=%s\n' \
    312 			"$( _lookup_objs $_obj srcs )" \
    313 			"$( _lookup_objs $_obj copts | xargs )"
    314 	done
    315 }
    316 
    317 get_libgcc_new_generate () {
    318 	local _abi=$1
    319 
    320 	for _lib in libgcc_s.so libgcc.a libgcc_eh.a libgcov.a; do
    321 		for _tmpl in tmplsrcs tmplfpsrcs tmplasmsrcs; do
    322 			eval get_libgcc_gen_tmplsrcs_${_tmpl} $_lib | \
    323 			write_mk ${libgcc_libs_mk}.${_lib%.*}.tmplsrcs.${_tmpl}.mk
    324 		done
    325 
    326 		get_libgcc_gen_srcs $_lib | \
    327 		write_mk ${libgcc_libs_mk}.${_lib%.*}.srcs.mk
    328 	done
    329 
    330 	for _arg in tmplsrcs cppflags copts; do
    331 		eval get_libgcc_gen_srcs_${_arg} | \
    332 		eval writefile \$libgcc_srcs_mk_${_arg}
    333 	done
    334 }
    335 
    336 #####
    337 
    338 get_libgcc_new () {
    339 	_subdir="$1"
    340 	_abi="$2"
    341 
    342 	# List of generated files.
    343 
    344 	_machine_arch_subdir=$_OUTDIRBASE/lib/lib$_subdir/arch${_archsubdir}/$MACHINE_ARCH/$_abi
    345 
    346 	libgcc_db_funcs=${_machine_arch_subdir}/funcs
    347 	libgcc_db_tmplsrcs=${_machine_arch_subdir}/tmplsrcs
    348 	libgcc_db_objs_libs=${_machine_arch_subdir}/objs.libs
    349 	libgcc_db_objs_srcs=${_machine_arch_subdir}/objs.srcs
    350 	libgcc_db_objs_tmplsrcs=${_machine_arch_subdir}/objs.tmplsrcs
    351 	libgcc_db_objs_cppflags=${_machine_arch_subdir}/objs.cppflags
    352 	libgcc_db_objs_copts=${_machine_arch_subdir}/objs.copts
    353 
    354 	get_libgcc_new_analyze $_abi
    355 
    356 	libgcc_libs_mk=${_machine_arch_subdir}/libs
    357 	libgcc_srcs_mk=${_machine_arch_subdir}/srcs.mk
    358 	libgcc_srcs_mk_tmplsrcs=${_machine_arch_subdir}/srcs.tmplsrcs.mk
    359 	libgcc_srcs_mk_cppflags=${_machine_arch_subdir}/srcs.cppflags.mk
    360 	libgcc_srcs_mk_copts=${_machine_arch_subdir}/srcs.copts.mk
    361 
    362 	get_libgcc_new_generate $_abi
    363 }
    364 
    365 get_libgcc () {
    366 	_subdir="$1"
    367 	mkdir -p $_OUTDIR/lib/lib$_subdir/arch
    368 
    369 	case "$_subdir" in
    370 	gcc4|gcc)
    371 		_extravars="COLLECT2 UNWIND_H xm_include_list"
    372 		_archsubdir=""
    373 		;;
    374 	esac
    375 
    376 	# DPBIT, FPBIT only used on mn10[23]00, we don't need them.
    377 	# XXX we should probably grab everything Just In Case for
    378 	# the future.
    379 	{
    380 		getvars gcc/Makefile \
    381 			INCLUDES LIB2ADD LIB2ADDEH \
    382 			LIB1ASMFUNCS LIB1ASMSRC \
    383 			LIB2_DIVMOD_FUNCS LIB2FUNCS_ST \
    384 			LIB2FUNCS_EXTRA \
    385 			LIBGCC2_CFLAGS \
    386 			SHLIB_MKMAP SHLIB_MKMAP_OPTS \
    387 			SHLIB_MAPFILES SHLIB_NM_FLAGS \
    388 			EXTRA_HEADERS xm_defines \
    389 			tm_defines ${_extravars}
    390 	} | write_mk $_OUTDIRBASE/lib/lib$_subdir/arch${_archsubdir}/$MACHINE_ARCH.mk
    391 
    392 	# Generate new style files.
    393 	if [ -n "${MKNATIVE_LIBGCC_NEW}" ]; then
    394 		get_libgcc_new $_subdir $_ABI
    395 	fi
    396 }
    397 
    398 ##### gnu/lib/libgcov #####
    399 
    400 get_libgcov () {
    401 	_subdir="$1"
    402 
    403 	mkdir -p $_OUTDIR/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH
    404 
    405 	{
    406 		getvars gcc/Makefile \
    407 			LIBGCOV
    408 	} | write_mk $_OUTDIRBASE/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH/defs.mk
    409 
    410 	write_c $_OUTDIRBASE/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH/gcov-iov.h \
    411 	   <$_TMPDIR/gcc/gcov-iov.h
    412 
    413 }
    414 
    415 ##### gnu/usr.bin/gcc[34]/libiberty #####
    416 
    417 get_gcc_libiberty () {
    418 	_subdir="$1"
    419 	case "$_subdir" in
    420 	gcc4)
    421 		_libibertydir="usr.bin/$_subdir/libiberty"
    422 		;;
    423 	gcc)
    424 		_libibertydir="lib/libiberty"
    425 		;;
    426 	esac
    427 	mkdir -p $_OUTDIR/$_libibertydir/arch/$MACHINE_ARCH
    428 
    429 	getvars libiberty/Makefile \
    430 		ALLOCA EXTRA_OFILES LIBOBJS REQUIRED_OFILES \
    431 		| write_mk $_OUTDIRBASE/$_libibertydir/defs.mk
    432 
    433 	write_c $_OUTDIRBASE/$_libibertydir/arch/$MACHINE_ARCH/config.h \
    434 		<$_TMPDIR/libiberty/config.h
    435 }
    436 
    437 ##### lib/libdecnumber #####
    438 
    439 get_libdecnumber () {
    440 	_subdir="$1"
    441 
    442 	mkdir -p $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH
    443 	write_c $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/config.h \
    444 		<$_TMPDIR/libdecnumber/config.h
    445 }
    446 
    447 ##### gnu/lib/libobjc #####
    448 
    449 get_libobjc () {
    450 	_subdir="$1/arch/$MACHINE_ARCH"
    451 	_options="ALL_OPT_FILES"
    452 	_unwind="UNWIND_H"
    453 
    454 	mkdir -p $_OUTDIR/lib/$_subdir
    455 
    456 	{
    457 		if [ -n "$_options" ]; then
    458 			getvars gcc/Makefile $_options
    459 		fi
    460 		getvars $_PLATFORM/libobjc/Makefile \
    461 			ALL_CFLAGS INCLUDES OBJS OBJC_H \
    462 			| sed "s,$_GNU_DIST,\${GNUHOSTDIST},g"
    463 		if [ -n "$_unwind" ]; then
    464 			getvars gcc/Makefile $_unwind
    465 		fi
    466 	} | write_mk $_OUTDIRBASE/lib/$_subdir/defs.mk
    467 
    468 	write_c $_OUTDIRBASE/lib/$_subdir/config.h \
    469 		<$_TMPDIR/$_PLATFORM/libobjc/config.h
    470 }
    471 
    472 ##### gnu/lib/libstdc++-v3 #####
    473 
    474 get_libstdcxx_v3 () {
    475 	_subdir="$1"
    476 	mkdir -p $_OUTDIR/lib/$_subdir/arch/$MACHINE_ARCH
    477 
    478 	case ${_subdir} in
    479 	*)
    480 		_src_CC_files="atomicity_file CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_CC CLOCALE_CC BASIC_FILE_CC"
    481 		_headers1="host_headers debug_headers tr1_headers c_compatibility_headers_extra tr1_impl_headers parallel_headers decimal_headers"
    482 		_headers2="thread_host_headers host_headers_extra"
    483 		_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"
    484 		_unwind="UNWIND_H"
    485 		;;
    486 	esac
    487 
    488 	# build files
    489 	for h in $_build_headers; do
    490 		write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/$h \
    491 			<$_TMPDIR/$_PLATFORM/libstdc++-v3/include/$_PLATFORM/bits/$h
    492 	done
    493 
    494 	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/config.h \
    495 		<$_TMPDIR/$_PLATFORM/libstdc++-v3/config.h
    496 	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/gstdint.h \
    497 		<$_TMPDIR/$_PLATFORM/libstdc++-v3/include/gstdint.h
    498 	write_c $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/omp.h \
    499 		<$_TMPDIR/$_PLATFORM/libgomp/omp.h
    500 
    501 	{
    502 		# libsupc++
    503 		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
    504 			sources | sed 's/^G_sources=/G_LIBSUPCXX_SOURCES=/'
    505 		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
    506 			c_sources | sed 's/^G_c_sources=/G_LIBSUPCXX_C_SOURCES=/'
    507 
    508 		# src
    509 		getvars $_PLATFORM/libstdc++-v3/src/Makefile \
    510 			sources $_src_CC_files SECTION_FLAGS | sed 's/^G_sources=/G_SRC_SOURCES=/'
    511 
    512 		# include
    513 		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
    514 			c_base_headers std_headers | sed -e 's#/[^ 	][^ 	]*/##g' -e 's/\${GNUHOSTDIST}//g'
    515 		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
    516 			bits_headers backward_headers ext_headers c_base_headers_extra \
    517 			$_headers1 | sed -e 's#/[^ 	][^ 	]*/##g' -e 's/\${GNUHOSTDIST}//g'
    518 		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
    519 			$_headers2 | sed -e 's#\./[^ 	][^ 	]*/##g' -e 's/\${GNUHOSTDIST}//g'
    520 
    521 		if [ -n "$_unwind" ]; then
    522 			getvars gcc/Makefile $_unwind
    523 		fi
    524 	} | write_mk $_OUTDIRBASE/lib/$_subdir/arch/$MACHINE_ARCH/defs.mk
    525 }
    526 
    527 ##### gnu/usr.bin/gcc3 #####
    528 
    529 get_gcc () {
    530 	_subdir="$1"
    531 	mkdir -p $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH
    532 	mkdir -p $_OUTDIR/usr.bin/$_subdir/libcpp/arch/$MACHINE_ARCH
    533 	case ${_subdir} in
    534 	gcc4)
    535 		_buildname="BUILD_"
    536 		_libcppsubdir=""
    537 		_extravars="TM_H ALL_OPT_FILES"
    538 		_hconfig_h=""
    539 		_extravars2="tm_file_list build_xm_include_list"
    540 		_extravars3="tm_p_include_list"
    541 		;;
    542 		
    543 	gcc)
    544 		_buildname="BUILD_"
    545 		_libcppsubdir=""
    546 		_extravars="TM_H ALL_OPT_FILES"
    547 		_hconfig_h=""
    548 		_extravars2="tm_file_list build_xm_include_list"
    549 		_extravars3="tm_p_include_list"
    550 		;;
    551 	esac
    552 
    553 	{
    554 		getvars gcc/Makefile \
    555 			${_buildname}EARLY_SUPPORT ${_buildname}ERRORS ${_buildname}PRINT \
    556 			${_buildname}RTL ${_buildname}SUPPORT ${_buildname}VARRAY | \
    557 		    sed -e 's#build/errors.o#build-errors.o#g' \
    558 			-e 's#build/print-rtl.o#build-print-rtl.o#g' \
    559 			-e 's#build/rtl.o#build-rtl.o#g' \
    560 			-e 's#build/varray.o#build-varray.o#g' \
    561 			-e 's#build/ggc-none.o#build-ggc-none.o#g' \
    562 			-e 's#build/##g'
    563 		getvars gcc/Makefile \
    564 			ALL_CFLAGS ALL_CPPFLAGS C_AND_OBJC_OBJS C_OBJS CCCP_OBJS \
    565 			GCOV_OBJS PROTO_OBJS ${_extravars1} \
    566 			INCLUDES md_file OBJC_OBJS OBJS out_file version \
    567 			BUILD_PREFIX RTL_H TREE_H ${_hconfig_h} BASIC_BLOCK_H GCC_H \
    568 			GTFILES_SRCDIR GTFILES_FILES_FILES GTFILES_FILES_LANGS \
    569 			GTFILES GTFILES_LANG_DIR_NAMES \
    570 			tm_defines host_xm_file host_xm_defines tm_p_file \
    571 			target_cpu_default ${_extravars} ${_extravars2} \
    572 			lang_specs_files ${_extravars3}
    573 		getvars gcc/Makefile \
    574 			LIB2ADDEHDEP | sed 's/unwind.inc//'
    575 		getvars gcc/Makefile \
    576 			CXX_OBJS CXX_C_OBJS | sed 's/cp\///g'
    577 		getvars gcc/Makefile \
    578 			F77_OBJS | sed 's/f\///g'
    579 		case ${_subdir} in
    580 		gcc4 | gcc)
    581 			getvars libcpp/Makefile \
    582 				libcpp_a_OBJS
    583 			;;
    584 		gcc3)
    585 			getvars gcc/Makefile \
    586 				LIBCPP_OBJS LIBCPP_H
    587 			;;
    588 		esac
    589 		getvars gcc/Makefile \
    590 			ENABLE_SHARED
    591 		case ${_subdir} in
    592 		gcc4 | gcc)
    593 			echo G_SHLIB_LINK="$CC -shared"
    594 			echo G_SHLIB_MULTILIB=.
    595 			;;
    596 		esac
    597 	} | write_mk $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/defs.mk
    598 
    599 	case "$_subdir" in
    600 	gcc4)
    601 		write_c $_OUTDIRBASE/usr.bin/$_subdir/libcpp/arch/$MACHINE_ARCH/config.h <$_TMPDIR/libcpp/config.h
    602 		hfiles='auto-host gencheck configargs gthr-default tm bconfig config multilib'
    603 		;;
    604 	gcc)
    605 		mkdir -p $_OUTDIR/usr.bin/libcpp/arch/$MACHINE_ARCH
    606 		write_c $_OUTDIRBASE/usr.bin/libcpp/arch/$MACHINE_ARCH/config.h <$_TMPDIR/libcpp/config.h
    607 		hfiles='auto-host configargs gthr-default tm bconfig config multilib bversion plugin-version'
    608 		;;
    609 	esac
    610 	for f in $hfiles; do
    611 		write_c $_OUTDIRBASE/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f.h <$_TMPDIR/gcc/$f.h
    612 	done
    613 
    614 	# ones we want to keep identical
    615 	for f in all-tree.def gtyp-input.list; do
    616 		cp $_TMPDIR/gcc/$f $_OUTDIR/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f
    617 	done
    618 }
    619 
    620 ##### main #####
    621 
    622 case "$1" in
    623 # .mk and .h files for libgcc bootstrap (from host build)
    624 libgcc)
    625 	get_libgcc gcc3
    626 	get_crtstuff crtstuff3
    627 	exit 0
    628 	;;
    629 
    630 libgcc4)
    631 	get_libgcc gcc4
    632 	get_crtstuff crtstuff4
    633 	exit 0
    634 	;;
    635 
    636 # gcc files
    637 gcc4)
    638 	get_gcc gcc4
    639 	get_libgcc gcc4
    640 	get_libgcov gcc4
    641 	get_crtstuff crtstuff4
    642 	get_gcc_libiberty gcc4
    643 	get_libobjc libobjc4
    644 	get_libstdcxx_v3 libstdc++-v3_4
    645 	exit 0
    646 	;;
    647 
    648 gcc45)
    649 	_OUTDIR="$_TOP/external/gpl3/gcc"
    650 	_OUTDIRBASE="external/gpl3/gcc"
    651 	get_gcc gcc
    652 	get_libgcc gcc
    653 	get_libgcov gcc
    654 	get_crtstuff crtstuff
    655 	get_gcc_libiberty gcc
    656 	get_libobjc libobjc
    657 	get_libstdcxx_v3 libstdc++-v3
    658 	get_libdecnumber libdecnumber
    659 	exit 0
    660 	;;
    661 
    662 
    663 *)	echo invalid arguments; exit 1;;
    664 esac
    665