Dear Stefan, I believe it is currently impossible to build a working cross-compiler between different word sizes, as the compiler does not differentiate between the host and the target's native integers. Best wishes, Nicolas On Thu, Oct 8, 2015 at 11:43 AM, Stefan Hellermann wrote: > Hello, > > currently I'm trying to add OCaml to the openwrt router distribution [1] > [2]. This would mean you could run your favorite OCaml applications on your > router. I would like to run unison [3] on my router. > > So I first build native OCaml 4.02.3 on my x86_64 linux host, and then > build a OCaml cross-compiler for the 32 bit target, e.g. > mips-openwrt-linux. Building OCaml went fine after adding a small patch to > manually set Endianness and Bitness in configure script, please have a look > at attached patch. > > host OCaml configure line: > ./configure -prefix somepath -no-pthread -no-debugger -no-ocamldoc > -no-graph -no-cfi > cross OCaml configure line: > ./configure -prefix someotherpath -target-bindir /usr/bin -host > x86_64-unknown-linux-gnu -target mips-openwrt-linux-musl -cc > "mips-openwrt-linux-musl-gcc some target cflags" -as > "mips-openwrt-linux-musl-as some target as flags" -no-pthread > -no-shared-libs -no-debugger -no-ocamldoc -no-graph -no-cfi -big-endian > > > Now the bug: When running OCaml applicantions (build with -custom), they > crash on startup on the target: > > Fatal error: exception Failure("input_value: integer too large") > > > This is similar to OCaml Bug #5977 [4] > > There is a workaround: > Build the host OCaml as 32 bit OCaml, then build the cross compiler with > this 32 bit host OCaml. The resulting binaries work on the target. > This is what I did for openwrt [2], but it fails on 64 bit hosts where no > 32 bit development tools are installed. It only catches the case when > building on x86_64 hosts, it will break when building on say powerpc64 or > 64 bit arm. It's also problematic for openwrt, as only the cross compiler > but not the host tools are recompiled if the target arch changes, e.g. from > 64 bit arm to 32 bit mips. > > Now my questions: > - Is building a 32 bit cross compiler on a 64 bit host supposed to work? > - Is my patch to configure ok, or is there a better way to configure the > cross-compiler? > - Should I run some test suite on the target and post the results? > > [WARNING] Something went wrong while checking native division and modulus > please report it at http://http://caml.inria.fr/mantis/ > Do I have to care? > I tried defining and undefining NONSTANDARD_DIV_MOD in m.h. without any > visible difference. Running the test-prog divmod.c on a few targets always > returns 0. > > [1] https://openwrt.org/ > [2] https://patchwork.ozlabs.org/patch/518982/ > [3] https://www.cis.upenn.edu/~bcpierce/unison/ > [4] http://caml.inria.fr/mantis/view.php?id=5977 > > >