# Copyright 2009 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

# DO NOT EDIT.  Automatically generated by gobuild.
# gobuild -m asm_${GOOS}_${GOARCH}.s errstr.go exec.go syscall.go syscall_${GOOS}.go syscall_${GOOS}_${GOARCH}.go zerrors_${GOOS}_${GOARCH}.go zsyscall_${GOOS}_${GOARCH}.go zsysnum_${GOOS}_${GOARCH}.go ztypes_${GOOS}_${GOARCH}.go >Makefile

D=

include $(GOROOT)/src/Make.$(GOARCH)
AR=gopack

default: packages

clean:
	rm -rf *.[$(OS)] *.a [$(OS)].out _obj

test: packages
	gotest

coverage: packages
	gotest
	6cov -g `pwd` | grep -v '_test\.go:'

%.$O: %.go
	$(GC) -I_obj $*.go

%.$O: %.c
	$(CC) $*.c

%.$O: %.s
	$(AS) $*.s

O1=\
	asm_$(GOOS)_$(GOARCH).$O\
	syscall.$O\
	zerrors_$(GOOS)_$(GOARCH).$O\
	zsysnum_$(GOOS)_$(GOARCH).$O\
	ztypes_$(GOOS)_$(GOARCH).$O\

O2=\
	errstr.$O\
	zsyscall_$(GOOS)_$(GOARCH).$O\

O3=\
	syscall_$(GOOS)_$(GOARCH).$O\

O4=\
	syscall_$(GOOS).$O\

O5=\
	exec.$O\


phases: a1 a2 a3 a4 a5
_obj$D/syscall.a: phases

a1: $(O1)
	$(AR) grc _obj$D/syscall.a asm_$(GOOS)_$(GOARCH).$O syscall.$O zerrors_$(GOOS)_$(GOARCH).$O zsysnum_$(GOOS)_$(GOARCH).$O ztypes_$(GOOS)_$(GOARCH).$O
	rm -f $(O1)

a2: $(O2)
	$(AR) grc _obj$D/syscall.a errstr.$O zsyscall_$(GOOS)_$(GOARCH).$O
	rm -f $(O2)

a3: $(O3)
	$(AR) grc _obj$D/syscall.a syscall_$(GOOS)_$(GOARCH).$O
	rm -f $(O3)

a4: $(O4)
	$(AR) grc _obj$D/syscall.a syscall_$(GOOS).$O
	rm -f $(O4)

a5: $(O5)
	$(AR) grc _obj$D/syscall.a exec.$O
	rm -f $(O5)


newpkg: clean
	mkdir -p _obj$D
	$(AR) grc _obj$D/syscall.a

$(O1): newpkg
$(O2): a1
$(O3): a2
$(O4): a3
$(O5): a4
$(O6): a5

nuke: clean
	rm -f $(GOROOT)/pkg/$(GOOS)_$(GOARCH)$D/syscall.a

packages: _obj$D/syscall.a

install: packages
	test -d $(GOROOT)/pkg && mkdir -p $(GOROOT)/pkg/$(GOOS)_$(GOARCH)$D
	cp _obj$D/syscall.a $(GOROOT)/pkg/$(GOOS)_$(GOARCH)$D/syscall.a
