#===========================================================================#
#                                                                           #
# This file is part of the SYMPHONY MILP Solver Framework.                  #
#                                                                           #
# SYMPHONY was jointly developed by Ted Ralphs (ted@lehigh.edu) and         #
# Laci Ladanyi (ladanyi@us.ibm.com).                                        #
#                                                                           #
# The author of this file is Menal Guzelsoy                                 #
#                                                                           #
# (c) Copyright 2006-2011 Lehigh University. All Rights Reserved.           #
#                                                                           #
# This software is licensed under the Eclipse Public License. Please see    #
# accompanying file for terms.                                              #
#                                                                           #
#===========================================================================#

# $Id: Makefile.in 726 2006-04-17 04:16:00Z andreasw $

MASTERNAME = mckp

EXE = $(MASTERNAME)

SYMAPPLNAME = MCKP

# The following is necessary under cygwin, if native compilers are used
CYGPATH_W = echo

# CHANGEME: Additional sources
ADDSOURCES =

# CHANGEME: Additional libraries
ADDLIBS =

# CHANGEME: Additional flags for compilation (e.g., include flags)
ADDINCFLAGS = 

# Directory with COIN header files
COININCDIR = /usr/include/coin

# Directory with COIN libraries
COINLIBDIR = /usr/lib

# Directory with Application files
SYMAPPLDIR = /usr/src/RPM/BUILD/CoinSYMPHONY-5.3.3/SYMPHONY/src/../Applications/$(SYMAPPLNAME)

# Directory for application obj files
SYMAPPLOBJDIR = src

##########################################################################
#  Usually, you don't have to change anything below.  Note that if you   #
#  change certain compiler options, you might have to recompile the      #
#  COIN package.                                                         #
##########################################################################

SYM_COMPILE_IN_TM = TRUE
SYM_COMPILE_IN_LP = TRUE
SYM_COMPILE_IN_CP = TRUE
SYM_COMPILE_IN_CG = TRUE
USE_CGL_CUTS = TRUE
CLP_LP_SOLVER = TRUE
GLPK_LP_SOLVER = #TRUE
CPLEX_LP_SOLVER = #TRUE
OSL_LP_SOLVER = #TRUE
SOPLEX_LP_SOLVER = #TRUE
XPRESS_LP_SOLVER = #TRUE
SYM_PARALLEL = #TRUE
USE_GMPL = #TRUE
MASTEREXT = _m
LPEXT = _cg
TMEXT = _lp_cg_cp

VPATH = \
	$(SYMAPPLDIR)

USER_MASTER_OBJS = mckp_main.o $(ADDSOURCES)
USER_LP_OBJS =
USER_CG_OBJS =
USER_CP_OBJS =
USER_TM_OBJS =

ALL_OBJS = $(addprefix $(SYMAPPLOBJDIR)/, $(USER_MASTER_OBJS))

PUSER_MASTER_OBJS = $(addsuffix o, $(USER_MASTER_OBJS))
PUSER_LP_OBJS = $(addsuffix o, $(USER_LP_OBJS))
PUSER_CG_OBJS = $(addsuffix o, $(USER_CG_OBJS))
PUSER_CP_OBJS = $(addsuffix o, $(USER_CP_OBJS))
PUSER_TM_OBJS = $(addsuffix o, $(USER_TM_OBJS))

PALL_OBJS = $(PUSER_MASTER_OBJS) $(PUSER_LP_OBJS) $(PUSER_CP_OBJS) \
	$(PUSER_TM_OBJS)

# C++ Compiler command
CXX = mpiCC

# C++ Compiler options
CXXFLAGS = -g -O2 -pipe -Wall   -DSYMPHONY_BUILD

# additional C++ Compiler options for linking
CXXLINKFLAGS = 

#Include files
INCL =  -I`$(CYGPATH_W) $(SYMAPPLDIR)/include` \
        -I`$(CYGPATH_W) /usr/src/RPM/BUILD/CoinSYMPHONY-5.3.3/SYMPHONY/include` \
        -I`$(CYGPATH_W) $(COININCDIR)` \

# Libraries necessary to link
LIBS = -L`$(CYGPATH_W) $(COINLIBDIR)` \
       -L`$(CYGPATH_W) $(COINLIBDIR)/ThirdParty` \
       -lOsi -lCoinUtils -lbz2 -lz -lglpk -llapack -lgoto2 -lm  

ifeq ($(USE_CGL_CUTS),TRUE)
LIBS += -lCgl -lOsiClp -lOsi -lClp -lreadline -ltinfo -ldmumps -lzmumps -lsmumps -lcmumps -lmumps_common -lpord -lCoinUtils -lbz2 -lz -lglpk -llapack -lgoto2 -lm  
ADDINCFLAGS += -DUSE_CGL_CUTS
endif

ifeq ($(CLP_LP_SOLVER),TRUE)
LIBS += -lOsiClp -lOsi -lClp -lreadline -ltinfo -ldmumps -lzmumps -lsmumps -lcmumps -lmumps_common -lpord -lCoinUtils -lbz2 -lz -lglpk -llapack -lgoto2 -lm  
ADDINCFLAGS += -D__OSI_CLP__
endif

