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