1#!/bin/sh 2# $NetBSD: mknative-gcc,v 1.7 2003/08/22 00:24:46 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 write_c gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/config.h \ 135 <$_TMPDIR/$_PLATFORM/libstdc++-v3/config.h 136 137 { 138 # libmath 139 getvars $_PLATFORM/libstdc++-v3/libmath/Makefile \ 140 libmath_la_SOURCES libmath_la_LIBADD 141 142 # libsupc++ 143 getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \ 144 sources | sed 's/^G_sources=/G_LIBSUPCXX_SOURCES=/' 145 getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \ 146 c_sources | sed 's/^G_c_sources=/G_LIBSUPCXX_C_SOURCES=/' 147 148 # src 149 getvars $_PLATFORM/libstdc++-v3/src/Makefile \ 150 sources SECTION_FLAGS | sed 's/^G_sources=/G_SRC_SOURCES=/' 151 152 # include 153 getvars $_PLATFORM/libstdc++-v3/include/Makefile \ 154 c_base_headers_rename std_headers_rename 155 getvars $_PLATFORM/libstdc++-v3/include/Makefile \ 156 bits_headers backward_headers ext_headers c_base_headers_extra \ 157 target_headers | sed 's#/[^ ][^ ]*/##g' 158 getvars $_PLATFORM/libstdc++-v3/include/Makefile \ 159 thread_target_headers target_headers_extra | sed 's#\./[^ ][^ ]*/##g' 160 } | write_mk gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/defs.mk 161} 162 163##### gnu/usr.bin/gcc3 ##### 164 165get_gcc () { 166 mkdir -p $_TOP/gnu/usr.bin/gcc3/arch/$MACHINE_ARCH 167 168 { 169 getvars gcc/Makefile \ 170 ALL_CFLAGS ALL_CPPFLAGS C_AND_OBJC_OBJS C_OBJS CCCP_OBJS \ 171 GCOV_OBJS PROTO_OBJS HOST_PRINT HOST_RTL HOST_RTLANAL \ 172 HOST_SUPPORT HOST_EARLY_SUPPORT HOST_ERRORS HOST_VARRAY \ 173 INCLUDES md_file OBJC_OBJS OBJS out_file version \ 174 BUILD_PREFIX RTL_H TREE_H HCONFIG_H BASIC_BLOCK_H GCC_H \ 175 GTFILES_SRCDIR GTFILES_FILES_FILES GTFILES_FILES_LANGS \ 176 GTFILES GTFILES_LANG_DIR_NAMES \ 177 tm_defines host_xm_file host_xm_defines tm_p_file \ 178 target_cpu_default \ 179 LIBCPP_OBJS LIBCPP_H \ 180 lang_specs_files 181 getvars gcc/Makefile \ 182 LIB2ADDEHDEP | sed 's/unwind.inc//' 183 getvars gcc/Makefile \ 184 CXX_OBJS CXX_C_OBJS | sed 's/cp\///g' 185 getvars gcc/Makefile \ 186 F77_OBJS | sed 's/f\///g' 187 } | write_mk gnu/usr.bin/gcc3/arch/$MACHINE_ARCH/defs.mk 188 189 for f in auto-host configargs cs-hconfig gencheck hconfig gthr-default; do 190 write_c gnu/usr.bin/gcc3/arch/$MACHINE_ARCH/$f.h <$_TMPDIR/gcc/$f.h 191 done 192} 193 194##### main ##### 195 196_TMPDIR=$2 197_TOP=$3 198_PLATFORM=$4 199_VPATH=`grep VPATH ${_TMPDIR}/Makefile | sed 's,^.*= ,,'` 200_GNU_DIST=`cd ${_VPATH}; pwd` 201 202case $1 in 203libgcc) # .mk and .h files for libgcc bootstrap (from host build) 204 get_libgcc 205 exit 0 206 ;; 207 208gcc3) 209 get_gcc 210 get_libg2c 211 get_libgcc 212 get_gcc3_libiberty 213 get_libobjc 214 get_libstdcxx_v3 215 exit 0 216 ;; 217 218*) echo invalid arguments; exit 1;; 219esac 220