1# libxenstat: statistics-collection library for Xen
2# Copyright (C) International Business Machines Corp., 2005
3# Author: Josh Triplett <josh@kernel.org>
4#
5# This library is free software; you can redistribute it and/or
6# modify it under the terms of the GNU Lesser General Public
7# License as published by the Free Software Foundation; either
8# version 2.1 of the License, or (at your option) any later version.
9#
10# This library is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13# Lesser General Public License for more details.
14
15XEN_ROOT=$(CURDIR)/../../..
16include $(XEN_ROOT)/tools/Rules.mk
17
18CFLAGS += -include $(XEN_ROOT)/tools/config.h
19
20OBJS-y += xenstat.o
21OBJS-y += xenstat_qmp.o
22OBJS-$(CONFIG_Linux) += xenstat_linux.o
23OBJS-$(CONFIG_SunOS) += xenstat_solaris.o
24OBJS-$(CONFIG_NetBSD) += xenstat_netbsd.o
25OBJS-$(CONFIG_FreeBSD) += xenstat_freebsd.o
26
27LDLIBS-y += -lyajl
28LDLIBS-$(CONFIG_SunOS) += -lkstat
29LDLIBS += $(LDLIBS-y)
30
31include $(XEN_ROOT)/tools/libs/libs.mk
32
33PYLIB=bindings/swig/python/_xenstat.so
34PYMOD=bindings/swig/python/xenstat.py
35PYSRC=bindings/swig/python/_xenstat.c
36PERLLIB=bindings/swig/perl/xenstat.so
37PERLMOD=bindings/swig/perl/xenstat.pm
38PERLSRC=bindings/swig/perl/xenstat.c
39BINDINGS=$(PYLIB) $(PYMOD) $(PERLLIB) $(PERLMOD)
40BINDINGSRC=$(PYSRC) $(PERLSRC)
41
42# The all-bindings target builds all the language bindings
43.PHONY: all-bindings
44all-bindings: perl-bindings python-bindings
45
46# The install-bindings target installs all the language bindings
47install-bindings: install-perl-bindings install-python-bindings
48
49.PHONY: uninstall-bindings
50uninstall-bindings: uninstall-perl-bindings uninstall-python-bindings
51
52$(BINDINGS): libxenstat.so
53
54SWIG_FLAGS = -module xenstat -I$(XEN_INCLUDE)
55SWIG_FLAGS += -MMD -MP -MF .$(if $(filter-out .,$(@D)),$(subst /,@,$(@D))@)$(@F).d
56
57# Python bindings
58$(PYMOD): $(PYSRC)
59$(PYSRC): bindings/swig/xenstat.i
60	mkdir -p $(@D)
61	swig -python $(SWIG_FLAGS) -outdir $(@D) -o $@ $<
62
63$(PYLIB): CFLAGS += $(shell $(PYTHON)-config --includes)
64$(PYLIB): CFLAGS += -fPIC
65$(PYLIB): CFLAGS += -Wno-missing-prototypes
66$(PYLIB): LDFLAGS += $(SHLIB_LDFLAGS)
67$(PYLIB): LDLIBS := $(shell $(PYTHON)-config --libs)
68$(PYLIB): LDLIBS += $(LDLIBS_libxenstat)
69$(PYLIB): $(PYSRC)
70	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LDLIBS) $(APPEND_LDFLAGS)
71
72.PHONY: python-bindings
73python-bindings: $(PYLIB) $(PYMOD)
74
75pythonlibdir = $(shell $(PYTHON) -c \
76	       'import sysconfig; \
77	        print(sysconfig.get_python_lib("platlib", vars={"platbase": "$(prefix)"}))')
78
79.PHONY: install-python-bindings
80install-python-bindings: $(PYLIB) $(PYMOD)
81	$(INSTALL_PROG) $(PYLIB) $(DESTDIR)$(pythonlibdir)/_xenstat.so
82	$(INSTALL_PROG) $(PYMOD) $(DESTDIR)$(pythonlibdir)/xenstat.py
83
84.PHONY: uninstall-python-bindings
85uninstall-python-bindings:
86	rm -f $(DESTDIR)$(pythonlibdir)/_xenstat.so
87	rm -f $(DESTDIR)$(pythonlibdir)/xenstat.py
88
89ifeq ($(XENSTAT_PYTHON_BINDINGS),y)
90.PHONY: all
91all: python-bindings
92install:: install-python-bindings
93uninstall:: uninstall-python-bindings
94endif
95
96# Perl bindings
97PERL_FLAGS = $(shell $(PERL) -MConfig -e 'print "$$Config{ccflags} -I$$Config{archlib}/CORE";')
98$(PERLMOD): $(PERLSRC)
99$(PERLSRC): bindings/swig/xenstat.i
100	mkdir -p $(@D)
101	swig -perl $(SWIG_FLAGS) -outdir $(@D) -o $@ $<
102
103$(PERLLIB): CFLAGS += -fPIC
104$(PERLLIB): CFLAGS += -Wno-strict-prototypes
105$(PERLLIB): CFLAGS += -Wno-missing-prototypes
106$(PERLLIB): LDFLAGS += $(PERL_FLAGS)
107$(PERLLIB): LDFLAGS += $(SHLIB_LDFLAGS)
108$(PERLLIB): LDLIBS := $(LDLIBS_libxenstat)
109$(PERLLIB): $(PERLSRC)
110	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(LDLIBS) $(APPEND_LDFLAGS)
111
112.PHONY: perl-bindings
113perl-bindings: $(PERLLIB) $(PERLMOD)
114
115.PHONY: install-perl-bindings
116perllibdir=$(prefix)/lib/perl5
117perlmoddir=$(prefix)/share/perl5
118install-perl-bindings: $(PERLLIB) $(PERLMOD)
119	$(INSTALL_PROG) $(PERLLIB) $(DESTDIR)$(perllibdir)/xenstat.so
120	$(INSTALL_PROG) $(PERLMOD) $(DESTDIR)$(perlmoddir)/xenstat.pm
121
122.PHONY: uninstall-perl-bindings
123uninstall-perl-bindings:
124	rm -f $(DESTDIR)$(perllibdir)/xenstat.so
125	rm -f $(DESTDIR)$(perlmoddir)/xenstat.pm
126
127ifeq ($(XENSTAT_PERL_BINDINGS),y)
128.PHONY: all
129all: perl-bindings
130
131.PHONY: install
132install:: install-perl-bindings
133uninstall:: uninstall-perl-bindings
134endif
135
136clean::
137	$(RM) $(BINDINGS) $(BINDINGSRC)
138