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