-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
76 lines (68 loc) · 2.8 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
CC=g++ # GNU Compiler
NVCC=nvcc # CUDA Compiler
MKLFLAG=-lmkl_intel_lp64 -lmkl_sequential -lmkl_core # Intel MKL libraries flags
NFLAGS= -Xcompiler -Wall -O3 -arch=sm_21 -x cu -lineinfo # General flags
CFLAGS=-Wall -Wno-write-strings -O3 -g -DDEBUG=0 # -DDEBUG=X. This variable sets the printing level (0 or 1) of the simulation
LDFLAGS=-lGL -lGLU -lglut -lpthread # OpenGL flags
NLDFLAGS=-lcublas -lcusparse # CUDA flags
# Folder paths
INCLUDE_DIR=$(shell pwd)/inc
SOURCE_DIR=$(shell pwd)/src
BUILD_DIR=$(shell pwd)/build
BIN_DIR=$(shell pwd)/bin
DOC_DIR=$(shell pwd)/doc
# Files type
vpath %.h $(INCLUDE_DIR)
vpath %.cpp $(SOURCE_DIR)
vpath %.o $(BUILD_DIR)
# Common objects for both implementations
OBJECTS=graphics.o RgbImage.o input.o init.o coupling.o mechanical_model.o space.o discretization.o configuration.o
# Specific objects for the parallel implementations
OBJECTS_GPU=neurite-gpu.o solverEx-gpu.o solverIm-gpu.o cudaException.o
# Specific objects for the sequential implementations
OBJECTS_CPU=neurite-cpu.o solverEx-cpu.o solverIm-cpu.o
# Name of the executable file
EXECUTABLE=Neurite
# Default objectives
OBJECTIVES= cpu gpu
# General construction rules
# Default
def: $(OBJECTIVES)
# Parallel
gpu: $(OBJECTS) $(OBJECTS_GPU)
cd $(BUILD_DIR); $(NVCC) $^ $(LDFLAGS) $(NLDFLAGS) -o $(BIN_DIR)/$(EXECUTABLE)_solver-gpu
# Sequential
cpu: $(OBJECTS) $(OBJECTS_CPU)
cd $(BUILD_DIR); $(CC) $^ $(LDFLAGS) $(MKLFLAG) -o $(BIN_DIR)/$(EXECUTABLE)_solver-cpu
# Previous objects. Parallel
cudaException.o: cudaException.cpp cudaException.h
$(NVCC) $(NFLAGS) -I$(INCLUDE_DIR) -c $< -o $(BUILD_DIR)/$@
solverEx-gpu.o: solverEx-gpu.cpp solver.h solverEx-gpu.h
$(NVCC) $(NFLAGS) -I$(INCLUDE_DIR) -c $< -o $(BUILD_DIR)/$@
solverIm-gpu.o: solverIm-gpu.cpp solver.h solverIm-gpu.h
$(NVCC) $(NFLAGS) -I$(INCLUDE_DIR) -c $< -o $(BUILD_DIR)/$@
neurite-gpu.o: neurite.cpp neurite.h
$(NVCC) $(NFLAGS) -DGPU -I$(INCLUDE_DIR) -c $< -o $(BUILD_DIR)/$@
# Previous objects. Sequential
solverEx-cpu.o: solverEx-cpu.cpp solver.h solverEx-cpu.h
$(CC) $(CFLAGS) -I$(INCLUDE_DIR) -c $< -o $(BUILD_DIR)/$@
solverIm-cpu.o: solverIm-cpu.cpp solver.h solverIm-cpu.h
$(CC) $(CFLAGS) -I$(INCLUDE_DIR) -c $< -o $(BUILD_DIR)/$@
neurite-cpu.o: neurite.cpp neurite.h
$(CC) $(CFLAGS) -DCPU -I$(INCLUDE_DIR) -c $< -o $(BUILD_DIR)/$@
# Prevous objects. Common
%.o: %.cpp %.h
$(CC) $(CFLAGS) -I$(INCLUDE_DIR) -c $< -o $(BUILD_DIR)/$@
# Cleaning rules
.PHONY: clean clean-all
clean-all: clean-doc clean
# Cleanning rules for the documentation
clean-doc:
-cd $(DOC_DIR); rm -rf html latex
# General cleaning rules
clean:
-cd $(BUILD_DIR); rm -f $(OBJECTS) $(OBJECTS_OLD) $(OBJECTS_GPU2) $(OBJECTS_GPU) $(OBJECTS_CPU) $(OBJECTS_BASE)
-cd $(BIN_DIR); rm -f $(EXECUTABLE)_solver-cpu $(EXECUTABLE)_solver-gpu
# Documentation rules
documentation:
cd $(DOC_DIR); doxygen