-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
155 lines (129 loc) · 4.31 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# Assuming this Makefile lives in project root directory
PROJECT := $(shell readlink $(dir $(lastword $(MAKEFILE_LIST))) -f)
include $(PROJECT)/config.mk
SRC_DIR := $(PROJECT)/src
BUILD := build
LIB = $(BUILD)/lib
NEED_MKDIR = $(BUILD) $(LIB)
ifeq ($(USE_SHARED_LIB), 0)
all: proto hotbox_lib test
HB_LIB_LINK = $(HB_LIB)
else
all: proto hotbox_sharedlib test
HB_LIB_LINK = $(HB_SHARED_LIB)
endif
path: $(NEED_MKDIR)
$(NEED_MKDIR):
mkdir -p $@
clean:
rm -rf $(BUILD)
rm -rf db_testbed
.PHONY: all path clean
CXX = g++
CXXFLAGS += \
-std=c++11 \
-Wall \
-fPIC \
-Wno-sign-compare \
-fno-builtin-malloc \
-fno-builtin-calloc \
-fno-builtin-realloc \
-fno-builtin-free \
-fno-omit-frame-pointer \
-DDMLC_USE_GLOG \
#-DUSE_ROCKS
DEBUG ?= 0
ifeq ($(DEBUG), 1)
CXXFLAGS += -g -DDEBUG
else
CXXFLAGS += -O2 -DNDEBUG
endif
THIRD_PARTY_SRC = $(THIRD_PARTY)/src
THIRD_PARTY_INCLUDE = $(THIRD_PARTY)/include
THIRD_PARTY_LIB = $(THIRD_PARTY)/lib
THIRD_PARTY_BIN = $(THIRD_PARTY)/bin
INCFLAGS = -I$(SRC_DIR) -I$(THIRD_PARTY_INCLUDE)
INCFLAGS += -Ibuild/ # include generated *pb.h
INCFLAGS += -I$(JAVA_HOME)/include # include java for HDFS/DMLC access
INCFLAGS += $(HDFS_INCFLAGS)
INCFLAGS += $(TF_INCFLAGS)
INCFLAGS += -I$(PYTHON_INCLUDE)
LDFLAGS = -Wl,-rpath,$(THIRD_PARTY_LIB) \
-L$(THIRD_PARTY_LIB) \
-Wl,-rpath,$(BUILD)/lib \
-L$(BUILD)/lib \
-lpthread -lrt -lnsl \
$(TF_LDFLAGS) \
-lzmq \
-lgflags \
-lprotobuf \
-ltcmalloc \
-lprofiler \
-D_GLIBCXX_USE_NANOSLEEP \
-lboost_filesystem \
-lboost_system \
-lyaml-cpp \
-lsnappy \
-ldmlc \
-lpthread \
-lrocksdb \
-lglog \
-lfolly \
-lpthread \
# don't use tcmalloc in building shared library.
#-ltcmalloc \
-lprofiler \
# lglog must come after ldmlc, which depends on glog.
#-lrocksdb
LDFLAGS += $(HDFS_LDFLAGS)
LDFLAGS += -L$(PYTHON_LIB) \
-lboost_python \
-lpython2.7
HB_SRC = $(shell find src -type f -name "*.cpp")
HB_PROTO = $(shell find src -type f -name "*.proto")
HB_HEADERS = $(shell find src -type f -name "*.hpp")
PROTO_HDRS = $(patsubst src/%.proto, $(BUILD)/%.pb.h, $(HB_PROTO))
PROTO_OBJS = $(patsubst src/%.proto, $(BUILD)/%.pb.o, $(HB_PROTO))
HB_OBJS = $(patsubst src/%.cpp, $(BUILD)/%.o, $(HB_SRC))
HB_LIB_OBJS = $(shell find $(BUILD) -type f -name "*.o")
PROTOC = $(THIRD_PARTY_BIN)/protoc
$(PROTO_HDRS): $(BUILD)/%.pb.h: $(SRC_DIR)/%.proto
@mkdir -p $(@D)
LD_LIBRARY_PATH=$(THIRD_PARTY_LIB) \
$(PROTOC) --cpp_out=$(BUILD) --python_out=$(BUILD) \
--proto_path=$(SRC_DIR) $<
$(PROTO_OBJS): $(BUILD)/%.pb.o: $(BUILD)/%.pb.cc
@echo PROTO_OBJS_
mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(INCFLAGS) -c $< -o $@
$(HB_OBJS): $(BUILD)/%.o: $(SRC_DIR)/%.cpp $(PROTO_OBJS)
@echo HB_OBJS_
mkdir -p $(@D)
$(CXX) $(CXXFLAGS) $(INCFLAGS) -c $< -o $@
$(HB_LIB): $(PROTO_OBJS) $(HB_OBJS)
@echo HB_LIB_
mkdir -p $(@D)
LD_LIBRARY_PATH=$(THIRD_PARTY_LIB) \
ar csrv $@ $(filter %.o, $?) $(THIRD_PARTY_LIB)/libdmlc.a
# Make $(BUILD)/ into a python module.
python $(PROJECT)/python/util/modularize.py $(BUILD)
$(HB_SHARED_LIB): $(HB_OBJS) $(PROTO_OBJS)
@echo HB_LIB_SHARED_
mkdir -p $(@D)
LD_LIBRARY_PATH=$(THIRD_PARTY_LIB) \
$(CXX) -shared -o $@ $(HB_LIB_OBJS) #$(LDFLAGS)
# Make $(BUILD)/ into a python module.
python $(PROJECT)/python/util/modularize.py $(BUILD)
proto: $(PROTO_HDRS)
#$PY_CLIENT_SRC=$(shell find src/client/py_client -type f -name "*.cpp")
#py_hb_client: $(HB_LIB)
# $(CXX) $(CXXFLAGS) $(INCFLAGS) $(LDFLAGS) -shared -Wl,--export-dynamic $(PY_CLIENT_SRC) -L./build/lib -lhotbox -lboost_python -L/usr/lib/python2.7/config -lpython2.7 -o py_hb_client.so
spark_exp_server: experiment/spark_exp/server/server.cpp $(HB_LIB)
$(CXX) $(CXXFLAGS) $(INCFLAGS) experiment/spark_exp/server/server.cpp $(HB_LIB) $(LDFLAGS) -lboost_thread -o spark_exp_server
spark_streaming_server: experiment/spark_exp/server/stream_server.cpp $(HB_LIB)
$(CXX) $(CXXFLAGS) $(INCFLAGS) experiment/spark_exp/server/stream_server.cpp $(HB_LIB) $(LDFLAGS) -o spark_streaming_server
hotbox_lib: path proto $(HB_LIB)
hotbox_sharedlib: path proto $(HB_SHARED_LIB)
ifeq ($(BUILD_TEST), 1)
include $(PROJECT)/test/test.mk
endif