SOCCER_LIB_TOP = ../..
LIBDIR = $(SOCCER_LIB_TOP)/generic_library
SOCCER_BASIC_LIB_DIR = ../soccer_basic_lib
SSERVER_CONNECTION_LIB_DIR = ../sserver_connection

CC  = $(LIBDIR)/bin/gccw
CXX = $(LIBDIR)/bin/g++w

RM = rm
PRCS = prcs
CHDIR = cd

MAKE_AR = $(LIBDIR)/bin/make_ar

INCLUDES = -I$(LIBDIR)/include \
	   -I$(SOCCER_BASIC_LIB_DIR) \
	   -I$(SSERVER_CONNECTION_LIB_DIR)

BASIC_LIBS = \
	$(LIBDIR)/src/udp_connection/libudp_connection.a \
	$(LIBDIR)/src/lisp_lex/liblisp_lex.a \
	$(LIBDIR)/src/d2_region/libd2_region.a \
	$(LIBDIR)/src/d2_vector/libd2_vector.a \
	$(LIBDIR)/src/time_stamp/libtime_stamp.a \
	$(LIBDIR)/src/option_analyser/liboption_analyser.a \
	$(LIBDIR)/src/debugstream/libdebugstream.a

LIBSSOCCER = \
	$(SSERVER_CONNECTION_LIB_DIR)/libsserver_connection.a \
	$(SOCCER_BASIC_LIB_DIR)/libsoccer_basic.a \
	$(BASIC_LIBS)

#PRECISIONFLAGS = -DPRECISION_LEVEL=2
PRECISIONFLAGS = -DPRECISION_LEVEL=1
#PRECISIONFLAGS = -DPRECISION_LEVEL=0

CFLAGS   = -g $(CCXXOPTFLAGS) $(COPTFLAGS) $(INCLUDES) \
	      $(CCXXADDITIONALFLAGS) $(CADDITIONALFLAGS)

CXXFLAGS = -g $(CCXXOPTFLAGS) $(CXXOPTFLAGS) $(INCLUDES) \
	      $(CCXXADDITIONALFLAGS) $(CXXADDITIONALFLAGS)

LDFLAGS = `$(SSERVER_CONNECTION_LIB_DIR)/link-config` \
	  $(LDADDITIONALFLAGS) -lm

OBJS = field_recog_abstract.o field_recog.o field_recog_interface.o \
       soccer_object_reference.o player_set.o soccer_manager.o \
       sight_info_analyzer.o player_type_manager.o soccer_composite_command.o \
       soccer_option_analyser.o client_debug_view.o

all: libsoccer_interface.a

library: libsoccer_interface.a
library-only: library
	$(RM) -f *.o

libsoccer_interface.a: $(OBJS)
	$(MAKE_AR) libsoccer_interface.a $(OBJS)

field_recog_abstract.o: field_recog_abstract.h field_recog_abstract.cc \
			field_momentary_info.h player_type_manager.h \
			soccer_composite_command.h

field_recog.o: field_recog.h field_recog_abstract.h field_recog.cc \
	       field_momentary_info.h player_type_manager.h \
	       soccer_composite_command.h sight_info_analyzer.h

field_recog_interface.o: field_recog_interface.h field_recog_interface.cc \
			 soccer_object_reference.h player_set.h

player_set.o: player_set.h player_set.cc \
	      soccer_object_reference.h field_recog_interface.h

soccer_object_reference.o: soccer_object_reference.h \
			   soccer_object_reference.cc \
			   field_recog_interface.h

sight_info_analyzer.o: sight_info_analyzer.h sight_info_analyzer.cc \
		       field_momentary_info.h soccer_composite_command.h \
		       field_recog.h field_recog_abstract.h
	$(CXX) -c sight_info_analyzer.cc $(PRECISIONFLAGS) $(CXXFLAGS)

player_type_manager.o: player_type_manager.h player_type_manager.cc

soccer_manager.o: soccer_manager.h soccer_manager.cc \
		  field_recog_abstract.h \
		  field_recog_interface.h \
		  soccer_object_reference.h player_set.h \
		  client_debug_view.h \
		  field_momentary_info.h soccer_composite_command.h

soccer_option_analyser.o: soccer_option_analyser.h soccer_option_analyser.cc

soccer_composite_command.o: soccer_composite_command.h \
			    soccer_composite_command.cc

client_debug_view.o: client_debug_view.h client_debug_view.cc \
		     field_recog_abstract.h field_momentary_info.h \
		     soccer_composite_command.h

$(BASIC_LIBS):
	$(CHDIR) $(LIBDIR)/src && $(MAKE)

$(SSERVER_CONNECTION_LIB_DIR)/libsserver_connection.a:
	$(CHDIR) $(SSERVER_CONNECTION_LIB_DIR) \
			&& $(MAKE) libsserver_connection.a

$(SOCCER_BASIC_LIB_DIR)/libsoccer_basic.a:
	$(CHDIR) $(SOCCER_BASIC_LIB_DIR) && $(MAKE) libsoccer_basic.a

clean:
	$(RM) -f *.o libsoccer_interface.a


#
# for Revision Control
#
diff:
	@$(CHDIR) $(SOCCER_LIB_TOP) && $(PRCS) diff || true

populate:
	@$(CHDIR) $(SOCCER_LIB_TOP) && $(PRCS) populate

checkin:
	@$(CHDIR) $(SOCCER_LIB_TOP) && $(PRCS) checkin && $(RM) -f .*.prcs_aux
