-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
163 lines (119 loc) · 3.25 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
156
157
158
159
160
161
162
163
PROGRAM := bin/easypap
# Must be the first rule
.PHONY: default
default: $(PROGRAM)
########## Config Section ##########
ENABLE_SDL = 1
ENABLE_MONITORING = 1
ENABLE_VECTO = 1
ENABLE_TRACE = 1
ENABLE_MPI = 1
####################################
ARCH := $(shell uname -s | tr a-z A-Z)
ifdef ENABLE_SDL
SOURCES := $(wildcard src/*.c)
else
SOURCES := $(filter-out src/gmonitor.c src/graphics.c src/cpustat.c, $(wildcard src/*.c))
endif
KERNELS := $(wildcard kernel/c/*.c)
T_SOURCE := traces/src/trace_common.c
ifdef ENABLE_TRACE
T_SOURCE += traces/src/trace_record.c
endif
L_SOURCE := $(wildcard src/*.l)
L_GEN := $(L_SOURCE:src/%.l=obj/%.c)
OBJECTS := $(SOURCES:src/%.c=obj/%.o)
K_OBJECTS := $(KERNELS:kernel/c/%.c=obj/%.o)
T_OBJECTS := $(T_SOURCE:traces/src/%.c=obj/%.o)
L_OBJECTS := $(L_SOURCE:src/%.l=obj/%.o)
ALL_OBJECTS := $(OBJECTS) $(K_OBJECTS) $(T_OBJECTS) $(L_OBJECTS)
DEPENDS := $(SOURCES:src/%.c=deps/%.d)
K_DEPENDS := $(KERNELS:kernel/c/%.c=deps/%.d)
T_DEPENDS := $(T_SOURCE:traces/src/%.c=deps/%.d)
L_DEPENDS := $(L_GEN:obj/%.c=deps/%.d)
ALL_DEPENDS := $(DEPENDS) $(K_DEPENDS) $(T_DEPENDS) $(L_DEPENDS)
MAKEFILES := Makefile
CC := gcc
#CC := clang
CFLAGS += -O3 -march=native -Wall -Wno-unused-function
CFLAGS += -I./include -I./traces/include
LDLIBS += -lm
ifeq ($(ARCH),DARWIN)
LDLIBS += -framework OpenGL
else
CFLAGS += -pthread -rdynamic
LDFLAGS += -export-dynamic
LDLIBS += -lGL -ldl
endif
# Vectorization
ifdef ENABLE_VECTO
CFLAGS += -DENABLE_VECTO
endif
# Monitoring
ifdef ENABLE_MONITORING
CFLAGS += -DENABLE_MONITORING
endif
# OpenMP
CFLAGS += -fopenmp
LDFLAGS += -fopenmp
# OpenCL
CFLAGS += -DCL_SILENCE_DEPRECATION
ifeq ($(ARCH),DARWIN)
LDLIBS += -framework OpenCL
else
LDLIBS += -lOpenCL
endif
# Hardware Locality
PACKAGES := hwloc
ifdef ENABLE_SDL
CFLAGS += -DENABLE_SDL
PACKAGES += SDL2_image SDL2_ttf
endif
ifdef ENABLE_TRACE
# Right now, only fxt is supported
CFLAGS += -DENABLE_TRACE -DENABLE_FUT
PACKAGES += fxt
endif
# MPI
ifdef ENABLE_MPI
CFLAGS += -DENABLE_MPI
PACKAGES += ompi
endif
# Query CFLAGS and LDLIBS for all packages
CFLAGS += $(shell pkg-config --cflags $(PACKAGES))
LDFLAGS += $(shell pkg-config --libs-only-L $(PACKAGES))
LDLIBS += $(shell pkg-config --libs-only-l $(PACKAGES))
$(ALL_OBJECTS): $(MAKEFILES)
$(PROGRAM): $(ALL_OBJECTS)
$(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS)
$(OBJECTS): obj/%.o: src/%.c
$(CC) -o $@ $(CFLAGS) -c $<
$(K_OBJECTS): obj/%.o: kernel/c/%.c
$(CC) -o $@ $(CFLAGS) -c $<
$(T_OBJECTS): obj/%.o: traces/src/%.c
$(CC) -o $@ $(CFLAGS) -c $<
$(L_OBJECTS): obj/%.o: obj/%.c
$(CC) -o $@ $(CFLAGS) -c $<
$(L_GEN): obj/%.c: src/%.l
$(LEX) -t $< > $@
.PHONY: depend
depend: $(ALL_DEPENDS)
$(ALL_DEPENDS): $(MAKEFILES)
$(DEPENDS): deps/%.d: src/%.c
$(CC) $(CFLAGS) -MM $< | \
sed -e 's|\(.*\)\.o:|deps/\1.d obj/\1.o:|g' > $@
$(K_DEPENDS): deps/%.d: kernel/c/%.c
$(CC) $(CFLAGS) -MM $< | \
sed -e 's|\(.*\)\.o:|deps/\1.d obj/\1.o:|g' > $@
$(T_DEPENDS): deps/%.d: traces/src/%.c
$(CC) $(CFLAGS) -MM $< | \
sed -e 's|\(.*\)\.o:|deps/\1.d obj/\1.o:|g' > $@
$(L_DEPENDS): deps/%.d: obj/%.c
$(CC) $(CFLAGS) -MM $< | \
sed -e 's|\(.*\)\.o:|deps/\1.d obj/\1.o:|g' > $@
ifneq ($(MAKECMDGOALS),clean)
-include $(ALL_DEPENDS)
endif
.PHONY: clean
clean:
rm -f $(PROGRAM) obj/* deps/* lib/*