-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
139 lines (108 loc) · 2.97 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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# For debuggin
.SUFFIXES:
%:: SCCS/s.%
%:: RCS/%
%:: RCS/%,v
%:: %,v
%:: s.%
PKGNAME = assert-fortran-git
F = gfortran
F_DEBUG_FLAGS = -cpp -ggdb -pedantic -Wall -Jinclude -Iinclude
F_COMPILE_FLAGS = -O2 -DNDEBUG -fno-stack-protector -z execstack -no-pie -Jinclude -Iinclude
F_FLAGS = $(F_DEBUG_FLAGS)
AR = ar rc
V = valgrind
V_FLAGS = --leak-check=full --track-origins=yes -s --show-leak-kinds=all
M = makepkg
M_FLAGS = -f --config .makepkg.conf --skipinteg --noextract
GCU = ssh://[email protected]/assert-fortran-git.git
# The base directories
OBJ_DIR = obj
SRC_DIR = src
TEST_DIR = test
LIB_DIR = lib
BUILD_DIR = build
UPLOAD_DIR = upload
EXAMPLE_DIR = example
# The nested directories
TEST_SRC_DIR = $(addprefix $(TEST_DIR)/, src)
TEST_BIN_DIR = $(addprefix $(TEST_DIR)/, bin)
OBJS = $(addprefix $(OBJ_DIR)/, assertf.o)
LIBS = $(addprefix $(LIB_DIR)/, libassertf.a)
TESTS = $(addprefix $(TEST_BIN_DIR)/, test_assertf.out)
EXAMPLES = $(addprefix $(EXAMPLE_DIR)/, example1.out)
.PHONY: all clean compile test pkg upload-aur
all: $(OBJS) $(LIBS) $(TESTS) $(EXAMPLES)
# Build the directories
$(OBJ_DIR):
@echo Creating: $@
@mkdir -p $@
$(LIB_DIR):
@echo Creating: $@
@mkdir -p $@
$(TEST_BIN_DIR):
@echo Creating: $@
@mkdir -p $@
$(BUILD_DIR):
@echo Creating: $@
@mkdir -p $@
$(UPLOAD_DIR):
@echo Creating: $@
@mkdir -p $@
$(EXAMPLE_DIR):
@echo Creating: $@
@mkdir -p $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.f90 | $(OBJ_DIR)
@echo Compiling: $< -o $@
@$(F) $(F_FLAGS) -c $< -o $@
$(LIB_DIR)/%.a: $(OBJS) | $(LIB_DIR)
@echo Archiving: $^ -o $@
@$(AR) $@ $^
@ranlib $@
$(TEST_BIN_DIR)/test_%.out: $(TEST_SRC_DIR)/test_%.f90 $(LIBS) | $(TEST_BIN_DIR)
@echo Compiling: $^ -o $@
@$(F) $(F_FLAGS) $^ -o $@
$(EXAMPLE_DIR)/%.out: $(SRC_DIR)/%.f90 $(LIBS) | $(EXAMPLE_DIR)
@echo Compiling: $^ -o $@
@$(F) $(F_FLAGS) $^ -o $@
# Remove all the compiled things
clean:
ifneq ("$(wildcard $(LIB_DIR))", "")
@echo Removing: $(LIB_DIR) $(wildcard $(LIB_DIR)/*.a)
@rm -r $(LIB_DIR)
endif
ifneq ("$(wildcard $(OBJ_DIR))", "")
@echo Removing: $(OBJ_DIR) $(wildcard $(OBJ_DIR)/*.o)
@rm -r $(OBJ_DIR)
endif
ifneq ("$(wildcard $(TEST_BIN_DIR))", "")
@echo Removing: $(TEST_BIN_DIR) $(wildcard $(TEST_BIN_DIR)/*.out)
@rm -r $(TEST_BIN_DIR)
endif
ifneq ("$(wildcard $(EXAMPLE_DIR))", "")
@echo Removing: $(EXAMPLE_DIR) $(wildcard $(EXAMPLE_DIR)/*.out)
@rm -r $(EXAMPLE_DIR)
endif
test_%.out: $(TEST_BIN_DIR)/test_%.out
@echo Testing: $@
@$(V) $(V_FLAGS) ./$<
test: $(notdir $(TESTS))
%.out: $(EXAMPLE_DIR)/%.out
@echo Running: $@
@$(V) $(V_FLAGS) ./$<
examples: $(notdir $(EXAMPLES))
# To recompile the release lib
compile: F_FLAGS = $(F_COMPILE_FLAGS)
compile: clean $(LIBS)
pkg:
@$(M) $(M_FLAGS)
$(UPLOAD_DIR)/$(PKGNAME): $(UPLOAD_DIR)
@cd $< && git clone $(GCU)
upload-aur: $(UPLOAD_DIR)/$(PKGNAME)
@cp PKGBUILD $</
@cd $</ && $(M) --printsrcinfo > .SRCINFO
@cd $</ && git add PKGBUILD .SRCINFO
@echo -n "Commit-msg: "
@read commitmsg
@cd $</ && git commit -m commitmsg
@cd $</ && git push