X-Git-Url: http://git.rrze.uni-erlangen.de/gitweb/?p=LbmBenchmarkKernelsPublic.git;a=blobdiff_plain;f=src%2FMakefile;fp=src%2FMakefile;h=a9889a5c4494fccbda0e9c6f0c986a93c848a58c;hp=0000000000000000000000000000000000000000;hb=109880839321408644c94a34eb31208460b9f46d;hpb=42cf91486fb5c1ad178b3d21935a1be563e5fa39 diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..a9889a5 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,298 @@ +# -------------------------------------------------------------------------- +# +# Copyright +# Markus Wittmann, 2016-2017 +# RRZE, University of Erlangen-Nuremberg, Germany +# markus.wittmann -at- fau.de or hpc -at- rrze.fau.de +# +# Viktor Haag, 2016 +# LSS, University of Erlangen-Nuremberg, Germany +# +# This file is part of the Lattice Boltzmann Benchmark Kernels (LbmBenchKernels). +# +# LbmBenchKernels is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# LbmBenchKernels is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LbmBenchKernels. If not, see . +# +# -------------------------------------------------------------------------- + +# Default configuration to chose. +# CONFIG ?= linux-gcc +CONFIG ?= linux-intel + +BUILD ?= debug + +# If we compile for BENCHMARK all verifcation and statistics are disabled, +# if not specified otherwise. +ifeq (on,$(BENCHMARK)) + VERIFICATION ?= off + VTK_OUTPUT ?= off + STATISTICS ?= off +endif + +VERIFICATION ?= on + +STATISTICS ?= on + +VTK_OUTPUT ?= on + +COLOR ?= on + +OPENMP ?= on + +VTK_OUTPUT_ASCII ?= off + +LID_DRIVEN_CAVITY ?= off + +ISA ?= avx + +LIKWID ?= off + +# Global settings for the Makefile +SHELL = sh + +ifdef V + Q = +else + Q = @ +endif + +AR = ar +CMP = cmp +CHMOD = chmod +CPP = cpp +DIFF = diff +ECHO = echo +ECHO_E = echo -e +ECHO_N = echo -n +GIT = git +GREP = grep +MKDIR = mkdir +MKDIR_P = mkdir -p +NM = nm +RM = rm +RM_F = rm -f +RM_RF = rm -rf +TAR = tar +TAR_CZF = tar czf +TOUCH = touch +SED = sed + + + +# Where to store objects and dependency files. +OBJECT_DIR = obj/$(CONFIG)-$(BUILD)$(TAG) +DEP_DIR = obj/$(CONFIG)-$(BUILD)$(TAG)-dep + +# Sources to consider. +SOURCES_C = Main.c Memory.c Geometry.c Kernel.c \ + Vtk.c Pinning.c + +# ------------------------------------------------------------------------ +# NO CHANGE BELOW SHOULD BE NEEDED +# ------------------------------------------------------------------------ + +OBJ_C = $(foreach SOURCE,$(SOURCES_C),$(OBJECT_DIR)/$(SOURCE:%.c=%.o)) \ + $(OBJECT_DIR)/BenchKernelD3Q19Common_PullSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19Common_PullAoS.o \ + $(OBJECT_DIR)/BenchKernelD3Q19Common_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19Common_PushAoS.o \ + $(OBJECT_DIR)/BenchKernelD3Q19_PullSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19_PullAoS.o \ + $(OBJECT_DIR)/BenchKernelD3Q19_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19_PushAoS.o \ + $(OBJECT_DIR)/BenchKernelD3Q19List_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListCommon_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19List_PushAoS.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListCommon_PushAoS.o \ + $(OBJECT_DIR)/BenchKernelD3Q19List_PullSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListCommon_PullSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19List_PullAoS.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListCommon_PullAoS.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAa_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaCommon_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAa_PushAoS.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaCommon_PushAoS.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaRia_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaRiaCommon_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaPv_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListAaPvCommon_PushSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListPullSplitNt_PullSoA.o \ + $(OBJECT_DIR)/BenchKernelD3Q19ListPullSplitNtCommon_PullSoA.o + +OBJ = $(OBJ_C) + +include ./config.$(CONFIG).mk + + +# Colorize command lines. +ifeq (on,$(COLOR)) + COLOR_GRAY =\033[1;30m + COLOR_LIGHT_GRAY =\033[0;37m + COLOR_CYAN =\033[0;36m + COLOR_LIGHT_CYAN =\033[1;36m + COLOR_MAGENTA =\033[0;35m + COLOR_DARK_MAGENTA=\033[1;35m + COLOR_NO =\033[0m + COLOR_RED =\033[0;31m + COLOR_DARK_RED =\033[1;31m + COLOR_GREEN =\033[0;32m + COLOR_DARK_GREEEN =\033[1;32m +else + COLOR_GRAY = + COLOR_LIGHT_GRAY = + COLOR_CYAN = + COLOR_LIGHT_CYAN = + COLOR_MAGENTA = + COLOR_DARK_MAGENTA= + COLOR_NO = + COLOR_RED = + COLOR_DARK_RED = + COLOR_GREEN = + COLOR_DARK_GREEEN = +endif + +# Dependencies which are not source files, that require +# rebuilding the application. +REBUILD_DEPS = $(filter-out %.d,$(MAKEFILE_LIST)) $(OBJECT_DIR)/.target $(DEP_DIR)/.target + +BUILD_CONFIG= + +# Verify computed flow field +ifeq (on,$(VERIFICATION)) + PP_FLAGS += $(D)VERIFICATION +endif + +ifeq (on,$(VTK_OUTPUT)) + PP_FLAGS += $(D)VTK_OUTPUT +endif + +ifeq (on,$(STATISTICS)) + PP_FLAGS += $(D)STATISTICS +endif + +ifeq (on,$(VTK_OUTPUT_ASCII)) + PP_FLAGS += $(D)VTK_OUTPUT_ASCII +endif + +ifeq (on,$(LID_DRIVEN_CAVITY)) + PP_FLAGS += $(D)LID_DRIVEN_CAVITY +endif + +ifeq (avx,$(ISA)) + PP_FLAGS += $(D)VECTOR_AVX +endif +ifeq (sse,$(ISA)) + PP_FLAGS += $(D)VECTOR_SSE +endif + +# Required for posix_memalign +PP_FLAGS += $(D)_POSIX_C_SOURCE=200112L + +ifeq (on,$(LIKWID)) + PP_FLAGS += $(LIKWID_INC) $(D)HAVE_LIKWID + LD_LIBS += $(LIKWID_LIB) -llikwid +endif + +.phony: all clean clean-all + +$(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) building $(.DEFAULT_GOAL)...")) + + +$(info # Object dir: $(OBJECT_DIR)) +$(info # Dependency dir: $(DEP_DIR)) +# $(info # objects: $(OBJ)) + +BIN_DIR=../bin + +all: $(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(TAG) + + +# ------------------------------------------------------------------------ +# TODO: Include dependencies, if they exist and no clean target is specified. + +#ifeq (,$(SKIP_DEP_INCLUDE)) +# ifneq (,$(OBJ)) +# TMP_OBJ__ = $(patsubst $(OBJECT_DIR)/%,$(DEP_DIR)/%,$(OBJ)) +# $(warning TMP_OBJ__: $(TMP_OBJ__)) +# $(warning OBJ: $(OBJ)) +# $(warning DEPS: $(patsubst %.o,%.d,$(TMP_OBJ__))) +# $(warning $(patsubst $(OBJECT_DIR)/%.o,$(DEP_DIR)/%.d,$(OBJ))) + -include $(patsubst $(OBJECT_DIR)/%.o,$(DEP_DIR)/%.d,$(OBJ)) +# endif +#endif + + +$(BIN_DIR): + [ -d "$@" ] || mkdir -p "$@" + +$(BIN_DIR)/lbmbenchk-$(CONFIG)-$(BUILD)$(BUILD_CONFIG)$(TAG): $(OBJ) $(REBUILD_DEPS) $(DEP_DIR)/.target | $(BIN_DIR) + @$(ECHO_E) "linking: $(COLOR_CYAN)$@$(COLOR_NO)" + $(LD) $(LD_FLAGS) -o $@ $(filter-out $(REBUILD_DEPS),$^) $(LD_LIBS) + @$(ECHO_E) "# Builded binary: $(COLOR_CYAN)$@$(COLOR_NO)" + @$(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)" + +$(OBJECT_DIR)/%_SoA.o: %.c $(REBUILD_DEPS) + @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_SOA$(COLOR_NO)" + $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_SOA -c $< -o $@ + +$(OBJECT_DIR)/%_PushSoA.o: %.c $(REBUILD_DEPS) + @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_SOA$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_PUSH$(COLOR_NO)" + $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_SOA $(D)PROP_MODEL_PUSH -c $< -o $@ + +$(OBJECT_DIR)/%_PushAoS.o: %.c $(REBUILD_DEPS) + @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_AOS$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_PUSH$(COLOR_NO)" + $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_AOS $(D)PROP_MODEL_PUSH -c $< -o $@ + +$(OBJECT_DIR)/%_PullSoA.o: %.c $(REBUILD_DEPS) + @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_SOA$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_PULL$(COLOR_NO)" + $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_SOA $(D)PROP_MODEL_PULL -c $< -o $@ + +$(OBJECT_DIR)/%_PullAoS.o: %.c $(REBUILD_DEPS) + @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_AOS$(COLOR_NO) $(COLOR_MAGENTA)PROP_MODEL_PULL$(COLOR_NO)" + $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_AOS $(D)PROP_MODEL_PULL -c $< -o $@ + +$(OBJECT_DIR)/%_AoS.o: %.c $(REBUILD_DEPS) + @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO) $(COLOR_MAGENTA)DATA_LAYOUT_AOS$(COLOR_NO)" + $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) $(D)DATA_LAYOUT_AOS -c $< -o $@ + + +$(OBJECT_DIR)/%.o: %.c $(REBUILD_DEPS) + @$(ECHO_E) "compiling: $(COLOR_CYAN)$@$(COLOR_NO)" + $(CC) $(strip $(C_FLAGS)) $(strip $(PP_FLAGS)) -c $< -o $@ + + +# ------------------------------------------------------------------------ +# Following targets in princibal make only sure, that the directories +# are created if the do not exist already. + +$(DEP_DIR)/.target: + $(Q)$(MKDIR_P) $(DEP_DIR) + $(Q)$(TOUCH) $@ + +# ------------------------------------------------------------------------ +# Current configuration. +MAKE_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) + +# Compare current configuration to the last one so we know when to +# rebuild this system/target despite when sources have not changed. +$(OBJECT_DIR)/.target:: + $(Q)$(MKDIR_P) $(OBJECT_DIR) + @ ( [ -f $(OBJECT_DIR)/.target ] && $(ECHO) $(MAKE_CFG) | $(CMP) -s $(OBJECT_DIR)/.target - ) \ + || ( $(ECHO) $(MAKE_CFG) > $(OBJECT_DIR)/.target; $(ECHO) "# configuration variables changed, rebuilding ..." ) + + +clean: + -rm $(OBJECT_DIR)/*.o $(DEP_DIR)/*.d + +clean-all: + -[ -d obj ] && rm -r obj