summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2016-02-28 17:47:39 -0800
committerOri Bernstein <ori@eigenstate.org>2016-02-28 17:47:39 -0800
commitbccb73dc9a1d19bf472c9ce776cc6ee76cef05d5 (patch)
tree04139f924dd5e29dc424b78387aa789c2035b871
parent8ecdf73fad606722a6f2c05f53ad619c21bf84de (diff)
downloadmc-bccb73dc9a1d19bf472c9ce776cc6ee76cef05d5.tar.gz
Plan 9 build should now work.
-rw-r--r--6/gen.c1
-rw-r--r--6/mkfile2
-rw-r--r--6/typeinfo.c10
-rwxr-xr-xmk/bootstrap/bootstrap+Plan9-amd64.sh23
-rw-r--r--muse/mkfile2
-rw-r--r--parse/mkfile4
-rw-r--r--util/mkfile20
7 files changed, 44 insertions, 18 deletions
diff --git a/6/gen.c b/6/gen.c
index aac6c0b..a942b9e 100644
--- a/6/gen.c
+++ b/6/gen.c
@@ -139,7 +139,6 @@ char *tydescid(char *buf, size_t bufsz, Type *ty)
p += bprintf(p, end - p, "_tydesc$%s%s%s$%d", ns, sep, ty->name->name.name, ty->tid);
for (i = 0; i < ty->narg; i++)
p += tyidfmt(p, end - p, ty->arg[i]);
- bprintf(p, end - p, "/* %zd */", ty->tid);
} else {
if (file->file.globls->name) {
ns = file->file.globls->name;
diff --git a/6/mkfile b/6/mkfile
index 1806454..34dcd76 100644
--- a/6/mkfile
+++ b/6/mkfile
@@ -18,7 +18,7 @@ OFILES=\
peep.$O\
typeinfo.$O\
-LIB=../parse/libparse.a ../mi/libmi.a
+LIB=../util/libutil.a ../parse/libparse.a ../mi/libmi.a
HFILES=asm.h ../parse/parse.h ../mi/mi.h ../config.h insns.def regs.def
diff --git a/6/typeinfo.c b/6/typeinfo.c
index be34b93..86de4ae 100644
--- a/6/typeinfo.c
+++ b/6/typeinfo.c
@@ -104,7 +104,7 @@ Blob *tydescsub(Type *ty)
char buf[512];
uint8_t tt;
Node *len;
- int isintern;
+ int isextern;
sub = NULL;
nsub = 0;
@@ -181,10 +181,10 @@ Blob *tydescsub(Type *ty)
case Tyname:
i = bprintf(buf, sizeof buf, "%s", Symprefix);
tydescid(buf + i, sizeof buf - i, ty);
- isintern = 0;
- if (types[i]->isreflect && (!types[i]->isimport || types[i]->ishidden))
- isintern = 1;
- lappend(&sub, &nsub, mkblobref(buf, 0, isintern));
+ if (!strcmp("_tydesc$sys$size", buf))
+ printf("vis: %d\n", ty->vis);
+ isextern = ty->isimport || ty->vis != Visintern;
+ lappend(&sub, &nsub, mkblobref(buf, 0, isextern));
break;
}
b = mkblobseq(sub, nsub);
diff --git a/mk/bootstrap/bootstrap+Plan9-amd64.sh b/mk/bootstrap/bootstrap+Plan9-amd64.sh
index 1d412b5..6053604 100755
--- a/mk/bootstrap/bootstrap+Plan9-amd64.sh
+++ b/mk/bootstrap/bootstrap+Plan9-amd64.sh
@@ -19,13 +19,13 @@ echo $pwd/6/6.out -I ../sys -I . cstrconv.myr ; $pwd/6/6.out -I ../sys -I . cst
echo $pwd/6/6.out -I ../sys -I . strfind.myr ; $pwd/6/6.out -I ../sys -I . strfind.myr
echo $pwd/6/6.out -I ../sys -I . syswrap+plan9.myr ; $pwd/6/6.out -I ../sys -I . syswrap+plan9.myr
echo $pwd/6/6.out -I ../sys -I . die.myr ; $pwd/6/6.out -I ../sys -I . die.myr
-echo $pwd/6/6.out -I ../sys -I . striter.myr ; $pwd/6/6.out -I ../sys -I . striter.myr
echo $pwd/6/6.out -I ../sys -I . sleq.myr ; $pwd/6/6.out -I ../sys -I . sleq.myr
echo $pwd/6/6.out -I ../sys -I . hassuffix.myr ; $pwd/6/6.out -I ../sys -I . hassuffix.myr
echo $pwd/6/6.out -I ../sys -I . extremum.myr ; $pwd/6/6.out -I ../sys -I . extremum.myr
echo $pwd/6/6.out -I ../sys -I . units.myr ; $pwd/6/6.out -I ../sys -I . units.myr
echo $pwd/6/6.out -I ../sys -I . memops.myr ; $pwd/6/6.out -I ../sys -I . memops.myr
echo $pwd/6/6.out -I ../sys -I . alloc.myr ; $pwd/6/6.out -I ../sys -I . alloc.myr
+echo $pwd/6/6.out -I ../sys -I . consts.myr ; $pwd/6/6.out -I ../sys -I . consts.myr
echo $pwd/6/6.out -I ../sys -I . chartype.myr ; $pwd/6/6.out -I ../sys -I . chartype.myr
echo $pwd/6/6.out -I ../sys -I . utf.myr ; $pwd/6/6.out -I ../sys -I . utf.myr
echo $pwd/6/6.out -I ../sys -I . cmp.myr ; $pwd/6/6.out -I ../sys -I . cmp.myr
@@ -34,17 +34,19 @@ echo $pwd/6/6.out -I ../sys -I . slcp.myr ; $pwd/6/6.out -I ../sys -I . slcp.my
echo $pwd/6/6.out -I ../sys -I . sldup.myr ; $pwd/6/6.out -I ../sys -I . sldup.myr
echo $pwd/6/6.out -I ../sys -I . slfill.myr ; $pwd/6/6.out -I ../sys -I . slfill.myr
echo $pwd/6/6.out -I ../sys -I . slpush.myr ; $pwd/6/6.out -I ../sys -I . slpush.myr
+echo $pwd/6/6.out -I ../sys -I . striter.myr ; $pwd/6/6.out -I ../sys -I . striter.myr
echo $pwd/6/6.out -I ../sys -I . bigint.myr ; $pwd/6/6.out -I ../sys -I . bigint.myr
echo $pwd/6/6.out -I ../sys -I . fltbits.myr ; $pwd/6/6.out -I ../sys -I . fltbits.myr
echo $pwd/6/6.out -I ../sys -I . strbuf.myr ; $pwd/6/6.out -I ../sys -I . strbuf.myr
echo $pwd/6/6.out -I ../sys -I . fltfmt.myr ; $pwd/6/6.out -I ../sys -I . fltfmt.myr
echo $pwd/6/6.out -I ../sys -I . hashfuncs.myr ; $pwd/6/6.out -I ../sys -I . hashfuncs.myr
echo $pwd/6/6.out -I ../sys -I . htab.myr ; $pwd/6/6.out -I ../sys -I . htab.myr
-echo $pwd/6/6.out -I ../sys -I . introspect.myr ; $pwd/6/6.out -I ../sys -I . introspect.myr
echo $pwd/6/6.out -I ../sys -I . intparse.myr ; $pwd/6/6.out -I ../sys -I . intparse.myr
+echo $pwd/6/6.out -I ../sys -I . introspect.myr ; $pwd/6/6.out -I ../sys -I . introspect.myr
echo $pwd/6/6.out -I ../sys -I . strsplit.myr ; $pwd/6/6.out -I ../sys -I . strsplit.myr
echo $pwd/6/6.out -I ../sys -I . syswrap-ss+plan9.myr ; $pwd/6/6.out -I ../sys -I . syswrap-ss+plan9.myr
echo $pwd/6/6.out -I ../sys -I . varargs.myr ; $pwd/6/6.out -I ../sys -I . varargs.myr
+echo $pwd/6/6.out -I ../sys -I . writeall.myr ; $pwd/6/6.out -I ../sys -I . writeall.myr
echo $pwd/6/6.out -I ../sys -I . fmt.myr ; $pwd/6/6.out -I ../sys -I . fmt.myr
echo $pwd/6/6.out -I ../sys -I . assert.myr ; $pwd/6/6.out -I ../sys -I . assert.myr
echo $pwd/6/6.out -I ../sys -I . now.myr ; $pwd/6/6.out -I ../sys -I . now.myr
@@ -53,24 +55,26 @@ echo $pwd/6/6.out -I ../sys -I . sljoin.myr ; $pwd/6/6.out -I ../sys -I . sljoi
echo $pwd/6/6.out -I ../sys -I . slurp.myr ; $pwd/6/6.out -I ../sys -I . slurp.myr
echo $pwd/6/6.out -I ../sys -I . dirname.myr ; $pwd/6/6.out -I ../sys -I . dirname.myr
echo $pwd/6/6.out -I ../sys -I . optparse.myr ; $pwd/6/6.out -I ../sys -I . optparse.myr
+echo $pwd/6/6.out -I ../sys -I . dir+plan9.myr ; $pwd/6/6.out -I ../sys -I . dir+plan9.myr
echo $pwd/6/6.out -I ../sys -I . ipparse.myr ; $pwd/6/6.out -I ../sys -I . ipparse.myr
+echo $pwd/6/6.out -I ../sys -I . iterutil.myr ; $pwd/6/6.out -I ../sys -I . iterutil.myr
echo $pwd/6/6.out -I ../sys -I . env+plan9.myr ; $pwd/6/6.out -I ../sys -I . env+plan9.myr
echo $pwd/6/6.out -I ../sys -I . execvp.myr ; $pwd/6/6.out -I ../sys -I . execvp.myr
echo $pwd/6/6.out -I ../sys -I . slput.myr ; $pwd/6/6.out -I ../sys -I . slput.myr
echo $pwd/6/6.out -I ../sys -I . spork.myr ; $pwd/6/6.out -I ../sys -I . spork.myr
echo $pwd/6/6.out -I ../sys -I . getint.myr ; $pwd/6/6.out -I ../sys -I . getint.myr
echo $pwd/6/6.out -I ../sys -I . blat.myr ; $pwd/6/6.out -I ../sys -I . blat.myr
-echo $pwd/6/6.out -I ../sys -I . mktemp.myr ; $pwd/6/6.out -I ../sys -I . mktemp.myr
-echo $pwd/6/6.out -I ../sys -I . writeall.myr ; $pwd/6/6.out -I ../sys -I . writeall.myr
+echo $pwd/6/6.out -I ../sys -I . diriter.myr ; $pwd/6/6.out -I ../sys -I . diriter.myr
echo $pwd/6/6.out -I ../sys -I . clear.myr ; $pwd/6/6.out -I ../sys -I . clear.myr
echo $pwd/6/6.out -I ../sys -I . wait+plan9.myr ; $pwd/6/6.out -I ../sys -I . wait+plan9.myr
echo $pwd/6/6.out -I ../sys -I . strjoin.myr ; $pwd/6/6.out -I ../sys -I . strjoin.myr
echo $pwd/6/6.out -I ../sys -I . mk.myr ; $pwd/6/6.out -I ../sys -I . mk.myr
+echo $pwd/6/6.out -I ../sys -I . pathjoin.myr ; $pwd/6/6.out -I ../sys -I . pathjoin.myr
+echo $pwd/6/6.out -I ../sys -I . mktemp.myr ; $pwd/6/6.out -I ../sys -I . mktemp.myr
echo $pwd/6/6.out -I ../sys -I . fndup.myr ; $pwd/6/6.out -I ../sys -I . fndup.myr
echo $pwd/6/6.out -I ../sys -I . putint.myr ; $pwd/6/6.out -I ../sys -I . putint.myr
echo $pwd/6/6.out -I ../sys -I . mkpath.myr ; $pwd/6/6.out -I ../sys -I . mkpath.myr
echo $pwd/6/6.out -I ../sys -I . resolve+plan9.myr ; $pwd/6/6.out -I ../sys -I . resolve+plan9.myr
-echo $pwd/6/6.out -I ../sys -I . pathjoin.myr ; $pwd/6/6.out -I ../sys -I . pathjoin.myr
echo $pwd/6/6.out -I ../sys -I . slpop.myr ; $pwd/6/6.out -I ../sys -I . slpop.myr
echo $pwd/6/6.out -I ../sys -I . bitset.myr ; $pwd/6/6.out -I ../sys -I . bitset.myr
echo $pwd/6/6.out -I ../sys -I . fmtfuncs.myr ; $pwd/6/6.out -I ../sys -I . fmtfuncs.myr
@@ -83,8 +87,8 @@ echo $pwd/6/6.out -I ../sys -I . getcwd.myr ; $pwd/6/6.out -I ../sys -I . getcw
echo $pwd/6/6.out -I ../sys -I . swap.myr ; $pwd/6/6.out -I ../sys -I . swap.myr
echo $pwd/6/6.out -I ../sys -I . dial+plan9.myr ; $pwd/6/6.out -I ../sys -I . dial+plan9.myr
echo 6a -o memops-impl.6 memops-impl+plan9-x64.s ; 6a -o memops-impl.6 memops-impl+plan9-x64.s
-echo $pwd/muse/6.out -o std fmtfuncs.use fmt.use try.use pathjoin.use strjoin.use syswrap-ss.use sljoin.use slpush.use strstrip.use htab.use now.use getcwd.use rand.use env.use slurp.use varargs.use strbuf.use clear.use slput.use strsplit.use introspect.use resolve.use alloc.use optparse.use memops.use fltbits.use sldup.use fltfmt.use extremum.use option.use slcp.use writeall.use putint.use sort.use blat.use mk.use errno.use hassuffix.use execvp.use swap.use ipparse.use types.use slpop.use strfind.use utf.use cstrconv.use search.use die.use units.use wait.use result.use bitset.use intparse.use hasprefix.use mkpath.use getint.use syswrap.use dirname.use sleq.use endian.use spork.use dial.use assert.use cmp.use chartype.use bigint.use hashfuncs.use slfill.use fndup.use ; $pwd/muse/6.out -o std fmtfuncs.use fmt.use try.use pathjoin.use strjoin.use syswrap-ss.use sljoin.use slpush.use strstrip.use htab.use now.use getcwd.use rand.use env.use slurp.use varargs.use strbuf.use clear.use slput.use strsplit.use introspect.use resolve.use alloc.use optparse.use memops.use fltbits.use sldup.use fltfmt.use extremum.use option.use slcp.use writeall.use putint.use sort.use blat.use mk.use errno.use hassuffix.use execvp.use swap.use ipparse.use types.use slpop.use strfind.use utf.use cstrconv.use search.use die.use units.use wait.use result.use bitset.use intparse.use hasprefix.use mkpath.use getint.use syswrap.use dirname.use sleq.use endian.use spork.use dial.use assert.use cmp.use chartype.use bigint.use striter.use hashfuncs.use slfill.use fndup.use mktemp.use
-echo ar vu libstd.a fmtfuncs.6 fmt.6 try.6 pathjoin.6 strjoin.6 syswrap-ss.6 sljoin.6 slpush.6 strstrip.6 htab.6 now.6 getcwd.6 rand.6 env.6 slurp.6 varargs.6 strbuf.6 clear.6 slput.6 strsplit.6 introspect.6 resolve.6 alloc.6 optparse.6 memops.6 fltbits.6 sldup.6 fltfmt.6 extremum.6 option.6 slcp.6 writeall.6 putint.6 sort.6 blat.6 mk.6 errno.6 hassuffix.6 execvp.6 swap.6 ipparse.6 types.6 slpop.6 strfind.6 utf.6 cstrconv.6 search.6 die.6 units.6 wait.6 result.6 bitset.6 intparse.6 hasprefix.6 mkpath.6 getint.6 syswrap.6 dirname.6 sleq.6 endian.6 spork.6 dial.6 assert.6 cmp.6 chartype.6 memops-impl.6 bigint.6 hashfuncs.6 slfill.6 fndup.6 ; ar vu libstd.a fmtfuncs.6 fmt.6 try.6 pathjoin.6 strjoin.6 syswrap-ss.6 sljoin.6 slpush.6 strstrip.6 htab.6 now.6 getcwd.6 rand.6 env.6 slurp.6 varargs.6 strbuf.6 clear.6 slput.6 strsplit.6 introspect.6 resolve.6 alloc.6 optparse.6 memops.6 fltbits.6 sldup.6 fltfmt.6 extremum.6 option.6 slcp.6 writeall.6 putint.6 sort.6 blat.6 mk.6 errno.6 hassuffix.6 execvp.6 swap.6 ipparse.6 types.6 slpop.6 strfind.6 utf.6 cstrconv.6 search.6 die.6 units.6 wait.6 result.6 bitset.6 intparse.6 hasprefix.6 mkpath.6 getint.6 syswrap.6 dirname.6 sleq.6 endian.6 spork.6 dial.6 assert.6 cmp.6 chartype.6 memops-impl.6 bigint.6 hashfuncs.6 slfill.6 fndup.6 mktemp.6 striter.6
+echo $pwd/muse/6.out -o std fmtfuncs.use fmt.use try.use pathjoin.use strjoin.use dir.use syswrap-ss.use sljoin.use slpush.use strstrip.use htab.use now.use getcwd.use rand.use env.use slurp.use varargs.use strbuf.use clear.use slput.use strsplit.use introspect.use resolve.use mktemp.use alloc.use optparse.use memops.use fltbits.use striter.use sldup.use fltfmt.use extremum.use option.use slcp.use writeall.use putint.use consts.use sort.use blat.use diriter.use mk.use errno.use hassuffix.use execvp.use swap.use ipparse.use types.use slpop.use strfind.use utf.use cstrconv.use search.use die.use units.use wait.use result.use bitset.use intparse.use hasprefix.use mkpath.use getint.use syswrap.use dirname.use sleq.use endian.use iterutil.use spork.use dial.use assert.use cmp.use chartype.use bigint.use hashfuncs.use slfill.use fndup.use ; $pwd/muse/6.out -o std fmtfuncs.use fmt.use try.use pathjoin.use strjoin.use dir.use syswrap-ss.use sljoin.use slpush.use strstrip.use htab.use now.use getcwd.use rand.use env.use slurp.use varargs.use strbuf.use clear.use slput.use strsplit.use introspect.use resolve.use mktemp.use alloc.use optparse.use memops.use fltbits.use striter.use sldup.use fltfmt.use extremum.use option.use slcp.use writeall.use putint.use consts.use sort.use blat.use diriter.use mk.use errno.use hassuffix.use execvp.use swap.use ipparse.use types.use slpop.use strfind.use utf.use cstrconv.use search.use die.use units.use wait.use result.use bitset.use intparse.use hasprefix.use mkpath.use getint.use syswrap.use dirname.use sleq.use endian.use iterutil.use spork.use dial.use assert.use cmp.use chartype.use bigint.use hashfuncs.use slfill.use fndup.use
+echo ar vu libstd.a fmtfuncs.6 fmt.6 try.6 pathjoin.6 strjoin.6 dir.6 syswrap-ss.6 sljoin.6 slpush.6 strstrip.6 htab.6 now.6 getcwd.6 rand.6 env.6 slurp.6 varargs.6 strbuf.6 clear.6 slput.6 strsplit.6 introspect.6 resolve.6 mktemp.6 alloc.6 optparse.6 memops.6 fltbits.6 striter.6 sldup.6 fltfmt.6 extremum.6 option.6 slcp.6 writeall.6 putint.6 consts.6 sort.6 blat.6 diriter.6 mk.6 errno.6 hassuffix.6 execvp.6 swap.6 ipparse.6 types.6 slpop.6 strfind.6 utf.6 cstrconv.6 search.6 die.6 units.6 wait.6 result.6 bitset.6 intparse.6 hasprefix.6 mkpath.6 getint.6 syswrap.6 dirname.6 sleq.6 endian.6 iterutil.6 spork.6 dial.6 assert.6 cmp.6 chartype.6 memops-impl.6 bigint.6 hashfuncs.6 slfill.6 fndup.6 ; ar vu libstd.a fmtfuncs.6 fmt.6 try.6 pathjoin.6 strjoin.6 dir.6 syswrap-ss.6 sljoin.6 slpush.6 strstrip.6 htab.6 now.6 getcwd.6 rand.6 env.6 slurp.6 varargs.6 strbuf.6 clear.6 slput.6 strsplit.6 introspect.6 resolve.6 mktemp.6 alloc.6 optparse.6 memops.6 fltbits.6 striter.6 sldup.6 fltfmt.6 extremum.6 option.6 slcp.6 writeall.6 putint.6 consts.6 sort.6 blat.6 diriter.6 mk.6 errno.6 hassuffix.6 execvp.6 swap.6 ipparse.6 types.6 slpop.6 strfind.6 utf.6 cstrconv.6 search.6 die.6 units.6 wait.6 result.6 bitset.6 intparse.6 hasprefix.6 mkpath.6 getint.6 syswrap.6 dirname.6 sleq.6 endian.6 iterutil.6 spork.6 dial.6 assert.6 cmp.6 chartype.6 memops-impl.6 bigint.6 hashfuncs.6 slfill.6 fndup.6
echo cd $pwd/lib/regex; cd $pwd/lib/regex
echo $pwd/6/6.out -I ../std -I ../sys types.myr ; $pwd/6/6.out -I ../std -I ../sys types.myr
echo $pwd/6/6.out -I ../std -I ../sys interp.myr ; $pwd/6/6.out -I ../std -I ../sys interp.myr
@@ -95,9 +99,10 @@ echo ar vu libregex.a interp.6 types.6 compile.6 ranges.6 ; ar vu libregex.a in
echo cd $pwd/lib/bio; cd $pwd/lib/bio
echo $pwd/6/6.out -I ../sys -I ../std bio.myr ; $pwd/6/6.out -I ../sys -I ../std bio.myr
echo $pwd/6/6.out -I ../sys -I ../std puti.myr ; $pwd/6/6.out -I ../sys -I ../std puti.myr
+echo $pwd/6/6.out -I ../sys -I ../std iter.myr ; $pwd/6/6.out -I ../sys -I ../std iter.myr
echo $pwd/6/6.out -I ../sys -I ../std geti.myr ; $pwd/6/6.out -I ../sys -I ../std geti.myr
-echo $pwd/muse/6.out -o bio puti.use bio.use geti.use ; $pwd/muse/6.out -o bio puti.use bio.use geti.use
-echo ar vu libbio.a puti.6 bio.6 geti.6 ; ar vu libbio.a puti.6 bio.6 geti.6
+echo $pwd/muse/6.out -o bio puti.use bio.use geti.use iter.use ; $pwd/muse/6.out -o bio puti.use bio.use geti.use iter.use
+echo ar vu libbio.a puti.6 bio.6 geti.6 iter.6 ; ar vu libbio.a puti.6 bio.6 geti.6 iter.6
echo cd $pwd/mbld; cd $pwd/mbld
echo $pwd/6/6.out -I ../lib/regex -I ../lib/bio -I ../lib/std -I ../lib/sys config+plan9-x64.myr ; $pwd/6/6.out -I ../lib/regex -I ../lib/bio -I ../lib/std -I ../lib/sys config+plan9-x64.myr
echo $pwd/6/6.out -I ../lib/regex -I ../lib/bio -I ../lib/std -I ../lib/sys opts.myr ; $pwd/6/6.out -I ../lib/regex -I ../lib/bio -I ../lib/std -I ../lib/sys opts.myr
diff --git a/muse/mkfile b/muse/mkfile
index 20e8eb5..90cabb5 100644
--- a/muse/mkfile
+++ b/muse/mkfile
@@ -7,7 +7,7 @@ TARG=muse
OFILES=\
muse.$O\
-LIB=../parse/libparse.a
+LIB=../parse/libparse.a ../util/libutil.a
BIN=/$objtype/bin
</sys/src/cmd/mkone
diff --git a/parse/mkfile b/parse/mkfile
index 0dd62fc..88b4265 100644
--- a/parse/mkfile
+++ b/parse/mkfile
@@ -6,7 +6,9 @@ CFLAGS=-c -D_POSIX_SOURCE -D_SUSV2_SOURCE -D_C99_SNPRINTF_EXTENSION -I../util
LIB=libparse.a
OFILES= \
dump.$O \
- fold.$O\
+ err.$O \
+ export.$O \
+ fold.$O \
gram.$O \
infer.$O \
names.$O \
diff --git a/util/mkfile b/util/mkfile
new file mode 100644
index 0000000..d25b61d
--- /dev/null
+++ b/util/mkfile
@@ -0,0 +1,20 @@
+</$objtype/mkfile
+CC=pcc
+LD=pcc
+CFLAGS=-c -D_POSIX_SOURCE -D_SUSV2_SOURCE -D_C99_SNPRINTF_EXTENSION
+
+LIB=libutil.a
+OFILES= \
+ alloc.$O \
+ bitset.$O \
+ htab.$O \
+ pack.$O \
+ util.$O \
+
+</sys/src/cmd/mklib
+
+install:V: $LIB
+ touch $LIB
+
+uninstall:V:
+ echo nothing to uninstall