WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 5/7] [xen-ocaml-tools.hg] get xenstored to compile un

To: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH 5/7] [xen-ocaml-tools.hg] get xenstored to compile under minios
From: Alex Zeffertt <alex.zeffertt@xxxxxxxxxxxxx>
Date: Fri, 17 Apr 2009 16:44:33 +0100
Delivery-date: Fri, 17 Apr 2009 08:48:29 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.19 (X11/20090105)
  * support OCAMLC_CROSS_PREFIX instead of always linking against ocaml libs on
devel machine
  * caml.o, main-caml.o targets for use by xen-unstable.hg/stubdom/Makefile
  * do not call syslog/closelog on minios as they are not implemented

Integrate with xen-unstable.hg

Support being checked out under xen-unstable.hg/tools/ and used to build the 
xenstored
daemon instead of building the C version in xen-unstable.hg/tools/xenstore/.  
(Although
xen-unstable.hg/tools/xenstore/ will still be used to build the xenstore 
clients.)

Also support building xenstored as a stubdomain.  This however depends on the 
xenstored
stubdomain patch series for xen-unstable.hg and linux-2.6.18-xen.hg, and also 
the 
ocaml-crosscompile patch for xen-unstable.hg.

After applying this patch
 * this OCAML version of xenstored as a dom0 daemon should still build, and work
 * the OCAML version of the xenstore stubdom should build, but not work (that 
requires
   a later patch)

Signed-off-by: Alex Zeffertt <alex.zeffertt@xxxxxxxxxxxxx>

diff -r d9ac5ae2dbed bottom.make
--- a/bottom.make       Thu Mar 26 16:12:51 2009 +0000
+++ b/bottom.make       Tue Apr 07 16:20:28 2009 +0100
@@ -8,9 +8,6 @@
 
 %.cmx: %.ml
        $(OCAMLOPT) $(OCAMLOPTFLAGS) -c -o $@ $<
-
-%.o: %.c
-       $(CC) $(CFLAGS) -c -o $@ $<
 
 META: META.in
        sed 's/@VERSION@/$(VERSION)/g' < $< $o
diff -r d9ac5ae2dbed common.make
--- a/common.make       Thu Mar 26 16:12:51 2009 +0000
+++ b/common.make       Tue Apr 07 16:20:28 2009 +0100
@@ -1,14 +1,20 @@
-CC ?= gcc
-OCAMLOPT ?= ocamlopt
-OCAMLC ?= ocamlc
-OCAMLMKLIB ?= ocamlmklib
-OCAMLDEP ?= ocamldep
-
-CFLAGS = -Wall -fPIC -O2
+-include $(XEN_ROOT)/Config.mk
+CC ?= cc
+OCAMLOPT ?= $(OCAMLC_CROSS_PREFIX)ocamlopt
+OCAMLC ?= $(OCAMLC_CROSS_PREFIX)ocamlc
+OCAMLMKLIB ?= $(OCAMLC_CROSS_PREFIX)ocamlmklib
+OCAMLDEP ?= $(OCAMLC_CROSS_PREFIX)ocamldep
+OCAMLFIND ?= $(OCAMLC_CROSS_PREFIX)ocamlfind
+CAMLLIB = $(shell $(OCAMLC_CROSS_PREFIX)ocamlc -where)
 
 XEN_ROOT ?= $(TOPLEVEL)/../xen-unstable.hg
 XEN_DIST_ROOT ?= $(XEN_ROOT)/dist/install
-CFLAGS += -I$(XEN_DIST_ROOT)/usr/include
+CFLAGS += -Wall -fPIC -O2  -I$(CAMLLIB) -I$(XEN_DIST_ROOT)/usr/include
+
+ifneq ($(CONFIG_STUBDOM),)
+  DEF_CPPFLAGS += -I$(CAMLLIB)
+  CFLAGS += -DHAVE_LIBXC
+endif
 
 OCAMLOPTFLAG_G := $(shell $(OCAMLOPT) -h 2>&1 | sed -n 's/^  *\(-g\) .*/\1/p')
 OCAMLOPTFLAGS = $(OCAMLOPTFLAG_G) -dtypes $(OCAMLINCLUDE) -cc $(CC)
