-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathMakefile
98 lines (71 loc) · 3.07 KB
/
Makefile
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
SHELL = /bin/sh
CC = gcc
FLAGS = -std=gnu99 -Iinclude
CFLAGS = -pedantic -Wall -Wextra -march=native -ggdb3
LIBS = -lm
DEBUGFLAGS = -O0 -D _DEBUG
RELEASEFLAGS = -O3 -D NDEBUG
SOURCES = $(shell echo src/*.c)
COMMON = include/definitions.h include/debug.h
HEADERS = $(shell echo include/*.h)
OBJECTS = $(SOURCES:.c=.o)
COBJECTS= src/debug.o
CSOURCES= src/debug.c
BINARIES= bubble_sort matrix_multiplication pi_calculation
PREFIX = $(DESTDIR)/usr/local
BINDIR = $(PREFIX)/bin
INSTALLATION_PATH = /tmp
PMU_TOOLS_PATH = $(INSTALLATION_PATH)/pmu-tools
AUTOFDO_PATH = $(INSTALLATION_PATH)/autofdo
all: $(BINARIES)
# $(TARGET): src/main.o $(OBJECTS) $(COMMON)
# $(CC) $(FLAGS) $(CFLAGS) $(LIBS) $(DEBUGFLAGS) -o $@ $(OBJECTS)
# release: $(SOURCES) $(HEADERS) $(COMMON)
# $(CC) $(FLAGS) $(CFLAGS) $(LIBS) $(RELEASEFLAGS) -o $(TARGET) $(SOURCES)
release: $(SOURCES) $(HEADERS) $(COMMON) $(CSOURCES)
$(foreach BINARY,$(BINARIES),$(CC) $(FLAGS) $(CFLAGS) $(LIBS) $(RELEASEFLAGS) -o $(BINARY) src/$(BINARY).c $(CSOURCES);)
# install: release
# install -D $(TARGET) $(BINDIR)/$(TARGET)
# install-strip: release
# install -D -s $(TARGET) $(BINDIR)/$(TARGET)
# uninstall:
# -rm $(BINDIR)/$(TARGET)
clean:
-rm -f $(OBJECTS)
cleanfdo:
-rm -f *.data*
-rm -f *.afdo*
-rm -f *.gcda
distclean:
@find . -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print | xargs rm -f
default:
gcc main.c bubble_sort.c pi_calculation.c matrix_multiplication.c -lm -o demo
remove:
rm -rf demo*
rm -rf *.data*
rm -rf *.afdo*
rm -rf *.gcda
normalfdo:
$(CC) -g3 $(FLAGS) $(LIBS) src/debug.c src/bubble_sort.c -o bubble_sort -fprofile-generate
./bubble_sort
$(CC) $(FLAGS) $(LIBS) -O3 src/debug.c src/bubble_sort.c -o bubble_sort -fprofile-use="*.gcda"
./bubble_sort
# autofdo: $(BINARIES)
# ~/pmu-tools/ocperf.py record -b -e br_inst_retired.near_taken -- ./demo
# /tmp/autofdo/create_gcov --binary=./demo --profile=perf.data --gcov=demo.afdo -gcov_version=1
# $(CC) $(FLAGS) $(LIBS) -O3 -fauto-profile=demo.afdo $(SOURCES) -o demo_autofdo
autofdo: $(BINARIES) $(PMU_TOOLS_PATH)/ocperf.py $(AUTOFDO_PATH)/create_gcov
$(foreach BINARY,$(BINARIES),$(PMU_TOOLS_PATH)/ocperf.py record -b -e br_inst_retired.near_taken -- ./$(BINARY);$(AUTOFDO_PATH)/create_gcov --binary=./$(BINARY) --profile=perf.data --gcov=$(BINARY).afdo -gcov_version=1;)
$(PMU_TOOLS_PATH)/ocperf.py:
git clone https://github.com/andikleen/pmu-tools.git $(PMU_TOOLS_PATH)
$(AUTOFDO_PATH)/create_gcov:
./install_autofdo.sh $(INSTALLATION_PATH)
bubble_sort: src/bubble_sort.o $(COBJECTS) $(HEADERS) $(COMMON)
$(CC) $(FLAGS) $(CFLAGS) $(LIBS) $(DEBUGFLAGS) -o $@ $< $(COBJECTS)
matrix_multiplication: src/matrix_multiplication.o $(COBJECTS) $(HEADERS) $(COMMON)
$(CC) $(FLAGS) $(CFLAGS) $(LIBS) $(DEBUGFLAGS) -o $@ $< $(COBJECTS)
pi_calculation: src/pi_calculation.o $(COBJECTS) $(HEADERS) $(COMMON)
$(CC) $(FLAGS) $(CFLAGS) $(LIBS) $(DEBUGFLAGS) -o $@ $< $(COBJECTS)
%.o: %.c $(HEADERS) $(COMMON)
$(CC) $(FLAGS) $(CFLAGS) $(DEBUGFLAGS) -c -o $@ $<
.PHONY : all release clean distclean autofdo