[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 5/7] [xen-ocaml-tools.hg] get xenstored to compile under minios
* 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |