1XEN_ROOT = $(CURDIR)/../../..
2OCAML_TOPLEVEL = $(CURDIR)/..
3include $(OCAML_TOPLEVEL)/common.make
4
5# Include configure output (config.h)
6CFLAGS += -include $(XEN_ROOT)/tools/config.h
7CFLAGS-$(CONFIG_SYSTEMD)  += $(CFLAGS_xeninclude)
8
9CFLAGS  += $(CFLAGS-y)
10CFLAGS  += $(APPEND_CFLAGS)
11LDFLAGS += $(LDFLAGS-y)
12LDFLAGS += $(APPEND_LDFLAGS)
13
14OCAMLINCLUDE += \
15	-I $(OCAML_TOPLEVEL)/libs/xb \
16	-I $(OCAML_TOPLEVEL)/libs/mmap \
17	-I $(OCAML_TOPLEVEL)/libs/xc \
18	-I $(OCAML_TOPLEVEL)/libs/eventchn
19
20LIBS = syslog.cma syslog.cmxa poll.cma poll.cmxa
21syslog_OBJS = syslog
22syslog_C_OBJS = syslog_stubs
23poll_OBJS = poll
24poll_C_OBJS = select_stubs
25OCAML_LIBRARY = syslog poll
26
27LIBS += systemd.cma systemd.cmxa
28systemd_OBJS = systemd
29systemd_C_OBJS = systemd_stubs
30OCAML_LIBRARY += systemd
31
32LIBS_systemd += $(LDFLAGS-y)
33
34OBJS = paths \
35	define \
36	stdext \
37	trie \
38	config \
39	packet \
40	logging \
41	quota \
42	perms \
43	symbol \
44	utils \
45	store \
46	disk \
47	transaction \
48	event \
49	domain \
50	domains \
51	connection \
52	connections \
53	history \
54	parse_arg \
55	process \
56	xenstored
57
58INTF = symbol.cmi trie.cmi syslog.cmi systemd.cmi poll.cmi
59
60XENSTOREDLIBS = \
61	unix.cmxa \
62	-ccopt -L -ccopt . syslog.cmxa \
63	-ccopt -L -ccopt . systemd.cmxa \
64	-ccopt -L -ccopt . poll.cmxa \
65	-ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/mmap $(OCAML_TOPLEVEL)/libs/mmap/xenmmap.cmxa \
66	-ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/eventchn $(OCAML_TOPLEVEL)/libs/eventchn/xeneventchn.cmxa \
67	-ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/xc $(OCAML_TOPLEVEL)/libs/xc/xenctrl.cmxa \
68	-ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/xb $(OCAML_TOPLEVEL)/libs/xb/xenbus.cmxa \
69	-ccopt -L -ccopt $(XEN_ROOT)/tools/libs/ctrl
70
71PROGRAMS = oxenstored
72
73oxenstored_LIBS = $(XENSTOREDLIBS)
74# use ocamldep to figure out link order, otherwise the Makefile would have
75# to be continously adjusted for security patches that introduce new
76# dependencies between files
77oxenstored_MLSORTED = $(shell $(OCAMLDEP) -sort $(OBJS:=.ml))
78oxenstored_OBJS = $(oxenstored_MLSORTED:.ml=)
79
80OCAML_PROGRAM = oxenstored
81
82all: $(INTF) $(LIBS) $(PROGRAMS)
83
84bins: $(PROGRAMS)
85
86libs: $(LIBS)
87
88install: all
89	$(INSTALL_DIR) $(DESTDIR)$(sbindir)
90	$(INSTALL_PROG) oxenstored $(DESTDIR)$(sbindir)
91	$(INSTALL_DIR) $(DESTDIR)$(XEN_CONFIG_DIR)
92	$(INSTALL_DATA) oxenstored.conf $(DESTDIR)$(XEN_CONFIG_DIR)
93
94uninstall:
95	rm -f $(DESTDIR)$(XEN_CONFIG_DIR)/oxenstored.conf
96	rm -f $(DESTDIR)$(sbindir)/oxenstored
97
98include $(OCAML_TOPLEVEL)/Makefile.rules
99