aboutsummaryrefslogtreecommitdiffstats
path: root/stubdom
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-05-19 14:17:56 +0100
committerKeir Fraser <keir.fraser@citrix.com>2009-05-19 14:17:56 +0100
commitff7d47a80a126527fd7b479d0c0756a20a07e0d3 (patch)
tree996bceccab3a2fc9f2d545a69977a02f745d68e3 /stubdom
parent0e57a92cc388c377de3940d12ac6131c698f5581 (diff)
downloadxen-ff7d47a80a126527fd7b479d0c0756a20a07e0d3.tar.gz
xen-ff7d47a80a126527fd7b479d0c0756a20a07e0d3.tar.bz2
xen-ff7d47a80a126527fd7b479d0c0756a20a07e0d3.zip
stubdom: Rebuild the ocaml runtime libraries with the options needed
if they are to be linked with object files created by ocamlc and the minios kernel. This is needed to build stubdoms written in ocaml. Signed-off-by: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
Diffstat (limited to 'stubdom')
-rw-r--r--stubdom/Makefile40
-rw-r--r--stubdom/caml/Makefile9
-rw-r--r--stubdom/ocaml.patch19
3 files changed, 61 insertions, 7 deletions
diff --git a/stubdom/Makefile b/stubdom/Makefile
index 563c01aa56..cd7234980d 100644
--- a/stubdom/Makefile
+++ b/stubdom/Makefile
@@ -27,6 +27,10 @@ LWIP_VERSION=1.3.0
GRUB_URL?=$(XEN_EXTFILES_URL)
GRUB_VERSION=0.97
+#OCAML_URL?=$(XEN_EXTFILES_URL)
+OCAML_URL?=http://caml.inria.fr/pub/distrib/ocaml-3.11
+OCAML_VERSION=3.11.0
+
WGET=wget -c
GNU_TARGET_ARCH:=$(XEN_TARGET_ARCH)
@@ -164,6 +168,37 @@ lwip-$(XEN_TARGET_ARCH): lwip-$(LWIP_VERSION).tar.gz
patch -d $@ -p0 < lwip.patch-cvs
touch $@
+#############
+# Cross-ocaml
+#############
+
+CAMLLIB = $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib/ocaml
+OCAML_STAMPFILE=$(CAMLLIB)/.dirstamp
+
+ocaml-$(OCAML_VERSION).tar.gz:
+ $(WGET) $(OCAML_URL)/$@
+
+ocaml-$(XEN_TARGET_ARCH)/.dirstamp: ocaml-$(OCAML_VERSION).tar.gz ocaml.patch
+ tar xzf $<
+ cd ocaml-$(OCAML_VERSION) && patch -p0 < ../ocaml.patch
+ rm -rf ocaml-$(XEN_TARGET_ARCH)
+ mv ocaml-$(OCAML_VERSION) ocaml-$(XEN_TARGET_ARCH)
+ touch $@
+
+MINIOS_HASNOT=IPV6 INET_ATON
+
+.PHONY: cross-ocaml
+cross-ocaml: $(OCAML_STAMPFILE)
+$(OCAML_STAMPFILE): ocaml-$(XEN_TARGET_ARCH)/.dirstamp
+ cd ocaml-$(XEN_TARGET_ARCH) && ./configure -prefix $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf \
+ -no-pthread -no-shared-libs -no-tk -no-curses \
+ -cc "$(CC) -U_FORTIFY_SOURCE -fno-stack-protector"
+ $(foreach i,$(MINIOS_HASNOT),sed -i 's,^\(#define HAS_$(i)\),//\1,' ocaml-$(XEN_TARGET_ARCH)/config/s.h ; )
+ $(MAKE) -C ocaml-$(XEN_TARGET_ARCH) world
+ $(MAKE) -C ocaml-$(XEN_TARGET_ARCH) opt
+ $(MAKE) -C ocaml-$(XEN_TARGET_ARCH) install
+ touch $@
+
#######
# Links
#######
@@ -251,7 +286,7 @@ ioemu: cross-zlib cross-libpci libxc
.PHONY: caml
caml: $(CROSS_ROOT)
- CPPFLAGS="$(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C $@ LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH)
+ CPPFLAGS="$(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C $@ LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) OCAMLC_CROSS_PREFIX=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/bin/
###
# C
@@ -289,7 +324,6 @@ ioemu-stubdom: APP_OBJS=$(CURDIR)/ioemu/i386-stubdom/qemu.a $(CURDIR)/ioemu/i386
ioemu-stubdom: mini-os-$(XEN_TARGET_ARCH)-ioemu lwip-$(XEN_TARGET_ARCH) libxc ioemu
DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="-DCONFIG_QEMU $(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) APP_OBJS="$(APP_OBJS)"
-CAMLLIB = $(shell ocamlc -where)
.PHONY: caml-stubdom
caml-stubdom: mini-os-$(XEN_TARGET_ARCH)-caml lwip-$(XEN_TARGET_ARCH) libxc caml
DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="-DCONFIG_CAML $(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) APP_OBJS="$(CURDIR)/caml/main-caml.o $(CURDIR)/caml/caml.o $(CAMLLIB)/libasmrun.a"
@@ -351,6 +385,7 @@ crossclean: clean
rm -fr zlib-$(XEN_TARGET_ARCH) pciutils-$(XEN_TARGET_ARCH)
rm -fr libxc-$(XEN_TARGET_ARCH) ioemu
rm -f mk-headers-$(XEN_TARGET_ARCH)
+ rm -fr ocaml-$(XEN_TARGET_ARCH)
# clean patched sources
.PHONY: patchclean
@@ -367,6 +402,7 @@ downloadclean: patchclean
rm -f pciutils-$(LIBPCI_VERSION).tar.bz2
rm -f grub-$(GRUB_VERSION).tar.gz
rm -f lwip-$(LWIP_VERSION).tar.gz
+ rm -f ocaml-$(OCAML_VERSION).tar.gz
.PHONY: distclean
distclean: downloadclean
diff --git a/stubdom/caml/Makefile b/stubdom/caml/Makefile
index d760fe4ee5..5f27db67a3 100644
--- a/stubdom/caml/Makefile
+++ b/stubdom/caml/Makefile
@@ -2,11 +2,10 @@ XEN_ROOT = ../..
include $(XEN_ROOT)/Config.mk
-CAMLLIB = $(shell ocamlc -where)
+CAMLLIB = $(shell $(OCAMLC_CROSS_PREFIX)ocamlc -where)
DEF_CPPFLAGS += -I$(CAMLLIB)
-OCAMLFIND=ocamlfind
-OCAMLOPT=ocamlopt
+OCAMLOPT=$(OCAMLC_CROSS_PREFIX)ocamlopt
OBJS := hello.cmx
LIBS :=
@@ -14,10 +13,10 @@ LIBS :=
all: main-caml.o caml.o
%.cmx: %.ml
- $(OCAMLFIND) $(OCAMLOPT) -c $< -o $@
+ $(OCAMLOPT) -c $< -o $@
caml.o: $(OBJS)
- $(OCAMLFIND) $(OCAMLOPT) $(LIBS) $^ -output-obj -o $@
+ $(OCAMLOPT) $(LIBS) $^ -output-obj -o $@
clean:
rm -f *.a *.o *.cmx *.cmi
diff --git a/stubdom/ocaml.patch b/stubdom/ocaml.patch
new file mode 100644
index 0000000000..50db4869dd
--- /dev/null
+++ b/stubdom/ocaml.patch
@@ -0,0 +1,19 @@
+--- byterun/Makefile.orig 2009-04-07 12:14:02.000000000 +0100
++++ byterun/Makefile 2009-04-07 12:13:50.000000000 +0100
+@@ -22,14 +22,14 @@
+ DOBJS=$(OBJS:.o=.d.o) instrtrace.d.o
+ PICOBJS=$(OBJS:.o=.pic.o)
+
+-#ifeq ($(SUPPORTS_SHARED_LIBRARIES),true)
++ifeq ($(SUPPORTS_SHARED_LIBRARIES),true)
+
+ all:: libcamlrun_shared.so
+
+ install::
+ cp libcamlrun_shared.so $(LIBDIR)/libcamlrun_shared.so
+
+-#endif
++endif
+
+ ocamlrun$(EXE): libcamlrun.a prims.o
+ $(MKEXE) $(BYTECCLINKOPTS) -o ocamlrun$(EXE) \