-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
120 lines (94 loc) · 4.06 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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: awoimbee <[email protected]> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2018/11/26 22:06:19 by marvin #+# #+# #
# Updated: 2020/10/31 00:26:07 by awoimbee ### ########.fr #
# #
# **************************************************************************** #
################################################################################
############### VARIABLES ###############
################################################################################
NAME := ft_ssl
CFLAGS := -g3 -Wall -Wextra #-Werror -fno-builtin -Ofast
SRC_NAME = $(shell cd src && find . -type f -name "*.c")
SRC_SUBFOLDERS = $(shell cd src && find . -type d)
BUILD_FOLDER = build
################################################################################
############### CONSTANTS ###############
################################################################################
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
NUMPROC := $(shell grep -c ^processor /proc/cpuinfo)
EXEC_RPATH := \$$ORIGIN
else ifeq ($(UNAME_S),Darwin)
NUMPROC := $(shell sysctl hw.ncpu | awk '{print $$2}')
EXEC_RPATH := @loader_path #https://blogs.oracle.com/dipol/dynamic-libraries,-rpath,-and-mac-os
endif
CC = gcc
LDLIBS = -lft
LDFLAGS = -L./libft
CFLAGS += -MMD -I./src -I./libft
SRC_FOLDERS = $(SRC_SUBFOLDERS)
REPO_PATH = $(patsubst %/,%,$(dir $(realpath $(firstword $(MAKEFILE_LIST)))))
BUILD_PATH = $(REPO_PATH)/$(BUILD_FOLDER)
SRC_PATH = src
OBJ_FOLDER = $(BUILD_FOLDER)/obj
LFT = libft/libft.a
OBJ = $(addprefix $(OBJ_FOLDER)/, $(SRC_NAME:.c=.c.o))
################################################################################
################# RULES #################
################################################################################
all : $(LFT)
@$(MAKE) -j$(NUMPROC) $(NAME) --no-print-directory
############## LIBS ############
$(LFT) :
@printf "$(YLW)Making libft...$(EOC)\n"
@$(MAKE) -j$(NUMPROC) -s -C libft/ fast
################################
$(NAME) : $(LFT) $(OBJ)
@printf "$(GRN)Linking $@...$(EOC)\n"
$(CC) $(CFLAGS) $(OBJ) -o $@ $(LDFLAGS) $(LDLIBS)
$(BUILD_FOLDER) :
@mkdir -p $(BUILD_PATH) 2> /dev/null | true
@mkdir -p $(OBJ_FOLDER) 2> /dev/null | true
@mkdir -p $(addprefix $(OBJ_FOLDER)/,$(SRC_FOLDERS)) 2> /dev/null | true
$(BUILD_FOLDER)/obj :
mkdir -p $(BUILD_FOLDER) $(BUILD_FOLDER)/obj 2> /dev/null | true
mkdir -p $(addprefix $(OBJ_FOLDER)/,$(SRC_FOLDERS)) 2> /dev/null | true
#objects
$(OBJ_FOLDER)/%.c.o : $(SRC_PATH)/%.c | $(BUILD_FOLDER)/obj
@printf "\t$(CC) (...) $@\n"
@$(CC) $(CFLAGS) -o $@ -c $<
$(OBJ_FOLDER)/%.cpp.o : $(SRC_PATH)/%.cpp | $(BUILD_FOLDER)/obj
@printf "\t$(CXX) (...) $@\n"
@$(CXX) $(CFLAGS) -o $@ -c $<
# Add rules written in .d files (by gcc -MMD)
# The '-' makes it doesn't care if the file exists or not
-include $(OBJ_NM:.o=.d) $(OBJ_OTOOL:.o=.d)
test: all
python3 ./tests/func/test.py
obj_clean :
@printf "$(RED)Cleaning $(OBJ_FOLDER)$(EOC)\n"
@rm -rf $(OBJ_FOLDER)
clean :
@printf "$(RED)Cleaning $(BUILD_FOLDER)$(EOC)\n"
@rm -rf $(BUILD_FOLDER)
@printf "$(YLW)Cleaning libft...$(EOC)\n"
@make -s fclean -C libft
fclean : clean
@printf "$(RED)Cleaning $(NAME) & $(ASM)$(EOC)\n"
@rm -f $(NAME)
@rm -f $(ASM)
sclean : obj_clean
re : fclean all
sre : obj_clean all
.PHONY: all test obj_clean clean fclean re sre
RED = \033[1;31m
GRN = \033[1;32m
YLW = \033[1;33m
INV = \033[7m
EOC = \033[0m