diff options
author | William <r.3@libertysurf.fr> | 2012-10-04 12:48:27 (GMT) |
---|---|---|
committer | Mark Brand <mabrand@mabrand.nl> | 2012-10-30 21:50:57 (GMT) |
commit | 4a303ef0a3de5b8982acd5352e53550257f066eb (patch) | |
tree | 8205e689a25e79891036a6c7d6f500abccf4ef8e /src/ocaml-core.mk | |
parent | d96714512049a37282d6e8bf8d424fb97ef68a1e (diff) | |
download | mxe-4a303ef0a3de5b8982acd5352e53550257f066eb.zip mxe-4a303ef0a3de5b8982acd5352e53550257f066eb.tar.gz mxe-4a303ef0a3de5b8982acd5352e53550257f066eb.tar.bz2 |
add package ocaml-core
Diffstat (limited to 'src/ocaml-core.mk')
-rw-r--r-- | src/ocaml-core.mk | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/src/ocaml-core.mk b/src/ocaml-core.mk new file mode 100644 index 0000000..6683e60 --- /dev/null +++ b/src/ocaml-core.mk @@ -0,0 +1,128 @@ +# This file is part of mingw-cross-env. +# See doc/index.html for further information. + +# zlib +PKG := ocaml-core +$(PKG)_IGNORE := +$(PKG)_CHECKSUM := $(ocaml-native_CHECKSUM) +$(PKG)_SUBDIR := $(ocaml-native_SUBDIR) +$(PKG)_FILE := $(ocaml-native_FILE) +$(PKG)_URL := $(ocaml-native_URL) +$(PKG)_DEPS := gcc bfd ocaml-flexdll ocaml-native + +define $(PKG)_UPDATE + $(call ocaml-native_UPDATE) +endef + + +OTHER_LIBS := win32unix str num dynlink bigarray systhreads win32graph + +define $(PKG)_BUILD + # Build native ocamlrun and ocamlc which contain the + # filename-win32-dirsep patch. + # + # Note that we must build a 32 bit compiler, even on 64 bit build + # architectures, because this compiler will try to do strength + # reduction optimizations using its internal int type, and that must + # match Windows' int type. (That's what -cc and -host are for). + cd '$(1)' && ./configure \ + -prefix '$(PREFIX)/$(TARGET)' \ + -bindir '$(PREFIX)/$(TARGET)/bin' \ + -libdir '$(PREFIX)/$(TARGET)/lib/ocaml' \ + -no-tk \ + -cc "gcc -m32" \ + -no-shared-libs \ + -host '$(TARGET)' \ + -x11lib /usr/lib \ + -verbose + $(MAKE) -C '$(1)' core + # Now move the working ocamlrun, ocamlc into the boot/ directory, + # overwriting the binary versions which ship with the compiler with + # ones that contain the filename-win32-dirsep patch. + $(MAKE) -C '$(1)' coreboot + # second time, otherwise Segfault in some cases (depending on the runing system?) + $(MAKE) -C '$(1)' coreboot + $(MAKE) -C '$(1)' all + # install ocamldoc and camlp4 (non cross versions) + $(MAKE) -C '$(1)/ocamldoc' install + cd '$(1)' && BINDIR=$(PREFIX)/$(TARGET)/bin \ + LIBDIR=$(PREFIX)/$(TARGET)/lib/ocaml \ + PREFIX=$(PREFIX)/$(TARGET) \ + ./build/partial-install.sh + + ####### patch mingw include + # Now patch utils/clflags.ml to hardcode mingw-specific include. + $(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" \ + $(1)/hardcode_mingw_include.patch + cd '$(1)' && patch -p2 < hardcode_mingw_include.patch + + ####### prepare cross build + # Replace the compiler configuration (config/{s.h,m.h,Makefile}) + # with ones as they would be on a 32 bit Windows system. + cp -f '$(1)/config/m-nt.h' '$(1)/config/m.h' + cp -f $(1)/config/s-nt.h $(1)/config/s.h + # config/Makefile is a custom one which we supply. + rm -f $(1)/config/Makefile + $(SED) \ + -e "s,@prefix@,$(PREFIX)/$(TARGET),g" \ + -e "s,@toolpref@,$(TARGET),g" \ + -e "s,@otherlibraries@,$(OTHER_LIBS),g" \ + < $(1)/Makefile-mingw.in > $(1)/config/Makefile + $(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" $(1)/otherlibs/Makefile.shared + # We're going to build in otherlibs/win32unix and otherlibs/win32graph + # directories, but since they would normally only be built under + # Windows, they only have the Makefile.nt files. Just symlink + # Makefile -> Makefile.nt for these cases. + $(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" $(1)/otherlibs/win32unix/Makefile.nt + $(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" $(1)/otherlibs/win32graph/Makefile.nt + $(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" $(1)/otherlibs/systhreads/Makefile.nt + for d in $(1)/otherlibs/win32unix \ + $(1)/otherlibs/win32graph \ + $(1)/otherlibs/bigarray \ + $(1)/otherlibs/systhreads; do \ + ln -sf Makefile.nt $$d/Makefile; \ + done + # Now clean the temporary files from the previous build. This + # will also cause asmcomp/arch.ml (etc) to be linked to the 32 bit + # i386 versions, essentially causing ocamlopt to use the Win/i386 code + # generator. + $(MAKE) -C '$(1)' partialclean + # We need to remove any .o object for make sure they are + # recompiled later.. + cd $(1) && rm byterun/*.o + + ####### build mingw ocaml + # Just rebuild some small bits that we need for the following + # 'make opt' to work. Note that 'make all' fails here. + $(MAKE) -C '$(1)/byterun' libcamlrun.a + $(MAKE) -C '$(1)' ocaml ocamlc + $(MAKE) -C '$(1)/stdlib' + $(MAKE) -C '$(1)/tools' ocamlmklib + # Build ocamlopt + $(MAKE) -C '$(1)' opt + # Now build otherlibs for ocamlopt + cd '$(1)' && \ + for i in $(OTHER_LIBS); do \ + $(MAKE) -C otherlibs/$$i clean; \ + $(MAKE) -C otherlibs/$$i all; \ + $(MAKE) -C otherlibs/$$i allopt; \ + done + + ####### installation + $(MAKE) -C '$(1)' install + $(MAKE) -C '$(1)' installopt + # Rename all the binaries to target-binary + for f in ocamlc ocamlcp ocamlrun ocamldep ocamlmklib ocamlmktop ocamlopt ocamlprof camlp4prof camlp4boot camlp4 camlp4oof camlp4of camlp4o camlp4rf camlp4r camlp4orf ocamldoc ; do \ + cp -f $(PREFIX)/$(TARGET)/bin/$$f $(PREFIX)/bin/$(TARGET)-$$f; \ + done + + # test ocamlopt + cp '$(2).ml' '$(1)/test.ml' + cd '$(1)' && '$(TARGET)-ocamlopt' test.ml + # test ocamlbuild + mkdir '$(1)/tmp' && cp '$(2).ml' '$(1)/tmp/test.ml' + cd '$(1)/tmp' && $(TARGET)-ocamlbuild test.native + # test + cp '$(2).ml' '$(1)/test.ml' + cd '$(1)' && '$(TARGET)-ocamlopt' test.ml +endef |