From 4a303ef0a3de5b8982acd5352e53550257f066eb Mon Sep 17 00:00:00 2001 From: William Date: Thu, 4 Oct 2012 14:48:27 +0200 Subject: add package ocaml-core --- index.html | 5 + src/ocaml-core-1-fixes.patch | 654 +++++++++++++++++++++++++++++++++++++++++++ src/ocaml-core-test.ml | 4 + src/ocaml-core.mk | 128 +++++++++ 4 files changed, 791 insertions(+) create mode 100644 src/ocaml-core-1-fixes.patch create mode 100644 src/ocaml-core-test.ml create mode 100644 src/ocaml-core.mk diff --git a/index.html b/index.html index 47a8ce4..001aa1f 100644 --- a/index.html +++ b/index.html @@ -1649,6 +1649,11 @@ USE_OSGPLUGIN(<plugin2>) ocaml + ocaml + 4.00.0 + ocaml + + ocaml-flexdll 0.30 flexdll diff --git a/src/ocaml-core-1-fixes.patch b/src/ocaml-core-1-fixes.patch new file mode 100644 index 0000000..d68db39 --- /dev/null +++ b/src/ocaml-core-1-fixes.patch @@ -0,0 +1,654 @@ +This file is part of MXE. +See index.html for further information. + +Contains ad hoc patches for cross building. + +From 002715e4bdd4f2aacb6ce8b1b89bae734b6c36fc Mon Sep 17 00:00:00 2001 +From: MXE +Date: Wed, 13 Jun 2012 22:27:54 +0200 +Subject: [PATCH] various patches to build an ocaml cross compiler + + +diff --git a/Makefile b/Makefile +index e53fd0d..0decd00 100644 +--- a/Makefile ++++ b/Makefile +@@ -289,16 +289,17 @@ install: + for i in $(OTHERLIBRARIES); do \ + (cd otherlibs/$$i; $(MAKE) install) || exit $$?; \ + done +- cd ocamldoc; $(MAKE) install ++ # cd ocamldoc; $(MAKE) install + if test -f ocamlopt; then $(MAKE) installopt; else :; fi + if test -f debugger/ocamldebug; then (cd debugger; $(MAKE) install); \ + else :; fi + cp config/Makefile $(LIBDIR)/Makefile.config +- BINDIR=$(BINDIR) LIBDIR=$(LIBDIR) PREFIX=$(PREFIX) \ +- ./build/partial-install.sh ++ #BINDIR=$(BINDIR) LIBDIR=$(LIBDIR) PREFIX=$(PREFIX) \ ++ # ./build/partial-install.sh + + # Installation of the native-code compiler + installopt: ++ if test -d $(COMPLIBDIR); then : ; else $(MKDIR) $(COMPLIBDIR); fi + cd asmrun; $(MAKE) install + cp ocamlopt $(BINDIR)/ocamlopt$(EXE) + cd stdlib; $(MAKE) installopt +@@ -737,7 +738,7 @@ ocamlbuild.native: ocamlopt ocamlbuild-mixed-boot + ocamlbuildlib.native: ocamlopt ocamlbuild-mixed-boot + ./build/ocamlbuildlib-native-only.sh + +-ocamlbuild-mixed-boot: ocamlc ++ocamlbuild-mixed-boot: ocamlc otherlibraries + ./build/mixed-boot.sh + touch ocamlbuild-mixed-boot + +diff --git a/Makefile-mingw.in b/Makefile-mingw.in +new file mode 100644 +index 0000000..c3dddf6 +--- /dev/null ++++ b/Makefile-mingw.in +@@ -0,0 +1,160 @@ ++######### General configuration ++ ++PREFIX=@prefix@ ++ ++### Remove this to disable compiling camlp4 ++#CAMLP4=camlp4 ++ ++### Where to install the binaries ++BINDIR=$(PREFIX)/bin ++ ++### Where to install the standard library ++LIBDIR=$(PREFIX)/lib/ocaml ++ ++### Where to install the stub DLLs ++STUBLIBDIR=$(LIBDIR)/stublibs ++ ++### Where to install the info files ++DISTRIB=$(PREFIX) ++ ++### Where to install the man pages ++MANDIR=$(PREFIX)/man ++ ++########## Toolchain and OS dependencies ++ ++TOOLCHAIN=cc ++ ++### Toolchain prefix ++TOOLPREF=@toolpref@- ++ ++CCOMPTYPE=cc ++O=o ++A=a ++S=s ++SO=dll ++EXE= ++EXT_DLL=.dll ++EXT_OBJ=.$(O) ++EXT_LIB=.$(A) ++EXT_ASM=.$(S) ++MANEXT=1 ++SHARPBANGSCRIPTS=true ++PTHREAD_LINK= ++X11_INCLUDES= ++X11_LINK= ++DBM_INCLUDES= ++DBM_LINK= ++BYTECCRPATH= ++SUPPORTS_SHARED_LIBRARIES=true ++SHAREDCCCOMPOPTS= ++MKSHAREDLIBRPATH= ++NATIVECCPROFOPTS=-pg ++NATIVECCRPATH= ++ASM=$(TOOLPREF)as ++ASPP=$(TOOLPREF)gcc -c ++ASPPPROFFLAGS=-DPROFILING ++PROFILING=prof ++DYNLINKOPTS=-ldl ++DEBUGGER=ocamldebugger ++CC_PROFILE=-pg ++SYSTHREAD_SUPPORT=true ++EXTRALIBS= ++NATDYNLINK=true ++NATDYNLINKOPTS= ++CMXS=cmxs ++RUNTIMED=noruntimed ++ASM_CFI_SUPPORTED=false ++ ++########## Configuration for the bytecode compiler ++ ++### Which C compiler to use for the bytecode interpreter. ++BYTECC=$(TOOLPREF)gcc ++ ++### Additional compile-time options for $(BYTECC). (For static linking.) ++BYTECCCOMPOPTS=-O -mms-bitfields -Wall -Wno-unused ++ ++### Additional link-time options for $(BYTECC). (For static linking.) ++BYTECCLINKOPTS=-L$(PREFIX)/lib ++ ++### Additional compile-time options for $(BYTECC). (For building a DLL.) ++DLLCCCOMPOPTS= ++ ++### Libraries needed ++BYTECCLIBS= ++NATIVECCLIBS= ++ ++### How to invoke the C preprocessor ++ ++### Flexlink ++FLEXLINK=$(TOOLPREF)flexlink -chain mingw ++FLEXDIR=$(shell $(FLEXLINK) -where) ++IFLEXDIR=-I"$(FLEXDIR)" ++MKDLL=$(FLEXLINK) ++MKEXE=$(FLEXLINK) -exe ++MKMAINDLL=$(FLEXLINK) -maindll ++ ++### How to build a static library ++MKLIB=$(TOOLPREF)ar rcs $(1) $(2) ++#ml let mklib out files opts = Printf.sprintf ("%sar rcs %s %s %s") toolpref out opts files;; ++ ++### Canonicalize the name of a system library ++SYSLIB=-l$(1) ++#ml let syslib x = "-l"^x;; ++ ++### The ranlib command ++RANLIB=$(TOOLPREF)ranlib ++RANLIBCMD=$(TOOLPREF)ranlib ++ ++### The ar command ++ARCMD=$(TOOLPREF)ar ++ ++############# Configuration for the native-code compiler ++ ++### Name of architecture for the native-code compiler ++ARCH=i386 ++ ++### Name of architecture model for the native-code compiler. ++MODEL=default ++ ++### Name of operating system family for the native-code compiler. ++SYSTEM=mingw ++ ++### Which C compiler to use for the native-code compiler. ++NATIVECC=$(BYTECC) ++ ++### Additional compile-time options for $(NATIVECC). ++NATIVECCCOMPOPTS=-O -mms-bitfields -Wall -Wno-unused ++ ++### Additional link-time options for $(NATIVECC) ++NATIVECCLINKOPTS=-L$(PREFIX)/lib ++ ++### Build partially-linked object file ++PACKLD=$(TOOLPREF)ld -r $(NATIVECCLINKOPTS) -o #there must be a space after this '-o' ++ ++############# Configuration for the contributed libraries ++ ++OTHERLIBRARIES=@otherlibraries@ ++ ++### Name of the target architecture for the "num" library ++BNG_ARCH=i386 ++BNG_ASM_LEVEL=1 ++ ++### Configuration for LablTk ++# Set TK_ROOT to the directory where you installed TCL/TK 8.5 ++# There must be no spaces or special characters in $(TK_ROOT) ++TK_DEFS= ++TK_LINK= ++ ++############# Aliases for common commands ++ ++# MAKEREC=$(MAKE) -f Makefile.nt ++# MAKECMD=$(MAKE) ++ ++# Build compiler for cross-compilation. ++BUILD_MKEXE=gcc ++BUILD_RANLIB=ranlib ++BUILD_MKDLL=gcc -shared ++BUILD_CC=gcc ++BUILD_CCLIBS=-lm ++BUILD_CFLAGS= ++ +diff --git a/asmrun/Makefile b/asmrun/Makefile +index d4f0c56..a535666 100644 +--- a/asmrun/Makefile ++++ b/asmrun/Makefile +@@ -26,7 +26,7 @@ COBJS=startup.o main.o fail.o roots.o globroots.o signals.o signals_asm.o \ + misc.o freelist.o major_gc.o minor_gc.o memory.o alloc.o compare.o ints.o \ + floats.o str.o array.o io.o extern.o intern.o hash.o sys.o parsing.o \ + gc_ctrl.o terminfo.o md5.o obj.o lexing.o printexc.o callback.o weak.o \ +- compact.o finalise.o custom.o unix.o backtrace.o natdynlink.o debugger.o \ ++ compact.o finalise.o custom.o unix.o win32.o backtrace.o natdynlink.o debugger.o \ + meta.o dynlink.o + + ASMOBJS=$(ARCH).o +@@ -153,6 +153,8 @@ globroots.c: ../byterun/globroots.c + ln -s ../byterun/globroots.c globroots.c + unix.c: ../byterun/unix.c + ln -s ../byterun/unix.c unix.c ++win32.c: ../byterun/win32.c ++ ln -s ../byterun/win32.c win32.c + dynlink.c: ../byterun/dynlink.c + ln -s ../byterun/dynlink.c dynlink.c + signals.c: ../byterun/signals.c +@@ -163,7 +165,7 @@ debugger.c: ../byterun/debugger.c + LINKEDFILES=misc.c freelist.c major_gc.c minor_gc.c memory.c alloc.c array.c \ + compare.c ints.c floats.c str.c io.c extern.c intern.c hash.c sys.c \ + parsing.c gc_ctrl.c terminfo.c md5.c obj.c lexing.c printexc.c callback.c \ +- weak.c compact.c finalise.c meta.c custom.c main.c globroots.c unix.c \ ++ weak.c compact.c finalise.c meta.c custom.c main.c globroots.c unix.c win32.c \ + dynlink.c signals.c debugger.c + + clean:: +diff --git a/asmrun/i386.S b/asmrun/i386.S +index e8e00a4..800247e 100644 +--- a/asmrun/i386.S ++++ b/asmrun/i386.S +@@ -76,6 +76,9 @@ + popl %edx; popl %ecx; popl %eax; popl %ebp + #define PROFILE_C \ + pushl %ebp; movl %esp, %ebp; call Lmcount$stub; popl %ebp ++#elif defined(SYS_mingw) ++#define PROFILE_CAML ++#define PROFILE_C + #endif + #else + #define PROFILE_CAML +diff --git a/byterun/Makefile.common b/byterun/Makefile.common +index b519f75..2274562 100755 +--- a/byterun/Makefile.common ++++ b/byterun/Makefile.common +@@ -24,7 +24,7 @@ COMMONOBJS=\ + compare.o ints.o floats.o str.o array.o io.o extern.o intern.o \ + hash.o sys.o meta.o parsing.o gc_ctrl.o terminfo.o md5.o obj.o \ + lexing.o callback.o debugger.o weak.o compact.o finalise.o custom.o \ +- dynlink.o ++ dynlink.o win32.o + + PRIMS=\ + alloc.c array.c compare.c extern.c floats.c gc_ctrl.c hash.c \ +diff --git a/byterun/dynlink.c b/byterun/dynlink.c +index 5cb2ed7..b6605fa 100644 +--- a/byterun/dynlink.c ++++ b/byterun/dynlink.c +@@ -80,7 +80,12 @@ static char * parse_ld_conf(void) + + stdlib = getenv("OCAMLLIB"); + if (stdlib == NULL) stdlib = getenv("CAMLLIB"); +- if (stdlib == NULL) stdlib = OCAML_STDLIB_DIR; ++ if (stdlib == NULL) ++#ifdef OCAML_STDLIB_DIR ++ stdlib = OCAML_STDLIB_DIR; ++#else ++ stdlib = "."; ++#endif + ldconfname = caml_stat_alloc(strlen(stdlib) + 2 + sizeof(LD_CONF_NAME)); + strcpy(ldconfname, stdlib); + strcat(ldconfname, "/" LD_CONF_NAME); +diff --git a/byterun/unix.c b/byterun/unix.c +index 7d24ef4..3619e67 100644 +--- a/byterun/unix.c ++++ b/byterun/unix.c +@@ -15,6 +15,8 @@ + + /* Unix-specific stuff */ + ++#ifndef WIN32 ++ + #define _GNU_SOURCE + /* Helps finding RTLD_DEFAULT in glibc */ + +@@ -323,3 +325,5 @@ int caml_executable_name(char * name, int name_len) + } + + #endif ++ ++#endif /* !WIN32 */ +diff --git a/byterun/win32.c b/byterun/win32.c +index f8ba9c9..82afc1c 100644 +--- a/byterun/win32.c ++++ b/byterun/win32.c +@@ -13,6 +13,8 @@ + + /* $Id: win32.c 12686 2012-07-10 11:34:39Z scherer $ */ + ++#ifdef WIN32 ++ + /* Win32-specific stuff */ + + #include +@@ -35,6 +37,26 @@ + + #include "flexdll.h" + ++/* XXX including gets ../byterun/io.h for some reason. ++ * Including the real io.h using the full path fails because of ++ * some strange bug in the system header file itself. Give up and ++ * just define _finddata_t explicitly here. ++ */ ++#ifndef _FSIZE_T_DEFINED ++typedef unsigned long _fsize_t; ++#define _FSIZE_T_DEFINED ++ ++struct _finddata_t ++{ ++ unsigned attrib; ++ time_t time_create; ++ time_t time_access; ++ time_t time_write; ++ _fsize_t size; ++ char name[FILENAME_MAX]; ++}; ++#endif ++ + #ifndef S_ISREG + #define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) + #endif +@@ -93,7 +115,7 @@ CAMLexport char * caml_search_exe_in_path(char * name) + pathlen = strlen(name) + 1; + if (pathlen < 256) pathlen = 256; + while (1) { +- fullname = stat_alloc(pathlen); ++ fullname = caml_stat_alloc(pathlen); + retcode = SearchPath(NULL, /* use system search path */ + name, + ".exe", /* add .exe extension if needed */ +@@ -107,7 +129,7 @@ CAMLexport char * caml_search_exe_in_path(char * name) + break; + } + if (retcode < pathlen) break; +- stat_free(fullname); ++ caml_stat_free(fullname); + pathlen = retcode + 1; + } + return fullname; +@@ -479,3 +501,5 @@ int caml_win32_random_seed (intnat data[16]) + data[2] = GetCurrentProcessId(); + return 3; + } ++ ++#endif /* WIN32 */ +diff --git a/hardcode_mingw_include.patch b/hardcode_mingw_include.patch +new file mode 100644 +index 0000000..571747d +--- /dev/null ++++ b/hardcode_mingw_include.patch +@@ -0,0 +1,24 @@ ++Index: build-tree/ocaml-3.11.1/utils/clflags.ml ++=================================================================== ++--- build-tree.orig/ocaml-3.12.1/utils/clflags.ml 2010-01-07 04:00:11.000000000 +0100 +++++ build-tree/ocaml-3.12.1/utils/clflags.ml 2010-01-07 04:00:24.000000000 +0100 ++@@ -20,7 +20,7 @@ ++ ++ let compile_only = ref false (* -c *) ++ and output_name = ref (None : string option) (* -o *) ++-and include_dirs = ref ([] : string list)(* -I *) +++and include_dirs = ref (["@libdir@"] : string list)(* -I *) ++ and no_std_include = ref false (* -nostdlib *) ++ and print_types = ref false (* -i *) ++ and make_archive = ref false (* -a *) ++--- build-tree.orig/ocaml-3.12.1/tools/ocamlmklib.mlp 2010-02-22 20:15:57.000000000 -0600 +++++ build-tree/ocaml-3.12.1/tools/ocamlmklib.mlp 2010-02-22 20:16:20.000000000 -0600 ++@@ -29,7 +29,7 @@ ++ and failsafe = ref false (* whether to fall back on static build only *) ++ and c_libs = ref [] (* libs to pass to mksharedlib and ocamlc -cclib *) ++ and c_opts = ref [] (* options to pass to mksharedlib and ocamlc -ccopt *) ++-and ld_opts = ref [] (* options to pass only to the linker *) +++and ld_opts = ref ["-I @libdir@"] (* options to pass only to the linker *) ++ and ocamlc = ref (compiler_path "ocamlc") ++ and ocamlopt = ref (compiler_path "ocamlopt") ++ and output = ref "a" (* Output name for Caml part of library *) +diff --git a/myocamlbuild.ml b/myocamlbuild.ml +index c687242..ccdd937 100644 +--- a/myocamlbuild.ml ++++ b/myocamlbuild.ml +@@ -107,9 +107,11 @@ let if_mixed_dir dir = + if mixed then ".."/dir else dir;; + + let unix_dir = +- match Sys.os_type with +- | "Win32" -> if_mixed_dir "otherlibs/win32unix" +- | _ -> if_mixed_dir "otherlibs/unix";; ++ if_mixed_dir ( ++ let win32path = "otherlibs/win32unix" in ++ if Sys.file_exists (win32path / "unix.cma") then win32path ++ else "otherlibs/unix" ++ );; + + let threads_dir = if_mixed_dir "otherlibs/threads";; + let systhreads_dir = if_mixed_dir "otherlibs/systhreads";; +diff --git a/ocamldoc/Makefile b/ocamldoc/Makefile +index 74c82d3..61036c8 100644 +--- a/ocamldoc/Makefile ++++ b/ocamldoc/Makefile +@@ -69,6 +69,7 @@ INCLUDES_DEP=-I $(OCAMLSRCDIR)/parsing \ + INCLUDES_NODEP= -I $(OCAMLSRCDIR)/stdlib \ + -I $(OCAMLSRCDIR)/otherlibs/str \ + -I $(OCAMLSRCDIR)/otherlibs/dynlink \ ++ -I $(OCAMLSRCDIR)/otherlibs/win32unix \ + -I $(OCAMLSRCDIR)/otherlibs/unix \ + -I $(OCAMLSRCDIR)/otherlibs/num \ + -I $(OCAMLSRCDIR)/otherlibs/graph +diff --git a/otherlibs/Makefile.shared b/otherlibs/Makefile.shared +index 2c084a0..0e13022 100644 +--- a/otherlibs/Makefile.shared ++++ b/otherlibs/Makefile.shared +@@ -33,7 +33,7 @@ MKLIB=$(CAMLRUN) $(ROOTDIR)/tools/ocamlmklib + #EXTRACFLAGS= + #EXTRACAMLFLAGS= + #LINKOPTS= +-#LDOPTS= ++LDOPTS=-L$(LIBDIR) + #HEADERS= + + CMIFILES ?= $(CAMLOBJS:.cmo=.cmi) +@@ -42,7 +42,8 @@ CLIBNAME ?= $(LIBNAME) + + all: lib$(CLIBNAME).$(A) $(LIBNAME).cma $(CMIFILES) + +-allopt: lib$(CLIBNAME).$(A) $(LIBNAME).cmxa $(LIBNAME).$(CMXS) $(CMIFILES) ++allopt: lib$(CLIBNAME).$(A) $(LIBNAME).cmxa $(CMIFILES) ++# $(LIBNAME).$(CMXS) + + $(LIBNAME).cma: $(CAMLOBJS) + $(MKLIB) -o $(LIBNAME) -oc $(CLIBNAME) -ocamlc '$(CAMLC)' -linkall $(CAMLOBJS) $(LINKOPTS) +@@ -50,8 +51,8 @@ $(LIBNAME).cma: $(CAMLOBJS) + $(LIBNAME).cmxa: $(CAMLOBJS_NAT) + $(MKLIB) -o $(LIBNAME) -oc $(CLIBNAME) -ocamlopt '$(CAMLOPT)' -linkall $(CAMLOBJS_NAT) $(LINKOPTS) + +-$(LIBNAME).cmxs: $(LIBNAME).cmxa lib$(CLIBNAME).$(A) +- $(CAMLOPT) -shared -o $(LIBNAME).cmxs -I . $(LIBNAME).cmxa ++#$(LIBNAME).cmxs: $(LIBNAME).cmxa lib$(CLIBNAME).$(A) ++# $(CAMLOPT) -shared -o $(LIBNAME).cmxs -I . $(LIBNAME).cmxa + + lib$(CLIBNAME).$(A): $(COBJS) + $(MKLIB) -oc $(CLIBNAME) $(COBJS) $(LDOPTS) +diff --git a/otherlibs/bigarray/Makefile b/otherlibs/bigarray/Makefile +index d442edb..dc34d6d 100644 +--- a/otherlibs/bigarray/Makefile ++++ b/otherlibs/bigarray/Makefile +@@ -14,8 +14,8 @@ + # $Id: Makefile 11156 2011-07-27 14:17:02Z doligez $ + + LIBNAME=bigarray +-EXTRACFLAGS=-I../unix -DIN_OCAML_BIGARRAY -DCAML_NAME_SPACE +-EXTRACAMLFLAGS=-I ../unix ++EXTRACFLAGS=-I../win32unix -I../unix -DIN_OCAML_BIGARRAY -DCAML_NAME_SPACE ++EXTRACAMLFLAGS=-I ../win32unix -I ../unix + COBJS=bigarray_stubs.$(O) mmap_unix.$(O) + CAMLOBJS=bigarray.cmo + HEADERS=bigarray.h +diff --git a/otherlibs/systhreads/Makefile b/otherlibs/systhreads/Makefile +index 502498f..7ed53df 100644 +--- a/otherlibs/systhreads/Makefile ++++ b/otherlibs/systhreads/Makefile +@@ -15,13 +15,13 @@ + + include ../../config/Makefile + +-CAMLC=../../ocamlcomp.sh -I ../unix +-CAMLOPT=../../ocamlcompopt.sh -I ../unix ++CAMLC=../../ocamlcomp.sh -I ../win32unix -I ../unix ++CAMLOPT=../../ocamlcompopt.sh -I ../win32unix -I ../unix + MKLIB=../../boot/ocamlrun ../../tools/ocamlmklib + COMPFLAGS=-warn-error A -g + +-BYTECODE_C_OBJS=st_stubs_b.o +-NATIVECODE_C_OBJS=st_stubs_n.o ++BYTECODE_C_OBJS=st_stubs_b.o win32_b.o ++NATIVECODE_C_OBJS=st_stubs_n.o win32_n.o + + THREAD_OBJS= thread.cmo mutex.cmo condition.cmo event.cmo threadUnix.cmo + +@@ -37,6 +37,10 @@ st_stubs_b.o: st_stubs.c st_posix.h + -c st_stubs.c + mv st_stubs.o st_stubs_b.o + ++win32_b.$(O): st_stubs.c st_win32.h ++ $(BYTECC) -I ../../byterun $(BYTECCCOMPOPTS) $(CFLAGS) -c st_stubs.c ++ mv st_stubs.$(O) win32_b.$(O) ++ + # Dynamic linking with -lpthread is risky on many platforms, so + # do not create a shared object for libthreadsnat. + libthreadsnat.a: $(NATIVECODE_C_OBJS) +@@ -46,9 +50,13 @@ st_stubs_n.o: st_stubs.c st_posix.h + $(NATIVECC) -O -I../../asmrun -I../../byterun $(NATIVECCCOMPOPTS) $(SHAREDCCCOMPOPTS) -DNATIVE_CODE -DTARGET_$(ARCH) -DSYS_$(SYSTEM) -c st_stubs.c + mv st_stubs.o st_stubs_n.o + ++win32_n.$(O): st_stubs.c st_win32.h ++ $(NATIVECC) -DNATIVE_CODE -O -I../../asmrun -I../../byterun $(NATIVECCCOMPOPTS) -c st_stubs.c ++ mv st_stubs.$(O) win32_n.$(O) ++ + threads.cma: $(THREAD_OBJS) + $(MKLIB) -ocamlc '$(CAMLC)' -o threads $(THREAD_OBJS) \ +- -cclib -lunix $(PTHREAD_LINK) ++ -cclib -lunix $(PTHREAD_LINK) -lcamlrun + + # See remark above: force static linking of libthreadsnat.a + threads.cmxa: $(THREAD_OBJS:.cmo=.cmx) +diff --git a/otherlibs/systhreads/Makefile.nt b/otherlibs/systhreads/Makefile.nt +index dc118b7..4b53d6e 100644 +--- a/otherlibs/systhreads/Makefile.nt ++++ b/otherlibs/systhreads/Makefile.nt +@@ -21,6 +21,7 @@ CAMLOPT=../../boot/ocamlrun ../../ocamlopt -I ../../stdlib -I ../win32unix + COMPFLAGS=-warn-error A -g + MKLIB=../../boot/ocamlrun ../../tools/ocamlmklib + CFLAGS=-I../../byterun $(EXTRACFLAGS) ++LDOPTS=-L@libdir@ + + CAMLOBJS=thread.cmo mutex.cmo condition.cmo event.cmo threadUnix.cmo + CMIFILES=$(CAMLOBJS:.cmo=.cmi) +@@ -34,7 +35,7 @@ all: lib$(LIBNAME).$(A) $(LIBNAME).cma $(CMIFILES) + allopt: lib$(LIBNAME).$(A) $(LIBNAME).cmxa $(LIBNAME).cmxs $(CMIFILES) + + $(LIBNAME).cma: $(CAMLOBJS) +- $(MKLIB) -o $(LIBNAME) -ocamlc "..\\..\\boot\\ocamlrun ..\\..\\ocamlc" -linkall $(CAMLOBJS) $(LINKOPTS) ++ $(MKLIB) -o $(LIBNAME) -ocamlc "../../boot/ocamlrun ../../ocamlc" -linkall $(CAMLOBJS) $(LINKOPTS) + + lib$(LIBNAME).$(A): $(COBJS) + $(MKLIB) -o $(LIBNAME) $(COBJS) $(LDOPTS) +@@ -46,7 +47,7 @@ st_stubs_b.$(O): st_stubs.c st_win32.h + + + $(LIBNAME).cmxa: $(CAMLOBJS:.cmo=.cmx) +- $(MKLIB) -o $(LIBNAME)nat -ocamlopt "..\\..\\boot\\ocamlrun ..\\..\\ocamlopt" -linkall $(CAMLOBJS:.cmo=.cmx) $(LINKOPTS) ++ $(MKLIB) -o $(LIBNAME)nat -ocamlopt "../../boot/ocamlrun ../../ocamlopt" -linkall $(CAMLOBJS:.cmo=.cmx) $(LINKOPTS) + mv $(LIBNAME)nat.cmxa $(LIBNAME).cmxa + mv $(LIBNAME)nat.$(A) $(LIBNAME).$(A) + +@@ -71,6 +72,7 @@ clean: partialclean + install: + cp dllthreads.dll $(STUBLIBDIR)/dllthreads.dll + cp libthreads.$(A) $(LIBDIR)/libthreads.$(A) ++ cd $(LIBDIR); $(RANLIB) libthreads.$(A) + mkdir -p $(LIBDIR)/threads + cp $(CMIFILES) threads.cma $(LIBDIR)/threads + rm -f $(LIBDIR)/threads/stdlib.cma +@@ -78,6 +80,7 @@ install: + + installopt: + cp libthreadsnat.$(A) $(LIBDIR)/libthreadsnat.$(A) ++ cd $(LIBDIR); $(RANLIB) libthreadsnat.$(A) + cp $(THREAD_OBJS:.cmo=.cmx) threads.cmxa threads.$(A) $(LIBDIR)/threads + cp threads.cmxs $(LIBDIR)/threads + +diff --git a/otherlibs/systhreads/st_win32.h b/otherlibs/systhreads/st_win32.h +index da602b7..7e1dcb9 100644 +--- a/otherlibs/systhreads/st_win32.h ++++ b/otherlibs/systhreads/st_win32.h +@@ -17,7 +17,7 @@ + + #define _WIN32_WINNT 0x0400 + #include +-#include ++#include + #include + #include + +diff --git a/otherlibs/win32graph/Makefile.nt b/otherlibs/win32graph/Makefile.nt +index 62c4678..e7c6d6b 100644 +--- a/otherlibs/win32graph/Makefile.nt ++++ b/otherlibs/win32graph/Makefile.nt +@@ -18,10 +18,11 @@ COBJS=open.$(O) draw.$(O) events.$(O) dib.$(O) + CAMLOBJS=graphics.cmo + WIN32LIBS=$(call SYSLIB,kernel32) $(call SYSLIB,gdi32) $(call SYSLIB,user32) + LINKOPTS=-cclib "\"$(WIN32LIBS)\"" +-LDOPTS=-ldopt "$(WIN32LIBS)" + + include ../Makefile.nt + ++LDOPTS=-L@libdir@ -ldopt "$(WIN32LIBS)" ++ + graphics.ml: ../graph/graphics.ml + cp ../graph/graphics.ml graphics.ml + graphics.mli: ../graph/graphics.mli +diff --git a/otherlibs/win32unix/Makefile.nt b/otherlibs/win32unix/Makefile.nt +index 76a1c19..c401bbb 100644 +--- a/otherlibs/win32unix/Makefile.nt ++++ b/otherlibs/win32unix/Makefile.nt +@@ -40,7 +40,6 @@ LIBNAME=unix + COBJS=$(ALL_FILES:.c=.$(O)) + CAMLOBJS=unix.cmo unixLabels.cmo + LINKOPTS=-cclib $(WSOCKLIB) +-LDOPTS=-ldopt $(WSOCKLIB) + EXTRACAMLFLAGS=-nolabels + EXTRACFLAGS=-I../unix + HEADERS=unixsupport.h socketaddr.h +@@ -48,6 +47,8 @@ HEADERS=unixsupport.h socketaddr.h + + include ../Makefile.nt + ++LDOPTS=-L@libdir@ -ldopt $(WSOCKLIB) ++ + clean:: + rm -f $(UNIX_FILES) $(UNIX_CAML_FILES) + +diff --git a/utils/config.mlp b/utils/config.mlp +index cdf67d4..b905059 100644 +--- a/utils/config.mlp ++++ b/utils/config.mlp +@@ -86,11 +86,7 @@ let ext_asm = "%%EXT_ASM%%" + let ext_lib = "%%EXT_LIB%%" + let ext_dll = "%%EXT_DLL%%" + +-let default_executable_name = +- match Sys.os_type with +- "Unix" -> "a.out" +- | "Win32" | "Cygwin" -> "camlprog.exe" +- | _ -> "camlprog" ++let default_executable_name = "camlprog.exe" + + let systhread_supported = %%SYSTHREAD_SUPPORT%%;; + +@@ -118,7 +114,7 @@ let print_config oc = + p "ext_asm" ext_asm; + p "ext_lib" ext_lib; + p "ext_dll" ext_dll; +- p "os_type" Sys.os_type; ++ p "os_type" "Win32"; + p "default_executable_name" default_executable_name; + p_bool "systhread_supported" systhread_supported; + flush oc; +-- +1.7.9.5 + diff --git a/src/ocaml-core-test.ml b/src/ocaml-core-test.ml new file mode 100644 index 0000000..4b7885e --- /dev/null +++ b/src/ocaml-core-test.ml @@ -0,0 +1,4 @@ +open Printf +open Format +let _ = + ignore (1+2) 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 -- cgit v0.12