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

# Makefile for commands written in C.

ifeq (windows,$(findstring windows, $(shell uname | tr A-Z a-z | sed 's/mingw/windows/')))
TARG:=$(TARG).exe
endif

$(TARG): $(OFILES) $(LIB)
	$(HOST_LD) -o $(TARG) -L"$(GOROOT)"/lib $(OFILES) $(LIB) -lmach -lbio -l9 -lm $(HOST_LDFLAGS)

$(OFILES): $(HFILES)

CLEANFILES+=y.tab.[ch]

clean:
	rm -f *.$(HOST_O) $(TARG) $(CLEANFILES)

nuke: clean
	rm -f "$(GOBIN)/$(TARG)"

ifneq ($(NOINSTALL),1)
install: $(QUOTED_GOBIN)/$(TARG)
endif

$(QUOTED_GOBIN)/$(TARG): $(TARG)
	cp $(TARG) "$(GOBIN)"/$(TARG)

y.tab.h: $(YFILES)
	bison -y $(HOST_YFLAGS) $(YFILES)

y.tab.c: y.tab.h
	test -f y.tab.c && touch y.tab.c

all: $(TARG)

# Use $(PWD)/$*.c so that gdb shows full path in stack traces.
%.$(HOST_O): %.c
	$(HOST_CC) $(HOST_CFLAGS) -c "$(PWD)/$*.c"

# These are used by enough different Makefiles to be
# worth writing down in one place, even if they don't
# apply to every command that builds with Make.ccmd
../%l/enam.o:
	cd ../$*l; $(MAKE) enam.o

