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