@@ -19,8 +25,8 @@
 DESTDIR ?= /
 VERSION := $(shell hg parents --template "{rev}" 2>/dev/null || echo 0.0)
 
-OCAMLABI := $(shell ocamlc -version)
-OCAMLLIBDIR := $(shell ocamlc -where)
+OCAMLABI := $(shell $(OCAMLC_CROSS_PREFIX)ocamlc -version)
+OCAMLLIBDIR := $(shell $(OCAMLC_CROSS_PREFIX)ocamlc -where)
 OCAMLDESTDIR ?= $(OCAMLLIBDIR)
 
 o= >$@.new && mv -f $@.new $@
diff -r d9ac5ae2dbed libs/eventchn/Makefile
--- a/libs/eventchn/Makefile    Thu Mar 26 16:12:51 2009 +0000
+++ b/libs/eventchn/Makefile    Tue Apr 07 16:20:28 2009 +0100
@@ -26,11 +26,11 @@
 
 .PHONY: install
 install: $(LIBS) META
-       ocamlfind install -destdir $(DESTDIR)$(shell ocamlfind printconf 
destdir) -ldconf ignore eventchn META $(INTF) $(LIBS) *.a *.so *.cmx
+       $(OCAMLFIND) install -destdir $(DESTDIR)$(shell $(OCAMLFIND) printconf 
destdir) -ldconf ignore eventchn META $(INTF) $(LIBS) *.a *.so *.cmx
 
 .PHONY: uninstall
 uninstall:
-       ocamlfind remove eventchn
+       $(OCAMLFIND) remove eventchn
 
 include $(TOPLEVEL)/bottom.make
 
diff -r d9ac5ae2dbed libs/log/Makefile
--- a/libs/log/Makefile Thu Mar 26 16:12:51 2009 +0000
+++ b/libs/log/Makefile Tue Apr 07 16:20:28 2009 +0100
@@ -34,11 +34,11 @@
 
 .PHONY: install
 install: $(LIBS) META
-       ocamlfind install -destdir $(DESTDIR)$(shell ocamlfind printconf 
destdir) -ldconf ignore log META $(INTF) $(LIBS) *.a *.so *.cmx
+       $(OCAMLFIND) install -destdir $(DESTDIR)$(shell $(OCAMLFIND) printconf 
destdir) -ldconf ignore log META $(INTF) $(LIBS) *.a *.so *.cmx
 
 .PHONY: uninstall
 uninstall:
-       ocamlfind remove log
+       $(OCAMLFIND) remove log
 
 include $(TOPLEVEL)/bottom.make
 
diff -r d9ac5ae2dbed libs/log/syslog_stubs.c
--- a/libs/log/syslog_stubs.c   Thu Mar 26 16:12:51 2009 +0000
+++ b/libs/log/syslog_stubs.c   Tue Apr 07 16:20:28 2009 +0100
@@ -19,6 +19,8 @@
 #include <caml/memory.h>
 #include <caml/alloc.h>
 #include <caml/custom.h>
+
+#ifndef __MINIOS__
 
 static int __syslog_level_table[] = {
        LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING,
@@ -71,3 +73,17 @@
        closelog();
        CAMLreturn(Val_unit);
 }
+
+#else 
+/* MINIOS StubDOM TODO: We need to redirect this to dom0 somehow ... */
+value stub_syslog(value facility, value level, value msg) 
+{
+       CAMLparam3(facility, level, msg);
+       CAMLreturn(Val_unit);
+}
+value stub_closelog(value unit)
+{
+       CAMLparam1(unit);
+       CAMLreturn(Val_unit);
+}
+#endif /* __MINIOS__ */
diff -r d9ac5ae2dbed libs/mmap/Makefile
--- a/libs/mmap/Makefile        Thu Mar 26 16:12:51 2009 +0000
+++ b/libs/mmap/Makefile        Tue Apr 07 16:20:28 2009 +0100
@@ -26,11 +26,11 @@
 
 .PHONY: install
 install: $(LIBS) META
