1XEN_ROOT := $(CURDIR)/../../../
2include $(XEN_ROOT)/tools/Rules.mk
3
4MAJOR              = 1.0
5MINOR              = 0
6LIBNAME            = libblktapctl
7LIBSONAME          = $(LIBNAME).so.$(MAJOR)
8
9IBIN               = tap-ctl
10
11CFLAGS            += -Werror
12CFLAGS            += -Wno-unused
13CFLAGS            += -I../include -I../drivers
14CFLAGS            += $(CFLAGS_xeninclude)
15CFLAGS            += $(CFLAGS_libxenctrl)
16CFLAGS            += -D_GNU_SOURCE
17CFLAGS            += -DTAPCTL
18
19CTL_OBJS  := tap-ctl-ipc.o
20CTL_OBJS  += tap-ctl-list.o
21CTL_OBJS  += tap-ctl-allocate.o
22CTL_OBJS  += tap-ctl-free.o
23CTL_OBJS  += tap-ctl-create.o
24CTL_OBJS  += tap-ctl-destroy.o
25CTL_OBJS  += tap-ctl-spawn.o
26CTL_OBJS  += tap-ctl-attach.o
27CTL_OBJS  += tap-ctl-detach.o
28CTL_OBJS  += tap-ctl-open.o
29CTL_OBJS  += tap-ctl-close.o
30CTL_OBJS  += tap-ctl-pause.o
31CTL_OBJS  += tap-ctl-unpause.o
32CTL_OBJS  += tap-ctl-major.o
33CTL_OBJS  += tap-ctl-check.o
34
35CTL_PICS  = $(patsubst %.o,%.opic,$(CTL_OBJS))
36
37OBJS = $(CTL_OBJS) tap-ctl.o
38PICS = $(CTL_PICS)
39
40LIB_STATIC = $(LIBNAME).a
41LIB_SHARED = $(LIBSONAME).$(MINOR)
42IBIN = tap-ctl
43
44PKG_CONFIG := xenblktapctl.pc
45PKG_CONFIG_VERSION := $(MAJOR).$(MINOR)
46
47ifneq ($(CONFIG_LIBXC_MINIOS),y)
48PKG_CONFIG_INST := $(PKG_CONFIG)
49$(PKG_CONFIG_INST): PKG_CONFIG_PREFIX = $(prefix)
50$(PKG_CONFIG_INST): PKG_CONFIG_INCDIR = $(includedir)
51$(PKG_CONFIG_INST): PKG_CONFIG_LIBDIR = $(libdir)
52endif
53
54PKG_CONFIG_LOCAL := $(foreach pc,$(PKG_CONFIG),$(PKG_CONFIG_DIR)/$(pc))
55
56$(PKG_CONFIG_LOCAL): PKG_CONFIG_PREFIX = $(XEN_ROOT)
57$(PKG_CONFIG_LOCAL): PKG_CONFIG_INCDIR = $(XEN_BLKTAP2)/include
58$(PKG_CONFIG_LOCAL): PKG_CONFIG_LIBDIR = $(CURDIR)
59$(PKG_CONFIG_LOCAL): PKG_CONFIG_CFLAGS_LOCAL = $(CFLAGS_xeninclude) $(CFLAGS_libxenctrl)
60
61all: build
62
63build: $(IBIN) $(LIB_STATIC) $(LIB_SHARED) $(PKG_CONFIG_INST) $(PKG_CONFIG_LOCAL)
64
65$(LIBNAME).so: $(LIBSONAME)
66	ln -sf $< $@
67
68$(LIBSONAME): $(LIB_SHARED)
69	ln -sf $< $@
70
71tap-ctl: tap-ctl.o $(LIBNAME).so
72	$(CC) $(LDFLAGS) -o $@ $^ $(APPEND_LDFLAGS)
73
74$(LIB_STATIC): $(CTL_OBJS)
75	$(AR) r $@ $^
76
77$(LIB_SHARED): $(CTL_PICS)
78	$(CC) $(LDFLAGS) -fPIC  -Wl,$(SONAME_LDFLAG) -Wl,$(LIBSONAME) $(SHLIB_LDFLAGS) -rdynamic $^ -o $@  $(APPEND_LDFLAGS)
79
80install: build
81	$(INSTALL_DIR) -p $(DESTDIR)$(sbindir)
82	$(INSTALL_PROG) $(IBIN) $(DESTDIR)$(sbindir)
83	$(INSTALL_DATA) $(LIB_STATIC) $(DESTDIR)$(libdir)
84	$(INSTALL_PROG) $(LIB_SHARED) $(DESTDIR)$(libdir)
85	ln -sf $(LIBSONAME) $(DESTDIR)$(libdir)/$(LIBNAME).so
86	ln -sf $(LIB_SHARED) $(DESTDIR)$(libdir)/$(LIBSONAME)
87	$(INSTALL_DATA) xenblktapctl.pc $(DESTDIR)$(PKG_INSTALLDIR)
88
89clean:
90	rm -f $(OBJS) $(PICS) $(DEPS_RM) $(IBIN) $(LIB_STATIC) $(LIB_SHARED)
91	rm -f $(LIBNAME).so $(LIBSONAME)
92	rm -f *~
93	rm -f xenblktapctl.pc
94
95uninstall:
96	rm -f $(DESTDIR)$(PKG_INSTALLDIR)/xenblktapctl.pc
97	rm -f $(DESTDIR)$(libdir)/$(LIBSONAME)
98	rm -f $(DESTDIR)$(libdir)/$(LIBNAME).so
99	rm -f $(addprefix $(DESTDIR)$(libdir)/, $(LIB_SHARED))
100	rm -f $(addprefix $(DESTDIR)$(libdir)/, $(LIB_STATIC))
101	rm -f $(addprefix $(DESTDIR)$(sbindir)/, $(IBIN))
102
103distclean: clean
104
105.PHONY: all build clean distclean install uninstall
106
107-include $(DEPS_INCLUDE)
108