-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
127 lines (114 loc) · 3.26 KB
/
Makefile
File metadata and controls
127 lines (114 loc) · 3.26 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
# Source files
SRC_C = src/main.c\
src/screen.c\
src/thread.c\
src/display.c\
src/load_image.c\
src/resize_image.c\
src/destroy_image.c\
src/image_types/raw.c\
src/image_types/png.c\
src/image_types/gif.c\
src/image_types/bmp.c\
src/image_types/jpeg.c\
src/image_types/webp.c\
src/image_types/fits.c\
src/image_types/tiff.c\
SRC_CU = src/init_gpu.cu\
src/resize_cuda.cu\
src/cuda_kernel.cu\
OBJ_C = $(SRC_C:.c=.o)
OBJ_CU = $(SRC_CU:.cu=.o)
# Compilation parameters
GPU_COMPILER = nvcc
C_COMPILER = gcc
LIBS = -lm -lpthread -lpng -ljpeg -lgif -lwebp -lwebpdemux -lraw -lcfitsio -ltiff
GPU_COMPILER_FLAGS = -DUSE_CUDA -O2 -Wno-deprecated-gpu-targets -g -Xcompiler -fPIC $(LIBS)
C_COMPILER_FLAGS = -O2 -Wall -Wextra -W -g $(LIBS)
MAKEFLAGS = -j$(shell nproc) --silent --no-print-directory
NVCC := $(shell which nvcc 2>/dev/null)
ifeq ($(NVCC),)
COMPILER = $(C_COMPILER)
COMPILER_FLAGS = $(C_COMPILER_FLAGS)
OBJ = $(OBJ_C)
TOTAL_FILES = $(SRC_C)
else
COMPILER = $(GPU_COMPILER)
COMPILER_FLAGS = $(GPU_COMPILER_FLAGS)
OBJ = $(OBJ_CU) $(OBJ_C)
TOTAL_FILES = $(SRC_C) $(SRC_CU)
endif
N_FILES := $(words $(TOTAL_FILES))
CURRENT_FILE := 0
NAME = ImageVisualizer
# Colors
RED=\033[0;31m
GREEN=\033[0;32m
YELLOW=\033[0;33m
BLUE=\033[0;34m
PURPLE=\033[0;35m
CYAN=\033[0;36m
WHITE=\033[0;37m
RESET=\033[0m
# Main rule
all: $(NAME)
# Compilation of the library binary
$(NAME):
@echo -ne "[$(YELLOW)$(NAME)$(RESET)] "
@echo -ne "Compiling all objects files...\n"
@echo ""
@make $(OBJ)
@echo -ne "\n"
@echo ""
@echo -ne "--------------------------------------------\n"
@echo ""
@echo -ne "[$(YELLOW)$(NAME)$(RESET)] "
@echo -ne "Compiling the main program...\n"
@$(COMPILER) -o $(NAME) $(OBJ) $(COMPILER_FLAGS)
@echo ""
@echo -ne "[$(YELLOW)$(NAME)$(RESET)] "
@echo -ne "Main program successfully compiled!\n"
# Rule to compile objects files
$(OBJ_C): %.o: %.c
@echo -ne "\033[2K\r"
@echo -ne "[$(BLUE)COMPILATION$(RESET)] "
@echo -ne "($(shell expr $(CURRENT_FILE) + 1)/$(N_FILES)) $@"
@$(COMPILER) -c $< -o $@ $(COMPILER_FLAGS)
@$(eval CURRENT_FILE := $(shell expr $(CURRENT_FILE) + 1))
$(OBJ_CU): %.o: %.cu
@echo -ne "\033[2K\r"
@echo -ne "[$(BLUE)COMPILATION$(RESET)] "
@echo -ne "($(shell expr $(CURRENT_FILE) + 1)/$(N_FILES)) $@"
@$(COMPILER) -c $< -o $@ $(COMPILER_FLAGS)
@$(eval CURRENT_FILE := $(shell expr $(CURRENT_FILE) + 1))
# Rule to remove all object files
clean:
@echo -ne "[$(RED)REMOVE$(RESET)] "
@echo -ne "Removing all object files...\n"
@rm -f $(OBJ_C)
@rm -f $(OBJ_CU)
@echo -ne "[$(RED)REMOVE$(RESET)] "
@echo -ne "All objects files successfully removed!\n"
# Rule to remove all binary files
fclean:
@make clean
@echo -ne "[$(RED)REMOVE$(RESET)] "
@echo -ne "Removing Main program binary...\n"
@rm -f $(NAME)
@echo -ne "[$(RED)REMOVE$(RESET)] "
@echo -ne "Main program binary successfully removed!\n"
@echo ""
@echo -ne "[$(RED)REMOVE$(RESET)] "
@echo -ne "Repository successfully cleaned!\n"
# Rule to fully recompile the prgram
re:
@make fclean
@echo ""
@echo -ne "--------------------------------------------\n"
@echo ""
@echo -ne "[$(YELLOW)$(NAME)$(RESET)] "
@echo -ne "Recompiling the main program\n"
@echo ""
@echo -ne "--------------------------------------------\n"
@echo ""
@make