compiling coq with the ocaml mingw32 cross-compiler

Pierre Letouzey Pierre.Letouzey at pps.jussieu.fr
Mon Mar 1 10:53:03 UTC 2010



[[ Hi all. As Stephane mentionned to me, I should have added
   debian-ocaml-maint list to the CC, so let's do that now.
   For completeness sake, I leave the full previous message,
   even if my (short answer) is almost at the end ]]


On Fri, Feb 26, 2010 at 08:34:21AM -0600, Romain Beauxis wrote:
> Le vendredi 26 février 2010 06:57:54, Pierre Letouzey a écrit :
> > On Tue, Feb 23, 2010 at 09:10:27PM +0000, Richard Jones wrote:
> > > 
> > > It would be great if Debian could push changes for cross-compilation
> > > back upstream.  Perhaps this is something we will be able to discuss
> > > at the OCaml Users Conference in April?
> > > 
> > 
> > Yes, that would be nice...
> 
> Agreed. But some of them need to be made more generic before..
> 
> > > 
> > > In Fedora we maintain over 100 mingw32-* packages (not OCaml
> > > specifically, but many C and C++ libraries), and there are often quite
> > > a lot of changes from upstream and from the native package.
> > 
> > Indeed, I should have started looking in this direction. In particular
> > I've now found your mingw32-ocaml-lablgtk.spec, but in fact after
> > having made my own mingw32-lablgtk2*.deb. I should try to factorize
> > the two someday.
> > 
> > > > Yes, this can be an issue. In general, I recommend to set the PATH with
> > > > the  cross-compiler binaries first:
> > > >   export PATH=/usr/i586-mingw32msvc/bin:$PATH
> > >
> > > 
> > > Oooo, I don't like this at all.  This is not necessary for any Fedora
> > > cross-compiled packages, so I'm not clear why it should be needed for
> > > Debian ones.
> > > 
> > 
> > As I said earlier I indeed think this export PATH should (and can) be
> > avoided as much as possible.
> 
> Agreed. The problem comes from some build systems that hardcode ocaml compiler 
> or use `which ocamlc`
> 
> > So anyway, here's the current status of my effort to cross-compile Coq:
> > 
> > - With the help of Stephane Glondu, we now have debian packages for
> >   mingw32-{camlp5,gtk2,lablgtk2}, see http://debian.glondu.net/mingw32
> > 
> > - With these packages, my initial goal is fulfilled: I'm able to
> >   compile the native opt win32 binaries for coq (including gtk gui
> >   coqide) while comfortably seated in front of my linux box. I've even
> >   prepared a windows installer by re-using a nsis script of someone of
> >   our group. I still have to thoroughly test these binaries, but
> >   initial tests look ok :-)
> > 
> > - My mingw32-gtk2 package is a "fake", I was too lazy to properly
> >   adapt gtk2 and its dependencies. I think that even with indications
> >   coming from the fedora mingw32-*.spec, this is a non-trivial task.
> >   Instead, this .deb repacks an official gtk+-bundle-2.8.17*-win32.zip
> >   coming from ftp.gnome.org.
> > 
> > - My mingw32-lablgtk2 is quite stripped-down: only gtk, no extensions
> >   such as glade, sourceview, gnome-ui or whatever. Moreover it only
> >   contains the "opt" files. Concerning byte version, the build fails
> >   on ocamlc (and hence ocamlrun) trying to load a .so while a .dll has
> >   been produced. To reproduce the issue, simply replace "lablgtkopt"
> >   with "all" in debian/rules. Since I'm focused on getting native .exe
> >   binaries, I've gladly ignored this :-) ...
> > 
> > - But I've nonetheless spent some time trying to understand what's
> >   going on. And I got the feeling that current ocamlrun and ocamlc
> >   from mingw32-ocaml aren't really emulating a mingw32 environment.
> >   For instance:
> > 
> >   echo "print_string Sys.os_type" >> test.ml
> >   /usr/i586-mingw32msvc/ocamlc -o test test.ml
> >   ./test    # answers Unix
> 
> I believe bytecode compilation is plateform independant. Hence, when you run 
> the test with your own ocamlrun, it returns Unix.
> 
> This may also be the case with the shipped ocamlrun, but the bytecode should 
> still be executable under windows.
> 
> >   Similarly:
> >   
> >   /usr/i586-mingw32msvc/ocamlmktop -o mytop
> >   ./mytop
> >   print_string Sys.os_type;;  (* answers Unix *)
> 
> >   [Btw this ocamlmktop isn't working out-of-the-box, since
> >    toplevellib.cma isn't installed by mingw32-ocaml.]
> 
> This is more an issue. Should I patch the package to include toplevellib.cma ?
> Shouldn't the result of mktop be a binary for windows ?
> 

Yep, that would be nice. But as I told you earlier, I'm not that much
interested in bytecode binaries, so I'm not sure it worths spending too
much time on this matter. 


> >   So, are these ocamlrun/ocamlc/ocamlmktop meant to have different
> >   behavior than the /usr/bin/ ones ? If this is not the case, maybe
> >   they could simply be removed from the package...
> 
> I do not want to remove ocamlrun from the package. These binaries are ABI 
> dependant with the version of ocaml. For instance, when I had ocaml 3.11.2 as 
> main ocaml and ocaml 3.11.1 as cross-build ocaml, compilation would fail with 
> the cross-compiler because the ocamlrun used was the one from 3.11.2 and it 
> was not ABI compatible with 3.11.1.
> 
> For this reason, the package now ships its own ocamlrun in order to be 
> independant as much as possible from the "normal" ocaml.
> 

I see your point, and that sounds completely reasonable. Btw, that
reminds me that I should test and fix someday the dependencies of my
mingw32-* temptative packages, since they are currently rather
"bricolage". In particular, dependencies toward the regular ocaml or
gtk packages could certainly be totally removed.


> >   When looking at the build process of ocamlrun, I first noticed that
> >   byterun/libcamlrun.a was not remade after switching to the mingw
> >   config/Makefile. But then I realized that ocamlrun itself was not
> >   a remade one, otherwise we would have had a ocamlrun.exe. Which
> >   by the way would be handy to create -custom win32 byte .exe...
> >   Not that I care much about byte when opt is working, but that
> >   might interest some other persons.
> 
>  I believe there should be more work to do with byterun compilation, indeed..
> 
> 
> Romain

Best regards,

Pierre


More information about the mingw mailing list