-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
113 lines (85 loc) · 2.95 KB
/
makefile
File metadata and controls
113 lines (85 loc) · 2.95 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
export SHELL := /usr/bin/env bash
ifeq ($(V),1)
SILENTMSG := @true
SILENTCMD :=
else
SILENTMSG := @echo
SILENTCMD := @
endif
export CXX := g++
export AR := ar
# CPPFLAGS := -std=c++23 -O3 -Wall -Wextra
CPPFLAGS := -std=c++23 -g3 -glldb -Wall -Wextra
## build main library
LIBDIR := lib
OBJLIBDIR := lobj
OUTLIBDIR := out/lib
OUTLIBINC := out/lib/include
LIB_SRCS := $(shell find $(LIBDIR) -name "*.cpp")
LIB_OBJS := $(LIB_SRCS:$(LIBDIR)/%.cpp=$(OBJLIBDIR)/%.o)
LIB_DEPS := $(LIB_SRCS:$(LIBDIR)/%.cpp=$(OBJLIBDIR)/%.d)
LIB_TREE := $(sort $(patsubst %/,%,$(dir $(LIB_OBJS))))
DEPENDS += $(LIB_OBJS:.o=.d)
export LNAME := tikzcpp
export LIBBIN := $(OUTLIBDIR)/lib$(LNAME).a
.PHONY: generate_figures $(LNAME)
.DEFAULT_GOAL = generate_figures
$(LNAME): $(LIB_OBJS)
$(SILENTCMD)mkdir -p $(OUTLIBDIR)
$(SILENTCMD)mkdir -p $(OUTLIBINC)
$(SILENTCMD)rm -f "$(LIBBIN)"
$(SILENTCMD)$(AR) rcs "$(LIBBIN)" $(LIB_OBJS)
$(SILENTCMD)cp $(LIBDIR)/*.h $(OUTLIBINC)/
@echo built ... $(notdir $@)
$(LIB_TREE): %:
mkdir -p $@
.SECONDEXPANSION:
$(OBJLIBDIR)/%.o: $(LIBDIR)/%.cpp | $$(@D)
$(SILENTMSG) CXX $(notdir $<)
$(SILENTCMD)$(CXX) -MMD -MP -MF $(@:$(OBJLIBDIR)/%.o=$(OBJLIBDIR)/%.d) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $<
## build executable for tikz code generation
SRCDIR := src
OBJDIR := obj
BINDIR := bin
OUTDIR := out
SRCS := $(shell find $(SRCDIR) -name "*.cpp")
BINS := $(SRCS:$(SRCDIR)/%.cpp=$(BINDIR)/%)
OBJS := $(SRCS:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
.PRECIOUS: $(BINDIR)/% $(OBJDIR)/%.o
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(LNAME)
$(SILENTCMD)mkdir -p $(OBJDIR)
$(SILENTMSG) CXX $(notdir $<)
$(SILENTCMD)$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(OUTLIBINC) -o $@ -c $<
$(BINDIR)/%: $(OBJDIR)/%.o
$(SILENTCMD)mkdir -p $(BINDIR)
$(SILENTCMD)$(CXX) $(LDFLAGS) -L$(OUTLIBDIR) -l$(LNAME) -o $@ $<
@echo built ... $(notdir $@)
$(TREE): %:
mkdir -p $@
## produce and compile figures
FIGDIR := figs
TEXDIR := tex
GEN_FIGS := $(SRCS:$(SRCDIR)/%.cpp=generate_figures_%)
FIGS := $(wildcard $(FIGDIR)/*.tex)
PDFS := $(FIGS:%.tex=%.pdf)
COMMIT_EPOCH = $(shell git log -1 --pretty=%ct)
THIS_FILE := $(lastword $(MAKEFILE_LIST))
generate_figures_%: $(BINDIR)/%
@mkdir -p $(FIGDIR)
@mkdir -p $(OUTDIR)
$(SILENTCMD)$< "$(FIGDIR)/$(notdir $<)=" "$(TEXDIR)/"
$(FIGDIR)/%.pdf: $(FIGDIR)/%.tex
$(SILENTMSG) "TEX $<"
$(SILENTCMD)SOURCE_DATE_EPOCH=$(COMMIT_EPOCH) latexmk -f -silent -pdf -lualatex -use-make -output-directory=$(FIGDIR) $< >/dev/null || true
$(SILENTMSG) "built ... $^"
figures: $(PDFS)
@mkdir -p $(OUTDIR)
$(SILENTCMD)pdfunite $^ $(OUTDIR)/combined.pdf
generate_figures: $(GEN_FIGS)
@$(MAKE) -f $(THIS_FILE) figures
@$(foreach file, $(wildcard $(FIGDIR)/*.pdf), mkdir -p $(subst $(FIGDIR),$(OUTDIR),$(firstword $(subst =, ,$(file))));)
@$(foreach file, $(wildcard $(FIGDIR)/*.pdf), cp $(file) $(subst $(FIGDIR),$(OUTDIR),$(subst =,/,$(file)));)
clean:
$(SILENTCMD)rm -r $(OBJLIBDIR) $(OBJDIR) $(BINDIR) $(FIGDIR) || true
clean-lib:
$(SILENTCMD)rm -r $(OBJLIBDIR) || true