forked from PlatformLab/NanoLog
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NanoLogMakeFrag
75 lines (61 loc) · 3.25 KB
/
NanoLogMakeFrag
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
########
## This file expresses the rules required to compile with NanoLog.
## It defines a macro (run-cxx) to preprocess and compile user source files,
## and the rules required to build the NanoLog library.
##
## Users are expected to:
## 1) Define the macro NANOLOG_DIR to point to the NanoLog directory
## and the macro USER_OBJS to list all *.o to be produced by the
## user executing run-cxx on their source files.
## 2) Use run-cxx to compile their sources (see documentation below)
## 3) include this MakeFrag in their main GNUMakefile
#######
RUNTIME_DIR=$(NANOLOG_DIR)/runtime
PREPROC_DIR=$(NANOLOG_DIR)/preprocessor
# run-cxx:
# Compile a user C++ source file to an object file using the NanoLog system.
# The first parameter $(1) should be the output filename (*.o)
# The second parameter $(2) should be the input filename (*.cc)
# The optional third parameter $(3) should be additional options compiler options.
# The optional fourth parameter ($4) should be gnu preprocessor options.
define run-cxx
$(CXX) -E -I $(RUNTIME_DIR) $(2) -o $(2).i -std=c++11 $(4)
@mkdir -p generated
python $(PREPROC_DIR)/parser.py --mapOutput="generated/$(2).map" $(2).i
$(CXX) -I $(RUNTIME_DIR) -c -o $(1) $(2).ii $(3)
@rm -f $(2).i $(2).ii generated/GeneratedCode.cc
endef
RUNTIME_CXX_FLAGS= -std=c++11 -O3 -DNDEBUG -g
NANO_LOG_LIBRARY_LIBS=-lrt -pthread
RUNTIME_CC=$(RUNTIME_DIR)/Cycles.cc $(RUNTIME_DIR)/NanoLog.cc \
$(RUNTIME_DIR)/Util.cc $(RUNTIME_DIR)/Log.cc $(RUNTIME_DIR)/RuntimeLogger.cc $(RUNTIME_DIR)/TimeTrace.cc
RUNTIME_OBJS=$(RUNTIME_CC:.cc=.o)
COMWARNS := -Wall -Wformat=2 -Wextra \
-Wwrite-strings -Wno-unused-parameter -Wmissing-format-attribute
CWARNS := $(COMWARNS) -Wmissing-prototypes -Wmissing-declarations -Wshadow \
-Wbad-function-cast
CXXWARNS := $(COMWARNS) -Wno-non-template-friend -Woverloaded-virtual \
-Wcast-qual -Wcast-align -Wno-address-of-packed-member -Wconversion -Weffc++
.PHONY: all
all:
generated/GeneratedCode.o: $(USER_OBJS)
mkdir -p generated
python $(PREPROC_DIR)/parser.py --combinedOutput="generated/GeneratedCode.cc" $(shell find generated -type f -name "*.map" -printf ' "%h/%f" ')
$(CXX) $(RUNTIME_CXX_FLAGS) $(CXXWARNS) -c -o $@ generated/GeneratedCode.cc -I $(RUNTIME_DIR) -Igenerated
$(RUNTIME_DIR)/%.o: $(RUNTIME_DIR)/%.cc
$(CXX) $(RUNTIME_CXX_FLAGS) $(CXXWARNS) -c -o $@ $< -I $(RUNTIME_DIR) -Igenerated -Werror $(EXTRA_NANOLOG_FLAGS)
libNanoLog.a: $(RUNTIME_OBJS) generated/GeneratedCode.o decompressor
ar -cr libNanoLog.a $(RUNTIME_OBJS) generated/GeneratedCode.o
decompressor: generated/GeneratedCode.o $(RUNTIME_DIR)/Cycles.o $(RUNTIME_DIR)/Util.o $(RUNTIME_DIR)/Log.o $(RUNTIME_DIR)/LogDecompressor.cc
$(CXX) $(RUNTIME_CXX_FLAGS) $(CXXWARNS) $^ -o decompressor -I$(RUNTIME_DIR) -Igenerated -Werror $(NANO_LOG_LIBRARY_LIBS)
clean-all: clean
@rm -f libNanoLog.a $(RUNTIME_OBJS) decompressor
@rm -rf generated $(RUNTIME_DIR)/.depend
# Automatic rules to build *.h dependencies for NanoLog. Taken from
# https://stackoverflow.com/questions/2394609/makefile-header-dependencies
depend: .depend_nanolog
.depend_nanolog: $(RUNTIME_CC)
rm -f $(RUNTIME_DIR)/.depend
$(CXX) $(RUNTIME_CXX_FLAGS) -I $(RUNTIME_DIR) -MM $^ > .depend_nanolog;
sed -i -E "s#(^[^ ])#$(RUNTIME_DIR)/\1#" .depend_nanolog
include .depend_nanolog