blob: 4da78c5f094654ec950bddd305c677bd8fd9ee93 [file] [log] [blame]
# 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.
include ../../Make.inc
TARG=runtime
# Set SIZE to 32 or 64.
SIZE_386=32
SIZE_amd64=64
SIZE_arm=32
SIZE=$(SIZE_$(GOARCH))
# TODO(kaib): fix register allocation to honor extern register so we
# can enable optimizations again.
CFLAGS_arm=-N
CFLAGS_windows=-D__WINDOWS__
CFLAGS=-I$(GOOS) -I$(GOARCH) -I$(GOOS)/$(GOARCH) -wF $(CFLAGS_$(GOARCH)) $(CFLAGS_$(GOOS))
GOFILES=\
debug.go\
error.go\
extern.go\
mem.go\
sig.go\
softfloat64.go\
type.go\
version.go\
version_$(GOOS).go\
version_$(GOARCH).go\
runtime_defs.go\
CLEANFILES+=version.go version_*.go
OFILES_windows=\
syscall.$O\
# 386-specific object files
OFILES_386=\
vlop.$O\
vlrt.$O\
# arm-specific object files
OFILES_arm=\
memset.$O\
softfloat.$O\
vlop.$O\
vlrt.$O\
OFILES=\
asm.$O\
cgocall.$O\
chan.$O\
closure.$O\
cpuprof.$O\
float.$O\
complex.$O\
hashmap.$O\
iface.$O\
malloc.$O\
mcache.$O\
mcentral.$O\
mem.$O\
memmove.$O\
mfinal.$O\
mfixalloc.$O\
mgc0.$O\
mheap.$O\
mprof.$O\
msize.$O\
print.$O\
proc.$O\
reflect.$O\
rune.$O\
runtime.$O\
runtime1.$O\
rt0.$O\
sema.$O\
signal.$O\
sigqueue.$O\
slice.$O\
string.$O\
symtab.$O\
sys.$O\
thread.$O\
traceback.$O\
$(OFILES_$(GOARCH))\
$(OFILES_$(GOOS))\
HFILES=\
cgocall.h\
runtime.h\
hashmap.h\
malloc.h\
stack.h\
$(GOARCH)/asm.h\
$(GOOS)/os.h\
$(GOOS)/signals.h\
$(GOOS)/$(GOARCH)/defs.h\
GOFILES+=$(GOFILES_$(GOOS))
# For use by cgo.
INSTALLFILES=$(pkgdir)/runtime.h $(pkgdir)/cgocall.h
# special, out of the way compiler flag that means "add runtime metadata to output"
GC+= -+
include ../../Make.pkg
$(pkgdir)/%.h: %.h
@test -d $(QUOTED_GOROOT)/pkg && mkdir -p $(pkgdir)
cp $< "$@"
clean: clean-local
clean-local:
rm -f goc2c mkversion version.go */asm.h runtime.acid.* runtime_defs.go $$(ls *.goc | sed 's/goc$$/c/')
$(GOARCH)/asm.h: mkasmh.sh runtime.acid.$(GOARCH)
./mkasmh.sh >$@.x
mv -f $@.x $@
goc2c: goc2c.c
quietgcc -o $@ $<
mkversion: mkversion.c
quietgcc -o $@ -I "$(GOROOT)/include" $< "$(GOROOT)/lib/lib9.a"
version.go: mkversion
GOROOT="$(GOROOT_FINAL)" ./mkversion >version.go
version_$(GOARCH).go:
(echo 'package runtime'; echo 'const theGoarch = "$(GOARCH)"') >$@
version_$(GOOS).go:
(echo 'package runtime'; echo 'const theGoos = "$(GOOS)"') >$@
%.c: %.goc goc2c
./goc2c "`pwd`/$<" > $@.tmp
mv -f $@.tmp $@
%.$O: $(GOARCH)/%.c $(HFILES)
$(CC) $(CFLAGS) $<
%.$O: $(GOOS)/%.c $(HFILES)
$(CC) $(CFLAGS) $<
%.$O: $(GOOS)/$(GOARCH)/%.c $(HFILES)
$(CC) $(CFLAGS) $<
%.$O: $(GOARCH)/%.s $(GOARCH)/asm.h
$(AS) $<
%.$O: $(GOOS)/$(GOARCH)/%.s $(GOARCH)/asm.h
$(AS) $<
# for discovering offsets inside structs when debugging
runtime.acid.$(GOARCH): runtime.h proc.c
$(CC) $(CFLAGS) -a proc.c >$@
# 386 traceback is really amd64 traceback
ifeq ($(GOARCH),386)
traceback.$O: amd64/traceback.c
$(CC) $(CFLAGS) $<
endif
runtime_defs.go: proc.c iface.c hashmap.c chan.c
CC="$(CC)" CFLAGS="$(CFLAGS)" ./mkgodefs.sh $^ > $@.x
mv -f $@.x $@