[m-dev.] Building Mercury in Windows 10

Julien Fischer jfischer at opturion.com
Fri Apr 1 00:58:39 AEDT 2016


On Wed, 30 Mar 2016, hao ramirez wrote:

> So, if I wanted to fix the Mercury 14.01 (Visual Studio 2013 32bit) release, how would I start?

I assume you mean fixing it on Windows 10 -- it works on Windows 7.  I would
start by trying to build a current ROTD rather than 14.01 since there have been
changes specific to MSVC that have not been backported to the 14.01 branch.

> I'm interested in committing to really trying to help this project, so
> looking at it I'm not that sure how to go about it.
> So far I am at the point where I am in the build tutorial for Windows and I can't seem to even run
>       $ ./configure --with-msvcrt
>       bash: ./configure: No such file or directory
> in the Cygwin shell.
> Pretty sure this is a stupid thing I should know, but I have no clue how to work around it.

For a source tree checked out from git and assuming you have an existing
Mercury compiler to bootstrap from, it should be:

     $ ./prepare.sh
     $ ./configure
     $ make
     $ make install

You probably don't need to use configure's --with-msvcrt option.  In Cygwin (or
MSYS etc) you will need to pass '--with-cc=cl' to the configure script to tell
it to use MSVC rather than GCC.

If you are building the source distribution (i.e. the tarballs with the
pre-generated .c files), then it should simply be:

     $ ./configure
     $ make
     $ make install

> Also, what exactly is the build sequence for Mercury in general? I know it's Autotools, but I'm wondering what the breakdown of:
>       config.guess
>       config.sub
>       configure.ac
>       install-sh
>       Makefile
>       Makefile.DLLs
>       Mmake.common.in
>       Mmake.workspace
>       Mmakefile
>       prepare.sh
> and how they are used? Big question, but I'm just wondering if someone could maybe use some ASCII to show:
> configure.ac [depending on config.sub, config.guess] -> processed by ./configure -> generates file $x -> Makefile [depending on $x] ->
> scripts/Mmake -> ...
> or something?

    * prepare.sh generates 'configure' from 'configure.ac'
    * 'configure' (using config.guess and config.sub) generates bunch of files, among
       which is 'Mmake.common' for which 'Mmake.common.in' is the template.
    * 'Makefile' is just a wrapper that invokes the relevant mmake targets from make.
    * 'Mmakefile' is the main top-level Mmakfile for the Mercury system, it includes
      'Mmake.workspace' and 'Mmake.common'.a

'Makefile.DLLS' contains some additional rules for building DLLs on Windows.  It
isn't currently used.

> Also, it looks like the Makefile calls Mmake, but I thought Mmake was
> completely deprecated? Is it still used in the initial build system?

For users of Mercury, mmake is effectively deprecated, and we recommend using
'mmc --make' to build multi-module programs.

For the Mercury compiler itself mmake is, and will remain, the build system.


More information about the developers mailing list