mknative-gcc revision 1.8
1#!/bin/sh 2# $NetBSD: mknative-gcc,v 1.8 2003/11/27 00:56:20 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 LIB2FUNCS_EXTRA \ 94 LIB2_DIVMOD_FUNCS LIB2FUNCS_ST \ 95 LIBGCC2_CFLAGS MAYBE_USE_COLLECT2 \ 96 tm_defines xm_file xm_defines \ 97 | write_mk gnu/lib/libgcc3/$MACHINE_ARCH.mk 98} 99 100##### gnu/usr.bin/gcc3/libiberty ##### 101 102get_gcc3_libiberty () { 103 mkdir -p $_TOP/gnu/usr.bin/gcc3/libiberty/arch/$MACHINE_ARCH 104 105 getvars libiberty/Makefile \ 106 ALLOCA EXTRA_OFILES LIBOBJS REQUIRED_OFILES \ 107 | write_mk gnu/usr.bin/gcc3/libiberty/defs.mk 108 109 write_c gnu/usr.bin/gcc3/libiberty/arch/$MACHINE_ARCH/config.h \ 110 <$_TMPDIR/libiberty/config.h 111} 112 113##### gnu/lib/libobjc ##### 114 115get_libobjc () { 116 mkdir -p $_TOP/gnu/lib/libobjc3 117 118 getvars $_PLATFORM/libobjc/Makefile \ 119 ALL_CFLAGS INCLUDES OBJS OBJC_H \ 120 | sed "s,$_GNU_DIST,\${GNUHOSTDIST},g" \ 121 | write_mk gnu/lib/libobjc3/defs.mk 122} 123 124##### gnu/lib/libstdc++-v3 ##### 125 126get_libstdcxx_v3 () { 127 mkdir -p $_TOP/gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH 128 129 # build files 130 for h in gthr.h gthr-single.h gthr-posix.h gthr-default.h c++config.h; do 131 write_c gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/$h \ 132 <$_TMPDIR/$_PLATFORM/libstdc++-v3/include/$_PLATFORM/bits/$h 133 done 134 135 write_c gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/config.h \ 136 <$_TMPDIR/$_PLATFORM/libstdc++-v3/config.h 137 138 { 139 # libmath 140 getvars $_PLATFORM/libstdc++-v3/libmath/Makefile \ 141 libmath_la_SOURCES libmath_la_LIBADD 142 143 # libsupc++ 144 getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \ 145 sources | sed 's/^G_sources=/G_LIBSUPCXX_SOURCES=/' 146 getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \ 147 c_sources | sed 's/^G_c_sources=/G_LIBSUPCXX_C_SOURCES=/' 148 149 # src 150 getvars $_PLATFORM/libstdc++-v3/src/Makefile \ 151 sources SECTION_FLAGS | sed 's/^G_sources=/G_SRC_SOURCES=/' 152 153 # include 154 getvars $_PLATFORM/libstdc++-v3/include/Makefile \ 155 c_base_headers_rename std_headers_rename 156 getvars $_PLATFORM/libstdc++-v3/include/Makefile \ 157 bits_headers backward_headers ext_headers c_base_headers_extra \ 158 target_headers | sed 's#/[^ ][^ ]*/##g' 159 getvars $_PLATFORM/libstdc++-v3/include/Makefile \ 160 thread_target_headers target_headers_extra | sed 's#\./[^ ][^ ]*/##g' 161 } | write_mk gnu/lib/libstdc++-v3/arch/$MACHINE_ARCH/defs.mk 162} 163 164##### gnu/usr.bin/gcc3 ##### 165 166get_gcc () { 167 mkdir -p $_TOP/gnu/usr.bin/gcc3/arch/$MACHINE_ARCH 168 169 { 170 getvars gcc/Makefile \ 171 ALL_CFLAGS ALL_CPPFLAGS C_AND_OBJC_OBJS C_OBJS CCCP_OBJS \ 172 GCOV_OBJS PROTO_OBJS HOST_PRINT HOST_RTL HOST_RTLANAL \ 173 HOST_SUPPORT HOST_EARLY_SUPPORT HOST_ERRORS HOST_VARRAY \ 174 INCLUDES md_file OBJC_OBJS OBJS out_file version \ 175 BUILD_PREFIX RTL_H TREE_H HCONFIG_H BASIC_BLOCK_H GCC_H \ 176 GTFILES_SRCDIR GTFILES_FILES_FILES GTFILES_FILES_LANGS \ 177 GTFILES GTFILES_LANG_DIR_NAMES \ 178 tm_defines host_xm_file host_xm_defines tm_p_file \ 179 target_cpu_default \ 180 LIBCPP_OBJS LIBCPP_H \ 181 lang_specs_files 182 getvars gcc/Makefile \ 183 LIB2ADDEHDEP | sed 's/unwind.inc//' 184 getvars gcc/Makefile \ 185 CXX_OBJS CXX_C_OBJS | sed 's/cp\///g' 186 getvars gcc/Makefile \ 187 F77_OBJS | sed 's/f\///g' 188 } | write_mk gnu/usr.bin/gcc3/arch/$MACHINE_ARCH/defs.mk 189 190 for f in auto-host configargs cs-hconfig gencheck hconfig gthr-default; do 191 write_c gnu/usr.bin/gcc3/arch/$MACHINE_ARCH/$f.h <$_TMPDIR/gcc/$f.h 192 done 193} 194 195##### main ##### 196 197_TMPDIR=$2 198_TOP=$3 199_PLATFORM=$4 200_VPATH=`grep VPATH ${_TMPDIR}/Makefile | sed 's,^.*= ,,'` 201_GNU_DIST=`cd ${_VPATH}; pwd` 202 203case $1 in 204libgcc) # .mk and .h files for libgcc bootstrap (from host build) 205 get_libgcc 206 exit 0 207 ;; 208 209gcc3) 210 get_gcc 211 get_libg2c 212 get_libgcc 213 get_gcc3_libiberty 214 get_libobjc 215 get_libstdcxx_v3 216 exit 0 217 ;; 218 219*) echo invalid arguments; exit 1;; 220esac 221