diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-05-28 09:30:48 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-05-28 09:30:48 +0100 |
commit | f9b4231a673d75dd6404ac5df8a47adc04437e6b (patch) | |
tree | 67d37f19b98706274ec6af9245082f25622341a8 /stubdom/caml | |
parent | 4151cc56f19b3fe8aabde12ddf532cd9502c637d (diff) | |
download | xen-f9b4231a673d75dd6404ac5df8a47adc04437e6b.tar.gz xen-f9b4231a673d75dd6404ac5df8a47adc04437e6b.tar.bz2 xen-f9b4231a673d75dd6404ac5df8a47adc04437e6b.zip |
stubdom: make the build more generic by moving as many stubdom parts
into stubdom/ as possible. That also permits to build all of
ioemu, c and caml stubdoms at the same time.
Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Diffstat (limited to 'stubdom/caml')
-rw-r--r-- | stubdom/caml/Makefile | 10 | ||||
-rw-r--r-- | stubdom/caml/main-caml.c | 42 |
2 files changed, 51 insertions, 1 deletions
diff --git a/stubdom/caml/Makefile b/stubdom/caml/Makefile index 69595a8f99..8642240cef 100644 --- a/stubdom/caml/Makefile +++ b/stubdom/caml/Makefile @@ -2,12 +2,20 @@ XEN_ROOT = ../.. include $(XEN_ROOT)/Config.mk +CAMLLIB = $(shell ocamlc -where) +DEF_CPPFLAGS += -I$(CAMLLIB) + OCAMLFIND=ocamlfind OCAMLOPT=ocamlopt OBJS := hello.cmx LIBS := +all: main-c.o main-caml.o caml.o + +main-c.c: + ln -sf $(XEN_ROOT)/extras/mini-os/main.c $@ + %.cmx: %.ml $(OCAMLFIND) $(OCAMLOPT) -c $< -o $@ @@ -15,4 +23,4 @@ caml.o: $(OBJS) $(OCAMLFIND) $(OCAMLOPT) $(LIBS) $^ -output-obj -o $@ clean: - rm -f *.o *.cmx *.cmi + rm -f *.a *.o *.cmx *.cmi diff --git a/stubdom/caml/main-caml.c b/stubdom/caml/main-caml.c new file mode 100644 index 0000000000..dd55aca38f --- /dev/null +++ b/stubdom/caml/main-caml.c @@ -0,0 +1,42 @@ +/* + * Caml bootstrap + * + * Samuel Thibault <Samuel.Thibault@eu.citrix.net>, 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; +} |