forked from mtodat/ms-bfs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
123 lines (99 loc) · 3.84 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
# Compiler flags
ifeq ($(CC),cc)
CC=g++
endif
CC=icpc
BOOSTDIR=./boost
BOOST_INC=$(BOOSTDIR)
BOOST_LIB=$(BOOSTDIR)/stage/lib/libboost_
BOOST_LIBS=$(BOOST_LIB)iostreams.a $(BOOST_LIB)system.a $(BOOST_LIB)thread.a $(BOOST_LIB)timer.a $(BOOST_LIB)chrono.a
LDFLAGS=$(BOOST_LIBS)
UNAME := $(shell uname)
ifeq ($(UNAME), Linux)
LDFLAGS+=-lrt
endif
#Profiling CFLAGS
MATH_FLAGS=-ffast-math -funsafe-math-optimizations -fassociative-math -ffinite-math-only -fno-signed-zeros
ifeq ($(CC),g++)
COMPILER_FLAGS=-fabi-version=6
else
COMPILER_FLAGS=
endif
BASE_FLAGS=-g -std=c++11 -W -Wall -Wextra -pedantic $(MATH_FLAGS) -funroll-all-loops -fno-omit-frame-pointer $(COMPILER_FLAGS) -I$(BOOST_INC)
LOCAL_ARCH=-march=native
RELEASE_ARCH=-march=native
CFLAGS=$(LOCAL_ARCH) -O3 $(BASE_FLAGS) -DNDEBUG
RELEASE_CFLAGS=$(RELEASE_ARCH) -O3 $(BASE_FLAGS) -DNDEBUG -DNDBGPRINT
LD_FLAGS=-Wl,-O1 -pthread
# Source / Executable Variables
CORE_SOURCES=graph.cpp io.cpp log.cpp scheduler.cpp bfs/naive.cpp bfs/sc2012.cpp bfs/parabfs.cpp bfs/noqueue.cpp bfs/batch64.cpp bfs/batch128.cpp bfs/batch256.cpp bfs/sse.cpp worker.cpp query4.cpp
ALL_SOURCES=main.cpp $(CORE_SOURCES)
CORE_OBJECTS=$(addsuffix .o, $(basename $(CORE_SOURCES)))
CORE_DEPS=$(addsuffix .depends, $(basename $(ALL_SOURCES)))
EXECUTABLE_BENCHER=runBencher
EXECUTABLE_BENCH=runBench
EXECUTABLE_BENCH_PROFILE=runBenchProfile
EXECUTABLE_FAST=runBfs
EXECUTABLE_DEBUG=runBfsDebug
ifndef DEBUG
EXEC_EXECUTABLE=$(EXECUTABLE_FAST)
else
EXEC_EXECUTABLE=$(EXECUTABLE_DEBUG)
endif
RELEASE_OBJECTS=$(addsuffix .release.o, $(basename $(CORE_SOURCES)))
# Testing related variables
TEST_DATA_PATH=test_data
10K_DATASET_PATH=$(TEST_DATA_PATH)/data10k/person_knows_person.csv
1K_DATASET_PATH=$(TEST_DATA_PATH)/data1k/person_knows_person.csv
100K_QUERIES=test_queries/test_100k.txt
10K_QUERIES=test_queries/ldbc10k.txt
1K_QUERIES=test_queries/ldbc1k.txt
# Program rules
.PHONY: test_env test_all
all: $(EXEC_EXECUTABLE) $(EXECUTABLE_BENCHER)
@rm -f $(CORE_DEPS)
test_all: test_1k test_10k
test_10k: test_env $(EXEC_EXECUTABLE)
@rm -f $(CORE_DEPS)
$(TEST_PREF) ./$(EXEC_EXECUTABLE) $(10K_QUERIES) 3 1
test_1k: test_env $(EXEC_EXECUTABLE)
@rm -f $(CORE_DEPS)
$(TEST_PREF) ./$(EXEC_EXECUTABLE) $(1K_QUERIES)
clean:
-rm $(EXECUTABLE_FAST) $(EXECUTABLE_DEBUG) $(EXECUTABLE_BENCH_PROFILE) $(EXECUTABLE_BENCH) $(EXECUTABLE_BENCHER)
-rm $(CORE_OBJECTS) $(RELEASE_OBJECTS) *.o
-rm $(CORE_DEPS)
-rm *.gcda util/*.gdca
$(EXECUTABLE_BENCH): $(ALL_SOURCES)
$(CC) $(RELEASE_CFLAGS) $(CORE_SOURCES) -fprofile-generate $< -o $(EXECUTABLE_BENCH_PROFILE) $(LD_FLAGS) $(LIBS)
./$(EXECUTABLE_BENCH_PROFILE) $(10K_QUERIES) 1 1
$(CC) $(RELEASE_CFLAGS) $(CORE_SOURCES) -fprofile-use $< -o $(EXECUTABLE_BENCH) $(LD_FLAGS) $(LIBS)
-rm *.gcda util/*.gcda
-rm $(EXECUTABLE_BENCH_PROFILE)
$(EXECUTABLE_BENCH_THREADS): benchThreads.release.o $(RELEASE_OBJECTS) $(BOOST_LIBS)
@rm -f $(CORE_DEPS)
$(CC) benchThreads.release.o $(RELEASE_OBJECTS) $(LDFLAGS) -o $@ $(LD_FLAGS) $(LIBS)
$(EXECUTABLE_BENCHER): runBencher.release.o $(RELEASE_OBJECTS) $(BOOST_LIBS)
@rm -f $(CORE_DEPS)
$(CC) runBencher.release.o $(RELEASE_OBJECTS) $(LDFLAGS) -o $@ $(LD_FLAGS) $(LIBS)
$(EXECUTABLE_BENCH_VARIANTS): benchVariants.release.o $(RELEASE_OBJECTS) $(BOOST_LIBS)
@rm -f $(CORE_DEPS)
$(CC) benchVariants.release.o $(RELEASE_OBJECTS) $(LDFLAGS) -o $@ $(LD_FLAGS) $(LIBS)
ifndef DEBUG
$(EXEC_EXECUTABLE): main.release.o $(RELEASE_OBJECTS) $(BOOST_LIBS)
@rm -f $(CORE_DEPS)
$(CC) main.release.o $(RELEASE_OBJECTS) $(LDFLAGS) -o $@ $(LD_FLAGS) $(LIBS)
else
$(EXEC_EXECUTABLE): main.o $(CORE_OBJECTS)
@rm -f $(CORE_DEPS)
$(CC) main.o $(CORE_OBJECTS) -o $@ $(LD_FLAGS) $(LIBS)
endif
%.release.o: %.cpp
$(CC) $(RELEASE_CFLAGS) -c $< -o $@
.cpp.o:
$(CC) $(CFLAGS) -DTRACE -c $< -o $@
%.depends: %.cpp
@$(CC) -M $(CFLAGS) -c $< > $@ $(LIBS)
# Test data rules
test_env: $(TEST_DATA_PATH)
-include $(CORE_DEPS)