-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
85 lines (65 loc) · 1.8 KB
/
Makefile
File metadata and controls
85 lines (65 loc) · 1.8 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
cc := g++
std := c++17
override cpp +=
LIB_PREFIX ?= lib
ELFUTILS_PREFIX ?=
# directories
src_dir := src
tgt_dir := bin
lib_dir := $(LIB_PREFIX)
obj_dir := obj
dep_dir := $(obj_dir)/.deps
# external libs
extlibs_incl := $(addprefix $(lib_dir)/, pugixml/include json/single_include expected/include)
extlibs_dirs := $(addprefix $(lib_dir)/, pugixml/lib)
ifdef ELFUTILS_PREFIX
extlibs_incl += $(ELFUTILS_PREFIX)/include
extlibs_dirs += $(ELFUTILS_PREFIX)/lib
endif
# files
src := $(shell find src/ -type f -name '*.cpp')
obj := $(patsubst $(src_dir)/%.cpp, $(obj_dir)/%.o, $(src))
deps := $(patsubst $(src_dir)/%.cpp, $(dep_dir)/%.d, $(src))
tgt := $(tgt_dir)/profiler
DEBUG ?=
system_clock ?=
ifdef system_clock
cflags += -DTEP_USE_SYSTEM_CLOCK
endif
cflags := -Wall -Wextra -Wno-unknown-pragmas -Wpedantic -fPIE -g -pthread
cflags += $(addprefix -I, $(extlibs_incl))
cflags += $(addprefix -I, include nrg/include)
cflags += -std=$(std)
cflags += $(addprefix -D, $(cpp))
ifdef DEBUG
cflags += -O0
else
cflags += -O3 -DNDEBUG -flto
ldflags += -flto
endif
# linker flags
ldflags := -pthread -lpugixml -lnrg -lstdc++fs -lelf -ldw
ldflags += $(addprefix -L, $(extlibs_dirs) nrg/lib)
# rpath
ldflags += -Wl,-rpath='$$ORIGIN/../nrg/lib'
# rules -----------------------------------------------------------------------
.PHONY: default
default: $(tgt)
$(tgt_dir):
@mkdir -p $@
$(obj_dir) $(dep_dir):
@mkdir -p $@/dbg $@/output
$(tgt): $(obj) | $(tgt_dir)
$(cc) $^ $(ldflags) -o $@
$(obj_dir)/%.o: $(src_dir)/%.cpp $(dep_dir)/%.d | $(obj_dir) $(dep_dir)
$(cc) -MT $@ -MMD -MP -MF $(dep_dir)/$*.d $(cflags) -c -o $@ $<
$(deps):
include $(wildcard $(deps))
.PHONY: remake
remake: clean
$(MAKE) default
# do not clean libraries because
# those may take a while to rebuild
.PHONY: clean
clean:
rm -rf $(tgt_dir) $(obj_dir) $(dep_dir)