Building and installation of MonetDB from sources is done using CMake.
It can be compiled in any location on your file system and it does not require special (root) permissions.
While the core task of compiling MonetDB itself is simple (on UNIX based platforms), inexperienced users often run into problems caused by many effects of the build environment. The catch is the differences between the target platforms, because not all libraries needed may have been installed by your system administrator. Typical missing components on a binary distribution such as Fedora or Ubuntu are the xxx-dev packages necessary for MonetDB to compile against the package itself.
For Fedora specific packages read: build-fedora.
For Debian specific packages read: build-debian.
For cmake, you should always build the code in a separate directory, say "build". This directory should be outside of the source code tree. The results of the build are stored in this directory. The location on the filesystem is not important, as long as you have permissions to write in that location.
Assuming the MonetDB source code is checked out in directory
"/path/to/monetdb/source", and if you have all the required packages
(see below) to build MonetDB, these are the set of commands to build and
install it from source. Install is one of the predefined targets
[install
, test
, mtest
]. When you test MonetDB, you will
likely not want to install it in the default location, the standard GNU
directory structure. So you may want to set the install prefix variable
when generating the build system, using -DCMAKE_INSTALL_PREFIX
::
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/path/to/install/monetdb /path/to/monetdb/source
cmake --build .
cmake --build . --target install
PATH settings: None
For testing, you likely don't want to install in the default location, so you need to add the installation prefix parameter to the cmake command. But you do not need any configuration to run mtest (on Linux). Just run the command::
cmake --build . --target mtest
The way options interact with building of the MonetDB source has fundamentally changed from the way this was done using the autotools build system. Now almost all options are on by default. And these options mostly control library detection. In the old system, it was possible to build a subset of the code base. For example, you could choose not to build the sql part. Now the every part of the code is build, as long as the dependent libraries are detected. And by default, the system would try to detect all dependent libraries. If your system does not have a required library, that section of the code will not be build. Only if you want to prevent the build of a certain section, you could use the option to prevent that a dependency is detected. This document also contains at the bottom specific information for compilation on Windows and macOS.
Evidently there are several options to control as illustrated in
$SOURCE/cmake/monetdb-options.cmake
The important once to choose from are -DCMAKE_BUILD_TYPE
, which
takes the value Release, Debug, RelWithDebInfo and MinSizeRel. The
first creates the binary ready for shipping, including all compiler
optimizations that come with it. The Debug mode is necessary if you
plan to debug the binary and needs access to the symbol tables. This
build type also typically leads to a slower execution time, because
also all kinds of assertions are being checked. The RelWithDebInfo
combines Release and Debug with both compiler optimizations and symbol
tables for debugging. Finally MinSizeRel is a Release build optimized
for binary size instead of speed.
Other relevant properties are also -DASSERT=ON
and -DSTRICT=ON
,
used in combination with a Debug build, e.g.::
CONFIGURE_OPTIONS="-DCMAKE_BUILD_TYPE=Debug -DASSERT=ON -DSTRICT=ON"
mkdir build
cd build
cmake $CONFIGURE_OPTIONS -DCMAKE_INSTALL_PREFIX=/path/to/install/monetdb /path/to/monetdb/source
cmake --build .
cmake --build . --target install
Explain the role of cmake --build . --target mtest
In particular how to call it from anywhere in the tree.
The packages required to build MonetDB from source depends mostly on the operating system environment. They are specified in the README.rst file.
Start cmd.exe in "Run as administrator" mode and run commands::
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
choco feature enable -n allowGlobalConfirmation
choco install ActivePerl ant ruby python3 hg git winflexbison3
choco install VisualStudio2022community --package-parameters "--add Microsoft.VisualStudio.Workload.NativeDesktop --add microsoft.visualstudio.component.vc.cmake.project"
refreshenv
cd \
git clone https://github.com/microsoft/vcpkg
cd vcpkg
bootstrap-vcpkg.bat -disableMetrics
vcpkg integrate install
# needed for 64 bits (with the available python being 64 bit this is needed)
set VCPKG_DEFAULT_TRIPLET=x64-windows
vcpkg install libiconv bzip2 geos libxml2 pcre pcre2 zlib getopt openssl
To compile MonetDB (as normal user)::
hg clone https://dev.monetdb.org/hg/MonetDB/
"c:\Program Files\Microsoft Visual Studio\2022\Community\common7\tools\vsdevcmd.bat"
"c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
cd MonetDB
mkdir build
cd build
cmake -G "Visual Studio 17 2022" -DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_INSTALL_PREFIX=%HOME%\install -A x64 ..
cmake --build . --target ALL_BUILD --config Release
cmake --build . --target INSTALL --config Release
set PATH=%HOME%\install\bin;%HOME%\install\lib;%HOME%\install\lib\monetdb5;\vcpkg\installed\x64-windows\bin;\vcpkg\installed\x64-windows\debug\bin;%PATH%
cmake --build . --target RUN_TESTS
cmake --build . --target mtest
Install homebrew (this will also install the xcode tools)
Using homebrew install at least current ::
mercurial
cmake
pkg-config
pcre
bison
optional::
readline
ant
geos
gsl
cfitscio
To compile MonetDB (as normal user)::
hg clone https://dev.monetdb.org/hg/MonetDB/
cd MonetDB
mkdir build
cd build
PKG_CONFIG_PATH=/usr/local/opt/readline/lib/pkgconfig/ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME/install ..
cmake --build .
cmake --build . --target install
cmake --build . --target test
cmake --build . --target mtest
While the core task of compiling MonetDB itself is extremely simple (on UNIX based platforms),
inexperienced users often run into problems caused by many effects of the build environment.
The catch is the differences between the target platforms, because not all libraries needed may have been installed by
your system administrator.
Typical missing components on a binary distribution such as Fedora or Ubuntu are the xxx-dev
packages necessary for MonetDB to compile against the package itself.
Before release Oct2020 building the MonetDB software was based on the bootstrap-configure-make pattern.