Commit 2e35361e authored by Cedric Jourdain's avatar Cedric Jourdain 🐵
Browse files

Fix merge conflict for compile

parents 2a1e952f c8fbc69a
......@@ -282,7 +282,7 @@ The SHOC benchmark suite currently contains benchmark programs, categoried based
# SPECFEM3D <a name="specfem3d"></a>
| **General information** | **Scientific field** | **Language** | **MPI** | **OpenMP** | **GPU** | **LoC** | **Code description** |
|------------------|----------------------|--------------|---------|------------|---------------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| [- Website](https://geodynamics.org/cig/software/specfem3d_globe/) <br>[- Source](https://github.com/geodynamics/specfem3d_globe.git) <br>[- Bench](https://repository.prace-ri.eu/git/UEABS/ueabs/tree/r2.1-dev/specfem3d) <br>[- Summary](https://repository.prace-ri.eu/git/UEABS/ueabs/blob/r2.1-dev/specfem3d/PRACE_UEABS_Specfem3D_summary.pdf) | Geodynamics | Fortran | yes | yes | Yes (CUDA) | 140000 | The software package SPECFEM3D simulates three-dimensional global and regional seismic wave propagation based upon the spectral-element method (SEM). |
| [- Website](https://geodynamics.org/cig/software/specfem3d_globe/) <br>[- Source](https://github.com/geodynamics/specfem3d_globe.git) <br>[- Bench](https://repository.prace-ri.eu/git/UEABS/ueabs/tree/r2.1-dev/specfem3d) <br>[- Summary](https://repository.prace-ri.eu/git/UEABS/ueabs/blob/r2.1-dev/specfem3d/PRACE_UEABS_Specfem3D_summary.pdf) | Geodynamics | Fortran & C | yes | yes | Yes (CUDA) | 100k Fortran & 20k C | The software package SPECFEM3D simulates three-dimensional global and regional seismic wave propagation based upon the spectral-element method (SEM). |
# TensorFlow <a name="tensorflow"></a>
......
......@@ -100,7 +100,7 @@ these versions of GPAW.
Installing and running GPAW has changed a lot in the since the previous
versions of the UEABS. GPAW version numbering changed in 2019. Version 1.5.3 is the
last version with the old numbering. In 2019 the development team switched
to a version numbering scheme based on year, month and patchlevel, e.g.,
to a version numbering scheme based on year, month and patch level, e.g.,
19.8.1 for the second version released in August 2019.
Another change is in the Python packages used to install GPAW. Versions up to
......@@ -169,9 +169,9 @@ In addition, the GPU version needs:
Installing GPAW also requires a number of standard build tools on the system, including
* [GNU autoconf](https://www.gnu.org/software/autoconf/) is needed to generate the
configure script for libxc
configure script for LibXC
* [GNU Libtool](https://www.gnu.org/software/libtool/) is needed. If not found,
the configure process of libxc produces very misleading
the configure process of LibXC produces very misleading
error messages that do not immediately point to libtool missing.
* [GNU make](https://www.gnu.org/software/make/)
......@@ -297,8 +297,8 @@ on one hand and version 21.1.0 on the other hand.
The expected values are:
* Number of iterations: Between 30 and 35
* Dipole (3rd component):between -0.493 and -0.491
* Fermi level:between -2.67 and -2.66
* Dipole (3rd component): Between -0.493 and -0.491
* Fermi level: Between -2.67 and -2.66
* Extrapolated energy: Between -3784 and -3783
Note: Though not used for the benchmarking in the final report, some testing was done
......@@ -307,7 +307,7 @@ by new internal implementations that cause changes in some results. For 21.1.0,
expected values are:
* Number of iterations: Between 30 and 35
* Dipole (3rd component): between -0.462 and -0.461
* Fermi level: between -2.59 and -2.58
* Dipole (3rd component): Between -0.462 and -0.461
* Fermi level: Between -2.59 and -2.58
* Extrapolated energy: Between -3784 and -3783
# Detailed GPAW installation instructions on non-acclerated systems
# Detailed GPAW installation instructions on non-accelerated systems
These instructions are in addition to the brief instructions in [README.md](../README.md).
......@@ -13,7 +13,7 @@ GPAW needs (for the UEABS benchmarks)
* [Python](https://www.python.org/): GPAW 20.1.0 requires Python 3.5-3.8, and
GPAW 20.10.0 and 21.1.0 require Python 3.6-3.9.
* [MPI library](https://www.mpi-forum.org/)
* [LibXC](https://www.tddft.org/programs/libxc/). GPAW 20.1.0,
* [LibXC](https://www.tddft.org/programs/LibXC/). GPAW 20.1.0,
20.10.0 and 21.1.0 all need LibXC 3.x or 4.x.
* (Optimized) [BLAS](http://www.netlib.org/blas/) and
[LAPACK](http://www.netlib.org/lapack/) libraries.
......@@ -22,7 +22,7 @@ GPAW needs (for the UEABS benchmarks)
will give very poor performance. Most optimized LAPACK libraries actually only
optimize a few critical routines while the remaining routines are compiled from
the reference version. Most processor vendors for HPC machines and system vendors
offer optmized versions of these libraries.
offer optimized versions of these libraries.
* [ScaLAPACK](http://www.netlib.org/scalapack/) and the underlying communication
layer [BLACS](http://www.netlib.org/blacs/).
* [FFTW](http://www.fftw.org/) or compatible FFT library.
......@@ -60,7 +60,7 @@ GPAW needs
* [ASE, Atomic Simulation Environment](https://wiki.fysik.dtu.dk/ase/), a Python package
from the same group that develops GPAW. The required versions is 3.18.0 or later for
GPAW 20.1.0, 20.10.0 and 21.1.0.
ASE has a couple of dependendencies
ASE has a couple of dependencies
that are not needed for running the UEABS benchmarks. However, several Python
package install methods will trigger the installation of those packages, and
with them may require a chain of system libraries.
......@@ -69,7 +69,7 @@ GPAW needs
This package is optional and not really needed to run the benchmarks.
Matplotlib pulls in a lot of other dependencies. When installing ASE with pip,
it will try to pull in matplotlib and its dependencies
* [pillow](https://pypi.org/project/Pillow/) needs several exgternal
* [pillow](https://pypi.org/project/Pillow/) needs several external
libraries. During the development of the benchmarks, we needed at least
zlib, libjpeg-turbo (or compatible libjpeg library) and freetype. Even
though the pillow documentation claimed that libjpeg was optional,
......@@ -90,7 +90,7 @@ GPAW needs
code
* [itsdangerous](https://pypi.org/project/itsdangerous/)
* [Werkzeug](https://pypi.org/project/Werkzeug/)
* [click]()
* [click](https://pypi.org/project/click/)
## Tested configurations
......@@ -145,28 +145,28 @@ Also, the instructions below will need to be adapted to the specific
libraries that are being used.
Other prerequisites:
* libxc
* LibXC
* Python interpreter
* Python package NumPy
* Python package SciPy
* Python package ase
### Installing libxc
### Installing LibXC
* Installing libxc requires GNU automake and GNU buildtool besides GNU make and a
* Installing LibXC requires GNU automake and GNU buildtool besides GNU make and a
C compiler. The build process is the usual GNU configure - make - make install
cycle, but the `configure` script still needs to be generated with autoreconf.
* Download libxc:
* The latest version of libxc can be downloaded from
[the libxc download page](https://www.tddft.org/programs/libxc/download/).
* Download LibXC:
* The latest version of LibXC can be downloaded from
[the LibXC download page](https://www.tddft.org/programs/libxc/download/).
However, that version may not be officially supported by GPAW.
* It is also possible to download all recent versions of libxc from
[the libxc GitLab](https://gitlab.com/libxc/libxc)
* It is also possible to download all recent versions of LibXC from
[the LibXC GitLab](https://gitlab.com/libxc/libxc)
* Select the tag corresponding to the version you want to download in the
branch/tag selection box.
* Then use the download button and select the desired file type.
* Dowload URLs look like `https://gitlab.com/libxc/libxc/-/archive/4.3.4/libxc-4.3.4.tar.bz2`.
* Download URLs look like `https://gitlab.com/libxc/libxc/-/archive/4.3.4/libxc-4.3.4.tar.bz2`.
* Untar the file in the build directory.
......@@ -228,8 +228,8 @@ of NumPy, SciPy and GPAW itself proves much more important.
use the NumPy FFT routines.
* GPAW also needs a number of so-called "Atomic PAW Setup" files. The latest files
can be found on the [GPAW website, Atomic PAW Setups page](https://wiki.fysik.dtu.dk/gpaw/setups/setups.html).
For the testing we used []`gpaw-setups-0.9.20000.tar.gz`](https://wiki.fysik.dtu.dk/gpaw-files/gpaw-setups-0.9.20000.tar.gz)
for all versions of GPAW. The easiest way to install these files is to simpy untar
For the testing we used [`gpaw-setups-0.9.20000.tar.gz`](https://wiki.fysik.dtu.dk/gpaw-files/gpaw-setups-0.9.20000.tar.gz)
for all versions of GPAW. The easiest way to install these files is to simply untar
the file and set the environment variable GPAW_SETUP_PATH to point to that directory.
In the examples provided we use the `share/gpaw-setups` subdirectory of the install
directory for this purpose.
......
#!/bin/bash
#
# Installation script for GPAW 20.1.0:
# * We compile our own Python as this is the best guarantee to not have to
# struggle with compatibility problems between various compilers used for
# various components
# * Using the matching version of ase, 3.19.3
# * Compiling with the Intel compilers
#
# The FFT library is discovered at runtime. With the settings used in this script
# this should be MKL FFT, but it is possible to change this at runtime to either
# MKL, FFTW or the built-in NumPy FFT routines, see the installation instructions
# (link below).
#
# The original installation instructions for GPAW can be found at
# https://gitlab.com/gpaw/gpaw/-/blob/20.1.0/doc/install.rst
#
packageID='20.1.0-Python38-FFTW-icc'
packageName='GPAW-UEABS'
echo -e "\n###### Building $packageName/$packageID from $0\n\n"
# The next three variables are only used to load the right UEABS module
# and to give example values for variable settings in comments.
install_root=$PROJECT/UEABS
systemID=BSC-MareNostrum4-skylake
module purge
MODULEPATH=$install_root/$systemID/Modules:$MODULEPATH
#
# The following UEABS_ variables are needed:
# We set them manually as we have no UEABS module for this system at the moment.
#
# Directory to put the downloaded sources of the packages.
UEABS_DOWNLOADS=$install_root/SOURCES
# Directory where packages should be installed.
UEABS_PACKAGES=$install_root/$systemID/Packages
# Directory where modules are installed
UEABS_MODULES=$install_root/$systemID/Modules
install_dir=$UEABS_PACKAGES/$packageName/$packageID
modules_dir=$UEABS_MODULES/$packageName
#build_dir="/dev/shm/$USER/$packageName/$packageID"
build_dir="$SCRATCH/UEABS-tmp/$packageName/$packageID"
# Software versions
python_version='3.8.7'
zlib_version='1.2.11'
ncurses_version='6.2'
readline_version='8.0'
sqlite_version='3.33.0'
sqlite_download='3330000'
libffi_version='3.3'
fftw_version='3.3.8'
libxc_version='4.3.4'
setuptools_version='56.0.0'
setuptoolsscm_version='6.0.1'
wheel_version='0.35.1'
attrs_version='20.3.0'
pybind11_version='2.6.2'
cython_version='0.29.21'
py_version='1.10.0'
pyparsing_version='2.4.7'
toml_version='0.10.2'
iniconfig_version='1.1.1'
packaging_version='20.9'
pytest_version='6.2.3'
numpy_version='1.18.5'
scipy_version='1.5.4'
ase_version='3.19.3'
GPAW_version='20.1.0'
GPAWsetups_version='0.9.20000' # Check version on https://wiki.fysik.dtu.dk/gpaw/setups/setups.html
# Compiler settings
#compiler_module='intel/2020.1'
#mpi_module='impi/2018.4'
#math_module='mkl/2020.1'
compiler_module='intel/2018.4'
mpi_module='impi/2018.4'
math_module='mkl/2018.4'
opt_level='-O2'
proc_opt_flags='-xHost'
fp_opt_flags='-ftz -fp-speculation=safe -fp-model source'
parallel=16
py_maj_min='3.8'
################################################################################
#
# Prepare the system
#
#
# Load modules
#
mkdir -p $modules_dir
module load $compiler_module
module load $mpi_module
module load $math_module
#
# Create the directories and make sure they are clean if that matters
#
/usr/bin/mkdir -p $UEABS_DOWNLOADS
/usr/bin/mkdir -p $install_dir
/usr/bin/rm -rf $install_dir
/usr/bin/mkdir -p $install_dir
/usr/bin/mkdir -p $modules_dir
/usr/bin/mkdir -p $build_dir
/usr/bin/rm -rf $build_dir
/usr/bin/mkdir -p $build_dir
################################################################################
#
# Download components
#
echo -e "\n### Downloading files...\n"
function wget() {
echo "Please download $1 to $UEABS_DOWNLOADS"
}
cd $UEABS_DOWNLOADS
downloads_OK=1
# zlib: https://www.zlib.net/zlib-1.2.11.tar.gz
zlib_file="zlib-$zlib_version.tar.gz"
zlib_url="https://www.zlib.net"
[[ -f $zlib_file ]] || wget "$zlib_url/$zlib_file"
[[ -f $zlib_file ]] || downloads_OK=0
# ncurses: https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.2.tar.gz
ncurses_file="ncurses-$ncurses_version.tar.gz"
ncurses_url="https://ftp.gnu.org/pub/gnu/ncurses"
[[ -f $ncurses_file ]] || wget "$ncurses_url/$ncurses_file"
[[ -f $ncurses_file ]] || downloads_OK=0
# readline: https://ftp.gnu.org/pub/gnu/readline/readline-8.0.tar.gz
readline_file="readline-$readline_version.tar.gz"
readline_url="https://ftp.gnu.org/pub/gnu/readline"
[[ -f $readline_file ]] || wget "$readline_url/$readline_file"
[[ -f $readline_file ]] || downloads_OK=0
# sqlite: https://www.sqlite.org/2020/sqlite-autoconf-3330000.tar.gz
sqlite_file="sqlite-autoconf-$sqlite_download.tar.gz"
sqlite_url="https://www.sqlite.org/2020"
[[ -f $sqlite_file ]] || wget "$sqlite_url/$sqlite_file"
[[ -f $sqlite_file ]] || downloads_OK=0
# libffi: https://github.com/libffi/libffi/releases/download/v3.3/libffi-3.3.tar.gz
libffi_file="libffi-$libffi_version.tar.gz"
libffi_url="https://github.com/libffi/libffi/releases/download/v$libffi_version"
[[ -f $libffi_file ]] || wget "$libffi_url/$libffi_file"
[[ -f $libffi_file ]] || downloads_OK=0
# FFTW: http://www.fftw.org/fftw-3.3.8.tar.gz
fftw_file="fftw-$fftw_version.tar.gz"
fftw_url="http://www.fftw.org"
[[ -f $fftw_file ]] || wget "$fftw_url/$fftw_file"
[[ -f $fftw_file ]] || downloads_OK=0
# https://gitlab.com/libxc/libxc/-/archive/4.3.4/libxc-4.3.4.tar.bz2
libxc_file="libxc-$libxc_version.tar.bz2"
libxc_url="https://gitlab.com/libxc/libxc/-/archive/$libxc_version"
[[ -f $libxc_file ]] || wget "$libxc_url/$libxc_file"
[[ -f $libxc_file ]] || downloads_OK=0
# Python: https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tar.xz
python_file="Python-$python_version.tar.xz"
python_url="https://www.python.org/ftp/python/$python_version"
[[ -f $python_file ]] || wget "$python_url/$python_file"
[[ -f $python_file ]] || downloads_OK=0
# Downloading setuptools.
setuptools_file="setuptools-$setuptools_version.tar.gz"
setuptools_url="https://pypi.python.org/packages/source/s/setuptools"
[[ -f $setuptools_file ]] || wget $setuptools_url/$setuptools_file
[[ -f $setuptools_file ]] || downloads_OK=0
# Downloading setuptoolssscm so that we can gather all sources for reproducibility.
setuptoolsscm_file="setuptools_scm-$setuptoolsscm_version.tar.gz"
setuptoolsscm_url="https://pypi.python.org/packages/source/s/setuptools_scm"
[[ -f $setuptoolsscm_file ]] || wget $setuptoolsscm_url/$setuptoolsscm_file
[[ -f $setuptoolsscm_file ]] || downloads_OK=0
# Downloading wheel so that we can gather all sources for reproducibility.
wheel_file="wheel-$wheel_version.tar.gz"
wheel_url="https://pypi.python.org/packages/source/w/wheel"
[[ -f $wheel_file ]] || wget "$wheel_url/$wheel_file"
[[ -f $wheel_file ]] || downloads_OK=0
# Downloading attrs so that we can gather all sources for reproducibility.
attrs_file="attrs-$attrs_version.tar.gz"
attrs_url="https://pypi.python.org/packages/source/a/attrs"
[[ -f $attrs_file ]] || wget $attrs_url/$attrs_file
[[ -f $attrs_file ]] || downloads_OK=0
# Downloading pybind11 so that we can gather all sources for reproducibility.
pybind11_file="pybind11-$pybind11_version.tar.gz"
pybind11_url="https://pypi.python.org/packages/source/p/pybind11"
[[ -f $pybind11_file ]] || wget $pybind11_url/$pybind11_file
[[ -f $pybind11_file ]] || downloads_OK=0
# Downloading Cython so that we can gather all sources for reproducibility.
cython_file="Cython-$cython_version.tar.gz"
cython_url="https://pypi.python.org/packages/source/c/cython"
[[ -f $cython_file ]] || wget "$cython_url/$cython_file"
[[ -f $cython_file ]] || downloads_OK=0
# Downloading py so that we can gather all sources for reproducibility.
py_file="py-$py_version.tar.gz"
py_url="https://pypi.python.org/packages/source/p/py"
[[ -f $py_file ]] || wget $py_url/$py_file
[[ -f $py_file ]] || downloads_OK=0
# Downloading pyparsing so that we can gather all sources for reproducibility.
pyparsing_file="pyparsing-$pyparsing_version.tar.gz"
pyparsing_url="https://pypi.python.org/packages/source/p/pyparsing"
[[ -f $pyparsing_file ]] || wget $pyparsing_url/$pyparsing_file
[[ -f $pyparsing_file ]] || downloads_OK=0
# Downloading toml so that we can gather all sources for reproducibility.
toml_file="toml-$toml_version.tar.gz"
toml_url="https://pypi.python.org/packages/source/t/toml"
[[ -f $toml_file ]] || wget $toml_url/$toml_file
[[ -f $toml_file ]] || downloads_OK=0
# Downloading iniconfig so that we can gather all sources for reproducibility.
iniconfig_file="iniconfig-$iniconfig_version.tar.gz"
iniconfig_url="https://pypi.python.org/packages/source/i/iniconfig"
[[ -f $iniconfig_file ]] || wget $iniconfig_url/$iniconfig_file
[[ -f $iniconfig_file ]] || downloads_OK=0
# Downloading packaging so that we can gather all sources for reproducibility.
packaging_file="packaging-$packaging_version.tar.gz"
packaging_url="https://pypi.python.org/packages/source/p/packaging"
[[ -f $packaging_file ]] || wget $packaging_url/$packaging_file
[[ -f $packaging_file ]] || downloads_OK=0
# Downloading pytest so that we can gather all sources for reproducibility.
pytest_file="pytest-$pytest_version.tar.gz"
pytest_url="https://pypi.python.org/packages/source/p/pytest"
[[ -f $pytest_file ]] || wget $pytest_url/$pytest_file
[[ -f $pytest_file ]] || downloads_OK=0
# NumPy needs customizations, so we need to download and unpack the sources
numpy_file="numpy-$numpy_version.zip"
numpy_url="https://pypi.python.org/packages/source/n/numpy"
[[ -f $numpy_file ]] || wget "$numpy_url/$numpy_file"
[[ -f $numpy_file ]] || downloads_OK=0
# SciPy
scipy_file="scipy-$scipy_version.tar.gz"
scipy_url="https://pypi.python.org/packages/source/s/scipy"
[[ -f $scipy_file ]] || wget "$scipy_url/$scipy_file"
[[ -f $scipy_file ]] || downloads_OK=0
# Downloading ase so that we can gather all sources for reproducibility
ase_file="ase-$ase_version.tar.gz"
ase_url="https://pypi.python.org/packages/source/a/ase"
[[ -f $ase_file ]] || wget "$ase_url/$ase_file"
[[ -f $ase_file ]] || downloads_OK=0
# GPAW needs customization, so we need to download and unpack the sources.
GPAW_file="gpaw-$GPAW_version.tar.gz"
GPAW_url="https://pypi.python.org/packages/source/g/gpaw"
[[ -f $GPAW_file ]] || wget "$GPAW_url/$GPAW_file"
[[ -f $GPAW_file ]] || downloads_OK=0
# Download GPAW-setup, a number of setup files for GPAW.
# https://wiki.fysik.dtu.dk/gpaw-files/gpaw-setups-0.9.20000.tar.gz
GPAWsetups_file="gpaw-setups-$GPAWsetups_version.tar.gz"
GPAWsetups_url="https://wiki.fysik.dtu.dk/gpaw-files"
[[ -f $GPAWsetups_file ]] || wget "$GPAWsetups_url/$GPAWsetups_file"
[[ -f $GPAWsetups_file ]] || downloads_OK=0
[[ $downloads_OK ]] || exit
################################################################################
#
# Set PATH-style variables
#
/usr/bin/mkdir -p $install_dir/bin
PATH="$install_dir/bin:$PATH"
/usr/bin/mkdir -p $install_dir/lib
LD_LIBRARY_PATH="$install_dir/lib:$LD_LIBRARY_PATH"
export LIBRARY_PATH="$LD_LIBRARY_PATH"
################################################################################
#
# Install ncurses
#
# We mirror the two-step EasyBuild install process. This may be overkill, but
# we know it works.
#
echo -e "\n### Installing ncurses...\n"
cd $build_dir
# Uncompress
tar -xf $UEABS_DOWNLOADS/$ncurses_file
cd ncurses-$ncurses_version
# Configure step 1
export CC=icc
export CFLAGS="$opt_level $proc_opt_flags $fp_opt_flags -fPIC"
export CXX=icpc
export CXXFLAGS="$opt_level $proc_opt_flags $fp_opt_flags -fPIC"
./configure --prefix="$install_dir" \
--with-shared --enable-overwrite --without-ada --enable-symlinks
# Build step 1
make -j $parallel
# Install step 1
make install
# Add bin, lib and include to the PATH variables
PATH=$install_dir/bin:$PATH
LIBRARY_PATH=$install_dir/lib:$LIBRARY_PATH
LD_LIBRARY_PATH=$install_dir/lib:$LD_LIBRARY_PATH
CPATH=$install_dir/include:$CPATH
# Configure step 2
make distclean
./configure --prefix="$install_dir" \
--with-shared --enable-overwrite --without-ada --enable-symlinks \
--enable-ext-colors --enable-widec \
--includedir=$install_dir/include/ncursesw/
# Build step 2
make -j $parallel
# Install step 2
make install
# Clean-up
unset CC
unset CFLAGS
unset CXX
unset CXXFLAGS
echo -e "\n### Finishing ncurses installation...\n"
################################################################################
#
# Install readline
#
echo -e "\n### Installing readline...\n"
cd $build_dir
# Uncompress
tar -xf $UEABS_DOWNLOADS/$readline_file
cd readline-$readline_version
# Configure
export CC=icc
export CFLAGS="$opt_level $proc_opt_flags $fp_opt_flags -fPIC"
export CPPFLAGS="-I$install_dir/include"
export LDFLAGS="-L$install_dir/lib -lncurses"
./configure --prefix="$install_dir"
# Build
make -j $parallel
# Install
make install
# Clean-up
unset CC
unset CFLAGS
unset CPPFLAGS
unset LDFLAGS
echo -e "\n### Finishing readline installation...\n"
################################################################################
#
# Install zlib
#
echo -e "\n### Installing zlib...\n"
cd $build_dir
# Uncompress
tar -xf $UEABS_DOWNLOADS/$zlib_file
cd zlib-$zlib_version
# Configure
export CC=icc
export CFLAGS="$opt_level $proc_opt_flags $fp_opt_flags -fPIC"
./configure --prefix="$install_dir"
# Build
make -j $parallel
# Install
make install
# Clean-up
unset CC
unset CFLAGS
echo -e "\n### Finishing zlib installation...\n"
################################################################################
#
# Install libffi
#
echo -e "\n### Installing libffi...\n"
cd $build_dir
# Uncompress
tar -xf $UEABS_DOWNLOADS/$libffi_file
cd libffi-$libffi_version
# Configure
export CC=icc
export CFLAGS="$opt_level $proc_opt_flags $fp_opt_flags -fPIC"
./configure --prefix="$install_dir" \
--disable-multi-os-directory