# 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_arm=32
SIZE=$(SIZE_$(GOARCH))

# Setup CFLAGS.  Add -D_64BIT on 64-bit platforms (sorry).
CFLAGS_64=-D_64BIT
# TODO(kaib): fix register allocation to honor extern register so we
# can enable optimizations again.
CFLAGS_arm=-N
CFLAGS=-I$(GOOS) -I$(GOOS)/$(GOARCH) -wF $(CFLAGS_$(SIZE)) $(CFLAGS_$(GOARCH))

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

# Tools
CC=$(O)c
GC=$(O)g
AS=$(O)a
AR=gopack

LIB=runtime.a

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

# arm-specific object files
OFILES_arm=\
	memset.$O\
	vlop.$O\
	vlrt.$O\

OFILES=\
	array.$O\
	asm.$O\
	chan.$O\
	closure.$O\
	extern.$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\
	$(GOARCH)/asm.h\
	$(GOOS)/os.h\
	$(GOOS)/$(GOARCH)/defs.h\

all: $(LIB) runtime.acid

TARG=$(GOROOT)/pkg/$(GOOS)_$(GOARCH)/$(LIB)

install: $(TARG)

$(TARG): $(LIB) runtime.acid
	test -d $(GOROOT)/pkg && mkdir -p $(GOROOT)/pkg/$(GOOS)_$(GOARCH)
	cp $(LIB) $(TARG)
	cp runtime.acid $(GOROOT)/acid/runtime.acid

$(LIB): $(OFILES)
	$(AR) grc $(LIB) $(OFILES)

$(OFILES): $(HFILES)

nuke:
	rm -f *.[568] *.a $(TARG)

clean:
	rm -f *.[568] *.a runtime.acid cgo2c */asm.h

%.$O:	%.go
	$(GC) $<

%.$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

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

$(GOARCH)/asm.h: runtime.acid mkasmh
	./mkasmh >$@.x
	mv -f $@.x $@