-       ocamlfind install -destdir $(DESTDIR)$(shell ocamlfind printconf 
destdir) -ldconf ignore mmap META $(INTF) $(LIBS) *.a *.so *.cmx
+       $(OCAMLFIND) install -destdir $(DESTDIR)$(shell $(OCAMLFIND) printconf 
destdir) -ldconf ignore mmap META $(INTF) $(LIBS) *.a *.so *.cmx
 
 .PHONY: uninstall
 uninstall:
-       ocamlfind remove mmap
+       $(OCAMLFIND) remove mmap
 
 include $(TOPLEVEL)/bottom.make
 
diff -r d9ac5ae2dbed libs/stdext/Makefile
--- a/libs/stdext/Makefile      Thu Mar 26 16:12:51 2009 +0000
+++ b/libs/stdext/Makefile      Tue Apr 07 16:20:28 2009 +0100
@@ -3,10 +3,7 @@
 
 OCAMLINCLUDE += -I ../uuid
 
-OCAML_TEST_INC = -I $(shell ocamlfind query oUnit)
-OCAML_TEST_LIB = $(shell ocamlfind query oUnit)/oUnit.cmxa
-
-OBJS = filenameext stringext hashtblext listext pervasiveext threadext trie 
opt unixext
+OBJS = filenameext stringext hashtblext listext pervasiveext trie opt unixext 
 INTF = $(foreach obj, $(OBJS),$(obj).cmi)
 LIBS = stdext.cma stdext.cmxa
 
@@ -30,22 +27,13 @@
        $(OCAMLMKLIB) -o stdext_stubs $+
 
 ## OBJS
-threadext.cmo: threadext.ml
-       $(OCAMLC) $(OCAMLCFLAGS) -thread -c -o $@ $<
-
-threadext.cmi: threadext.mli
-       $(OCAMLC) $(OCAMLCFLAGS) -thread -c -o $@ $<
-
-threadext.cmx: threadext.ml
-       $(OCAMLOPT) $(OCAMLOPTFLAGS) -thread -c -o $@ $<
-
 .PHONY: install
 install: $(LIBS) META
-       ocamlfind install -destdir $(DESTDIR)$(shell ocamlfind printconf 
destdir) -ldconf ignore stdext META $(INTF) $(LIBS) *.a *.so *.cmx
+       $(OCAMLFIND) install -destdir $(DESTDIR)$(shell $(OCAMLFIND) printconf 
destdir) -ldconf ignore stdext META $(INTF) $(LIBS) *.a *.so *.cmx
 
 .PHONY: uninstall
 uninstall:
-       ocamlfind remove stdext
+       $(OCAMLFIND) remove stdext
 
 include $(TOPLEVEL)/bottom.make
 
diff -r d9ac5ae2dbed libs/uuid/Makefile
--- a/libs/uuid/Makefile        Thu Mar 26 16:12:51 2009 +0000
+++ b/libs/uuid/Makefile        Tue Apr 07 16:20:28 2009 +0100
@@ -19,11 +19,11 @@
 
 .PHONY: install
 install: $(LIBS) META
-       ocamlfind install -destdir $(DESTDIR)$(shell ocamlfind printconf 
destdir) -ldconf ignore uuid META $(INTF) $(LIBS) *.a *.cmx
+       $(OCAMLFIND) install -destdir $(DESTDIR)$(shell $(OCAMLFIND) printconf 
destdir) -ldconf ignore uuid META $(INTF) $(LIBS) *.a *.cmx
 
 .PHONY: uninstall
 uninstall:
-       ocamlfind remove uuid
+       $(OCAMLFIND) remove uuid
 
 include $(TOPLEVEL)/bottom.make
 
