Home | History | Annotate | Line # | Download | only in gcc
mknative-gcc revision 1.3
      1  1.1  mrg #!/bin/sh
      2  1.3  mrg #	$NetBSD: mknative-gcc,v 1.3 2003/07/28 02:35:43 mrg Exp $
      3  1.1  mrg #
      4  1.1  mrg # Shell script for generating all the constants needed for a native
      5  1.1  mrg # platform build of src/gnu/dist/toolchain.
      6  1.1  mrg #
      7  1.1  mrg 
      8  1.1  mrg bomb () {
      9  1.1  mrg 	echo >&1 "ABORT: $*"
     10  1.1  mrg 	exit 1
     11  1.1  mrg }
     12  1.1  mrg 
     13  1.1  mrg # usage: getvars MAKEFILE VARNAME [VARNAME...]
     14  1.1  mrg getvars () {
     15  1.1  mrg 	_mf="$1"; shift
     16  1.1  mrg 	$MAKE -f - _x_ <<EOF || bomb "getvars $_mf $* failed"
     17  1.1  mrg _x_:
     18  1.1  mrg .for var in $*
     19  1.1  mrg 	@echo G_\${var}=\${\${var}:Q} | sed 's,$_VPATH,\$\${GNUHOSTDIST},g'
     20  1.1  mrg .endfor
     21  1.1  mrg .include "$_TMPDIR/$_mf"
     22  1.1  mrg EOF
     23  1.1  mrg }
     24  1.1  mrg 
     25  1.1  mrg # usage: write_c FILENAME
     26  1.1  mrg write_c () {
     27  1.1  mrg 	echo '/* This file is automatically generated.  DO NOT EDIT! */' >$_TOP/$1.tmp || \
     28  1.1  mrg 		bomb "cannot create $1"
     29  1.1  mrg 	grep '$''NetBSD' $0 | sed 's,[#$],,g;s,.*,/* Generated from: & */,' >>$_TOP/$1.tmp
     30  1.1  mrg 	echo '' >>$_TOP/$1.tmp
     31  1.1  mrg 	writefile $1
     32  1.1  mrg }
     33  1.1  mrg 
     34  1.1  mrg # usage: write_mk FILENAME
     35  1.1  mrg write_mk () {
     36  1.1  mrg 	echo '# This file is automatically generated.  DO NOT EDIT!' >$_TOP/$1.tmp || \
     37  1.1  mrg 		bomb "cannot create $1"
     38  1.1  mrg 	grep '$''NetBSD' $0 | sed 's,[#$],,g;s,.*,# Generated from: &,' >>$_TOP/$1.tmp
     39  1.1  mrg 	echo '#' >>$_TOP/$1.tmp
     40  1.1  mrg 	writefile $1
     41  1.1  mrg }
     42  1.1  mrg 
     43  1.1  mrg writefile () {
     44  1.1  mrg 	sed -e 's,netbsd\(elf\)*1[0-9\.]*\(_\)*[A-Z]*,netbsd\1,' \
     45  1.1  mrg 	    -e 's,^/\* #undef HAVE_MMAP \*/$,#define HAVE_MMAP 1,' >>$_TOP/$1.tmp
     46  1.1  mrg 
     47  1.1  mrg 	# Compare new file, sans "generated from" comments and RCS Id, to
     48  1.1  mrg 	# old file.  If they match, don't change anything.
     49  1.1  mrg 	rm -f $_TMPDIR/.1 $_TMPDIR/.2
     50  1.1  mrg 	grep -v 'Generated from:' $_TOP/$1 >$_TMPDIR/.1 2>/dev/null
     51  1.1  mrg 	grep -v 'Generated from:' $_TOP/$1.tmp >$_TMPDIR/.2
     52  1.1  mrg 
     53  1.1  mrg 	# will not overwrite a file that has the same content
     54  1.1  mrg 	if cmp $_TMPDIR/.1 $_TMPDIR/.2 >/dev/null 2>&1; then
     55  1.1  mrg 		rm -f $_TOP/$1.tmp
     56  1.1  mrg 	else
     57  1.1  mrg 		echo >&2 "$1 changed"
     58  1.1  mrg 		mv -f $_TOP/$1.tmp $_TOP/$1
     59  1.1  mrg 	fi
     60  1.1  mrg }
     61  1.1  mrg 
     62  1.1  mrg ##### gnu/lib/libg2c #####
     63  1.1  mrg 
     64  1.1  mrg get_libg2c () {
     65  1.1  mrg 	mkdir -p $_TOP/gnu/lib/libg2c3/arch/$MACHINE_ARCH
     66  1.1  mrg 
     67  1.1  mrg 	write_c gnu/lib/libg2c3/arch/$MACHINE_ARCH/config.h <$_TMPDIR/$_PLATFORM/libf2c/libU77/config.h
     68  1.1  mrg 	write_c gnu/lib/libg2c3/arch/$MACHINE_ARCH/g2c.h <$_TMPDIR/$_PLATFORM/libf2c/g2c.h
     69  1.1  mrg 
     70  1.1  mrg 	{
     71  1.1  mrg 		getvars $_PLATFORM/libf2c/Makefile \
     72  1.1  mrg 			F2CEXT
     73  1.1  mrg 		getvars $_PLATFORM/libf2c/libF77/Makefile \
     74  1.1  mrg 			ALL_CFLAGS OBJS
     75  1.1  mrg 		getvars $_PLATFORM/libf2c/libI77/Makefile \
     76  1.1  mrg 			ALL_CFLAGS OBJS | sed 's,=,+=,'
     77  1.1  mrg 		getvars $_PLATFORM/libf2c/libU77/Makefile \
     78  1.1  mrg 			ALL_CFLAGS OBJS | sed 's,=,+=,'
     79  1.1  mrg 	} | write_mk gnu/lib/libg2c3/arch/$MACHINE_ARCH/defs.mk
     80  1.1  mrg }
     81  1.1  mrg 
     82  1.1  mrg ##### gnu/lib/libgcc #####
     83  1.1  mrg 
     84  1.1  mrg get_libgcc () {
     85  1.1  mrg 	mkdir -p $_TOP/gnu/usr.bin/gcc3/arch/$MACHINE_ARCH $_TOP/gnu/lib/libgcc3
     86  1.1  mrg 
     87  1.1  mrg 	# DPBIT, FPBIT only used on mn10[23]00, we don't need them.
     88  1.1  mrg 	getvars gcc/Makefile \
     89  1.1  mrg 		CXX_EXTRA_HEADERS CXX_LIB2FUNCS CXX_LIB2SRCS \
     90  1.1  mrg 		INCLUDES LIB2ADD LIB2ADDEH LIB2FUNCS_1 LIB2FUNCS_2 \
     91  1.1  mrg 		LIB2_DIVMOD_FUNCS LIB2FUNCS_ST \
     92  1.1  mrg 		LIBGCC2_CFLAGS MAYBE_USE_COLLECT2 \
     93  1.1  mrg 		tm_defines xm_file xm_defines \
     94  1.1  mrg 		| write_mk gnu/lib/libgcc3/$MACHINE_ARCH.mk
     95  1.1  mrg }
     96  1.1  mrg 
     97  1.1  mrg ##### gnu/usr.bin/gcc3/libiberty #####
     98  1.1  mrg 
     99  1.1  mrg get_gcc3_libiberty () {
    100  1.1  mrg 	mkdir -p $_TOP/gnu/usr.bin/gcc3/libiberty
    101  1.1  mrg 
    102  1.1  mrg 	getvars libiberty/Makefile \
    103  1.1  mrg 		ALLOCA EXTRA_OFILES LIBOBJS REQUIRED_OFILES \
    104  1.1  mrg 		| write_mk gnu/usr.bin/gcc3/libiberty/defs.mk
    105  1.1  mrg 
    106  1.1  mrg 	write_c gnu/usr.bin/gcc3/libiberty/config.h \
    107  1.1  mrg 		<$_TMPDIR/libiberty/config.h
    108  1.1  mrg }
    109  1.1  mrg 
    110  1.1  mrg ##### gnu/lib/libobjc #####
    111  1.1  mrg 
    112  1.1  mrg get_libobjc () {
    113  1.1  mrg 	mkdir -p $_TOP/gnu/lib/libobjc3
    114  1.1  mrg 
    115  1.1  mrg 	getvars $_PLATFORM/libobjc/Makefile \
    116  1.1  mrg 		ALL_CFLAGS INCLUDES OBJS OBJC_H \
    117  1.3  mrg 		| sed "s,$_GNU_DIST,\${GNUHOSTDIST},g" \
    118  1.1  mrg 		| write_mk gnu/lib/libobjc3/defs.mk
    119  1.1  mrg }
    120  1.1  mrg 
    121  1.1  mrg ##### gnu/lib/libstdc++-v3 #####
    122  1.1  mrg 
    123  1.1  mrg get_libstdcxx_v3 () {
    124  1.1  mrg 	mkdir -p $_TOP/gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH
    125  1.1  mrg 
    126  1.1  mrg 	# build files
    127  1.1  mrg 	for h in gthr.h gthr-single.h gthr-posix.h gthr-default.h c++config.h; do
    128  1.1  mrg 		write_c gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/$h \
    129  1.1  mrg 			<$_TMPDIR/$_PLATFORM/libstdc++-v3/include/$_PLATFORM/bits/$h
    130  1.1  mrg 	done
    131  1.1  mrg 
    132  1.1  mrg 	{
    133  1.1  mrg 		# libmath
    134  1.1  mrg 		getvars $_PLATFORM/libstdc++-v3/libmath/Makefile \
    135  1.1  mrg 			libmath_la_SOURCES libmath_la_LIBADD
    136  1.1  mrg 
    137  1.1  mrg 		# libsupc++
    138  1.1  mrg 		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
    139  1.1  mrg 			sources | sed 's/^G_sources=/G_LIBSUPCXX_SOURCES=/'
    140  1.1  mrg 		getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
    141  1.1  mrg 			c_sources | sed 's/^G_c_sources=/G_LIBSUPCXX_C_SOURCES=/'
    142  1.1  mrg 
    143  1.1  mrg 		# src
    144  1.1  mrg 		getvars $_PLATFORM/libstdc++-v3/src/Makefile \
    145  1.1  mrg 			sources SECTION_FLAGS | sed 's/^G_sources=/G_SRC_SOURCES=/'
    146  1.1  mrg 
    147  1.1  mrg 		# include
    148  1.1  mrg 		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
    149  1.1  mrg 			c_base_headers_rename std_headers_rename
    150  1.1  mrg 		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
    151  1.1  mrg 			bits_headers backward_headers ext_headers c_base_headers_extra \
    152  1.1  mrg 			target_headers | sed 's#/[^ 	][^ 	]*/##g'
    153  1.1  mrg 		getvars $_PLATFORM/libstdc++-v3/include/Makefile \
    154  1.1  mrg 			thread_target_headers target_headers_extra | sed 's#\./[^ 	][^ 	]*/##g'
    155  1.1  mrg 	} | write_mk gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/defs.mk
    156  1.1  mrg }
    157  1.1  mrg 
    158  1.1  mrg ##### gnu/usr.bin/gcc3 #####
    159  1.1  mrg 
    160  1.1  mrg get_gcc () {
    161  1.1  mrg 	mkdir -p $_TOP/gnu/usr.bin/gcc3/arch/$MACHINE_ARCH
    162  1.1  mrg 
    163  1.1  mrg 	{
    164  1.1  mrg 		getvars gcc/Makefile \
    165  1.1  mrg 			ALL_CFLAGS ALL_CPPFLAGS C_AND_OBJC_OBJS C_OBJS CCCP_OBJS \
    166  1.1  mrg 			GCOV_OBJS PROTO_OBJS HOST_PRINT HOST_RTL HOST_RTLANAL \
    167  1.1  mrg 			HOST_SUPPORT HOST_EARLY_SUPPORT HOST_ERRORS HOST_VARRAY \
    168  1.1  mrg 			INCLUDES md_file OBJC_OBJS OBJS out_file version \
    169  1.1  mrg 			BUILD_PREFIX RTL_H TREE_H HCONFIG_H BASIC_BLOCK_H GCC_H \
    170  1.1  mrg 			GTFILES_SRCDIR GTFILES_FILES_FILES GTFILES_FILES_LANGS \
    171  1.1  mrg 			GTFILES GTFILES_LANG_DIR_NAMES \
    172  1.1  mrg 			tm_defines host_xm_file host_xm_defines tm_p_file \
    173  1.1  mrg 			target_cpu_default \
    174  1.1  mrg 			LIBCPP_OBJS LIBCPP_H \
    175  1.1  mrg 			lang_specs_files
    176  1.1  mrg 		getvars gcc/Makefile \
    177  1.1  mrg 			LIB2ADDEHDEP | sed 's/unwind.inc//'
    178  1.1  mrg 		getvars gcc/Makefile \
    179  1.1  mrg 			CXX_OBJS CXX_C_OBJS | sed 's/cp\///g'
    180  1.1  mrg 		getvars gcc/Makefile \
    181  1.1  mrg 			F77_OBJS | sed 's/f\///g'
    182  1.1  mrg 	} | write_mk gnu/usr.bin/gcc3/arch/$MACHINE_ARCH/defs.mk
    183  1.1  mrg 
    184  1.1  mrg 	for f in auto-build auto-host configargs cs-hconfig gencheck hconfig; do
    185  1.1  mrg 		write_c gnu/usr.bin/gcc3/arch/$MACHINE_ARCH/$f.h <$_TMPDIR/gcc/$f.h
    186  1.1  mrg 	done
    187  1.1  mrg }
    188  1.1  mrg 
    189  1.1  mrg ##### main #####
    190  1.1  mrg 
    191  1.1  mrg _TMPDIR=$2
    192  1.1  mrg _TOP=$3
    193  1.1  mrg _PLATFORM=$4
    194  1.1  mrg _VPATH=`grep VPATH ${_TMPDIR}/Makefile | sed 's,^.*= ,,'`
    195  1.2  mrg _GNU_DIST=`cd ${_VPATH}; pwd`
    196  1.1  mrg 
    197  1.1  mrg case $1 in
    198  1.1  mrg libgcc)	# .mk and .h files for libgcc bootstrap (from host build)
    199  1.1  mrg 	get_libgcc
    200  1.1  mrg 	exit 0
    201  1.1  mrg 	;;
    202  1.1  mrg 
    203  1.1  mrg gcc3)
    204  1.1  mrg 	get_gcc
    205  1.1  mrg 	get_libg2c
    206  1.1  mrg 	get_libgcc
    207  1.1  mrg 	get_gcc3_libiberty
    208  1.1  mrg 	get_libobjc
    209  1.1  mrg 	get_libstdcxx_v3
    210  1.1  mrg 	exit 0
    211  1.1  mrg 	;;
    212  1.1  mrg 
    213  1.1  mrg *)	echo invalid arguments; exit 1;;
    214  1.1  mrg esac
    215