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