diff -r d9ac5ae2dbed libs/xb/Makefile
--- a/libs/xb/Makefile  Thu Mar 26 16:12:51 2009 +0000
+++ b/libs/xb/Makefile  Tue Apr 07 16:20:28 2009 +0100
@@ -40,10 +40,10 @@
 
 .PHONY: install
 install: $(LIBS) META
-       ocamlfind install -destdir $(DESTDIR)$(shell ocamlfind printconf 
destdir) -ldconf ignore xb META $(INTF) $(LIBS) *.a *.so *.cmx
+       $(OCAMLFIND) install -destdir $(DESTDIR)$(shell $(OCAMLFIND) printconf 
destdir) -ldconf ignore xb META $(INTF) $(LIBS) *.a *.so *.cmx
 
 .PHONY: uninstall
 uninstall:
-       ocamlfind remove xb
+       $(OCAMLFIND) remove xb
 
 include $(TOPLEVEL)/bottom.make
diff -r d9ac5ae2dbed libs/xc/Makefile
--- a/libs/xc/Makefile  Thu Mar 26 16:12:51 2009 +0000
+++ b/libs/xc/Makefile  Tue Apr 07 16:20:28 2009 +0100
@@ -29,11 +29,11 @@
 
 .PHONY: install
 install: $(LIBS) META
-       ocamlfind install -destdir $(DESTDIR)$(shell ocamlfind printconf 
destdir) -ldconf ignore xc META $(INTF) $(LIBS) *.a *.so *.cmx
+       $(OCAMLFIND) install -destdir $(DESTDIR)$(shell $(OCAMLFIND) printconf 
destdir) -ldconf ignore xc META $(INTF) $(LIBS) *.a *.so *.cmx
 
 .PHONY: uninstall
 uninstall:
-       ocamlfind remove xc
+       $(OCAMLFIND) remove xc
 
 
 include $(TOPLEVEL)/bottom.make
diff -r d9ac5ae2dbed libs/xc/xc_stubs.c
--- a/libs/xc/xc_stubs.c        Thu Mar 26 16:12:51 2009 +0000
+++ b/libs/xc/xc_stubs.c        Tue Apr 07 16:20:28 2009 +0100
@@ -24,6 +24,7 @@
 #include <caml/fail.h>
 #include <caml/callback.h>
 
+#include <sys/types.h>
 #include <sys/mman.h>
 #include <stdint.h>
 #include <string.h>
@@ -31,10 +32,6 @@
 #include "xc.h"
 
 #include "mmap_stubs.h"
-
-#define PAGE_SHIFT             12
-#define PAGE_SIZE               (1UL << PAGE_SHIFT)
-#define PAGE_MASK               (~(PAGE_SIZE-1))
 
 #define _H(__h) (Int_val(__h))
 #define _D(__d) ((uint32_t)Int_val(__d))
@@ -49,7 +46,7 @@
        caml_raise_with_string(*caml_named_value("xc.error"), xc_error_get());
 }
 
-CAMLprim value stub_xc_interface_open()
+CAMLprim value stub_xc_interface_open(void)
 {
         int handle;
         handle = xc_interface_open();
@@ -58,7 +55,7 @@
         return Val_int(handle);
 }
 
