Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
104 lines (79 loc) · 2.72 KB
/
Copy pathMakefile
File metadata and controls
104 lines (79 loc) · 2.72 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
VERBOSE = @
SRCFOLDER = src
BUILDDIR ?= .build
BINPREFIX = elfo-
CPPLINT ?= cpplint
TIDY ?= clang-tidy
TIDYCONFIG ?= .clang-tidy
CXXFLAGS ?= -Og -g
CXXFLAGS += -I include/
CXXFLAGS += -Wall -Wextra -Wno-switch -Wno-unused-variable -Wno-comment
ifeq ($(HOME),/root)
INSTALLDIR ?= /usr/local/bin
else
INSTALLDIR ?= $(HOME)/.local/bin
endif
SOURCES := $(wildcard $(SRCFOLDER)/*.cpp)
TARGETS := $(addprefix $(BINPREFIX),$(notdir $(SOURCES:%.cpp=%)))
DEPFILES := $(addprefix $(BUILDDIR)/,$(addsuffix .d,$(TARGETS)))
LDFLAGS :=
GENFILES := $(addprefix $(SRCFOLDER)/,_str_const.hpp _str_ident.hpp)
TESTFOLDER = test
TESTTARGET = $(TESTFOLDER)/h2g2
TESTS := $(patsubst $(TESTFOLDER)/%.stdout,test-%,$(wildcard $(TESTFOLDER)/*.stdout))
ifdef DLH
CXXFLAGS += -std=c++17 -I $(DLH)/legacy -I $(DLH)/include -L $(DLH) -DUSE_DLH
CXXFLAGS += -fno-exceptions -fno-rtti -fno-use-cxa-atexit
CXXFLAGS += -nostdlib -nostdinc
LDFLAGS += -ldlh -lgcc
else
CXXFLAGS += -fPIC -static-pie
ifeq ($(CXX),clang++)
CXXFLAGS += -stdlib=libc++
endif
endif
all: $(TARGETS) $(TESTS)
test: $(TESTS)
test-%: $(TESTFOLDER)/%.stdout $(BINPREFIX)%
@echo "Test $*"
@./$(BINPREFIX)$* $(TESTTARGET) | diff -w $< -
$(BUILDDIR)/%.d: $(SRCFOLDER)/%.cpp $(GENFILES) $(BUILDDIR) $(MAKEFILE_LIST)
@echo "DEP $<"
$(VERBOSE) $(CXX) $(CXXFLAGS) -MM -MP -MT $* -MF $@ $<
$(BINPREFIX)%: $(SRCFOLDER)/%.cpp $(GENFILES) $(MAKEFILE_LIST)
@echo "CXX $@"
$(VERBOSE) $(CXX) $(CXXFLAGS) -o $@ $< $(LDFLAGS)
define include_str_template =
$$(SRCFOLDER)/_str_$(notdir $(1)): include/elfo/$(1) tools/enum2str.py $$(MAKEFILE_LIST)
@echo "GEN $$@"
$$(VERBOSE) $$(CXX) -dD -E $$< 2>/dev/null | tools/enum2str.py elfo/$(1) $(2) > $$@
clean::
$$(VERBOSE) rm -f $$(SRCFOLDER)/_str_$(notdir $(1))
endef
$(eval $(call include_str_template,elf_def/const.hpp,ELF_Def Constants))
$(eval $(call include_str_template,elf_def/ident.hpp,ELF_Def Identification))
lint::
@if $(CPPLINT) --quiet --recursive . ; then \
echo "Congratulations, coding style obeyed!" ; \
else \
echo "Coding style violated -- see CPPLINT.cfg for details" ; \
exit 1 ; \
fi
tidy:: $(TIDYCONFIG) $(GENFILES)
$(VERBOSE) $(TIDY) --config-file=$< $(filter-out $(GENFILES),$(SOURCES)) -- -stdlib=libc++ $(CXXFLAGS)
install: $(TARGETS)
$(VERBOSE) install -Dm755 $^ $(INSTALLDIR)
$(VERBOSE) if ! echo "$(PATH)" | egrep '(^|:)$(INSTALLDIR)(:|$$)' >/dev/null 2>&1 ; then \
echo "You have to add '$(INSTALLDIR)' to PATH!" ; \
fi
clean::
$(VERBOSE) rm -f $(DEPFILES) $(GENFILES)
$(VERBOSE) test -d $(BUILDDIR) && rmdir $(BUILDDIR) || true
mrproper:: clean
$(VERBOSE) rm -f $(TARGETS)
$(BUILDDIR): ; @mkdir -p $@
$(DEPFILES):
ifneq ($(MAKECMDGOALS),clean)
-include $(DEPFILES)
endif
.PHONY: all test clean lint tidy install clean mrproper