cache line locking on AMD x86_64 utilising L3 CAT pseudo-locking
2.0 kB
66 lines
1CC = gcc
2CFLAGS = -O2 -Wall -Wextra -Werror -fPIC -march=native -I include
3LDFLAGS = -lnuma -lpthread
4
5SRCDIR = src
6INCDIR = include
7OBJDIR = obj
8
9SRCS = $(wildcard $(SRCDIR)/*.c)
10OBJS = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SRCS))
11LIB_OBJS = $(filter-out $(OBJDIR)/main.o,$(OBJS))
12
13TARGET = icepick
14LIBRARY = libicepick.a
15SHARED = libicepick.so
16
17PREFIX ?= /usr/local
18BINDIR = $(PREFIX)/bin
19LIBDIR = $(PREFIX)/lib
20INCLUDEDIR = $(PREFIX)/include
21
22.PHONY: all clean install uninstall
23
24all: $(TARGET) $(LIBRARY) $(SHARED)
25
26$(OBJDIR):
27 mkdir -p $(OBJDIR)
28
29$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
30 $(CC) $(CFLAGS) -c $< -o $@
31
32$(LIBRARY): $(LIB_OBJS)
33 ar rcs $@ $^
34
35$(SHARED): $(LIB_OBJS)
36 $(CC) -shared -o $@ $^ $(LDFLAGS)
37
38$(TARGET): $(OBJDIR)/main.o $(LIBRARY)
39 $(CC) $(CFLAGS) $< -L. -licepick $(LDFLAGS) -o $@
40
41install: $(TARGET) $(LIBRARY) $(SHARED)
42 install -d $(BINDIR) $(LIBDIR) $(INCLUDEDIR)
43 install -m 755 $(TARGET) $(BINDIR)/
44 install -m 644 $(LIBRARY) $(LIBDIR)/
45 install -m 755 $(SHARED) $(LIBDIR)/
46 install -m 644 $(INCDIR)/icepick.h $(INCLUDEDIR)/
47
48uninstall:
49 rm -f $(BINDIR)/$(TARGET)
50 rm -f $(LIBDIR)/$(LIBRARY)
51 rm -f $(LIBDIR)/$(SHARED)
52 rm -f $(INCLUDEDIR)/icepick.h
53
54clean:
55 rm -rf $(OBJDIR) $(TARGET) $(LIBRARY) $(SHARED)
56
57$(OBJDIR)/msr.o: $(SRCDIR)/msr.c $(SRCDIR)/internal.h $(INCDIR)/icepick.h
58$(OBJDIR)/topology.o: $(SRCDIR)/topology.c $(SRCDIR)/internal.h $(INCDIR)/icepick.h
59$(OBJDIR)/clos.o: $(SRCDIR)/clos.c $(SRCDIR)/internal.h $(INCDIR)/icepick.h
60$(OBJDIR)/region.o: $(SRCDIR)/region.c $(SRCDIR)/internal.h $(INCDIR)/icepick.h
61$(OBJDIR)/lock.o: $(SRCDIR)/lock.c $(SRCDIR)/internal.h $(INCDIR)/icepick.h
62$(OBJDIR)/verify.o: $(SRCDIR)/verify.c $(SRCDIR)/internal.h $(INCDIR)/icepick.h
63$(OBJDIR)/bench.o: $(SRCDIR)/bench.c $(SRCDIR)/internal.h $(INCDIR)/icepick.h
64$(OBJDIR)/monitor.o: $(SRCDIR)/monitor.c $(SRCDIR)/internal.h $(INCDIR)/icepick.h
65$(OBJDIR)/mpam.o: $(SRCDIR)/mpam.c $(SRCDIR)/internal.h $(INCDIR)/icepick.h
66$(OBJDIR)/main.o: $(SRCDIR)/main.c $(SRCDIR)/internal.h $(INCDIR)/icepick.h