# Makefile for big_example

# include platform specific file to get CC and LD initialized correctly
include $(GOROOT)/src/Make.$(GOARCH)

MODULES=msg server client
BUILD_DIR=build

include $(patsubst %,%/module.mk,$(MODULES))

OBJ_SERVER:=$(patsubst %.go, $(BUILD_DIR)/server/%.$(O), $(filter %.go,$(SRC_SERVER)))
OBJ_CLIENT=$(patsubst %.go, $(BUILD_DIR)/client/%.$(O), $(filter %.go,$(SRC_CLIENT)))
OBJ_MSG=$(patsubst %.go, $(BUILD_DIR)/msg/%.$(O), $(filter %.go,$(SRC_MSG)))

BIN_SERVER=$(BUILD_DIR)/chat_server
BIN_CLIENT=$(BUILD_DIR)/chat_client

all: init
	$(MAKE) $(BIN_SERVER) $(BIN_CLIENT)

init:
	if [ ! -d $(BUILD_DIR) ] ; then mkdir $(BUILD_DIR) ; fi
	for dir in $(MODULES); do (cd $(BUILD_DIR); if [ ! -d $$dir ] ; then mkdir $$dir; fi) ; done

$(BIN_SERVER): init
	$(MAKE) $(OBJ_MSG)
	$(MAKE) $(OBJ_SERVER)
	$(LD) -o $@ $(OBJ_MSG) $(OBJ_SERVER)

$(BIN_CLIENT): init
	$(MAKE) $(OBJ_MSG)
	$(MAKE) $(OBJ_CLIENT)
	$(LD) -o $@ $(OBJ_MSG) $(OBJ_CLIENT)

$(BUILD_DIR)/%.$(O): %.go 
	$(GC) -o $@ $<

.PHONY: init clean

clean:
	@-rm -r $(BUILD_DIR)

