Downloads: Installation Instructions


WARNING: As it stands now, Etoile is more or less a development environment and not a desktop environment. We have no working theme since we are still in the process of migrating from our Camaelon theme engine to the new one bundled with GNUstep. User-oriented applications such as Melodie can fail to launch or behave correctly because their development have been put on hold. We advise you not to use the session support built into Étoilé, but rather write Étoilé code inside another environment such as GNOME or KDE.

Required software

  • LLVM/Clang 3.0 or higher is required to build Etoile

LLVM/Clang 3.0 binaries can be downloaded here.

GCC is not supported, although it can be used to build some modules within the repository (especially GCC 4.6 which supports the main Objective-C 2 features).

You need to have the GNUstep core libraries installed in order to compile and use Etoile. The core packages are, at a minimum:

  • gnustep-make 2.6.1 (2.6 is broken with Clang)
  • gnustep-base 1.24
  • gnustep-gui 0.22
  • gnustep-back 0.22
  • libobjc2 1.6 (other ObjC runtimes such as the one packaged with GCC won't work)

Warning: libobjc2 is also known as the GNUstep runtime. It's a new runtime unrelated to the GCC libobjc and the old GNUstep libobjc (which was a just patched GCC libobjc). Linux distributions such as Debian or Ubuntu include packages named libobjc2 or libobjc3 which are completely unrelated to the GNUstep runtime, and are just recent GCC libobjc packaged under a new name. More details in GNUstep Objective-2 FAQ

GNUstep source releases can be downloaded here and the libobjc2 source here.

Alternatively you can check out the latest GNUstep unstable (or trunk) as follows, but libobjc2 won't be included:

svn co

If you are using LLVM/Clang and GNUstep packages rather than building them manually, you can jump directly to the section Build and Install Etoile. Don't forget to check libobjc2 is installed, otherwise you have to install it as explained in the Build and Install GNUstep section.


In the following sections, square brackets "[ ]" are used to indicate an optional parameter.

Build LLVM and Clang

  • First check out the projects
svn co llvm
cd llvm/tools
svn co clang
  • Build both projects but don't install them

It's a good idea to build LLVM in parallel, so use '-j' if you can

cd .. # Back to llvm directory
./configure [--enable-optimized] && make [-j4]

Both LLVM and Clang have been built in debug mode.

Without --enable-optimized, Clang is quite slow, so it can be a good idea to pass this option. The downside is that it makes harder to debug LLVM/Clang issues, which might lead you to recompile LLVM/Clang without --enable-optimized later on. For more detailed instructions, see

  • Finally expose LLVM and Clang:
export PATH=$PATH:$PWD/Debug/bin: # llvm/Debug/bin contains the clang binary
export CC=clang # Make Clang the C/ObjC compiler rather than GCC

A good choice is put the two lines above in ~/.bashrc or similar and open a new shell. This way you won't have to export these variable every time you want to compile GNUstep or Etoile stuff.

  • Check Clang is ready:
clang -v

Build and Install GNUstep

To build GNUstep with GCC, follow the instructions here.

You can compile gnustep-back with the Cairo backend by configuring it as follows: ./configure --enable-graphics=cairo

To build GNUstep with Clang:

  • Check out GNUstep core modules and libobjc2:
svn co
svn co libobjc2
  • Install GNUstep Make a first time:
cd core/make
./configure --enable-debug-by-default --with-layout=gnustep [--prefix=/]
make && sudo -E make install
. /usr/GNUstep/System/Library/Makefiles/ 
# Or . /System/Library/Makefiles/ if --prefix=/ was passed

A good choice is to put this last line above in ~/.bashrc or similar. This way you won't have to source every time you want to compile GNUstep or Etoile stuff.

Note: If you use a C shell, you should source GNUstep.csh rather than

  • Build libobjc2

strip=yes ensures you can debug ObjC code without stepping inside runtime functions each time a message is sent.

cd ../../libobjc2
make debug=no && sudo -E make strip=yes install

Warning: The new runtime is the GNU runtime version 2 but its library version is corresponds to the GNU runtime version 1 which comes with GCC and is also available at

  • Install GNUstep Make a second time so it can detect the new ObjC runtime just installed:
cd ../../core/make
./configure --enable-debug-by-default --enable-objc-nonfragile-abi --with-layout=gnustep [--prefix=/]
make && sudo -E make install
  • Build and Install GNUstep Base, Gui and Back:
cd core/base
# For Linux e.g. Ubuntu, --with-ffi-include is usually required
./configure --disable-mixedabi --disable-unicodeconstants [--with-ffi-include=/usr/include/`gcc -dumpmachine`]
make && sudo -E make install
cd core/gui
./configure && make && sudo -E make install
cd core/back
./configure && make && sudo -E make install

You can check you are really using Clang and not GCC with 'make messages=yes' instead of 'make' when building a GNUstep module. You can switch back to GCC for a given project with 'make CC=gcc' (or alternatively './configure CC=gcc').

To get an overview of the build options per module, you can use './configure --help' in each module directory.

See also GNUstep for further information.

Build and Install Etoile

Note: If you encounter path related error, you can source or GNUstep.csh in your shell, read the GNUstep documentation to know more about this topic.

Steps to build:

[sudo] [-E] make install

Uninstall Etoile

Steps to uninstall:

[sudo] [-E] make uninstall

Generate Documentation

To build both the code and the documentation at the same time in any directory, type:

make documentation=yes

In addition, you can also generate the documentation without building the code per module. Move to a module directory (e.g. cd Languages/LanguageKit) and do:

make doc

Every time you generate some documentation, a Documentation directory appears per module (e.g. Languages/LanguageKit/Documentation) and it gets consolidated in Developer/Documentation. You can browse the Developer/Documentation/index.html as a starting point. If you are in a module directory, you can browse its documentation with Documentation/index.html (e.g. Languages/LanguageKit/Documentation/index.html)

To clean the generated documentation in the current module directory (will also clean the content copied in Developer/Documentation):

make clean-doc

Finally to remove all the generated documentation, you can use in any directory:

make distclean

which also discards the code previously built.


Give us feedback! Tell us what you like; tell us what you think could be better. Send bug reports and patches to