-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
95 lines (73 loc) · 3.01 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
# Makefile
# Compilers
CXX = g++
NVCC = nvcc
# Compiler Flags
CXXFLAGS = -std=c++11 -pthread -Wall -Wextra -pedantic
# NVCCFLAGS = -arch=sm_75 # -std=c++11 -O3 // for personal computer, adjust accordingly
# Directories
INCLUDE_DIR_SINGLE = cpu_implementation/single_core/include
INCLUDE_DIR_MULTI = cpu_implementation/multi_core/include
INCLUDE_DIR_CUDA = cuda_implementation/include
SRC_DIR_SINGLE = cpu_implementation/single_core/src
SRC_DIR_MULTI = cpu_implementation/multi_core/src
SRC_DIR_CUDA = cuda_implementation/src
OBJ_DIR = obj
BIN_DIR = bin
# Executable Names
EXEC_SINGLE = integral_image_singlecore
EXEC_MULTI = integral_image_multicore
EXEC_CUDA = integral_image_cuda
# Source Files
SRC_SINGLE = $(SRC_DIR_SINGLE)/single_main.cpp $(SRC_DIR_SINGLE)/integral_image.cpp
SRC_MULTI = $(SRC_DIR_MULTI)/multi_main.cpp $(SRC_DIR_MULTI)/prefix_sum.cpp
SRC_CUDA = $(SRC_DIR_CUDA)/main.cu $(SRC_DIR_CUDA)/scan_kernels.cu $(SRC_DIR_CUDA)/transpose_kernels.cu $(SRC_DIR_CUDA)/utility.cu
# Object Files
OBJ_SINGLE = $(OBJ_DIR)/single_main.o $(OBJ_DIR)/integral_image.o
OBJ_MULTI = $(OBJ_DIR)/multi_main.o $(OBJ_DIR)/prefix_sum.o
OBJ_CUDA = $(OBJ_DIR)/main.o $(OBJ_DIR)/scan_kernels.o $(OBJ_DIR)/transpose_kernels.o $(OBJ_DIR)/utility.o
# All Targets
all: $(BIN_DIR)/$(EXEC_SINGLE) $(BIN_DIR)/$(EXEC_MULTI) $(BIN_DIR)/$(EXEC_CUDA)
# Build Single-Core Executable
$(BIN_DIR)/$(EXEC_SINGLE): $(OBJ_SINGLE)
@mkdir -p $(BIN_DIR)
$(CXX) $(CXXFLAGS) -I$(INCLUDE_DIR_SINGLE) -o $@ $^
# Build Multi-Core Executable
$(BIN_DIR)/$(EXEC_MULTI): $(OBJ_MULTI)
@mkdir -p $(BIN_DIR)
$(CXX) $(CXXFLAGS) -I$(INCLUDE_DIR_MULTI) -o $@ $^
# Build CUDA Executable
$(BIN_DIR)/$(EXEC_CUDA): $(OBJ_CUDA)
@mkdir -p $(BIN_DIR)
$(NVCC) $(NVCCFLAGS) -I$(INCLUDE_DIR_CUDA) -o $@ $^
# Compile Single-Core Source
$(OBJ_DIR)/single_main.o: $(SRC_DIR_SINGLE)/single_main.cpp
@mkdir -p $(OBJ_DIR)
$(CXX) $(CXXFLAGS) -I$(INCLUDE_DIR_SINGLE) -c $< -o $@
$(OBJ_DIR)/integral_image.o: $(SRC_DIR_SINGLE)/integral_image.cpp
@mkdir -p $(OBJ_DIR)
$(CXX) $(CXXFLAGS) -I$(INCLUDE_DIR_SINGLE) -c $< -o $@
# Compile Multi-Core Sources
$(OBJ_DIR)/multi_main.o: $(SRC_DIR_MULTI)/multi_main.cpp
@mkdir -p $(OBJ_DIR)
$(CXX) $(CXXFLAGS) -I$(INCLUDE_DIR_MULTI) -c $< -o $@
$(OBJ_DIR)/prefix_sum.o: $(SRC_DIR_MULTI)/prefix_sum.cpp
@mkdir -p $(OBJ_DIR)
$(CXX) $(CXXFLAGS) -I$(INCLUDE_DIR_MULTI) -c $< -o $@
# Compile CUDA Sources
$(OBJ_DIR)/main.o: $(SRC_DIR_CUDA)/main.cu
@mkdir -p $(OBJ_DIR)
$(NVCC) $(NVCCFLAGS) -I$(INCLUDE_DIR_CUDA) -c $< -o $@
$(OBJ_DIR)/scan_kernels.o: $(SRC_DIR_CUDA)/scan_kernels.cu
@mkdir -p $(OBJ_DIR)
$(NVCC) $(NVCCFLAGS) -I$(INCLUDE_DIR_CUDA) -c $< -o $@
$(OBJ_DIR)/transpose_kernels.o: $(SRC_DIR_CUDA)/transpose_kernels.cu
@mkdir -p $(OBJ_DIR)
$(NVCC) $(NVCCFLAGS) -I$(INCLUDE_DIR_CUDA) -c $< -o $@
$(OBJ_DIR)/utility.o: $(SRC_DIR_CUDA)/utility.cu
@mkdir -p $(OBJ_DIR)
$(NVCC) $(NVCCFLAGS) -I$(INCLUDE_DIR_CUDA) -c $< -o $@
# Clean Build Files
clean:
rm -rf $(OBJ_DIR)/*.o $(BIN_DIR)/$(EXEC_SINGLE) $(BIN_DIR)/$(EXEC_MULTI) $(BIN_DIR)/$(EXEC_CUDA)
.PHONY: all clean