bulk commit
[LbmBenchmarkKernelsPublic.git] / src / Makefile
CommitLineData
10988083
MW
1# --------------------------------------------------------------------------
2#
3# Copyright
4# Markus Wittmann, 2016-2017
5# RRZE, University of Erlangen-Nuremberg, Germany
6# markus.wittmann -at- fau.de or hpc -at- rrze.fau.de
7#
8# Viktor Haag, 2016
9# LSS, University of Erlangen-Nuremberg, Germany
10#
11# This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels).
12#
13# LbmBenchKernels is free software: you can redistribute it and/or modify
14# it under the terms of the GNU General Public License as published by
15# the Free Software Foundation, either version 3 of the License, or
16# (at your option) any later version.
17#
18# LbmBenchKernels is distributed in the hope that it will be useful,
19# but WITHOUT ANY WARRANTY; without even the implied warranty of
20# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21# GNU General Public License for more details.
22#
23# You should have received a copy of the GNU General Public License
24# along with LbmBenchKernels. If not, see <http://www.gnu.org/licenses/>.
25#
26# --------------------------------------------------------------------------
27
28# Default configuration to chose.
29# CONFIG ?= linux-gcc
30CONFIG ?= linux-intel
31
e3f82424
MW
32BUILD ?= release
33
34BENCHMARK ?= on
10988083
MW
35
36# If we compile for BENCHMARK all verifcation and statistics are disabled,
37# if not specified otherwise.
38ifeq (on,$(BENCHMARK))
39 VERIFICATION ?= off
40 VTK_OUTPUT ?= off
41 STATISTICS ?= off
e3f82424
MW
42else
43 VERIFICATION ?= on
44 STATISTICS ?= on
45 VTK_OUTPUT ?= on
10988083
MW
46endif
47
10988083
MW
48
49COLOR ?= on
50
51OPENMP ?= on
52
53VTK_OUTPUT_ASCII ?= off
54
55LID_DRIVEN_CAVITY ?= off
56
57ISA ?= avx
58
59LIKWID ?= off
60
61# Global settings for the Makefile
62SHELL = sh
63
64ifdef V
65 Q =
66else
67 Q = @
68endif
69
70AR = ar
71CMP = cmp
72CHMOD = chmod
73CPP = cpp
74DIFF = diff
75ECHO = echo
76ECHO_E = echo -e
77ECHO_N = echo -n
78GIT = git
79GREP = grep
80MKDIR = mkdir
81MKDIR_P = mkdir -p
82NM = nm
83RM = rm
84RM_F = rm -f
85RM_RF = rm -rf
86TAR = tar
87TAR_CZF = tar czf
88TOUCH = touch
89SED = sed
90
91
92
93# Where to store objects and dependency files.
94OBJECT_DIR = obj/$(CONFIG)-$(BUILD)$(TAG)
95DEP_DIR = obj/$(CONFIG)-$(BUILD)$(TAG)-dep
96
97# Sources to consider.
98SOURCES_C = Main.c Memory.c Geometry.c Kernel.c \
e3f82424 99 Vtk.c Pinning.c Padding.c Lattice.c
10988083
MW
100
101# ------------------------------------------------------------------------
102# NO CHANGE BELOW SHOULD BE NEEDED
103# ------------------------------------------------------------------------
104
105OBJ_C = $(foreach SOURCE,$(SOURCES_C),$(OBJECT_DIR)/$(SOURCE:%.c=%.o)) \
106 $(OBJECT_DIR)/BenchKernelD3Q19Common_PullSoA.o \
107 $(OBJECT_DIR)/BenchKernelD3Q19Common_PullAoS.o \
108 $(OBJECT_DIR)/BenchKernelD3Q19Common_PushSoA.o \
109 $(OBJECT_DIR)/BenchKernelD3Q19Common_PushAoS.o \
110 $(OBJECT_DIR)/BenchKernelD3Q19_PullSoA.o \
111 $(OBJECT_DIR)/BenchKernelD3Q19_PullAoS.o \
112 $(OBJECT_DIR)/BenchKernelD3Q19_PushSoA.o \
113 $(OBJECT_DIR)/BenchKernelD3Q19_PushAoS.o \
114 $(OBJECT_DIR)/BenchKernelD3Q19List_PushSoA.o \
115 $(OBJECT_DIR)/BenchKernelD3Q19ListCommon_PushSoA.o \
116 $(OBJECT_DIR)/BenchKernelD3Q19List_PushAoS.o \
117 $(OBJECT_DIR)/BenchKernelD3Q19ListCommon_PushAoS.o \
118 $(OBJECT_DIR)/BenchKernelD3Q19List_PullSoA.o \
119 $(OBJECT_DIR)/BenchKernelD3Q19ListCommon_PullSoA.o \
120 $(OBJECT_DIR)/BenchKernelD3Q19List_PullAoS.o \
121 $(OBJECT_DIR)/BenchKernelD3Q19ListCommon_PullAoS.o \
122 $(OBJECT_DIR)/BenchKernelD3Q19ListAa_PushSoA.o \
123 $(OBJECT_DIR)/BenchKernelD3Q19ListAaCommon_PushSoA.o \
124 $(OBJECT_DIR)/BenchKernelD3Q19ListAa_PushAoS.o \
125 $(OBJECT_DIR)/BenchKernelD3Q19ListAaCommon_PushAoS.o \
126 $(OBJECT_DIR)/BenchKernelD3Q19ListAaRia_PushSoA.o \
127 $(OBJECT_DIR)/BenchKernelD3Q19ListAaRiaCommon_PushSoA.o \
128 $(OBJECT_DIR)/BenchKernelD3Q19ListAaPv_PushSoA.o \
129 $(OBJECT_DIR)/BenchKernelD3Q19ListAaPvCommon_PushSoA.o \
130 $(OBJECT_DIR)/BenchKernelD3Q19ListPullSplitNt_PullSoA.o \
e3f82424
MW
131 $(OBJECT_DIR)/BenchKernelD3Q19ListPullSplitNtCommon_PullSoA.o \
132 $(OBJECT_DIR)/BenchKernelD3Q19Aa_AaAoS.o \
133 $(OBJECT_DIR)/BenchKernelD3Q19AaCommon_AaAoS.o \
134 $(OBJECT_DIR)/BenchKernelD3Q19Aa_AaSoA.o \
135 $(OBJECT_DIR)/BenchKernelD3Q19AaCommon_AaSoA.o \
136 $(OBJECT_DIR)/BenchKernelD3Q19AaVec_AaSoA.o \
137 $(OBJECT_DIR)/BenchKernelD3Q19AaVecCommon_AaSoA.o
10988083
MW
138
139OBJ = $(OBJ_C)
140
141include ./config.$(CONFIG).mk
142
143
144# Colorize command lines.
145ifeq (on,$(COLOR))
146 COLOR_GRAY =\033[1;30m
147 COLOR_LIGHT_GRAY =\033[0;37m
148 COLOR_CYAN =\033[0;36m
149 COLOR_LIGHT_CYAN =\033[1;36m
150 COLOR_MAGENTA =\033[0;35m
151 COLOR_DARK_MAGENTA=\033[1;35m
152 COLOR_NO =\033[0m
153 COLOR_RED =\033[0;31m
154 COLOR_DARK_RED =\033[1;31m
155 COLOR_GREEN =\033[0;32m
156 COLOR_DARK_GREEEN =\033[1;32m
157else
158 COLOR_GRAY =
159 COLOR_LIGHT_GRAY =
160 COLOR_CYAN =
161 COLOR_LIGHT_CYAN =
162 COLOR_MAGENTA =
163 COLOR_DARK_MAGENTA=
164 COLOR_NO =
165 COLOR_RED =
166 COLOR_DARK_RED =
167 COLOR_GREEN =
168 COLOR_DARK_GREEEN =
169endif
170
171# Dependencies which are not source files, that require
172# rebuilding the application.
173REBUILD_DEPS = $(filter-out %.d,$(MAKEFILE_LIST)) $(OBJECT_DIR)/.target $(DEP_DIR)/.target
174
175BUILD_CONFIG=
176
177# Verify computed flow field
178ifeq (on,$(VERIFICATION))
179 PP_FLAGS += $(D)VERIFICATION
180endif
181
182ifeq (on,$(VTK_OUTPUT))
183 PP_FLAGS += $(D)VTK_OUTPUT
184endif
185
186ifeq (on,$(STATISTICS))
187 PP_FLAGS += $(D)STATISTICS
188endif
189
190ifeq (on,$(VTK_OUTPUT_ASCII))
191 PP_FLAGS += $(D)VTK_OUTPUT_ASCII
192endif
193
194ifeq (on,$(LID_DRIVEN_CAVITY))
195 PP_FLAGS += $(D)LID_DRIVEN_CAVITY
196endif
197
198ifeq (avx,$(ISA))
199 PP_FLAGS += $(D)VECTOR_AVX
200endif
201ifeq (sse,$(ISA))
202 PP_FLAGS += $(D)VECTOR_SSE
203endif
204
205# Required for posix_memalign
206PP_FLAGS += $(D)_POSIX_C_SOURCE=200112L
207
208ifeq (on,$(LIKWID))
209 PP_FLAGS += $(LIKWID_INC) $(D)HAVE_LIKWID
210 LD_LIBS += $(LIKWID_LIB) -llikwid
211endif
212
e3f82424
MW
213# ARCH can only be assigned a string without a space. The space is escaped as
214# a comma which we have to replace here.
215
216ifdef TARCH
217 ARCH_W_COMMA := $(TARCH)
218
219 COMMA_ := ,
220 override TARCH := $(subst $(COMMA_), ,$(TARCH))
221
222 $(info $(shell echo -e "\n$(COLOR_GREEN)INFO: Automatically expanding comma in TARCH variable: TARCH=$(TARCH).$(COLOR_NO)\n"))
223
224endif
225
10988083
MW
226.phony: all clean clean-all
227
e3f82424 228$(info $(shell $(ECHO_E) "# Configuration: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO) OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO) TARCH=$(COLOR_CYAN)$(TARCH)$(COLOR_NO) building $(.DEFAULT_GOAL)..."))
10988083
MW
229
230
231$(info # Object dir: $(OBJECT_DIR))
232$(info # Dependency dir: $(DEP_DIR))
233# $(info # objects: $(OBJ))
234
235BIN_DIR=../bin
236
237all: $(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(TAG)
238
239
240# ------------------------------------------------------------------------
241# TODO: Include dependencies, if they exist and no clean target is specified.
242
243#ifeq (,$(SKIP_DEP_INCLUDE))
244# ifneq (,$(OBJ))
245# TMP_OBJ__ = $(patsubst $(OBJECT_DIR)/%,$(DEP_DIR)/%,$(OBJ))
246# $(warning TMP_OBJ__: $(TMP_OBJ__))
247# $(warning OBJ: $(OBJ))
248# $(warning DEPS: $(patsubst %.o,%.d,$(TMP_OBJ__)))
249# $(warning $(patsubst $(OBJECT_DIR)/%.o,$(DEP_DIR)/%.d,$(OBJ)))
250 -include $(patsubst $(OBJECT_DIR)/%.o,$(DEP_DIR)/%.d,$(OBJ))
251# endif
252#endif
253
254
255$(BIN_DIR):
256 [ -d "$@" ] || mkdir -p "$@"
257
258$(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(TAG): $(OBJ) $(REBUILD_DEPS) $(DEP_DIR)/.target | $(BIN_DIR)
259 @$(ECHO_E) "linking: $(COLOR_CYAN)$@$(COLOR_NO)"
260 $(LD) $(LD_FLAGS) -o $@ $(filter-out $(REBUILD_DEPS),$^) $(LD_LIBS)
261 @$(ECHO_E) "# Builded binary: $(COLOR_CYAN)$@$(COLOR_NO)"
262 @$(ECHO_E) "# Configuration was: CONFIG=$(COLOR_CYAN)$(CONFIG)$(COLOR_NO) BUILD=$(COLOR_CYAN)$(BUILD)$(COLOR_NO) VERIFICATION=$(COLOR_CYAN)$(VERIFICATION)$(COLOR_NO) STATISTICS=$(COLOR_CYAN)$(STATISTICS)$(COLOR_NO) VTK_OUTPUT=$(COLOR_CYAN)$(VTK_OUTPUT)$(COLOR_NO) OPENMP=$(COLOR_CYAN)$(OPENMP)$(COLOR_NO) ISA=$(COLOR_CYAN)$(ISA)$(COLOR_NO) LIKWID=$(COLOR_CYAN)$(LIKWID)$(COLOR_NO) target=$(.DEFAULT_GOAL)"
263
264$(OBJECT_DIR)/%_SoA.o: %.c $(REBUILD_DEPS)
265 @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_SOA$(COLOR_NO)"
266 $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_SOA -c $< -o $@
267
268$(OBJECT_DIR)/%_PushSoA.o: %.c $(REBUILD_DEPS)
269 @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_SOA$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_PUSH$(COLOR_NO)"
270 $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_SOA $(D)PROP_MODEL_PUSH -c $< -o $@
271
272$(OBJECT_DIR)/%_PushAoS.o: %.c $(REBUILD_DEPS)
273 @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_AOS$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_PUSH$(COLOR_NO)"
274 $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_AOS $(D)PROP_MODEL_PUSH -c $< -o $@
275
276$(OBJECT_DIR)/%_PullSoA.o: %.c $(REBUILD_DEPS)
277 @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_SOA$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_PULL$(COLOR_NO)"
278 $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_SOA $(D)PROP_MODEL_PULL -c $< -o $@
279
280$(OBJECT_DIR)/%_PullAoS.o: %.c $(REBUILD_DEPS)
281 @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_AOS$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_PULL$(COLOR_NO)"
282 $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_AOS $(D)PROP_MODEL_PULL -c $< -o $@
283
284$(OBJECT_DIR)/%_AoS.o: %.c $(REBUILD_DEPS)
285 @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_AOS$(COLOR_NO)"
286 $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_AOS -c $< -o $@
287
e3f82424
MW
288$(OBJECT_DIR)/%_AaAoS.o: %.c $(REBUILD_DEPS)
289 @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_AOS$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_AA$(COLOR_NO)"
290 $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_AOS $(D)PROP_MODEL_AA -c $< -o $@
291
292$(OBJECT_DIR)/%_AaSoA.o: %.c $(REBUILD_DEPS)
293 @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_SOA$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_AA$(COLOR_NO)"
294 $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_SOA $(D)PROP_MODEL_AA -c $< -o $@
10988083
MW
295
296$(OBJECT_DIR)/%.o: %.c $(REBUILD_DEPS)
297 @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO)"
298 $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) -c $< -o $@
299
300
301# ------------------------------------------------------------------------
302# Following targets in princibal make only sure, that the directories
303# are created if the do not exist already.
304
305$(DEP_DIR)/.target:
306 $(Q)$(MKDIR_P) $(DEP_DIR)
307 $(Q)$(TOUCH) $@
308
309# ------------------------------------------------------------------------
310# Current configuration.
311MAKE_CFG = SYSTEM=$(SYSTEM) // BUILD=$(BUILD) // MAKEOVERRIDES=\"$(strip $(MAKEOVERRIDES))\" // VERIFICATION=$(VERIFICATION) // STATISTICS=$(STATISTICS) // VTK_OUTPUT=$(VTK_OUTPUT) // VTK_OUTPUT_ASCII=$(VTK_OUTPUT_ASCII) // LID_DRIVEN_CAVITY=$(LID_DRIVEN_CAVITY) // ISA=$(ISA) // LIKWID=$(LIKWID)
312
313# Compare current configuration to the last one so we know when to
314# rebuild this system/target despite when sources have not changed.
315$(OBJECT_DIR)/.target::
316 $(Q)$(MKDIR_P) $(OBJECT_DIR)
317 @ ( [ -f $(OBJECT_DIR)/.target ] && $(ECHO) $(MAKE_CFG) | $(CMP) -s $(OBJECT_DIR)/.target - ) \
318 || ( $(ECHO) $(MAKE_CFG) > $(OBJECT_DIR)/.target; $(ECHO) "# configuration variables changed, rebuilding ..." )
319
320
321clean:
322 -rm $(OBJECT_DIR)/*.o $(DEP_DIR)/*.d
323
324clean-all:
325 -[ -d obj ] && rm -r obj
This page took 0.07771 seconds and 5 git commands to generate.