]> git.llucax.com Git - software/dgc/dgcbench.git/blob - micro/Makefile
Add some micro-benchmarks to plot GC statistics
[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 BASE_DIR  := build
11 BUILD_DIR := $(BASE_DIR)/$(VERS)
12 BIN_DIR   := $(BUILD_DIR)/bin
13 PLOT_DIR  := $(BUILD_DIR)/plot
14
15 sources  := $(wildcard *.d)
16 programs := $(addprefix $(BIN_DIR)/,$(sources:.d=))
17 graphs_c := $(addprefix $(PLOT_DIR)/,$(addsuffix .c.eps,$(sources:.d=)))
18 graphs   := $(graphs_c)
19
20 ifndef V
21 P      = @
22 P_DC   = @echo '  DC    $@';
23 P_LD   = @echo '  LD    $@';
24 P_CP   = @echo '  CP    $@';
25 P_PLOT = @echo '  PLOT  $@';
26 P_MAKE = @echo '  MAKE  $@';
27 P_RUN  = @echo '  RUN   $<';
28 endif
29
30 # create build directories if they don't already exist
31 ifneq ($(wildcard $(BIN_DIR) $(PLOT_DIR)),$(BIN_DIR) $(PLOT_DIR))
32 dummy_mkdir := $(shell mkdir -p $(BIN_DIR) $(PLOT_DIR))
33 endif
34
35 # don't use Gold with old DMDs
36 ifneq ($(shell ld --version | grep gold),)
37 export LD_ := /usr/bin/ld.single
38 endif
39
40 .PHONY: all
41 all: basic naive
42
43 .PHONY: naive basic
44 naive basic:
45         $(P_MAKE) $(MAKE) --no-print-directory build VERS=$@
46
47 .PHONY: build
48 build: $(programs)
49
50 $(BIN_DIR)/%: $(BIN_DIR)/%.o
51         $(P_LD) $(DC) $(DFLAGS) -of$@ $^
52
53 .INTERMEDIATE: $(BIN_DIR)/%.o
54 $(BIN_DIR)/%.o: %.d
55         $(P_DC) $(DC) $(DFLAGS) -c -of$@ $<
56
57 .PHONY: plot
58 plot: $(graphs)
59
60 $(PLOT_DIR)/%.c.eps: $(PLOT_DIR)/%.c.csv plot-c.gpi
61         $(P_PLOT) \
62         sed 's|@@PRG@@|$(*F)|g; s|@@COL@@|$(VERS)|g; s|@@IN@@|$<|g; s|@@OUT@@|$@|g' \
63         $(word 2,$^) | $(GNUPLOT)
64
65 .PRECIOUS: $(PLOT_DIR)/%.c.csv $(PLOT_DIR)/%.a.csv
66 $(PLOT_DIR)/%.c.csv $(PLOT_DIR)/%.a.csv: $(BIN_DIR)/%
67         $(P_RUN) ./$<
68         $P mv gc-collections.csv $(PLOT_DIR)/$*.c.csv
69         $P mv gc-mallocs.csv $(PLOT_DIR)/$*.a.csv
70
71 $(PLOT_DIR)/split.c.csv $(PLOT_DIR)/split.a.csv: $(BIN_DIR)/bible.txt
72
73 $(BIN_DIR)/bible.txt: bible.txt
74         $(P_CP) cp -l $< $@
75
76 .PHONY: dist-clean
77 dist-clean:
78         $(RM) -r $(BASE_DIR)
79
80 .PHONY: clean
81 clean:
82         $(RM) -r $(BUILD_DIR)
83