#!/bin/rc
#stolen from pcc
# do not modify /$cputype/bin/c++/?l
# instead, change the master copy in /sys/src/c++/ld/ldprog and mk installall
rfork e
switch($0){
case *vl
O=v
objtype=mips
case *2l
O=2
objtype=68020
case *8l
O=8
objtype=386
case *kl
O=k
objtype=sparc
case *zl
O=z
objtype=hobbit
case *
echo $0: fatal error
exits whoami
}
me='c++/' ^ $O ^ 'l'
CC=$O ^ 'c'
LD=$O ^ 'l'
out=$O.out
objs=()
ldargs=()
libn=()
pflag=()
vflag=()
nflag=()
while(! ~ $#* 0){
switch($1){
case -l*
la=`{echo $1 | sed 's/-l//'}
if(test -r /$objtype/lib/c++/lib ^ $la ^ '.a'){
ldargs=($ldargs /$objtype/lib/c++/lib ^ $la ^ '.a')
libn=($libn $1)
}
if not if(test -r /$objtype/lib/ape/lib ^ $la ^ '.a'){
ldargs=($ldargs /$objtype/lib/ape/lib ^ $la ^ '.a')
libn=($libn $1)
}
if not
echo library $la not found
case -o
out=$2
shift
case -n
nflag=-n
case -p
pflag=-p
case -v
vflag=-v
case -*
echo $me: flag $1 ignored
case *.$O
objs=($objs $1)
case *.a
objs=($objs $1)
case *
echo $me: argument $1 ignored
}
shift
}
if(~ $#objs 0){
echo $me: no files to load!
exit nofiles
}
fn sigint sighup sigterm{
rm -f $out
exit 1
}
if(! ~ $#vflag 0)
echo $LD $pflag $nflag $vflag -o $out $objs $libn
$LD $pflag $nflag $vflag -o $out $objs $ldargs /$objtype/lib/c++/libC.a
if(~ $status ''){
if(! ~ $#vflag 0)
echo c++/patch $out
if(! /bin/c++/patch $out){
rm -f $out
exit 1
}
}
exit ''
|