-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMakefile
More file actions
104 lines (78 loc) · 3.81 KB
/
Makefile
File metadata and controls
104 lines (78 loc) · 3.81 KB
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
CXX ?= g++
CCFLAGS=-g -Wall -Wformat=2 -Wextra -Wwrite-strings \
-Wno-unused-parameter -Wmissing-format-attribute -Wno-non-template-friend \
-Woverloaded-virtual -Wcast-qual -Wcast-align -Wconversion -fomit-frame-pointer \
-std=c++11 -fPIC -O3 $(EXTRA_CXXFLAGS)
# Output directories
OBJECT_DIR = obj
SRC_DIR = src
INCLUDE_DIR = include
LIB_DIR = lib
BIN_DIR = bin
# Depenencies
PERFUTILS=../PerfUtils
INCLUDE=-I$(PERFUTILS)/include
LIBS=$(PERFUTILS)/lib/libPerfUtils.a -lpcrecpp -pthread
# Stuff needed for make check
TOP := $(shell echo $${PWD-`pwd`})
ifndef CHECK_TARGET
CHECK_TARGET=$$(find $(SRC_DIR) '(' -name '*.h' -or -name '*.cc' ')' -not -path '$(TOP)/googletest/*' )
endif
OBJECT_NAMES := CoreArbiterServer.o CoreArbiterClient.o mkdir_p.o Logger.o CodeLocation.o ArbiterClientShim.o
OBJECTS = $(patsubst %,$(OBJECT_DIR)/%,$(OBJECT_NAMES))
HEADERS= $(shell find src -name '*.h')
ifeq ($(MAKECMDGOALS),clean)
DEP=
else
DEP=$(OBJECTS:.o=.d)
endif # ($(MAKECMDGOALS),clean)
SERVER_BIN = $(OBJECT_DIR)/coreArbiterServer
CLIENT_BIN = $(OBJECT_DIR)/client
install: $(SERVER_BIN) $(CLIENT_BIN)
mkdir -p $(BIN_DIR) $(LIB_DIR) $(INCLUDE_DIR)/CoreArbiter
cp $(HEADERS) $(INCLUDE_DIR)/CoreArbiter
cp $(SERVER_BIN) $(CLIENT_BIN) bin
cp $(OBJECT_DIR)/libCoreArbiter.a lib
$(SERVER_BIN): $(OBJECT_DIR)/CoreArbiterServerMain.o $(OBJECT_DIR)/libCoreArbiter.a
$(CXX) $(LDFLAGS) $(CCFLAGS) -o $@ $^ $(LIBS)
$(CLIENT_BIN): $(OBJECT_DIR)/CoreArbiterClientMain.o $(OBJECT_DIR)/libCoreArbiter.a
$(CXX) $(LDFLAGS) $(CCFLAGS) -o $@ $^ $(LIBS)
$(OBJECT_DIR)/libCoreArbiter.a: $(OBJECTS)
ar rcs $@ $^
-include $(DEP)
$(OBJECT_DIR)/%.d: $(SRC_DIR)/%.cc | $(OBJECT_DIR)
$(CXX) $(INCLUDE) $(CCFLAGS) $< -MM -MT $(@:.d=.o) > $@
$(OBJECT_DIR)/%.o: $(SRC_DIR)/%.cc $(HEADERS) | $(OBJECT_DIR)
$(CXX) $(INCLUDE) $(CCFLAGS) -c $< -o $@
$(OBJECT_DIR):
mkdir -p $(OBJECT_DIR)
check:
scripts/cpplint.py --filter=-runtime/threadsafe_fn,-readability/streams,-whitespace/blank_line,-whitespace/braces,-whitespace/comments,-runtime/arrays,-build/include_what_you_use,-whitespace/semicolon $(CHECK_TARGET)
! grep '.\{81\}' $(SRC_DIR)/*.h $(SRC_DIR)/*.cc
################################################################################
# Test Targets
GTEST_DIR=../googletest/googletest
TEST_LIBS=-Lobj/ -lCoreArbiter $(OBJECT_DIR)/libgtest.a
INCLUDE+=-I${GTEST_DIR}/include
test: $(OBJECT_DIR)/CoreArbiterServerTest $(OBJECT_DIR)/CoreArbiterClientTest $(OBJECT_DIR)/CoreArbiterRequestTest $(OBJECT_DIR)/CoreArbiterRampDownTest
$(OBJECT_DIR)/CoreArbiterServerTest
$(OBJECT_DIR)/CoreArbiterClientTest
# The following test is built but must be run manually for now.
# $(OBJECT_DIR)/CoreArbiterRequestTest
$(OBJECT_DIR)/CoreArbiterServerTest: $(OBJECT_DIR)/CoreArbiterServerTest.o $(OBJECT_DIR)/libgtest.a $(OBJECT_DIR)/libCoreArbiter.a
$(CXX) $(LDFLAGS) $(INCLUDE) $(CCFLAGS) $< $(GTEST_DIR)/src/gtest_main.cc $(TEST_LIBS) $(LIBS) -o $@
$(OBJECT_DIR)/CoreArbiterClientTest: $(OBJECT_DIR)/CoreArbiterClientTest.o $(OBJECT_DIR)/libgtest.a $(OBJECT_DIR)/libCoreArbiter.a
$(CXX) $(LDFLAGS) $(INCLUDE) $(CCFLAGS) $< $(GTEST_DIR)/src/gtest_main.cc $(TEST_LIBS) $(LIBS) -o $@
$(OBJECT_DIR)/CoreArbiterRequestTest: $(OBJECT_DIR)/CoreArbiterRequestTest.o $(OBJECT_DIR)/libCoreArbiter.a
$(CXX) $(LDFLAGS) $(INCLUDE) $(CCFLAGS) $^ $(LIBS) -o $@
$(OBJECT_DIR)/CoreArbiterRampDownTest: $(OBJECT_DIR)/CoreArbiterRampDownTest.o $(OBJECT_DIR)/libCoreArbiter.a
$(CXX) $(LDFLAGS) $(INCLUDE) $(CCFLAGS) $^ $(LIBS) -o $@
$(OBJECT_DIR)/libgtest.a:
$(CXX) -I${GTEST_DIR}/include -I${GTEST_DIR} \
-pthread -c ${GTEST_DIR}/src/gtest-all.cc \
-o $(OBJECT_DIR)/gtest-all.o
ar -rv $(OBJECT_DIR)/libgtest.a $(OBJECT_DIR)/gtest-all.o
################################################################################
clean:
rm -rf $(OBJECT_DIR) $(BIN_DIR) $(INCLUDE_DIR) $(LIB_DIR)
.PHONY: install clean