Compiling F.O.X. under Linux is normally easy (it is developped using Mandriva Linux). The source code for Fox now includes the [http://wxwidgets.org wxWidgets] and [http://freeglut.sf.net freeglut] libraries, so dependencies should be minimal. As always, send me an email at firstname.lastname@example.org if you have any trouble with the installation.
[#lib Install the required graphical libraries]
[#fox Get, compile & install Fox]
[#optimize Compile an optimized version of Fox]
Installing the required graphics libraries
Anchor(lib) Below are specific instructions to install the required graphics libaries for the following distributions :
Please add or correct the instructions for your distribution...
If your distribution is not listed, just follow the [#general general building instructions]. Anchor(general)
General Instructions (if your distribution is not listed below)
To install F.O.X. under Linux:
You will need valid libraries and development files for OpenGL. You may require a specific library for your card (NVidia,...), the Xfree-devel or libxorg-devel, and the gtk-devel (or gtk+-devel or gtk2-devel...) packages. For all major distributions, these packages are included either in the default install or as an additionnal package.
Mandrake & Mandriva
Mandriva 10.2 (2006)
The required packages (just urpmi followed by tha package names - you need the main and contrib rpm repositories) are :
Development packages: gcc gcc-c++ gcc-cpp gfortran
Graphics development packages : libxorg-x11-devel, libgtk+1.2-devel, libMesaglut3-devel
Anchor(fedora) This is partially a guess since I do not have this distribution, so feel free to correct these
Fedora Core 3 & 4
Development packages: gcc gcc-c++ gcc-g77
Graphics development package : xorg-x11-devel, gtk+-devel
Development packages: gcc g++ gcc-g77
Graphics development package : libgl1-mesa-dev, libglu1-mesa-dev, libgtk1.2-dev
Anchor(suse) This is partially a guess since I do not have this distribution, so feel free to correct these
Development packages: gcc gcc-c++ gcc-g77
Graphics development package : xorg-x11-devel, gtk-devel (or gtk2-devel)
Get, compile & install Fox
Anchor(fox) Get the Fox.tar.bz2 from [http://sourceforge.net/project/showfiles.php?group_id=27546&release_id=203604 SourceForge], [ftp://ftp.ccp14.ac.uk/ccp14/ftp-mirror/objcryst/ CCP14(UK)], [http://ccp14.sims.nrc.ca/ccp/ccp14/ftp-mirror/objcryst/ CCP14(Canada)] or [http://ccp14.semo.edu/ccp/ccp14/ftp-mirror/objcryst/ CCP14(USA)]
Then compile and install Fox (replace VERSION by your version of Fox):
tar -xjf Fox-VERSION.tar.bz2 cd Fox-VERSION make make install (for this last step you must be root).
Fox will be installed in /usr/local/bin/Fox. Otherwise the compiled file is in the src/Fox subdirectory.
Note: if during the early stages of the compilation (when freeglut is compiled), you get an error message about libGL.la, this can mean that libGL.la is not in the same directory as other x11 libraries. On my computer, where libGL.la is provided by the nVidia installer, I needed to do "ln -s /usr/lib/libGL.la /usr/X11R6/lib/".
Compiling an optimized version of Fox
The first set of optimizations can be activated by using processor-specific optimizations. If you edit the Fox/ObjCryst/rules.mak file, and search for the dpart where the CPPFLAGS are defined:
CPPFLAGS = -O3 -w -ffast-math -fstrict-aliasing -pipe -fomit-frame-pointer -funroll-loops
Auto-vectorization: starting with gcc 4.0.0, it is possible to automatically vectorize some loops: append -ftree-vectorize to the CPPFLAGS options to do that (see the examples commented out in the rules.mak file).
Profile driven optimizations
Fox can be further optimized by making "test runs" which are used to give hints to the compiler on how to best optimize the code. To do this you (i) compile Fox by enabling the "recording" of the optimization, then (ii) you run a few optimizations, then (iii) you recompile using the recorded profile. This requires gcc version 3.2 or above.To do that from the Fox directory, do:
make clean make Fox profile=2 src/Fox --nogui example/pbso4-joint.xml --randomize -n 50000 -o /dev/null src/Fox --nogui example/Cimetidine-powder.xml --randomize -n 50000 -o /dev/null src/Fox --speedtest make clean make Fox profile=3 make install
This yields about 10% faster code.