This is a CMake build harness for the Olden benchmarks.
The actual source files for each benchmark are not included, but use this instead.
- Building of all 10
C
programs of the suite - Out-of-source builds thanks to cmake
- Capability to create LLVM bitcode files thanks to llvm-ir-cmake-utils and LLVM
opt
pass pipelines (see theconfig/pipelines
subdirectory). - Capability to configure and build any desired subset of the programs by using the corresponding configuration (see the
suite_*
files in theconfig
subdirectory).
- cmake 3.0.0 or later
- a sensible C compiler
-
git clone --recursive
this repo andgit clone
the benchmark source repo. -
Create symlinks to the
src
subdirectory of each benchmark program. This can be automated with the relevant script found in theutils/scripts/source_tree
subdirectory of this repo, for example:create-symlink-bmk-subdir.sh -c suite_all.txt -s [path-to]/olden/ -t [path-to]/sodden/olden/ -l src
-
Create a directory for an out-of-source build and
cd
into it. -
Run
cmake
andcmake --build .
with that appropriate options. For examples on the various options have a look at the build scripts (provided for convenience) located in theutils/scripts/source_tree
subdirectory. -
Optionally, you can install the benchmarks by
cmake -DCMAKE_INSTALL_PREFIX=[path-to-install] -P cmake_install.cmake
Omitting
CMAKE_INSTALL_PREFIX
will use the../install/
directory relative to the build directory.
The harness defines a few macros, using the prefix OLDEN_
in the common/timing.h
header, that allow measuring the
execution duration of sections of code. This facility seems to have been present, but was stripped away at some point.
Currently, these macros require a POSIX compliant system, so the specific detection is left to cmake
with the use of
the common/config.h.cmake
generated header. On non-POSIX system the macros have dummy/empty alternatives.
Typically build tools for C
/C++
projects detect the source file language by rules based on the file extension. This
allows to invoke the corresponding compiler for each source file.
However, the programs of this benchmark suite are not very cleanly written, in terms of separation (and as much as this
is possible by C
and C++
). So, since one the goals is to rejuvenate the source code and convert it to C++
while
allowing this to happen independently, the detection of the source language per benchmark happens at the cmake
level.
Automatic source language detection is set to occur per benchmark program like this:
- By default the source language is set to
C
. - File globbing is used to gather all
C
(*.c
) andC++
(*.cpp
) source files. - If there is at least 1
C++
file, the source language is changed toC++
.
So, in order to use the C++
compiler for a benchmark, you need to have at least a C++
source file in its source
directory.
For a general description on how this harness operates please have a look here.