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