-CAMLprim value stub_xc_using_injection()
+CAMLprim value stub_xc_using_injection(void)
 {
        if (xc_using_injection ()){
                return Val_int(1);
diff -r d9ac5ae2dbed libs/xs/Makefile
--- a/libs/xs/Makefile  Thu Mar 26 16:12:51 2009 +0000
+++ b/libs/xs/Makefile  Tue Apr 07 16:20:28 2009 +0100
@@ -27,11 +27,11 @@
 
 .PHONY: install
 install: $(LIBS) META
-       ocamlfind install -destdir $(DESTDIR)$(shell ocamlfind printconf 
destdir) -ldconf ignore xs META $(INTF) xs.mli xst.mli xsraw.mli $(LIBS) *.a 
*.cmx
+       $(OCAMLFIND) install -destdir $(DESTDIR)$(shell $(OCAMLFIND) printconf 
destdir) -ldconf ignore xs META $(INTF) xs.mli xst.mli xsraw.mli $(LIBS) *.a 
*.cmx
 
 .PHONY: uninstall
 uninstall:
-       ocamlfind remove xs
+       $(OCAMLFIND) remove xs
 
 include $(TOPLEVEL)/bottom.make
 
diff -r d9ac5ae2dbed xenstored/Makefile
--- a/xenstored/Makefile        Thu Mar 26 16:12:51 2009 +0000
+++ b/xenstored/Makefile        Tue Apr 07 16:20:28 2009 +0100
@@ -18,13 +18,27 @@
        -ccopt -L -ccopt ../libs/xb ../libs/xb/xb.cmxa \
        -ccopt -L -ccopt ../libs/stdext ../libs/stdext/stdext.cmxa
 
-PROGRAMS = xenstored
+ifeq ($(CONFIG_STUBDOM),)
+  # linux executable target
+  OUTPUT = xenstored
+else 
+  # mini-OS application target
+  OUTPUT = caml.o main-caml.o
+endif
 
-all: $(INTF) $(PROGRAMS)
+all: $(INTF) $(OUTPUT)
 
-bins: $(PROGRAMS)
+bins: $(OUTPUT)
+
+ifeq ($(CONFIG_STUBDOM),)
 
 xenstored: $(foreach obj,$(OBJS),$(obj).cmx)
        $(OCAMLOPT) $(OCAMLOPTFLAGS) -o $@ $(XENSTOREDLIBS) $(foreach 
obj,$(OBJS), $(obj).cmx)
 
+else
+
+caml.o: $(foreach obj,$(OBJS),$(obj).cmx)
+       $(OCAMLOPT) $(XENSTOREDLIBS) $^ -output-obj -o $@
+endif
+
 include $(TOPLEVEL)/bottom.make
diff -r d9ac5ae2dbed xenstored/main-caml.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xenstored/main-caml.c     Tue Apr 07 16:20:28 2009 +0100
@@ -0,0 +1,42 @@
+/*
+ * Caml bootstrap
+ *
+ * Samuel Thibault <Samuel.Thibault@xxxxxxxxxxxxx>, January 2008
+ */
+
+#include <stdio.h>
+#include <errno.h>
+
+#include <caml/mlvalues.h>
+#include <caml/callback.h>
+#include <unistd.h>
+
+/* Ugly binary compatibility with Linux */
+FILE *_stderr asm("stderr");
+int *__errno_location;
+/* Will probably break everything, probably need to fetch from glibc */
+void *__ctype_b_loc;
+
+int main(int argc, char *argv[], char *envp[])
+{
+    value *val;
+
+    /* Get current thread's value */
+    _stderr = stderr;
+    __errno_location = &errno;
+
+    printf("starting caml\n");
+
+    /* Wait before things might hang up */
+    sleep(1);
+
+    caml_startup(argv);
+    val = caml_named_value("main");
+    if (!val) {
+        printf("Couldn't find Caml main");
+        return 1;
+    }
+    caml_callback(*val, Val_int(0));
+    printf("callback returned\n");
+    return 0;
+}
diff -r d9ac5ae2dbed xenstored/xenstored.ml
--- a/xenstored/xenstored.ml    Thu Mar 26 16:12:51 2009 +0000
+++ b/xenstored/xenstored.ml    Tue Apr 07 16:20:28 2009 +0100
@@ -220,7 +220,7 @@
                (fun () -> close_out channel)
 end
 
-let _ =
+let main () =
        printf "Xen Storage Daemon, version %d.%d\n%!"
               Define.xenstored_major Define.xenstored_minor;
 
@@ -382,3 +382,6 @@
        info "stopping xenstored";
        DB.to_file store cons "/var/run/xenstored/db";
        ()
+
+let _ = main ()
+let _ = Callback.register "main" main

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH 5/7] [xen-ocaml-tools.hg] get xenstored to compile under minios, Alex Zeffertt <=