ifeq ($(GLPK_LP_SOLVER),TRUE)
LIBS += 
ADDINCFLAGS += -D__OSI_GLPK__
else
ifeq ($(USE_GMPL), TRUE)
ADDINCFLAGS += -DUSE_GLPMPL
endif
endif

ifeq ($(CPLEX_LP_SOLVER),TRUE)
LIBS += 
ADDINCFLAGS += -D__OSI_CPLEX__
endif

ifeq ($(SOPLEX_LP_SOLVER),TRUE)
LIBS += @SOPLEX_LIBS@
ADDINCFLAGS += -D__OSI_SOPLEX__
endif

ifeq ($(XPRESS_LP_SOLVER),TRUE)
LIBS += 
ADDINCFLAGS += -D__OSI_XPRESS__
endif

WHATTOMAKE = $(EXE)

ifeq ($(SYM_PARALLEL),TRUE)
WHATTOMAKE += $(MASTERNAME)$(MASTEREXT)
endif

ifneq ($(SYM_COMPILE_IN_LP),TRUE)
WHATTOMAKE  += $(MASTERNAME)_lp$(LPEXT)
endif

ifneq ($(SYM_COMPILE_IN_CP),TRUE)
WHATTOMAKE += $(MASTERNAME)_cp
endif

ifneq ($(SYM_COMPILE_IN_CG),TRUE)
WHATTOMAKE += $(MASTERNAME)_cg
endif

ifneq ($(SYM_COMPILE_IN_TM),TRUE)
WHATTOMAKE += $(MASTERNAME)_tm$(TMEXT)
endif

ADDFLAGS += $(ADDINCFLAGS) -DHAS_RANDOM -DHAS_SRANDOM -D__NONE__ -D__LINUX -DCOMPILE_IN_CG -DCOMPILE_IN_CP -DCOMPILE_IN_LP -DCOMPILE_IN_TM
ADDPFLAGS += $(ADDINCFLAGS) -DHAS_RANDOM -DHAS_SRANDOM -D__NONE__ -D__LINUX -DCOMPILE_IN_CG -DCOMPILE_IN_CP -DCOMPILE_IN_LP -DCOMPILE_IN_TM

INCL += -I`$(CYGPATH_W) $(PVM_ROOT)/include`
SYMLIBS = -lSym $(LIBS) 
PSYMLIBS = -L$(PVM_ROOT)/lib/LINUX -lgpvm3 -lpvm3 $(LIBS) 

all: $(APPL_PARALLEL) $(WHATTOMAKE)

$(SYMAPPLOBJDIR)/%.o : %.c
	mkdir -p $(SYMAPPLOBJDIR)
	$(CXX) $(CXXFLAGS) $(INCL) $(ADDFLAGS) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$<

$(SYMAPPLOBJDIR)/%.obj : %.c
	mkdir -p $(SYMAPPLOBJDIR)
	$(CXX) $(CXXFLAGS) $(INCL) $(ADDFLAGS) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi`

$(SYMAPPLOBJDIR)/%.oo : %.c
	mkdir -p $(SYMAPPLOBJDIR)
	$(CXX) $(CXXFLAGS) $(INCL) $(ADDPFLAGS) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$<

$(SYMAPPLOBJDIR)/%.objo : %.c
	mkdir -p $(SYMAPPLOBJDIR)
	$(CXX) $(CXXFLAGS) $(INCL) $(ADDFLAGS) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi`


$(EXE): $(ALL_OBJS)
	bla=;\
	for file in $(ALL_OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; \
	done; \
	$(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla $(SYMLIBS)

$(MASTERNAME)$(MASTEREXT) : $(PUSER_MASTER_OBJS)
	bla=;\
	for file in $(PUSER_MASTER_OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; \
	done; \
	$(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla \
	-lSym$(MASTEREXT) $(PSYMLIBS)

$(MASTERNAME)_lp$(LPEXT) : $(PUSER_LP_OBJS)
	bla=;\
	for file in $(PUSER_LP_OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; \
	done; \
	$(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla \
	-lSym_lp$(LPEXT) $(PSYMLIBS)

$(MASTERNAME)_cp : $(PUSER_CP_OBJS)
	bla=;\
	for file in $(PUSER_CP_OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; \
	done; \
	$(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla  \
	-lSym_cp $(PSYMLIBS)

$(MASTERNAME)_cg : $(PUSER_CG_OBJS)
	bla=;\
	for file in $(PUSER_CG_OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; \
	done; \
	$(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla  $(PSYMLIBS) \
	-lSym_cg

$(MASTERNAME)_tm$(TMEXT) : $(PUSER_TM_OBJS)
	bla=;\
	for file in $(PUSER_TM_OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; \
	done; \
	$(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla  \
	-lSym_tm$(TMEXT) $(PSYMLIBS)

.SUFFIXES: .cpp .c .o .obj .oo .objo

clean:
	rm -rf $(WHATTOMAKE) $(ALL_OBJS) $(PALL_OBJS)
