-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
100 lines (77 loc) · 2.03 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
96
97
98
99
100
CC = gcc
CFLAGS += -Wall -Wextra -Werror
NASM = nasm
NFLAGS += -f elf64
ifdef DEBUG
CFLAGS += -g3 -fsanitize=address
endif
SHELL = bash
VALGRIND_ARGS = --leak-check=full --show-leak-kinds=all --suppressions="valgrind.supp"
NAME = woody-woodpacker
LIBFT = libft
SRCDIR = srcs
INCDIR = includes
OBJDIR = objs
FILES = main.c \
elf.c \
file.c \
segment.c \
segment_utils.c \
check_file.c \
encrypt.c \
utils.c \
woody.c
SFILES = $(SRCDIR)/payload.asm
SOFILES = $(OBJDIR)/payload.o
SRCS = $(addprefix $(SRCDIR)/, $(FILES))
OBJS = $(SRCS:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
OBJSD = $(SRCS:$(SRCDIR)/%.c=$(OBJDIR)/%.d)
##### Colors #####
_END=\x1b[0m
_BOLD=\x1b[1m
_UNDER=\x1b[4m
_REV=\x1b[7m
_GREY=\x1b[30m
_RED=\x1b[31m
_GREEN=\x1b[32m
_YELLOW=\x1b[33m
_BLUE=\x1b[34m
_PURPLE=\x1b[35m
_CYAN=\x1b[36m
_WHITE=\x1b[37m
.PHONY: all clean fclean re norm tests $(LIBFT)
.SILENT:
all: $(NAME)
$(NAME): $(OBJS)
@$(MAKE) -q -C $(LIBFT) || $(MAKE) -j4 -C $(LIBFT)
@echo -e -n "\n${_BLUE}${_BOLD}[Create Executable] $(NAME)${_END}"
@$(NASM) $(NFLAGS) -o $(SOFILES) $(SFILES)
@$(CC) $(CFLAGS) -o $(NAME) $(SOFILES) $(OBJS) -L./$(LIBFT) -lft
@echo -e "\n${_GREEN}${_BOLD}$(NAME) done.${_END}"
$(OBJDIR)/%.o: $(SRCDIR)/%.c Makefile
@mkdir -p $(@D)
@echo -n -e "\r\033[K${_PURPLE}${BOLD}[${NAME}] Compiling $<${_END}"
@$(CC) $(CFLAGS) -I $(INCDIR) -I $(LIBFT)/$(INCDIR) -MMD -o $@ -c $<
libft:
@$(MAKE) -q -C $(LIBFT) || $(MAKE) -j4 -C $(LIBFT)
@$(CC) $(CFLAGS) -o $(NAME) $(OBJS) -L./$(LIBFT) -lft -D_GNU_SOURCE
clean:
@$(MAKE) -C $(LIBFT) clean
@echo -e "${_RED}${_BOLD}Cleaning obj files...${_END}"
@rm -f $(OBJS)
@rm -f $(OBJSD)
@rm -Rf $(OBJDIR)
fclean: clean
@$(MAKE) -C $(LIBFT) fclean
@echo -e "${_RED}${_BOLD}Cleaning project...${_END}"
@rm -f $(NAME)
@rm -rf $(OBJDIR)
@rm -rf $(NAME).dSYM
re: fclean
@$(MAKE)
norm:
@norminette $(INCDIR) $(SRCDIR) $(LIBFT)/$(INCDIR) $(LIBFT)/$(SRCDIR) | grep "Warning\|Error" || true
@echo "Norm done!"
valgrind: all
\valgrind $(VALGRIND_ARGS) "./${NAME}"
-include $(OBJSD)