# 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.

# Set SIZE to 32 or 64.
SIZE_386=32
SIZE_amd64=64
SIZE=$(SIZE_$(GOARCH))

# Setup CFLAGS.  Add -D_64BIT on 64-bit platforms (sorry).
CFLAGS_64=-D_64BIT
CFLAGS=-I$(GOOS) -I$(GOOS)/$(GOARCH) -wF $(CFLAGS_$(SIZE))

# Set O to right letter.
O_386=8
O_amd64=6
O=$(O_$(GOARCH))

# Tools
CC=$(O)c
AS=$(O)a
AR=6ar  # sic

LIB=lib.a

# 386-specific object files
OFILES_386=\
	vlop.$O\
	vlrt.$O\

OFILES=\
	array.$O\
	asm.$O\
	chan.$O\
	closure.$O\
	float.$O\
	float_go.$O\
	hashmap.$O\
	iface.$O\
	malloc.$O\
	malloc_go.$O\
	mcache.$O\
	mcentral.$O\
	mem.$O\
	mfixalloc.$O\
	mgc0.$O\
	mheap.$O\
	mheapmap$(SIZE).$O\
	msize.$O\
	print.$O\
	proc.$O\
	rune.$O\
	runtime.$O\
	rt0.$O\
	sema.$O\
	sema_go.$O\
	signal.$O\
	string.$O\
	symtab.$O\
	sys.$O\
	thread.$O\
	traceback.$O\
	$(OFILES_$(GOARCH))\

HFILES=\
	runtime.h\
	hashmap.h\
	malloc.h\
	$(GOOS)/os.h\
	$(GOOS)/$(GOARCH)/defs.h\

install: $(LIB) runtime.acid
	cp $(LIB) $(GOROOT)/lib/lib_$(GOARCH)_$(GOOS).a
	cp runtime.acid $(GOROOT)/acid/runtime.acid

$(LIB): $(OFILES)
	$(AR) rc $(LIB) $(OFILES)

$(OFILES): $(HFILES)

nuke:
	rm -f *.[68] *.a $(GOROOT)/lib/$(LIB)

clean:
	rm -f *.[68] *.a runtime.acid cgo2c

%.$O:	%.c
	$(CC) $(CFLAGS) $<

%.$O:	$(GOARCH)/%.c
	$(CC) $(CFLAGS) $<

%.$O:	$(GOOS)/%.c
	$(CC) $(CFLAGS) $<

%.$O:	$(GOOS)/$(GOARCH)/%.c
	$(CC) $(CFLAGS) $<

%.$O:	$(GOARCH)/%.s
	$(AS) $<

%.$O:	$(GOOS)/$(GOARCH)/%.s
	$(AS) $<

cgo2c: cgo2c.c
	quietgcc -o $@ $<

%.c:	%.cgo cgo2c
	./cgo2c $< > $@.tmp
	mv -f $@.tmp $@

runtime.acid: runtime.h proc.c
	$(CC) -a proc.c >runtime.acid

