1XEN_ROOT=$(CURDIR)/../../..
2BLKTAP_ROOT= ..
3include $(XEN_ROOT)/tools/Rules.mk
4
5LIBVHDDIR  = $(BLKTAP_ROOT)/vhd/lib
6
7IBIN       = tapdisk2 td-util tapdisk-client tapdisk-stream tapdisk-diff
8QCOW_UTIL  = img2qcow qcow-create qcow2raw
9LOCK_UTIL  = lock-util
10INST_DIR   = $(sbindir)
11
12CFLAGS    += -Werror
13CFLAGS    += -Wno-unused
14CFLAGS    += -fno-strict-aliasing
15CFLAGS    += -I$(BLKTAP_ROOT)/include -I$(BLKTAP_ROOT)/drivers
16CFLAGS    += $(CFLAGS_libxenctrl)
17CFLAGS    += -D_GNU_SOURCE
18CFLAGS    += -DUSE_NFS_LOCKS
19# drivers/block-log.c incorrectly uses libxc internals
20CFLAGS    += -I$(XEN_ROOT)/tools/libxc
21
22ifeq ($(CONFIG_X86_64),y)
23CFLAGS            += -fPIC
24endif
25
26VHDLIBS    := -L$(LIBVHDDIR) -lvhd
27
28REMUS-OBJS  := block-remus.o
29REMUS-OBJS  += hashtable.o
30REMUS-OBJS  += hashtable_itr.o
31REMUS-OBJS  += hashtable_utility.o
32
33tapdisk2 tapdisk-stream tapdisk-diff $(QCOW_UTIL): AIOLIBS := -laio
34
35MEMSHRLIBS :=
36ifeq ($(CONFIG_Linux), __fixme__)
37MEMSHR_DIR = $(XEN_ROOT)/tools/memshr
38CFLAGS += -DMEMSHR
39CFLAGS += -I $(MEMSHR_DIR)
40MEMSHRLIBS += -L$(XEN_ROOT)/tools/libxc -lxenctrl $(MEMSHR_DIR)/libmemshr.a
41endif
42
43ifeq ($(VHD_STATIC),y)
44td-util: CFLAGS += -static
45endif
46
47PORTABLE-OBJS-y :=
48PORTABLE-OBJS-$(CONFIG_Linux)  += blk_linux.o
49PORTABLE-OBJS-$(CONFIG_NetBSD) += blk_netbsd.o
50
51TAP-OBJS-y  := scheduler.o
52TAP-OBJS-y  += tapdisk-vbd.o
53TAP-OBJS-y  += tapdisk-control.o
54TAP-OBJS-y  += tapdisk-image.o
55TAP-OBJS-y  += tapdisk-driver.o
56TAP-OBJS-y  += tapdisk-disktype.o
57TAP-OBJS-y  += tapdisk-interface.o
58TAP-OBJS-y  += tapdisk-server.o
59TAP-OBJS-y  += tapdisk-queue.o
60TAP-OBJS-y  += tapdisk-filter.o
61TAP-OBJS-y  += tapdisk-log.o
62TAP-OBJS-y  += tapdisk-utils.o
63TAP-OBJS-y  += io-optimize.o
64TAP-OBJS-y  += lock.o
65TAP-OBJS-y  += $(PORTABLE-OBJS-y)
66
67MISC-OBJS-y := atomicio.o
68
69BLK-OBJS-y  := block-aio.o
70BLK-OBJS-y  += block-ram.o
71BLK-OBJS-y  += block-cache.o
72BLK-OBJS-y  += block-vhd.o
73BLK-OBJS-y  += block-log.o
74BLK-OBJS-y  += block-qcow.o
75BLK-OBJS-y  += aes.o
76BLK-OBJS-y  += md5.o
77BLK-OBJS-y  += $(PORTABLE-OBJS-y)
78BLK-OBJS-y  += $(REMUS-OBJS)
79
80all: $(IBIN) lock-util qcow-util
81
82
83tapdisk2: $(TAP-OBJS-y) $(BLK-OBJS-y) $(MISC-OBJS-y) tapdisk2.o
84	$(CC) -o $@ $^ $(LDFLAGS) -lrt -lz $(VHDLIBS) $(AIOLIBS) $(MEMSHRLIBS) -lm  $(APPEND_LDFLAGS)
85
86tapdisk-client: tapdisk-client.o
87	$(CC) -o $@ $^ $(LDFLAGS) -lrt $(APPEND_LDFLAGS)
88
89tapdisk-stream tapdisk-diff: %: %.o $(TAP-OBJS-y) $(BLK-OBJS-y)
90	$(CC) -o $@ $^ $(LDFLAGS) -lrt -lz $(VHDLIBS) $(AIOLIBS) $(MEMSHRLIBS) -lm $(APPEND_LDFLAGS)
91
92td-util: td.o tapdisk-utils.o tapdisk-log.o $(PORTABLE-OBJS-y)
93	$(CC) -o $@ $^ $(LDFLAGS) $(VHDLIBS) $(APPEND_LDFLAGS)
94
95lock-util: lock.c
96	$(CC) $(CFLAGS) -DUTIL -o lock-util lock.c $(LDFLAGS) $(APPEND_LDFLAGS)
97
98.PHONY: qcow-util
99qcow-util: img2qcow qcow2raw qcow-create
100
101img2qcow qcow2raw qcow-create: %: %.o $(TAP-OBJS-y) $(BLK-OBJS-y)
102	$(CC) -o $@ $^ $(LDFLAGS) -lrt -lz $(VHDLIBS) $(AIOLIBS) $(MEMSHRLIBS) -lm $(APPEND_LDFLAGS)
103
104install: all
105	$(INSTALL_DIR) -p $(DESTDIR)$(INST_DIR)
106	$(INSTALL_PROG) $(IBIN) $(LOCK_UTIL) $(QCOW_UTIL) $(DESTDIR)$(INST_DIR)
107
108uninstall:
109	rm -f $(addprefix $(DESTDIR)$(INST_DIR)/, $(IBIN) $(LOCK_UTIL) $(QCOW_UTIL))
110
111clean:
112	rm -rf .*.d *.o *~ xen TAGS $(IBIN) $(LIB) $(LOCK_UTIL) $(QCOW_UTIL)
113
114distclean: clean
115
116.PHONY: clean install distclean uninstall
117