Files
ortools-clone/Makefile
2011-02-08 16:21:45 +00:00

427 lines
14 KiB
Makefile

# Please edit the following:
PYTHON_VER=2.6
GFLAGS_DIR=../gflags-1.4
SWIG_BINARY=swig
PROTOBUF_DIR=../protobuf-2.3.0
# ----- You should not need to modify the following, unless the -----
# ----- configuration is not standard ------
# This is needed to find python.h
PYTHON_INC=-I/usr/include/python$(PYTHON_VER) -I/usr/lib/python$(PYTHON_VER)
# This is needed to find gflags/gflags.h
GFLAGS_INC = -I$(GFLAGS_DIR)/include
# This is needed to find protocol buffers.
PROTOBUF_INC = -I$(PROTOBUF_DIR)/include
# Compilation flags
DEBUG=-O3 -DNDEBUG
SYSCFLAGS=-fPIC
CCC=g++
# ----- OS Dependent -----
OS=$(shell uname -s)
ifeq ($(OS),Linux)
LD = gcc -shared
# This is needed to find libgflags.a
GFLAGS_LNK = -Wl,-rpath $(GFLAGS_DIR)/lib -L$(GFLAGS_DIR)/lib -lgflags
# This is needed to find libz.a
ZLIB_LNK = -lz
# This is needed to find libprotobuf.a
PROTOBUF_LNK = -Wl,-rpath $(PROTOBUF_DIR)/lib -L$(PROTOBUF_DIR)/lib -lprotobuf -lpthread
# Detect 32 bit or 64 bit OS and define ARCH flags correctly.
LBITS := $(shell getconf LONG_BIT)
ifeq ($(LBITS),64)
ARCH=-DARCH_K8
else
ARCH=
endif
SYS_LNK=-lrt
endif
ifeq ($(OS),Darwin) # Assume Mac Os X
LD = ld -arch x86_64 -bundle -flat_namespace -undefined suppress
GFLAGS_LNK = -L$(GFLAGS_DIR)/lib -lgflags
ZLIB_LNK = -lz
PROTOBUF_LNK = -L$(PROTOBUF_DIR)/lib -lprotobuf
ARCH=-DARCH_K8
SYS_LNK=
endif
CFLAGS= $(SYSCFLAGS) $(DEBUG) -I. $(GFLAGS_INC) $(ARCH) \
-Wno-deprecated $(PROTOBUF_INC)
LDFLAGS=$(GFLAGS_LNK) $(ZLIB_LNK) $(PROTOBUF_LNK) $(SYS_LNK)
# Real targets
all:
@echo Please define target:
@echo " - constraint programming: cplibs, cpexe, pycp"
@echo " - algorithms: algoritmlibs, pyalgorithms"
@echo " - misc: clean"
CPLIBS = \
librouting.a \
libconstraint_solver.a
GRAPH_LIBS = \
libgraph.a \
libshortestpaths.a
BASE_LIBS = \
libutil.a \
libbase.a
cplibs: $(CPLIBS) $(BASE_LIBS)
CPBINARIES = \
costas_array \
cryptarithm \
cvrptw \
golomb \
magic_square \
network_routing \
nqueens \
tsp
cpexe: $(CPBINARIES)
ALGORITHM_LIBS = \
libalgorithms.a
algorithm_libs: $(ALGORITHM_LIBS)
clean:
rm -f *.a
rm -f objs/*.o
rm -f $(CPBINARIES)
rm -f constraint_solver/*wrap*
rm -f constraint_solver/assignment.pb.*
rm -f *.so
# Constraint Solver Lib.
CONSTRAINT_SOLVER_LIB_OBJS = \
objs/alldiff_cst.o\
objs/assignment.o\
objs/assignment.pb.o\
objs/constraint_solver.o\
objs/constraints.o\
objs/count_cst.o\
objs/default_search.o\
objs/demon_profiler.o\
objs/demon_profiler.pb.o\
objs/element.o\
objs/expr_array.o\
objs/expr_cst.o\
objs/expressions.o\
objs/interval.o\
objs/local_search.o\
objs/pack.o\
objs/range_cst.o\
objs/resource.o\
objs/sched_search.o\
objs/search.o\
objs/table.o\
objs/timetabling.o\
objs/tree_monitor.o\
objs/utilities.o
objs/alldiff_cst.o:constraint_solver/alldiff_cst.cc
$(CCC) $(CFLAGS) -c constraint_solver/alldiff_cst.cc -o objs/alldiff_cst.o
objs/assignment.o:constraint_solver/assignment.cc constraint_solver/assignment.pb.h
$(CCC) $(CFLAGS) -c constraint_solver/assignment.cc -o objs/assignment.o
objs/assignment.pb.o:constraint_solver/assignment.pb.cc
$(CCC) $(CFLAGS) -c constraint_solver/assignment.pb.cc -o objs/assignment.pb.o
constraint_solver/assignment.pb.cc:constraint_solver/assignment.proto
$(PROTOBUF_DIR)/bin/protoc --proto_path=constraint_solver --cpp_out=constraint_solver constraint_solver/assignment.proto
constraint_solver/assignment.pb.h:constraint_solver/assignment.pb.cc
objs/constraint_solver.o:constraint_solver/constraint_solver.cc
$(CCC) $(CFLAGS) -c constraint_solver/constraint_solver.cc -o objs/constraint_solver.o
objs/constraints.o:constraint_solver/constraints.cc
$(CCC) $(CFLAGS) -c constraint_solver/constraints.cc -o objs/constraints.o
objs/count_cst.o:constraint_solver/count_cst.cc
$(CCC) $(CFLAGS) -c constraint_solver/count_cst.cc -o objs/count_cst.o
objs/default_search.o:constraint_solver/default_search.cc
$(CCC) $(CFLAGS) -c constraint_solver/default_search.cc -o objs/default_search.o
objs/demon_profiler.o:constraint_solver/demon_profiler.cc constraint_solver/demon_profiler.pb.h
$(CCC) $(CFLAGS) -c constraint_solver/demon_profiler.cc -o objs/demon_profiler.o
objs/demon_profiler.pb.o:constraint_solver/demon_profiler.pb.cc
$(CCC) $(CFLAGS) -c constraint_solver/demon_profiler.pb.cc -o objs/demon_profiler.pb.o
constraint_solver/demon_profiler.pb.cc:constraint_solver/demon_profiler.proto
$(PROTOBUF_DIR)/bin/protoc --proto_path=constraint_solver --cpp_out=constraint_solver constraint_solver/demon_profiler.proto
constraint_solver/demon_profiler.pb.h:constraint_solver/demon_profiler.pb.cc
objs/element.o:constraint_solver/element.cc
$(CCC) $(CFLAGS) -c constraint_solver/element.cc -o objs/element.o
objs/expr_array.o:constraint_solver/expr_array.cc
$(CCC) $(CFLAGS) -c constraint_solver/expr_array.cc -o objs/expr_array.o
objs/expr_cst.o:constraint_solver/expr_cst.cc
$(CCC) $(CFLAGS) -c constraint_solver/expr_cst.cc -o objs/expr_cst.o
objs/expressions.o:constraint_solver/expressions.cc
$(CCC) $(CFLAGS) -c constraint_solver/expressions.cc -o objs/expressions.o
objs/interval.o:constraint_solver/interval.cc
$(CCC) $(CFLAGS) -c constraint_solver/interval.cc -o objs/interval.o
objs/local_search.o:constraint_solver/local_search.cc
$(CCC) $(CFLAGS) -c constraint_solver/local_search.cc -o objs/local_search.o
objs/pack.o:constraint_solver/pack.cc
$(CCC) $(CFLAGS) -c constraint_solver/pack.cc -o objs/pack.o
objs/range_cst.o:constraint_solver/range_cst.cc
$(CCC) $(CFLAGS) -c constraint_solver/range_cst.cc -o objs/range_cst.o
objs/resource.o:constraint_solver/resource.cc
$(CCC) $(CFLAGS) -c constraint_solver/resource.cc -o objs/resource.o
objs/sched_search.o:constraint_solver/sched_search.cc
$(CCC) $(CFLAGS) -c constraint_solver/sched_search.cc -o objs/sched_search.o
objs/search.o:constraint_solver/search.cc
$(CCC) $(CFLAGS) -c constraint_solver/search.cc -o objs/search.o
objs/table.o:constraint_solver/table.cc
$(CCC) $(CFLAGS) -c constraint_solver/table.cc -o objs/table.o
objs/timetabling.o:constraint_solver/timetabling.cc
$(CCC) $(CFLAGS) -c constraint_solver/timetabling.cc -o objs/timetabling.o
objs/tree_monitor.o:constraint_solver/tree_monitor.cc
$(CCC) $(CFLAGS) -c constraint_solver/tree_monitor.cc -o objs/tree_monitor.o
objs/utilities.o:constraint_solver/utilities.cc
$(CCC) $(CFLAGS) -c constraint_solver/utilities.cc -o objs/utilities.o
libconstraint_solver.a: $(CONSTRAINT_SOLVER_LIB_OBJS)
ar rv libconstraint_solver.a $(CONSTRAINT_SOLVER_LIB_OBJS)
# Util library.
UTIL_LIB_OBJS=\
objs/bitset.o \
objs/cached_log.o \
objs/xml_helper.o
objs/bitset.o:util/bitset.cc
$(CCC) $(CFLAGS) -c util/bitset.cc -o objs/bitset.o
objs/cached_log.o:util/cached_log.cc
$(CCC) $(CFLAGS) -c util/cached_log.cc -o objs/cached_log.o
objs/xml_helper.o:util/xml_helper.cc
$(CCC) $(CFLAGS) -c util/xml_helper.cc -o objs/xml_helper.o
libutil.a: $(UTIL_LIB_OBJS)
ar rv libutil.a $(UTIL_LIB_OBJS)
# Graph library.
GRAPH_LIB_OBJS=\
objs/bron_kerbosch.o
objs/bron_kerbosch.o:graph/bron_kerbosch.cc
$(CCC) $(CFLAGS) -c graph/bron_kerbosch.cc -o objs/bron_kerbosch.o
libgraph.a: $(GRAPH_LIB_OBJS)
ar rv libgraph.a $(GRAPH_LIB_OBJS)
# Shortestpaths library.
SHORTESTPATHS_LIB_OBJS=\
objs/bellman_ford.o \
objs/dijkstra.o \
objs/shortestpaths.o
objs/bellman_ford.o:graph/bellman_ford.cc
$(CCC) $(CFLAGS) -c graph/bellman_ford.cc -o objs/bellman_ford.o
objs/dijkstra.o:graph/dijkstra.cc
$(CCC) $(CFLAGS) -c graph/dijkstra.cc -o objs/dijkstra.o
objs/shortestpaths.o:graph/shortestpaths.cc
$(CCC) $(CFLAGS) -c graph/shortestpaths.cc -o objs/shortestpaths.o
libshortestpaths.a: $(SHORTESTPATHS_LIB_OBJS)
ar rv libshortestpaths.a $(SHORTESTPATHS_LIB_OBJS)
# Routing library.
ROUTING_LIB_OBJS=\
objs/routing.o
objs/routing.o:constraint_solver/routing.cc
$(CCC) $(CFLAGS) -c constraint_solver/routing.cc -o objs/routing.o
librouting.a: $(ROUTING_LIB_OBJS)
ar rv librouting.a $(ROUTING_LIB_OBJS)
# Algorithms library.
ALGORITHMS_LIB_OBJS=\
objs/hungarian.o \
objs/knapsack_solver.o
objs/hungarian.o:algorithms/hungarian.cc
$(CCC) $(CFLAGS) -c algorithms/hungarian.cc -o objs/hungarian.o
objs/knapsack_solver.o:algorithms/knapsack_solver.cc
$(CCC) $(CFLAGS) -c algorithms/knapsack_solver.cc -o objs/knapsack_solver.o
libalgorithms.a: $(ALGORITHMS_LIB_OBJS)
ar rv libalgorithms.a $(ALGORITHMS_LIB_OBJS)
# Base library.
BASE_LIB_OBJS=\
objs/bitmap.o\
objs/callback.o\
objs/logging.o\
objs/random.o\
objs/stringpiece.o\
objs/stringprintf.o\
objs/timer.o\
objs/util.o
objs/bitmap.o:base/bitmap.cc
$(CCC) $(CFLAGS) -c base/bitmap.cc -o objs/bitmap.o
objs/callback.o:base/callback.cc
$(CCC) $(CFLAGS) -c base/callback.cc -o objs/callback.o
objs/logging.o:base/logging.cc
$(CCC) $(CFLAGS) -c base/logging.cc -o objs/logging.o
objs/random.o:base/random.cc
$(CCC) $(CFLAGS) -c base/random.cc -o objs/random.o
objs/stringpiece.o:base/stringpiece.cc
$(CCC) $(CFLAGS) -c base/stringpiece.cc -o objs/stringpiece.o
objs/stringprintf.o:base/stringprintf.cc
$(CCC) $(CFLAGS) -c base/stringprintf.cc -o objs/stringprintf.o
objs/timer.o:base/timer.cc
$(CCC) $(CFLAGS) -c base/timer.cc -o objs/timer.o
objs/util.o:base/util.cc
$(CCC) $(CFLAGS) -c base/util.cc -o objs/util.o
libbase.a: $(BASE_LIB_OBJS)
ar rv libbase.a $(BASE_LIB_OBJS)
# Pure CP Examples
objs/costas_array.o: examples/costas_array.cc
$(CCC) $(CFLAGS) -c examples/costas_array.cc -o objs/costas_array.o
costas_array: $(CPLIBS) $(BASE_LIBS) objs/costas_array.o
$(CCC) $(CFLAGS) $(LDFLAGS) objs/costas_array.o $(CPLIBS) $(BASE_LIBS) -o costas_array
objs/cryptarithm.o:examples/cryptarithm.cc
$(CCC) $(CFLAGS) -c examples/cryptarithm.cc -o objs/cryptarithm.o
cryptarithm: $(CPLIBS) $(BASE_LIBS) objs/cryptarithm.o
$(CCC) $(CFLAGS) $(LDFLAGS) objs/cryptarithm.o $(CPLIBS) $(BASE_LIBS) -o cryptarithm
objs/cvrptw.o: examples/cvrptw.cc
$(CCC) $(CFLAGS) -c examples/cvrptw.cc -o objs/cvrptw.o
cvrptw: $(CPLIBS) $(BASE_LIBS) objs/cvrptw.o
$(CCC) $(CFLAGS) $(LDFLAGS) objs/cvrptw.o $(CPLIBS) $(BASE_LIBS) -o cvrptw
objs/golomb.o:examples/golomb.cc
$(CCC) $(CFLAGS) -c examples/golomb.cc -o objs/golomb.o
golomb: $(CPLIBS) $(BASE_LIBS) objs/golomb.o
$(CCC) $(CFLAGS) $(LDFLAGS) objs/golomb.o $(CPLIBS) $(BASE_LIBS) -o golomb
objs/magic_square.o:examples/magic_square.cc
$(CCC) $(CFLAGS) -c examples/magic_square.cc -o objs/magic_square.o
magic_square: $(CPLIBS) $(BASE_LIBS) objs/magic_square.o
$(CCC) $(CFLAGS) $(LDFLAGS) objs/magic_square.o $(CPLIBS) $(BASE_LIBS) -o magic_square
objs/network_routing.o:examples/network_routing.cc
$(CCC) $(CFLAGS) -c examples/network_routing.cc -o objs/network_routing.o
network_routing: $(CPLIBS) $(BASE_LIBS) $(GRAPH_LIBS) objs/network_routing.o
$(CCC) $(CFLAGS) $(LDFLAGS) objs/network_routing.o $(CPLIBS) $(GRAPH_LIBS) $(BASE_LIBS) -o network_routing
objs/nqueens.o: examples/nqueens.cc
$(CCC) $(CFLAGS) -c examples/nqueens.cc -o objs/nqueens.o
nqueens: $(CPLIBS) $(BASE_LIBS) objs/nqueens.o
$(CCC) $(CFLAGS) $(LDFLAGS) objs/nqueens.o $(CPLIBS) $(BASE_LIBS) -o nqueens
objs/tricks.o: examples/tricks.cc
$(CCC) $(CFLAGS) -c examples/tricks.cc -o objs/tricks.o
objs/global_arith.o: examples/global_arith.cc
$(CCC) $(CFLAGS) -c examples/global_arith.cc -o objs/global_arith.o
tricks: $(CPLIBS) $(BASE_LIBS) objs/tricks.o objs/global_arith.o
$(CCC) $(CFLAGS) $(LDFLAGS) objs/tricks.o objs/global_arith.o $(CPLIBS) $(BASE_LIBS) -o tricks
# Routing Examples
objs/tsp.o: examples/tsp.cc
$(CCC) $(CFLAGS) -c examples/tsp.cc -o objs/tsp.o
tsp: $(CPLIBS) $(BASE_LIBS) objs/tsp.o
$(CCC) $(CFLAGS) $(LDFLAGS) objs/tsp.o $(CPLIBS) $(BASE_LIBS) -o tsp
# SWIG
# pywrapknapsack_solver
pyalgorithms: _pywrapknapsack_solver.so algorithms/pywrapknapsack_solver.py $(ALGORITHM_LIBS) $(BASE_LIBS)
algorithms/pywrapknapsack_solver.py: algorithms/knapsack_solver.swig algorithms/knapsack_solver.h base/base.swig
$(SWIG_BINARY) -c++ -python -o algorithms/knapsack_solver_wrap.cc -module pywrapknapsack_solver algorithms/knapsack_solver.swig
algorithms/knapsack_solver_wrap.cc: algorithms/pywrapknapsack_solver.py
objs/knapsack_solver_wrap.o: algorithms/knapsack_solver_wrap.cc
$(CCC) $(CFLAGS) $(PYTHON_INC) -c algorithms/knapsack_solver_wrap.cc -o objs/knapsack_solver_wrap.o
_pywrapknapsack_solver.so: objs/knapsack_solver_wrap.o $(ALGORITHM_LIBS) $(BASE_LIBS)
$(LD) -o _pywrapknapsack_solver.so objs/knapsack_solver_wrap.o $(ALGORITHM_LIBS) $(BASE_LIBS) $(LDFLAGS)
# pywrapcp
pycp: _pywrapcp.so constraint_solver/pywrapcp.py _pywraprouting.so constraint_solver/pywraprouting.py $(CPLIBS) $(BASE_LIBS)
constraint_solver/pywrapcp.py: constraint_solver/constraint_solver.swig constraint_solver/constraint_solver.h constraint_solver/constraint_solveri.h base/base.swig
$(SWIG_BINARY) -c++ -python -o constraint_solver/constraint_solver_wrap.cc -module pywrapcp constraint_solver/constraint_solver.swig
constraint_solver/constraint_solver_wrap.cc: constraint_solver/pywrapcp.py
objs/constraint_solver_wrap.o: constraint_solver/constraint_solver_wrap.cc
$(CCC) $(CFLAGS) $(PYTHON_INC) -c constraint_solver/constraint_solver_wrap.cc -o objs/constraint_solver_wrap.o
_pywrapcp.so: objs/constraint_solver_wrap.o $(CPLIBS) $(BASE_LIBS)
$(LD) -o _pywrapcp.so objs/constraint_solver_wrap.o $(CPLIBS) $(BASE_LIBS) $(LDFLAGS)
# pywraprouting
constraint_solver/pywraprouting.py: constraint_solver/routing.swig constraint_solver/constraint_solver.h constraint_solver/constraint_solveri.h constraint_solver/routing.h base/base.swig
$(SWIG_BINARY) -c++ -python -o constraint_solver/routing_wrap.cc -module pywraprouting constraint_solver/routing.swig
constraint_solver/routing_wrap.cc: constraint_solver/pywraprouting.py
objs/routing_wrap.o: constraint_solver/routing_wrap.cc
$(CCC) $(CFLAGS) $(PYTHON_INC) -c constraint_solver/routing_wrap.cc -o objs/routing_wrap.o
_pywraprouting.so: objs/routing_wrap.o $(CPLIBS) $(BASE_LIBS)
$(LD) -o _pywraprouting.so objs/routing_wrap.o $(CPLIBS) $(BASE_LIBS) $(LDFLAGS)