@@ -8,7 +8,7 @@ OBJS = xeneventchn
INTF = $(foreach obj, $(OBJS),$(obj).cmi)
LIBS = xeneventchn.cma xeneventchn.cmxa
-LIBS_xeneventchn = $(LDLIBS_libxenevtchn)
+LIBS_xeneventchn = $(call xenlibs-ldflags-ldlibs,evtchn)
all: $(INTF) $(LIBS) $(PROGRAMS)
@@ -10,7 +10,7 @@ OBJS = xenctrl
INTF = xenctrl.cmi
LIBS = xenctrl.cma xenctrl.cmxa
-LIBS_xenctrl = $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest)
+LIBS_xenctrl = $(call xenlibs-ldflags-ldlibs,ctrl guest)
xenctrl_OBJS = $(OBJS)
xenctrl_C_OBJS = xenctrl_stubs
@@ -13,7 +13,7 @@ OBJS = xentoollog
INTF = xentoollog.cmi
LIBS = xentoollog.cma xentoollog.cmxa
-LIBS_xentoollog = $(LDLIBS_libxentoollog)
+LIBS_xentoollog = $(call xenlibs-ldflags-ldlibs,toollog)
xentoollog_OBJS = $(OBJS)
xentoollog_C_OBJS = xentoollog_stubs
@@ -15,7 +15,7 @@ LIBS = xenlight.cma xenlight.cmxa
OCAMLINCLUDE += -I ../xentoollog
-LIBS_xenlight = $(LDLIBS_libxenlight)
+LIBS_xenlight = $(call xenlibs-ldflags-ldlibs,light)
xenlight_OBJS = $(OBJS)
xenlight_C_OBJS = xenlight_stubs
@@ -113,6 +113,14 @@ define xenlibs-ldflags
$(foreach lib,$(1),-L$(XEN_ROOT)/tools/libs/$(lib))
endef
+# Flags for linking against all Xen libraries listed in $(1) but by making use
+# of -L and -l instead of providing a path to the shared library.
+define xenlibs-ldflags-ldlibs
+ $(call xenlibs-ldflags,$(1)) \
+ $(foreach lib,$(1), -l$(FILENAME_$(lib))) \
+ $(foreach lib,$(1),$(xenlibs-ldlibs-$(lib)))
+endef
+
define LIB_defs
FILENAME_$(1) ?= xen$(1)
XEN_libxen$(1) = $$(XEN_ROOT)/tools/libs/$(1)
Using a full path to the C libraries when preparing one of the ocaml binding for those libraries make the binding unusable by external project. The full path is somehow embedded and reused by the external project when linking against the binding. Instead, we will use the proper way to link a library, by using '-l'. For in-tree build, we also need to provide the search directory via '-L'. (The search path -L are still be embedded, but at least that doesn't prevent the ocaml binding from been used.) Related-to: xen-project/xen#96 Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> --- Notes: This patch only partially resolve xen-project/xen#96. At least with this patch, the ocaml binding can be used by external project, but those project will still "see" and try to use the rpath and lib search path as the -L and -W,-rpath-link are still embedded in the ocaml binding. I'm working on a more involve series of patch which would remove the unnecessary flags. (This would mean that oxenstored and the ocaml test will need those ldflags, instead of the binding.) v5: - new patch tools/ocaml/libs/eventchn/Makefile | 2 +- tools/ocaml/libs/xc/Makefile | 2 +- tools/ocaml/libs/xentoollog/Makefile | 2 +- tools/ocaml/libs/xl/Makefile | 2 +- tools/Rules.mk | 8 ++++++++ 5 files changed, 12 insertions(+), 4 deletions(-)