-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
302 lines (242 loc) · 7.98 KB
/
Copy pathmakefile
File metadata and controls
302 lines (242 loc) · 7.98 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
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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
LIB_NAME := cmf
ifeq ($(wildcard ./CmfBuildConfig.mk),)
$(error "Cannot find build configuration file CmfBuildConfig.mk. You must run the configuration script first! Try ./config -help")
else
include CmfBuildConfig.mk
endif
ifndef OPTLEVEL
OPTLEVEL := 0
endif
ifndef CUDA_ENABLE
CUDA_ENABLE := 0
endif
ifndef DEBUG_LEVEL
DEBUG_LEVEL := 0
endif
ifndef PTL_DIR
PTL_DIR := ${PTL}
ifeq (${PTL_DIR},)
$(error "Cannot find PTL on the current system!")
endif
endif
ifndef ENABLE_STACK_ALLOCATION
ENABLE_STACK_ALLOCATION := 0
endif
ifndef MEMCHECK
MEMCHECK := 0
endif
ifndef DIM
DIM := 2
endif
ifndef DOCLEAN
DOCLEAN :=
endif
ifndef ZLIB_ENABLE
ZLIB_ENABLE := 1
endif
ifndef PARALLEL
PARALLEL := 1
endif
export PARALLEL
ifndef DOLATEXOUTPUT
DOLATEXOUTPUT := 0
endif
export DOLATEXOUTPUT
ifndef GPROF_ENABLE
GPROF_ENABLE := 0
endif
ifndef USE_INTEL
GPROF_ENABLE := 0
endif
ifndef CUDA_ENABLE
CUDA_ENABLE := 1
endif
ifeq (${GPROF_ENABLE}, 1)
GPROF_FLAG := -pg
else
GPROF_FLAG :=
endif
CURRENT_BASEIDIR = $(shell pwd)
CURRENT_SRC_DIR := ${CURRENT_BASEIDIR}/src
CURRENT_LIB_DIR := ${CURRENT_BASEIDIR}/lib
CURRENT_OBJ_DIR := ${CURRENT_BASEIDIR}/obj
CURRENT_HDR_DIR := ${CURRENT_BASEIDIR}/include
CURRENT_DOC_DIR := ${CURRENT_BASEIDIR}/docs
CURRENT_TST_DIR := ${CURRENT_BASEIDIR}/testing
CURRENT_HDRHX_DIR := ${CURRENT_BASEIDIR}/includex
#this path will need to be changed.
CURRENT_SUB_DIR := ${CURRENT_BASEIDIR}/..
IFLAGS_DEPENDENCIES :=
IFLAGS_DEPENDENCIES += -I${PTL_DIR}/include
LFLAGS_DEPENDENCIES :=
LFLAGS_DEPENDENCIES += -L${PTL_DIR}/lib -lPTL
ifeq (${ZLIB_ENABLE}, 1)
LFLAGS_DEPENDENCIES += -lz
endif
CURRENT_IFLAGS := -I${CURRENT_HDR_DIR} -I${CURRENT_HDRHX_DIR}
SRC_FILES_HYBRID_H := $(shell find ${CURRENT_SRC_DIR} -name *.cppx)
SRC_FILES_HYBRID_D := $(shell find ${CURRENT_SRC_DIR} -name *.cppx)
SRC_FILES_HOST := $(shell find ${CURRENT_SRC_DIR} -name *.cpp)
SRC_FILES_CUDA := $(shell find ${CURRENT_SRC_DIR} -name *.cu)
HEADER_FILES := $(shell find ${CURRENT_SRC_DIR} -name *.h)
HEADER_FILES_HX := $(shell find ${CURRENT_SRC_DIR} -name *.hx)
ifndef TESTS
TESTS := $(wildcard ${CURRENT_TST_DIR}/*)
else
TESTS := $(addprefix ${CURRENT_TST_DIR}/, ${TESTS})
endif
TARGET := ${CURRENT_LIB_DIR}/lib${LIB_NAME}.a
DEFAULTCOMPILER := g++
ifeq (${USE_INTEL}, 1)
DEFAULTCOMPILER := icpc
endif
PY_EXE := $(shell which python3)
CC_HOST := $(shell which mpicxx)
CC_DEVICE := $(shell which nvcc) -ccbin=${CC_HOST}
ifneq (${PARALLEL}, 1)
CC_HOST := ${DEFAULTCOMPILER}
CC_DEVICE := none
endif
CU_O_TARGET_NAME := ${CURRENT_OBJ_DIR}/CU_dlink.o
ifeq (${CUDA_ENABLE}, 1)
LINK_STEP := link_step
CU_O_TARGET := ${CU_O_TARGET_NAME}
ICUDA := -I/usr/local/cuda/include
LCUDA := -L/usr/local/cuda/lib64 -lcudadevrt -lcudart
else
LINK_STEP :=
OBJ_FILES_HYBRID_DEVICE :=
CUDA_ENABLE := 0
OBJ_FILES_CUDA :=
CU_O_TARGET :=
ICUDA :=
LCUDA :=
endif
VALGRIND_SUPPRESSION_FILE := ${CURRENT_BASEIDIR}/util/cmf_valgrind.supp
ifeq (${MEMCHECK}, 1)
VALG := $(shell which valgrind) --error-exitcode=166 --leak-check=full --error-limit=no --suppressions=${VALGRIND_SUPPRESSION_FILE}
else
VALG :=
endif
export VALG
COMPILE_TIME_OPT :=
COMPILE_TIME_OPT += -DCMF_DIM=${DIM}
COMPILE_TIME_OPT += -DCMF_ZLIB_EXT_ENABLE=${ZLIB_ENABLE}
COMPILE_TIME_OPT += -DCMF_ENABLE_STACK_BLOB=${ENABLE_STACK_ALLOCATION}
COMPILE_TIME_OPT += -DCMF_PARALLEL=${PARALLEL}
COMPILE_TIME_OPT += -DCUDA_ENABLE=${CUDA_ENABLE}
COMPILE_TIME_OPT += -DGLIBCXX_FORCE_NEW=1
CMF_CONFIG_FILE := ${CURRENT_HDR_DIR}/cmfbuild.h
DEVICE_FLAGS := -O${OPTLEVEL} -x cu -rdc=true -Xcompiler -fPIC ${COMPILE_TIME_OPT} -dc
DEVICE_DLINK_FLAGS := -Xcompiler -fPIC -rdc=true -dlink
HOST_FLAGS := -O${OPTLEVEL} -x c++ -g -Wno-unknown-pragmas -fPIC -fpermissive -std=c++11 -Werror -c ${LCUDA} ${GPROF_FLAG}
export CUDA_ENABLE
LZLIB :=
ifeq (${ALLOW_DEBUG_EXT}, 1)
LZLIB := -lz
endif
DO_CLEAN :=
ifeq (1, ${CUDA_ENABLE})
ifeq (,$(wildcard ${CU_O_TARGET_NAME}))
#DO_CLEAN := clean
endif
endif
ifeq (0, ${CUDA_ENABLE})
ifneq (,$(wildcard ${CU_O_TARGET_NAME}))
#DO_CLEAN := clean
endif
endif
ifeq (0, ${CUDA_ENABLE})
SRC_FILES_HYBRID_D :=
endif
CURRENT_IFLAGS += ${ICUDA}
TARGETNAME_HYBRID_H := $(addprefix ${CURRENT_OBJ_DIR}/,$(addsuffix .o,$(notdir ${SRC_FILES_HYBRID_H})))
TARGETNAME_HYBRID_D := $(addprefix ${CURRENT_OBJ_DIR}/,$(addsuffix .o,$(notdir ${SRC_FILES_HYBRID_D})))
TARGETNAME_HOST := $(addprefix ${CURRENT_OBJ_DIR}/,$(addsuffix .o,$(notdir ${SRC_FILES_HOST})))
TARGETNAME_CUDA := $(addprefix ${CURRENT_OBJ_DIR}/,$(addsuffix .o,$(notdir ${SRC_FILES_CUDA})))
SRC_FILES_HOST_DIR := $(dir ${SRC_FILES_HOST})
MP:=%
ifeq (,${TARGETNAME_HYBRID_D})
ifeq (,${TARGETNAME_CUDA})
LINK_STEP :=
endif
endif
export CURRENT_ICONFIG=-I${CURRENT_HDR_DIR} ${ICUDA} ${IFLAGS_DEPENDENCIES}
export CURRENT_LCONFIG= ${LCUDA} -L${CURRENT_LIB_DIR} -l${LIB_NAME} ${LFLAGS_DEPENDENCIES}
export CC_HOST
export CC_DEVICE
export DEVICE_FLAGS
export DEVICE_DLINK_FLAGS
export CURRENT_BASEIDIR
export DIM
export COMPILE_TIME_OPT
export CMF_PARALLEL=${PARALLEL}
.PHONY: final docs
final: ${DO_CLEAN} setup configFile ${TARGETNAME_CUDA} ${TARGETNAME_HYBRID_D} ${LINK_STEP} ${TARGETNAME_HYBRID_H} ${TARGETNAME_HOST}
${CC_HOST} -fPIC -shared ${GPROF_FLAG} ${CURRENT_OBJ_DIR}/*.o ${CURRENT_IFLAGS} ${IFLAGS_DEPENDENCIES} ${COMPILE_TIME_OPT} ${LZLIB} ${LCUDA} ${LFLAGS_DEPENDENCIES} -o ${TARGET}
.SECONDEXPANSION:
${TARGETNAME_HYBRID_D}: ${CURRENT_OBJ_DIR}/%.o : $$(filter $$(MP)/$$*,$$(SRC_FILES_HYBRID_D))
${CC_DEVICE} ${DEVICE_FLAGS} ${COMPILE_TIME_OPT} ${CURRENT_IFLAGS} ${IFLAGS_DEPENDENCIES} $< -o $@
.SECONDEXPANSION:
${TARGETNAME_HYBRID_H}: ${CURRENT_OBJ_DIR}/%.o : $$(filter $$(MP)/$$*,$$(SRC_FILES_HYBRID_H))
${CC_HOST} ${HOST_FLAGS} ${COMPILE_TIME_OPT} ${CURRENT_IFLAGS} ${IFLAGS_DEPENDENCIES} $< -o $@
.SECONDEXPANSION:
${TARGETNAME_HOST}: ${CURRENT_OBJ_DIR}/%.o : $$(filter $$(MP)/$$*,$$(SRC_FILES_HOST))
${CC_HOST} ${HOST_FLAGS} ${COMPILE_TIME_OPT} ${CURRENT_IFLAGS} ${IFLAGS_DEPENDENCIES} $< -o $@
.SECONDEXPANSION:
${TARGETNAME_CUDA}: ${CURRENT_OBJ_DIR}/%.o : $$(filter $$(MP)/$$*,$$(SRC_FILES_CUDA))
${CC_DEVICE} ${DEVICE_FLAGS} ${COMPILE_TIME_OPT} ${CURRENT_IFLAGS} ${IFLAGS_DEPENDENCIES} $< -o $@
${LINK_STEP}:
${CC_DEVICE} ${DEVICE_DLINK_FLAGS} ${COMPILE_TIME_OPT} ${OBJ_FILES_HYBRID_DEVICE} ${OBJ_FILES_CUDA} -o ${CU_O_TARGET} -lcudadevrt
configFile:
@echo "#ifndef cmfbuild_AUTOGENERATED_H" > ${CMF_CONFIG_FILE}
@echo "#define cmfbuild_AUTOGENERATED_H" >> ${CMF_CONFIG_FILE}
@echo "#define CMF_PARALLEL ${PARALLEL}" >> ${CMF_CONFIG_FILE}
@echo "#define CMF_ZLIB_EXT_ENABLE ${ZLIB_ENABLE}" >> ${CMF_CONFIG_FILE}
@echo "#define CUDA_ENABLE ${CUDA_ENABLE}" >> ${CMF_CONFIG_FILE}
@echo "#define CMF_DIM ${DIM}" >> ${CMF_CONFIG_FILE}
@echo "#endif" >> ${CMF_CONFIG_FILE}
setup:
echo ${AA}
-rm -r ${CURRENT_HDR_DIR}
-rm -r ${CURRENT_HDRHX_DIR}
mkdir -p ${CURRENT_LIB_DIR}
mkdir -p ${CURRENT_OBJ_DIR}
mkdir -p ${CURRENT_HDR_DIR}
mkdir -p ${CURRENT_HDRHX_DIR}
@for hdr in ${HEADER_FILES} ; do\
echo "Linking $${hdr}:";\
ln -s $${hdr} -t ${CURRENT_HDR_DIR};\
done
@for hdr in ${HEADER_FILES_HX} ; do\
echo "Linking $${hdr}:";\
ln -s $${hdr} -t ${CURRENT_HDRHX_DIR};\
done
@for tdir in ${TESTS} ; do\
echo "Linking ${CURRENT_BASEIDIR}/util/makefile.testing to $${tdir}/makefile";\
ln -sf ${CURRENT_BASEIDIR}/util/makefile.testing $${tdir}/makefile;\
done
@for tdir in ${TESTS} ; do\
echo "Linking ${CURRENT_BASEIDIR}/util/cmftestutils.h to $${tdir}/makefile";\
ln -sf ${CURRENT_BASEIDIR}/util/cmftestutils.h $${tdir}/cmftestutils.h;\
done
clean:
-rm -r ${CURRENT_LIB_DIR}
-rm -r ${CURRENT_OBJ_DIR}
-rm -r ${CURRENT_HDR_DIR}
-rm -r ${CURRENT_HDRHX_DIR}
@for tdir in ${TESTS} ; do\
${MAKE} -C $${tdir} -f makefile clean;\
echo "removing $${tdir}/output";\
unlink $${tdir}/makefile||echo"";\
unlink $${tdir}/cmftestutils.h||echo"";\
rm -rf $${tdir}/output;\
done
${MAKE} -C ${CURRENT_DOC_DIR} -f makefile.docs clean
test: ${DOCLEAN} final
@for tdir in ${TESTS} ; do\
${MAKE} -C $${tdir} -f makefile test || exit 4;\
done
@echo "ALL TESTS SUCCESSFUL"
docs:
${MAKE} -C ${CURRENT_DOC_DIR} -f makefile.docs