mknative-gcc revision 1.6
11.1Smrg#!/bin/sh
21.6Smrg#	$NetBSD: mknative-gcc,v 1.6 2003/08/01 02:44:56 mrg Exp $
31.1Smrg#
41.1Smrg# Shell script for generating all the constants needed for a native
51.1Smrg# platform build of src/gnu/dist/toolchain.
61.1Smrg#
71.1Smrg
81.1Smrgbomb () {
91.1Smrg	echo >&1 "ABORT: $*"
101.1Smrg	exit 1
111.1Smrg}
121.1Smrg
131.1Smrg# usage: getvars MAKEFILE VARNAME [VARNAME...]
141.1Smrggetvars () {
151.1Smrg	_mf="$1"; shift
161.1Smrg	$MAKE -f - _x_ <<EOF || bomb "getvars $_mf $* failed"
171.1Smrg_x_:
181.1Smrg.for var in $*
191.1Smrg	@echo G_\${var}=\${\${var}:Q} | sed 's,$_VPATH,\$\${GNUHOSTDIST},g'
201.1Smrg.endfor
211.1Smrg.include "$_TMPDIR/$_mf"
221.1SmrgEOF
231.1Smrg}
241.1Smrg
251.1Smrg# usage: write_c FILENAME
261.1Smrgwrite_c () {
271.1Smrg	echo '/* This file is automatically generated.  DO NOT EDIT! */' >$_TOP/$1.tmp || \
281.1Smrg		bomb "cannot create $1"
291.1Smrg	grep '$''NetBSD' $0 | sed 's,[#$],,g;s,.*,/* Generated from: & */,' >>$_TOP/$1.tmp
301.1Smrg	echo '' >>$_TOP/$1.tmp
311.1Smrg	writefile $1
321.1Smrg}
331.1Smrg
341.1Smrg# usage: write_mk FILENAME
351.1Smrgwrite_mk () {
361.1Smrg	echo '# This file is automatically generated.  DO NOT EDIT!' >$_TOP/$1.tmp || \
371.1Smrg		bomb "cannot create $1"
381.1Smrg	grep '$''NetBSD' $0 | sed 's,[#$],,g;s,.*,# Generated from: &,' >>$_TOP/$1.tmp
391.1Smrg	echo '#' >>$_TOP/$1.tmp
401.1Smrg	writefile $1
411.1Smrg}
421.1Smrg
431.1Smrgwritefile () {
441.1Smrg	sed -e 's,netbsd\(elf\)*1[0-9\.]*\(_\)*[A-Z]*,netbsd\1,' \
451.1Smrg	    -e 's,^/\* #undef HAVE_MMAP \*/$,#define HAVE_MMAP 1,' >>$_TOP/$1.tmp
461.1Smrg
471.1Smrg	# Compare new file, sans "generated from" comments and RCS Id, to
481.1Smrg	# old file.  If they match, don't change anything.
491.1Smrg	rm -f $_TMPDIR/.1 $_TMPDIR/.2
501.1Smrg	grep -v 'Generated from:' $_TOP/$1 >$_TMPDIR/.1 2>/dev/null
511.1Smrg	grep -v 'Generated from:' $_TOP/$1.tmp >$_TMPDIR/.2
521.1Smrg
531.1Smrg	# will not overwrite a file that has the same content
541.1Smrg	if cmp $_TMPDIR/.1 $_TMPDIR/.2 >/dev/null 2>&1; then
551.1Smrg		rm -f $_TOP/$1.tmp
561.1Smrg	else
571.1Smrg		echo >&2 "$1 changed"
581.1Smrg		mv -f $_TOP/$1.tmp $_TOP/$1
591.1Smrg	fi
601.1Smrg}
611.1Smrg
621.1Smrg##### gnu/lib/libg2c #####
631.1Smrg
641.1Smrgget_libg2c () {
651.1Smrg	mkdir -p $_TOP/gnu/lib/libg2c3/arch/$MACHINE_ARCH
661.1Smrg
671.1Smrg	write_c gnu/lib/libg2c3/arch/$MACHINE_ARCH/config.h <$_TMPDIR/$_PLATFORM/libf2c/libU77/config.h
681.1Smrg	write_c gnu/lib/libg2c3/arch/$MACHINE_ARCH/g2c.h <$_TMPDIR/$_PLATFORM/libf2c/g2c.h
691.1Smrg
701.1Smrg	{
711.1Smrg		getvars $_PLATFORM/libf2c/Makefile \
721.1Smrg			F2CEXT
731.1Smrg		getvars $_PLATFORM/libf2c/libF77/Makefile \
741.1Smrg			ALL_CFLAGS OBJS
751.1Smrg		getvars $_PLATFORM/libf2c/libI77/Makefile \
761.1Smrg			ALL_CFLAGS OBJS | sed 's,=,+=,'
771.1Smrg		getvars $_PLATFORM/libf2c/libU77/Makefile \
781.1Smrg			ALL_CFLAGS OBJS | sed 's,=,+=,'
791.1Smrg	} | write_mk gnu/lib/libg2c3/arch/$MACHINE_ARCH/defs.mk
801.1Smrg}
811.1Smrg
821.1Smrg##### gnu/lib/libgcc #####
831.1Smrg
841.1Smrgget_libgcc () {
851.4Smrg	mkdir -p $_TOP/gnu/lib/libgcc3
861.1Smrg
871.1Smrg	# DPBIT, FPBIT only used on mn10[23]00, we don't need them.
881.4Smrg	# XXX we should probably grab everything Just In Case for
891.4Smrg	# the future.
901.1Smrg	getvars gcc/Makefile \
911.1Smrg		CXX_EXTRA_HEADERS CXX_LIB2FUNCS CXX_LIB2SRCS \
921.1Smrg		INCLUDES LIB2ADD LIB2ADDEH LIB2FUNCS_1 LIB2FUNCS_2 \
931.1Smrg		LIB2_DIVMOD_FUNCS LIB2FUNCS_ST \
941.1Smrg		LIBGCC2_CFLAGS MAYBE_USE_COLLECT2 \
951.1Smrg		tm_defines xm_file xm_defines \
961.1Smrg		| write_mk gnu/lib/libgcc3/$MACHINE_ARCH.mk
971.1Smrg}
981.1Smrg
991.1Smrg##### gnu/usr.bin/gcc3/libiberty #####
1001.1Smrg
1011.1Smrgget_gcc3_libiberty () {
1021.4Smrg	mkdir -p $_TOP/gnu/usr.bin/gcc3/libiberty/arch/$MACHINE_ARCH
1031.1Smrg
1041.1Smrg	getvars libiberty/Makefile \
1051.1Smrg		ALLOCA EXTRA_OFILES LIBOBJS REQUIRED_OFILES \
1061.1Smrg		| write_mk gnu/usr.bin/gcc3/libiberty/defs.mk
1071.1Smrg
1081.5Smrg	write_c gnu/usr.bin/gcc3/libiberty/arch/$MACHINE_ARCH/config.h \
1091.1Smrg		<$_TMPDIR/libiberty/config.h
1101.1Smrg}
1111.1Smrg
1121.1Smrg##### gnu/lib/libobjc #####
1131.1Smrg
1141.1Smrgget_libobjc () {
1151.1Smrg	mkdir -p $_TOP/gnu/lib/libobjc3
1161.1Smrg
1171.1Smrg	getvars $_PLATFORM/libobjc/Makefile \
1181.1Smrg		ALL_CFLAGS INCLUDES OBJS OBJC_H \
1191.3Smrg		| sed "s,$_GNU_DIST,\${GNUHOSTDIST},g" \
1201.1Smrg		| write_mk gnu/lib/libobjc3/defs.mk
1211.1Smrg}
1221.1Smrg
1231.1Smrg##### gnu/lib/libstdc++-v3 #####
1241.1Smrg
1251.1Smrgget_libstdcxx_v3 () {
1261.1Smrg	mkdir -p $_TOP/gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH
1271.1Smrg
1281.1Smrg	# build files
1291.1Smrg	for h in gthr.h gthr-single.h gthr-posix.h gthr-default.h c++config.h; do
1301.1Smrg		write_c gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/$h \
1311.1Smrg			<$_TMPDIR/$_PLATFORM/libstdc++-v3/include/$_PLATFORM/bits/$h
1321.1Smrg	done
1331.1Smrg
1341.6Smrg	write_c gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/config.h \
1351.6Smrg		<$_TMPDIR/$_PLATFORM/libstdc++-v3/config.h
1361.6Smrg
1371.1Smrg	{
1381.1Smrg		# libmath
1391.1Smrg		getvars $_PLATFORM/libstdc++-v3/libmath/Makefile \
1401.1Smrg			libmath_la_SOURCES libmath_la_LIBADD
1411.1Smrg
1421.1Smrg		# libsupc++
1431.1Smrg		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
1441.1Smrg			sources | sed 's/^G_sources=/G_LIBSUPCXX_SOURCES=/'
1451.1Smrg		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
1461.1Smrg			c_sources | sed 's/^G_c_sources=/G_LIBSUPCXX_C_SOURCES=/'
1471.1Smrg
1481.1Smrg		# src
1491.1Smrg		getvars $_PLATFORM/libstdc++-v3/src/Makefile \
1501.1Smrg			sources SECTION_FLAGS | sed 's/^G_sources=/G_SRC_SOURCES=/'
1511.1Smrg
1521.1Smrg		# include
1531.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
1541.1Smrg			c_base_headers_rename std_headers_rename
1551.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
1561.1Smrg			bits_headers backward_headers ext_headers c_base_headers_extra \
1571.1Smrg			target_headers | sed 's#/[^ 	][^ 	]*/##g'
1581.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
1591.1Smrg			thread_target_headers target_headers_extra | sed 's#\./[^ 	][^ 	]*/##g'
1601.1Smrg	} | write_mk gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/defs.mk
1611.1Smrg}
1621.1Smrg
1631.1Smrg##### gnu/usr.bin/gcc3 #####
1641.1Smrg
1651.1Smrgget_gcc () {
1661.1Smrg	mkdir -p $_TOP/gnu/usr.bin/gcc3/arch/$MACHINE_ARCH
1671.1Smrg
1681.1Smrg	{
1691.1Smrg		getvars gcc/Makefile \
1701.1Smrg			ALL_CFLAGS ALL_CPPFLAGS C_AND_OBJC_OBJS C_OBJS CCCP_OBJS \
1711.1Smrg			GCOV_OBJS PROTO_OBJS HOST_PRINT HOST_RTL HOST_RTLANAL \
1721.1Smrg			HOST_SUPPORT HOST_EARLY_SUPPORT HOST_ERRORS HOST_VARRAY \
1731.1Smrg			INCLUDES md_file OBJC_OBJS OBJS out_file version \
1741.1Smrg			BUILD_PREFIX RTL_H TREE_H HCONFIG_H BASIC_BLOCK_H GCC_H \
1751.1Smrg			GTFILES_SRCDIR GTFILES_FILES_FILES GTFILES_FILES_LANGS \
1761.1Smrg			GTFILES GTFILES_LANG_DIR_NAMES \
1771.1Smrg			tm_defines host_xm_file host_xm_defines tm_p_file \
1781.1Smrg			target_cpu_default \
1791.1Smrg			LIBCPP_OBJS LIBCPP_H \
1801.1Smrg			lang_specs_files
1811.1Smrg		getvars gcc/Makefile \
1821.1Smrg			LIB2ADDEHDEP | sed 's/unwind.inc//'
1831.1Smrg		getvars gcc/Makefile \
1841.1Smrg			CXX_OBJS CXX_C_OBJS | sed 's/cp\///g'
1851.1Smrg		getvars gcc/Makefile \
1861.1Smrg			F77_OBJS | sed 's/f\///g'
1871.1Smrg	} | write_mk gnu/usr.bin/gcc3/arch/$MACHINE_ARCH/defs.mk
1881.1Smrg
1891.6Smrg	for f in auto-build auto-host configargs cs-hconfig gencheck hconfig gthr-default; do
1901.1Smrg		write_c gnu/usr.bin/gcc3/arch/$MACHINE_ARCH/$f.h <$_TMPDIR/gcc/$f.h
1911.1Smrg	done
1921.1Smrg}
1931.1Smrg
1941.1Smrg##### main #####
1951.1Smrg
1961.1Smrg_TMPDIR=$2
1971.1Smrg_TOP=$3
1981.1Smrg_PLATFORM=$4
1991.1Smrg_VPATH=`grep VPATH ${_TMPDIR}/Makefile | sed 's,^.*= ,,'`
2001.2Smrg_GNU_DIST=`cd ${_VPATH}; pwd`
2011.1Smrg
2021.1Smrgcase $1 in
2031.1Smrglibgcc)	# .mk and .h files for libgcc bootstrap (from host build)
2041.1Smrg	get_libgcc
2051.1Smrg	exit 0
2061.1Smrg	;;
2071.1Smrg
2081.1Smrggcc3)
2091.1Smrg	get_gcc
2101.1Smrg	get_libg2c
2111.1Smrg	get_libgcc
2121.1Smrg	get_gcc3_libiberty
2131.1Smrg	get_libobjc
2141.1Smrg	get_libstdcxx_v3
2151.1Smrg	exit 0
2161.1Smrg	;;
2171.1Smrg
2181.1Smrg*)	echo invalid arguments; exit 1;;
2191.1Smrgesac
220