]> git.llucax.com Git - software/dgc/dgcbench.git/blob - micro/Makefile
micro: Generate data to plot an allocation histogram
[software/dgc/dgcbench.git] / micro / Makefile
1
2 VERS    := naive
3 DC      := dmd
4 DL      := dmd
5 GNUPLOT := gnuplot
6 DFLAGS  += -release -inline -O
7 DFLAGS  += -defaultlib=tango-base-dmd-$(VERS) -debuglib=tango-base-dmd-$(VERS) \
8                 -L-ltango-user-dmd-$(VERS)
9
10 BUILD_DIR := $(VERS)
11 BIN_DIR   := $(BUILD_DIR)/bin
12 STAT_DIR  := $(BUILD_DIR)/stat
13 PLOT_DIR  := $(BUILD_DIR)/plot
14 DIRS      := $(BIN_DIR) $(STAT_DIR) $(PLOT_DIR)
15
16 sources  := $(wildcard *.d)
17 programs := $(addprefix $(BIN_DIR)/,$(sources:.d=))
18 stat_c   := $(addprefix $(STAT_DIR)/,$(addsuffix .c.csv,$(sources:.d=)))
19 stat_a   := $(addprefix $(STAT_DIR)/,$(addsuffix .a.csv,$(sources:.d=)))
20 stat_h   := $(addprefix $(STAT_DIR)/,$(addsuffix .h.csv,$(sources:.d=)))
21 stat     := $(stat_c) $(stat_a) $(stat_h)
22 graphs_c := $(addprefix $(PLOT_DIR)/,$(addsuffix .c.eps,$(sources:.d=)))
23 graphs   := $(graphs_c)
24
25
26 ifndef V
27 P      = @
28 P_DC   = @echo '  DC    $@';
29 P_LD   = @echo '  LD    $@';
30 P_CP   = @echo '  CP    $@';
31 P_PLOT = @echo '  PLOT  $@';
32 P_MAKE = @echo '  MAKE  $@';
33 P_RUN  = @echo '  RUN   $<';
34 P_AWK  = @echo '  AWK   $@';
35 endif
36
37 # create build directories if they don't already exist
38 ifneq ($(wildcard $(DIRS)),$(DIRS))
39 dummy_mkdir := $(shell mkdir -p $(DIRS))
40 endif
41
42 # don't use Gold with old DMDs
43 ifneq ($(shell ld --version | grep gold),)
44 export LD_ := /usr/bin/ld.single
45 endif
46
47 .PHONY: all
48 all: basic naive
49
50 .PHONY: naive basic
51 naive basic:
52         $(P_MAKE) $(MAKE) --no-print-directory build VERS=$@
53
54 .PHONY: build
55 build: $(programs)
56
57 $(BIN_DIR)/%: $(BIN_DIR)/%.o
58         $(P_LD) $(DC) $(DFLAGS) -of$@ $^
59
60 .INTERMEDIATE: $(BIN_DIR)/%.o
61 $(BIN_DIR)/%.o: %.d
62         $(P_DC) $(DC) $(DFLAGS) -c -of$@ $<
63
64 .PHONY: stat
65 stat: $(stat)
66
67 .PRECIOUS: $(STAT_DIR)/%.c.csv $(STAT_DIR)/%.a.csv
68 $(STAT_DIR)/%.c.csv $(STAT_DIR)/%.a.csv: $(BIN_DIR)/%
69         $(P_RUN) ./$<
70         $P mv gc-collections.csv $(STAT_DIR)/$*.c.csv
71         $P mv gc-mallocs.csv $(STAT_DIR)/$*.a.csv
72
73 $(STAT_DIR)/split.c.csv $(STAT_DIR)/split.a.csv: $(BIN_DIR)/bible.txt
74
75 $(BIN_DIR)/bible.txt: bible.txt
76         $(P_CP) cp -l $< $@
77
78 .PRECIOUS: $(STAT_DIR)/%.h.csv
79 $(STAT_DIR)/%.h.csv: $(STAT_DIR)/%.a.csv
80         $(P_AWK) awk -F, 'BEGIN  { print "Size,Count" } NR > 1 { a[$$3]++ } \
81                         END { for (i in a) print i "," a[i] }' $< | sort > $@
82
83 .PHONY: plot
84 plot: $(graphs)
85
86 $(PLOT_DIR)/%.c.eps: $(STAT_DIR)/%.c.csv plot-c.gpi
87         $(P_PLOT) sed "s|@@PRG@@|$(*F)|g; s|@@COL@@|$(VERS)|g; \
88                         s|@@IN@@|$<|g; s|@@OUT@@|$@|g" $(lastword $^) \
89                 | $(GNUPLOT)
90
91 .PHONY: clean
92 clean:
93         $(RM) -r $(BUILD_DIR)
94