ApCoCoALib:CompilationInstructions
This page describes how to compile the ApCoCoALib as of 0.99.08. Please note, the former page HowTo:Compile_ApCoCoALib_on_Windows is outdated, just follow the instructions below.
Requirements
You need at least the following libraries:
Library | Current | Recommended | Minimum | Dependencies | Notes |
---|---|---|---|---|---|
CoCoALib | 0.99.30 | 0.99.28 | - | GMP | - |
GMP | 4.3.1 | 4.2.4 | 4.1.4 | M4 | - |
Boost | 1.39 | 1.39 | 1.35 | none | System, Filesystem & Thread needed for ApCoCoA-Server |
Optional:
Library | Current | Recommended | Minimum | Dependencies | Notes |
---|---|---|---|---|---|
BLAS | ? | ? | ? | none | for ABM & numerical functions |
Lapack | 3.2.1 | ? | ? | BLAS | for ABM & numerical functions |
LinBox | 1.1.6 | 1.1.6 | 1.1.6 | BLAS, Givaro, Lapack, GMP | - |
Boost | 1.39 | 1.39 | 1.35 | none | Thread & Program Options needed for Border Basis Framework |
IML | 1.0.2 | 1.0.2 | 1.0.2 | GMP, ATLAS | - |
Givaro | 3.2 | 3.2 | 3.2 | none | - |
ATLAS | 3.9.11 | 3.8.3 | ? | none | - |
The Config File
ApCoCoALib lets you choose which of the optional features you want to compile in a very flexible way. Usually you store all build related configuration parameters in a file called lib.config and pass its location to the configure script via the --with-libconfig= parameter. The lib.config file looks as follows.
###################### # Mandatory settings # ###################### # Path to your Boost library include directory, e.g. #BOOSTFLAGS=-I"/home/skaspar/lib/boost_1_38_0/include/boost-1_38" BOOSTFLAGS= # Mandatory, cannot be left empty # Linker flags of your Boost thread libraries plus linker flags of # additional libraries needed by Boost, e.g. #BOOSTLIBS="/home/skaspar/lib/boost_1_38_0/lib/libboost_thread-gcc43-mt.a" \ # -lpthread BOOSTLIBS= # Mandatory, cannot be left empty ##################### # Optional features # ##################### # Uncomment the following flag if you want to use the # Border Basis Framework #BBFFLAGS=-DUSEBBFramework BBFFLAGS= # Can be left empty if you do not want to use # the Border Basis Framework # Linker flags of your Boost program_options and thread # libraries plus linker flags of additional libraries needed # by Boost, e.g. #BBFLIBS="/home/skaspar/lib/boost_1_38_0/lib/libboost_program_options-gcc43-mt.a" \ # "/home/skaspar/lib/boost_1_38_0/lib/libboost_thread-gcc43-mt.a" \ # -lpthread BBFLIBS= # Can be left empty if you do not want to use # the Border Basis Framework # Uncomment the following flag if you want to use # IML-driven computations #IMLFLAGS=-DUSEIML # Path to your IML include directory, e.g. #IMLFLAGS:=$(IMLFLAGS) -I"/home/skaspar/lib/iml-1.0.2/include" IMLFLAGS:=$(IMLFLAGS) # Can be left empty if you do not # want to use IML-driven # computations # Linker flags of your IML library plus linker flags of # additional libraries needed by IML, e.g. #IMLLIBS="/home/skaspar/lib/iml-1.0.2/lib/libiml.a" \ # -lcblas \ # -latlas \ # "/usr/lib/libgmp.a" IMLLIBS= # Can be left empty if you do not want to use # IML driven computations # Uncomment the following flag if you want to use LinBox- # driven computations #LINBOXFLAGS=-DUSELinBox # Path to your LinBox include directory plus path to # additional include directories needed by LinBox, e.g. #LINBOXFLAGS:=$(LINBOXFLAGS) \ # -I"/home/skaspar/lib/linbox-1.1.6/include" \ # -I"/home/skaspar/lib/givaro-3.2.13rc1/include" LINBOXFLAGS:=$(LINBOXFLAGS) # Can be left empty if you # do not want to use LinBox- # driven computations # Linker flags of your LinBox library plus linker flags # of additional libraries needed by LinBox, e.g. #LINBOXLIBS=/home/skaspar/lib/linbox-1.1.6/lib/liblinbox.a \ # -lgmpxx \ # /home/skaspar/lib/givaro-3.2.13rc1/lib/libgivaro.a LINBOXLIBS= # Can be left empty if you do not # want to use LinBox-driven # computations # Uncomment the following flag if you do not want # to use the BLAS and Lapack libraries NUMFLAGS=-DUSENoLapack # Uncomment the following flag if you want to use # the BLAS and Lapack libraries and you are using # Linux or Cygwin #NUMFLAGS=-DUSEF77Lapack # Uncomment the following flag if you want to use # the BLAS and Lapack libraries provided by the # Accelerate Framework on MacOSX #NUMFLAGS=-DUSEAccFW # Linker flags of your BLAS and Lapack libraries # plus linker flags of additional libraries needed # by BLAS and/or Lapack. # # Example flags on a Linux or cygwin system #NUMLIBS=-llapack -lblas -latlas # # Example flags on a MacOSX system using the # the Accelerate Framework #NUMLIBS=-bind_at_load -framework accelerate NUMLIBS= # Can be left empty if you do # not want to use the BLAS and # Lapack libraries
Step by Step build instructions
Get a copy of the sources for CoCoALib from http://cocoa.dima.unige.it/cocoalib/changelog-0.99.html and ApCoCoALib from the subversion repository.
Build the CoCoALib. You should consult the CoCoALib documentation in case of problems.
Build the ApCoCoALib: Unpack the tarball in the same directory as CoCoALib-0.99. This is the default location that ApCoCoALib will look for. You can change it but at the moment this requires editing of the COCOA_DIR_NAME in the file configuration/autoconf.mk. We will offer the location of CoCoALib as a config option in the libconfig file in a later release.
Again, please note that
- the CoCoALib directory must be named as CoCoALib-0.99
- the CoCoALib and ApCoCoALib directory must reside in the same directory.
Now run configure:
[mabshoff@dhcp75 ApCoCoALib-0.99]$ ./configure ERROR: Specified config file is not a readable file: "" Please specify a config file for the external numerical libraries via --with-libconfig
You get an error because ApCoCoALib needs to be told where to find several external libraries and options. One option is to set CONFIG_LIB="lib.config" in the configure script and create the file called lib.config with the following text:
# we don't want to compile in any numerical libraries NUMFLAGS=-DUSENoLapack
With this config file you deactivate all numerical methods provided by ApCoCoALib. Chances are you do not want to do this. But since building the numerical libraries can be a little complicated we provide precompiled libraries and config examples at http://apcocoa.org/hg/NumLibs/file/ FIXME: Add more details and tarballs.
In case you have Mac Os X as your operating system, it is very easy to include the numerical Libraries. Per default, you have an installed Accelerate Framework, which includes BLAS and Lapack, which are the numerical libraries we currently use. To activate the accelerate framework, your lib.config should include the lines:
NUMFLAGS=-DUSEAccFW # linker options: NUMLIBS=-bind_at_load -framework accelerate
With a working set of libraries we rerun configure and get:
[mabshoff@dhcp75 ApCoCoALib-0.99]$ ./configure --with-libconfig=../NumLibs/lib.config.USEF77Lapack The C++ compiler is g++ 4.1.1 20070105 (Red Hat 4.1.1-51) The C++ optimized compilation flags are "-Wall -pedantic -fPIC -O2" Using GMP library version 4.2.1 found in "/usr/local/gmp-4.2.1-static/lib/libgmp.a". and GMP header file found in "/usr/local/gmp-4.2.1-static/include/gmp.h" Configuration process complete: info saved in configuration/autoconf.mk -----------------------------------------------------------------------
Everything is fine now. Just enter
make
and the ApCoCoAServer as well as the ApCoCoALib should be build.
In case of problems please complain in the forum.
Building External Dependencies
Windows
Compilers
MSVC 2003, MSVC 2005, Intel C++, Cygwin
CoCoALib
Build from source, prebuild packages for MSVC 2005, MSVC 2003, Cygwin
GMP
Brian Gladman's build for MSVC, from source for Cygwin/MinGW.
BLAS/Lapack
Cygwin ships with BLAS and Lapack from netlib.org compiled as a dynamic library. These are regularly tested and do work well. Alterntively you can compile ATLAS, but there are occasional linker issues.
If you use the Microsoft's compilers you can use the Intel MKL, GotoBLAS or ATLAS 3.8.0. It is also possible to build netlib.org's BLAS and Lapack using a Fortran compiler from Intel.
LinBox
Build from source, Cygwin only at the moment. It is highly recommened that you build LinBox as a static library, there have been linking issues with a dynamic LinBox in the past. You might also need to tweak LinBox's m4 BLAS detection macros when using netlib.org's BLAS and Lapack.
Linux
Compilers
g++ 3.3 up to 4.2
CoCoALib
Build from source
GMP
Distribution package, build from source
BLAS/Lapack
Distribution package, build from source: ATLAS, netlib.org, GotoBLAS, IntelMKL
ATLAS
Build from source. Install instructions:
tar -xvzf atlas3.xx.tar.gz cd ATLAS mkdir ATLAS_build cd ATLAS_build ../configure make make install
Important: For compiling ATLAS you need an extra build-directory, that must be within the directory where you extracted your files to. Call the configure-script from within the build-directory, as noted above. For further informations see atlas_install.pdf in ATLAS/doc. Please also see the .pdf if you have some kind of special architecture like 64bit.
Note for Laptop-Users: You have to set you CPU power scheme to "performance", in order to have maximum speed for the tests, that are performed during the ATLAS compiling routine. If you have a DualCore remember to do this for both cores!
To change the power scheme you can use tools like cpufrequtils, normally found within the repository of your package manager.
LinBox
build from source
MacOSX
The following steps were taken on an Apple MacBook (Intel Core 2 Duo), OS X 10.4.
Compilers
Xcode 2.4.1 recommened, for current releases we are using xcode 2.5.
CoCoALib
Build from source.
Boost
This might not be the best way to supply the '-m64' argument, but it works.
./configure [--prefix=<path>] ./tools/jam/src/bin.macosxx86/bjam -d+2 --user-config=user-config.jam architecture=x86 address-model=64 cxxflags=-m64 ./tools/jam/src/bin.macosxx86/bjam --user-config=user-config.jam --prefix=<> --exec-prefix=<> --libdir=<> --includedir=<> architecture=x86 address-model=64 cxxflags=-m64 install
GMP
build from source, can be tricky, need the right patch and working xcode. Try the following:
./configure [--prefix=<>] --enable-cxx make make check make install
BLAS/Lapack
AccelerateFrameWork recommended (installed per default). Also possible: build from sources: ATLAS, netlib.org installer: IntelMKL
LinBox
build from source
Givaro
./configure [--prefix=<>] --with-gmp=</path/to/dir> CXXFLAGS=-m64 make make install
In file givaro-config.h
the flag __GIVARO_GMP_NO_CXX
must not be set. Otherwise we got problems with wrong includes compiling ApCoCoA.
Linbox
Apply the patch given in http://www.apcocoa.org/forum/viewtopic.php?f=20&t=983
./configure --prefix=<> --with-gmp=<> --with-givaro=<> CXXFLAGS=-m64 make make install
IML
Now, that was quite involved. If anyone knows a better way to get IML compiled, please let us know.
./configure -prefix=<> --with-gmp-lib=<> --with-gmp-include=<> --with-atlas-include=<> --with-atlas-lib=<> CFLAGS=-m64
(Yes, its CFLAGS and _not_ CXXFLAGS) After configuring, do the following:
cp librepl.a repl cd repl/.libs ln -s ../librepl.a librepl.a echo "!<arch>" > repl/.libs/librepl.a
On a mac, this seems to be necessary since libtool
does apparently not work properly (any help on this is welcome) and we have to fool ar
(this approach is just mimicked from a working Linux compilation).
make make check chmod 755 config/install-sh
(Do not ask...)
make install
ATLAS
(Used gFortran, downloaded from http://r.research.att.com/tools)
../configure --prefix=<> make make install
Solaris/UNIX
Compilers
g++ 3.3 up to 4.2, SunPro compiler difficult to use due to problem with gmpxx.h
CoCoALib
Build from source
GMP
Distribution package, build from source
BLAS/Lapack
recommneded: SunPerfLib build from sources: ATLAS, netlib.org
LinBox
build from source
ToDo
- configure no longer errors out, but write a warning
- make links to targz'ed libraries available