Compiling EiffelStudio

Revision as of 07:23, 11 April 2006 by FrEeAx (Talk | contribs) (Updated "Installing gobo" section)


Installing EiffelStudio

To compile EiffelStudio, you need an already working EiffelStudio compiler on your machine. The current source tree requires at least version 5.7 of EiffelStudio. You can download it from http://eiffelsoftware.origo.ethz.ch/builds. This version still requires a registration (we missed to remove the registration cluster while compiling). You need to activate EiffelStudio (see below), because in some cases the compiler won't work correctly if not activated. Installing EiffelStudio is covered in its own article.

Extracting source code

Checking out from SVN

Define the EIFFEL_SRC environment variable. Usually we use the XXdev convention where XX is the version number from the current developped version of the compiler.

Make sure that ISE_EIFFEL, ISE_PLATFORM and ISE_C_COMPILER (on windows only) are properly defined

Perform the following checkout procedures:


Windows

set SVNURL=https://eiffelsoftware.origo.ethz.ch/svn/es
svn co %SVNURL%/trunk/Src -N 57dev
svn co %SVNURL%/trunk/Src/bench/C 57dev/C
svn co %SVNURL%/trunk/Src/bench/Eiffel 57dev/Eiffel
svn co %SVNURL%/trunk/Src/common 57dev/Eiffel/common
svn co %SVNURL%/trunk/Delivery -N 57dev/Delivery
svn co %SVNURL%/trunk/free_add_ons 57dev/free_add_ons

cd 57dev
svn up C_library
svn up dotnet
svn up library
svn up library.net
svn up tools

Bash

export SVNURL=https://eiffelsoftware.origo.ethz.ch/svn/es
svn co $SVNURL/trunk/Src -N 57dev
svn co $SVNURL/trunk/Src/bench/C 57dev/C
svn co $SVNURL/trunk/Src/bench/Eiffel 57dev/Eiffel
svn co $SVNURL/trunk/Src/common 57dev/Eiffel/common
svn co $SVNURL/trunk/Delivery -N 57dev/Delivery
svn co $SVNURL/trunk/free_add_ons 57dev/free_add_ons

cd 57dev
svn up C_library
svn up dotnet
svn up library
svn up library.net
svn up tools

Installing gobo

Please make sure to use the version provided or the very latest version from CVS. All other versions (including the official 3.4 release) will not work because of name clashes in the UC_STRING class between GOBO and EiffelStudio.

Windows specific

You have to unzip the gobo distribution from $EIFFEL_SRC/free_add_ons/gobo/gobo_34_win.tgz and extract it into $EIFFEL_SRC/library.

Unix specific

You have to unzip the gobo distribution from $EIFFEL_SRC/free_add_ons/gobo/gobo_34_unix.tgz and extract it into $EIFFEL_SRC/library. Here is the list of commands to do this:

cd $EIFFEL_SRC/library
tar -xvzf $EIFFEL_SRC/free_add_ons/gobo/gobo_34_unix.tgz

Compiling C libraries

Compiling run-time on Windows

Before being able to compile the run-time, you need to ensure that bash is in your PATH. You can download it from http://www.cygwin.com. Once done you can do:

cd $EIFFEL_SRC/C
configure [win32|win64] [b|m]

The first argument indicated whether you are compiling the run-time for 32 or 64 bits. The second one is to tell which C compiler will be used. For now only `b' (Borland) and `m' (Microsoft) are officially supported. We also informally support `g' (GCC) and `l' (LCC).

On Windows 32 bits to clean up all the generated files you do:

configure clean

On Windows 64 bits, you do:

configure cleand

Compiling run-time on Unix

The command is simply:

./quick_configure

This requires that ISE_PLATFORM is properly defined. The `quick_configure' script will look for the file CONFIGS/$ISE_PLATFORM and use it to extract the platform specific information to compile the run-time. If not found then an error will be reported.

Compiling C code from libraries

Here is the list of commands to compile all required C libraries on Windows:

