-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
149 lines (118 loc) · 5.59 KB
/
Copy pathMakefile
File metadata and controls
149 lines (118 loc) · 5.59 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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
NAME := ft_ls
### ### COMPABILITY ### ###
OS := $(shell uname)
### ### COMPILER ### ###
CC := cc
CFLAGS := -Wall -Wextra -Werror
CFLAGS += -MMD
CFLAGS += -g
CFLAGS += -Wunused -Wunused-variable -Wunused-function -Wnull-dereference -Wpedantic -Wuninitialized -fstack-protector-strong
### ### SOURCES ### ###
VPATH := src/ src/error src/cleanup src/parsing
VPATH += src/sorting src/printing
SRC_F := $(shell find src -name "*.c")
SRC_F := $(notdir $(SRC_F))
### ### OBJECTS ### ###
OBJ_D := ./obj
OBJ_F := $(patsubst %.c,$(OBJ_D)/%.o,$(SRC_F))
DEP_F := $(patsubst %.c,$(OBJ_D)/%.d,$(SRC_F))
### ### COLORS ### ###
RED := \033[1;31m
GREEN := \033[1;32m
YELL := \033[1;33m
BLUE := \033[1;34m
WHITE := \033[0m
### ### LIBRARIES ### ###
LIBFT_D := ./lib/libft
LIBFT_F := $(LIBFT_D)/libft.a
LIBFT_U := https://www.github.com/Alphacharge/mylibft
LSAN_D := ./lib/LeakSanitizer
LSAN_F := $(LSAN_D)/liblsan.a
LSAN_U := https://www.github.com/mhahnFr/LeakSanitizer
LIB := -L $(LIBFT_D) -l ft
### ### HEADER ### ###
INC_D := ./inc
INC_F := -I $(INC_D) -I $(LIBFT_D)
#Linux/Mac Compability for Leaksanitizer
ifeq ($(OS), Darwin)
ifeq ($(shell test -d $(LSAN_D) && test -f $(LSAN_F) && echo exists), exists)
INC_F += -Wno-gnu-include-next -I $(LSAN_D)/include
LIB += -L $(LSAN_D) -llsan -lc++
endif
else ifeq ($(OS), Linux)
ifeq ($(shell test -d $(LSAN_D) && test -f $(LSAN_F) && echo exists), exists)
INC_F += -Wno-gnu-include-next -I $(LSAN_D)/include
LIB += -rdynamic -L $(LSAN_D) -llsan -ldl -lstdc++
endif
endif
### ### COMPABILITY ### ###
### ### RULES ### ###
#make lsan is downloading lsan if its not.
#every make will be with lsan until a clean occurs.
all: $(LIBFT_F) $(NAME)
lsan: clean_lsan $(OBJ_D) $(LIBFT_F) $(LSAN_F)
@$(MAKE) -s -j $(NAME)
gprof: all
./ft_ls -aR /
gprof ./ft_ls gmon.out > analysis.txt
$(NAME): $(OBJ_D) $(OBJ_F)
@$(CC) $(CFLAGS) $(INC_F) -o $(NAME) $(OBJ_F) $(LIB)
@echo "$(RED)--->$(BLUE)ls is compiled.$(WHITE)"
compile:
@echo "$(BLUE)--->$(GREEN)Compiling C Files .....$(WHITE)"
$(OBJ_D)/%.o: %.c compile
@$(CC) $(CFLAGS) $(INC_F) -c $< -o $@
-include $(DEP_F)
$(OBJ_D):
@git config advice.detachedHead false
@mkdir -p $@
$(LIBFT_F): message
ifneq ($(shell test -d $(LIBFT_D) && echo exists), exists)
@echo "$(RED)Submodule directory is missing! Initializing submodule...$(WHITE)"
@git submodule update --init --recursive
endif
@echo "$(GREEN)Building libft ...$(WHITE)"
@$(MAKE) -s -j -C $(LIBFT_D)
$(LSAN_F):
ifneq ($(shell test -d $(LSAN_D) && echo exists), exists)
@echo "$(GREEN)Clone LeakSanitizer ...$(WHITE)"
@git clone -q --branch v1.4 --recursive $(LSAN_U) $(LSAN_D)
endif
@echo "$(GREEN)Make LeakSanitizer ...$(WHITE)"
@$(MAKE) -s -C $(LSAN_D)
message:
@echo "$(BLUE)------------------------------------------------------------------------------------------"
@echo "$(BLUE)|$(RED) ________ _________ ___ ________ $(BLUE)|"
@echo "$(BLUE)|$(RED) |\ _____\\\\\___ ___\ |\ \ |\ ____\ $(BLUE)|"
@echo "$(BLUE)|$(RED) \ \ \__/\|___ \ \_| \ \ \ \ \ \___|_ $(BLUE)|"
@echo "$(BLUE)|$(RED) \ \ __\ \ \ \ \ \ \ \ \_____ \ $(BLUE)|"
@echo "$(BLUE)|$(RED) \ \ \_| \ \ \ \ \ \____\|____|\ \ $(BLUE)|"
@echo "$(BLUE)|$(RED) \ \__\ \ \__\ \ \_______\____\_\ \ $(BLUE)|"
@echo "$(BLUE)|$(RED) \|__| \|__| \|_______|\_________\ $(BLUE)|"
@echo "$(BLUE)|$(RED) \|_________| $(BLUE)|"
@echo "$(BLUE)| $(BLUE)|"
@echo "$(BLUE)| $(BLUE)|"
@echo "$(BLUE)|$(GREEN) ________ ___ ___ $(YELL) ________ ________ _______ _________ ________ $(BLUE)|"
@echo "$(BLUE)|$(GREEN) |\ __ \ |\ \ / /| $(YELL) |\ __ \|\ __ \|\ ___ \|\___ ___\\\\\_____ \ $(BLUE)|"
@echo "$(BLUE)|$(GREEN) \ \ \|\ /_ \ \ \/ / / $(YELL) \ \ \|\ \ \ \|\ /\ \ __/\|___ \ \_|\|___/ /| $(BLUE)|"
@echo "$(BLUE)|$(GREEN) \ \ __ \ \ \ / / $(YELL) \ \ _ _\ \ __ \ \ \_|/__ \ \ \ / / / $(BLUE)|"
@echo "$(BLUE)|$(GREEN) \ \ \|\ \ \/ / / $(YELL) \ \ \\\\\ \\\\\ \ \|\ \ \ \_|\ \ \ \ \ / /_/__ $(BLUE)|"
@echo "$(BLUE)|$(GREEN) \ \_______\__/ / / $(YELL) \ \__\\\\\ _\\\\\ \_______\ \_______\ \ \__\ |\________\ $(BLUE)|"
@echo "$(BLUE)|$(GREEN) \|_______|\___/ / $(YELL) \|__|\|__|\|_______|\|_______| \|__| \|_______| $(BLUE)|"
@echo "$(BLUE)|$(GREEN) \|___|/ $(YELL) $(BLUE)|"
@echo "$(BLUE)| $(BLUE)|"
@echo "$(BLUE)------------------------------------------------------------------------------------------$(WHITE)"
clean_lsan:
@rm -rf $(OBJ_D)
clean:
@rm -rf $(OBJ_D)
@rm -f $(LSAN_F)
@make fclean -C $(LIBFT_D)
fclean: clean
@rm -f $(NAME)
@echo "$(BLUE)--->$(GREEN)Cleaning $(NAME) .....$(WHITE)"
@echo "$(RED)All is cleaned$(WHITE)"
re: fclean all
bonus: all
.INTERMEDIATE: compile message
.PHONY: all fclean clean re lsan bonus clean_lsan