mknative-gcc revision 1.1
11.1Smrg#!/bin/sh
21.1Smrg#	$NetBSD: mknative-gcc,v 1.1 2003/07/25 16:26:53 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.1Smrg	mkdir -p $_TOP/gnu/usr.bin/gcc3/arch/$MACHINE_ARCH $_TOP/gnu/lib/libgcc3
861.1Smrg
871.1Smrg	# DPBIT, FPBIT only used on mn10[23]00, we don't need them.
881.1Smrg	getvars gcc/Makefile \
891.1Smrg		CXX_EXTRA_HEADERS CXX_LIB2FUNCS CXX_LIB2SRCS \
901.1Smrg		INCLUDES LIB2ADD LIB2ADDEH LIB2FUNCS_1 LIB2FUNCS_2 \
911.1Smrg		LIB2_DIVMOD_FUNCS LIB2FUNCS_ST \
921.1Smrg		LIBGCC2_CFLAGS MAYBE_USE_COLLECT2 \
931.1Smrg		tm_defines xm_file xm_defines \
941.1Smrg		| write_mk gnu/lib/libgcc3/$MACHINE_ARCH.mk
951.1Smrg}
961.1Smrg
971.1Smrg##### gnu/usr.bin/gcc3/libiberty #####
981.1Smrg
991.1Smrgget_gcc3_libiberty () {
1001.1Smrg	mkdir -p $_TOP/gnu/usr.bin/gcc3/libiberty
1011.1Smrg
1021.1Smrg	getvars libiberty/Makefile \
1031.1Smrg		ALLOCA EXTRA_OFILES LIBOBJS REQUIRED_OFILES \
1041.1Smrg		| write_mk gnu/usr.bin/gcc3/libiberty/defs.mk
1051.1Smrg
1061.1Smrg	write_c gnu/usr.bin/gcc3/libiberty/config.h \
1071.1Smrg		<$_TMPDIR/libiberty/config.h
1081.1Smrg}
1091.1Smrg
1101.1Smrg##### gnu/lib/libobjc #####
1111.1Smrg
1121.1Smrgget_libobjc () {
1131.1Smrg	mkdir -p $_TOP/gnu/lib/libobjc3
1141.1Smrg
1151.1Smrg	getvars $_PLATFORM/libobjc/Makefile \
1161.1Smrg		ALL_CFLAGS INCLUDES OBJS OBJC_H \
1171.1Smrg		| write_mk gnu/lib/libobjc3/defs.mk
1181.1Smrg}
1191.1Smrg
1201.1Smrg##### gnu/lib/libstdc++-v3 #####
1211.1Smrg
1221.1Smrgget_libstdcxx_v3 () {
1231.1Smrg	mkdir -p $_TOP/gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH
1241.1Smrg
1251.1Smrg	# build files
1261.1Smrg	for h in gthr.h gthr-single.h gthr-posix.h gthr-default.h c++config.h; do
1271.1Smrg		write_c gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/$h \
1281.1Smrg			<$_TMPDIR/$_PLATFORM/libstdc++-v3/include/$_PLATFORM/bits/$h
1291.1Smrg	done
1301.1Smrg
1311.1Smrg	{
1321.1Smrg		# libmath
1331.1Smrg		getvars $_PLATFORM/libstdc++-v3/libmath/Makefile \
1341.1Smrg			libmath_la_SOURCES libmath_la_LIBADD
1351.1Smrg
1361.1Smrg		# libsupc++
1371.1Smrg		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
1381.1Smrg			sources | sed 's/^G_sources=/G_LIBSUPCXX_SOURCES=/'
1391.1Smrg		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
1401.1Smrg			c_sources | sed 's/^G_c_sources=/G_LIBSUPCXX_C_SOURCES=/'
1411.1Smrg
1421.1Smrg		# src
1431.1Smrg		getvars $_PLATFORM/libstdc++-v3/src/Makefile \
1441.1Smrg			sources SECTION_FLAGS | sed 's/^G_sources=/G_SRC_SOURCES=/'
1451.1Smrg
1461.1Smrg		# include
1471.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
1481.1Smrg			c_base_headers_rename std_headers_rename
1491.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
1501.1Smrg			bits_headers backward_headers ext_headers c_base_headers_extra \
1511.1Smrg			target_headers | sed 's#/[^ 	][^ 	]*/##g'
1521.1Smrg		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
1531.1Smrg			thread_target_headers target_headers_extra | sed 's#\./[^ 	][^ 	]*/##g'
1541.1Smrg	} | write_mk gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/defs.mk
1551.1Smrg}
1561.1Smrg
1571.1Smrg##### gnu/usr.bin/gcc3 #####
1581.1Smrg
1591.1Smrgget_gcc () {
1601.1Smrg	mkdir -p $_TOP/gnu/usr.bin/gcc3/arch/$MACHINE_ARCH
1611.1Smrg
1621.1Smrg	{
1631.1Smrg		getvars gcc/Makefile \
1641.1Smrg			ALL_CFLAGS ALL_CPPFLAGS C_AND_OBJC_OBJS C_OBJS CCCP_OBJS \
1651.1Smrg			GCOV_OBJS PROTO_OBJS HOST_PRINT HOST_RTL HOST_RTLANAL \
1661.1Smrg			HOST_SUPPORT HOST_EARLY_SUPPORT HOST_ERRORS HOST_VARRAY \
1671.1Smrg			INCLUDES md_file OBJC_OBJS OBJS out_file version \
1681.1Smrg			BUILD_PREFIX RTL_H TREE_H HCONFIG_H BASIC_BLOCK_H GCC_H \
1691.1Smrg			GTFILES_SRCDIR GTFILES_FILES_FILES GTFILES_FILES_LANGS \
1701.1Smrg			GTFILES GTFILES_LANG_DIR_NAMES \
1711.1Smrg			tm_defines host_xm_file host_xm_defines tm_p_file \
1721.1Smrg			target_cpu_default \
1731.1Smrg			LIBCPP_OBJS LIBCPP_H \
1741.1Smrg			lang_specs_files
1751.1Smrg		getvars gcc/Makefile \
1761.1Smrg			LIB2ADDEHDEP | sed 's/unwind.inc//'
1771.1Smrg		getvars gcc/Makefile \
1781.1Smrg			CXX_OBJS CXX_C_OBJS | sed 's/cp\///g'
1791.1Smrg		getvars gcc/Makefile \
1801.1Smrg			F77_OBJS | sed 's/f\///g'
1811.1Smrg	} | write_mk gnu/usr.bin/gcc3/arch/$MACHINE_ARCH/defs.mk
1821.1Smrg
1831.1Smrg	for f in auto-build auto-host configargs cs-hconfig gencheck hconfig; do
1841.1Smrg		write_c gnu/usr.bin/gcc3/arch/$MACHINE_ARCH/$f.h <$_TMPDIR/gcc/$f.h
1851.1Smrg	done
1861.1Smrg}
1871.1Smrg
1881.1Smrg##### main #####
1891.1Smrg
1901.1Smrg_TMPDIR=$2
1911.1Smrg_TOP=$3
1921.1Smrg_PLATFORM=$4
1931.1Smrg_VPATH=`grep VPATH ${_TMPDIR}/Makefile | sed 's,^.*= ,,'`
1941.1Smrg
1951.1Smrgcase $1 in
1961.1Smrglibgcc)	# .mk and .h files for libgcc bootstrap (from host build)
1971.1Smrg	get_libgcc
1981.1Smrg	exit 0
1991.1Smrg	;;
2001.1Smrg
2011.1Smrggcc3)
2021.1Smrg	get_gcc
2031.1Smrg	get_libg2c
2041.1Smrg	get_libgcc
2051.1Smrg	get_gcc3_libiberty
2061.1Smrg	get_libobjc
2071.1Smrg	get_libstdcxx_v3
2081.1Smrg	exit 0
2091.1Smrg	;;
2101.1Smrg
2111.1Smrg*)	echo invalid arguments; exit 1;;
2121.1Smrgesac
213