cd $EIFFEL_SRC/library/net/Clib
make_msc.bat
cd $EIFFEL_SRC/library/vision2/Clib
make_msc.bat
cd $EIFFEL_SRC/library/wel/Clib
make_msc.bat

On Unix it is slightly different:

cd $EIFFEL_SRC/library/event/Clib
finish_freezing -library
cd $EIFFEL_SRC/library/net/Clib
finish_freezing -library
cd $EIFFEL_SRC/library/vision2/Clib
finish_freezing -library
cd $EIFFEL_SRC/library/vision2/implementation/gtk/Clib
finish_freezing -library

Compiling C code from C_library

This is only required on Windows to read PNG file. On Unix, this is not required because it is included in GTK+2.4. Simply do the following:

cd $EIFFEL_SRC/C_library/zlib
make_msc.bat
cd $EIFFEL_SRC/C_library/libpng
make_msc.bat

Compiling C code from compiler

This is only required on Windows as this C code is a tiny wrapper around the Microsoft C++ API to generate and to debug .NET code.

To compile it, you first need to install the Microsoft .NET SDK. You can download it from their website.

After installing it, you need to update your LIB and INCLUDE environment variable to include the path the lib and include directory of the .NET Framework SDK.

Once properly installed, you can do:

cd $EIFFEL_SRC/Eiffel/library/cli_writer/Clib
nmake

Compiling EiffelStudio

Now that we have taken care of the C code compilation we can compile the compiler. There are four ace files in $EIFFEL_SRC/Eiffel/Ace:

  • batch.mswin.ace
  • newbench.mswin.ace
  • batch.unix.ace
  • newbench.linux.ace

The first two are for windows, the last two for unix (even if the last one says `linux').

To compile simply do:

ec -ace <chosen_ace_file> -c_compile

Please note: the 'ec' binary produced by the newbench .ace file contains the full Eiffel compiler, including the batch version. 'estudio' is just a wrapper (available in Src/bench/C/ipc/daemon). So, you need either the one or the other.

Windows specific

At the end of the compilation for the workbench version, the C compilation will fail reporting an undefined reference to `nbref'. This is because the ace file has been built for the finalized version of EiffelStudio not the workbench version. To fix this problem do the following:

copy ec.lnk h

Then edit the file `h' and replace mtcompiler.lib by mtwcompiler.lib. Once this is done you can complete you do:

link @h

In order to update to the new version of metadata consumer tool, follow the instructions described here.

Unix specific

Like the windows version the C compilation, it will fail, but this time for two reasons:

  • nbref
  • linking order causing many errors to be reported

Here is the recommended way, make a copy of the generated Makefile and put it at the same level as your EIFGEN directory. Edit it and replace libmtcompiler.a by libmtwcompiler.a, then search for "$(EXTERNALS) $(EIFLIB)" and replace it by "$(EIFLIB) $(EXTERNALS)". Once this is done, you can do:

make -f ../../Makefile

A little script that does the necessary changes: Place it at the same level as the EIFGEN directory is.

#!/bin/bash
 
cp EIFGEN/W_code/Makefile .
sed 's/libmtcompiler\.a/libmtwcompiler\.a/g' Makefile > tmp
sed 's/\$(EXTERNALS) \$(EIFLIB)/\$\(EIFLIB\) \$\(EXTERNALS\)/g' tmp > Makefile
cd EIFGEN/W_code
make -f ../../Makefile

Also, if you encounter problems with your self-compiled version of EiffelStudio, you might try to compile it with GCC 3.x. Version 4 of GCC has a slight change in semantics and EiffelStudio has not been updated. You can see the change in behavior in the following code:

#include <stdio.h>
 
int a;
int b;
int *pointer;
 
int foo()
{
  pointer = &b;
  return 4;
}
 
int main (int argc, char** argv) 
{
  a = 3;
  b = 0;
 
  pointer = &a;
 
  *pointer = foo();
 
  printf ("You are using GCC %d.%d\n",a,b);
  return 0;  
}

Mac OS X specific

nothing documented yet...