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