-
Notifications
You must be signed in to change notification settings - Fork 63
Building
This section describes the steps to build ngen
from source.
🔶 Important:
ngen
does not support building on Windows or with MSVC.
ngen
requires the following dependencies for core execution:
- C/C++ Compiler supporting C++14
- gcc (≥8.0.0)
- clang (≥3.4)
- IntelLLVM (
icx
/icpx
)
- CMake (≥3.17)
- UDUNITS
- Boost (≥1.72.0)
Note
Only Boost headers are required. As a result, we will vendor in a copy of 1.72.0 after cloning the
ngen
repository. Package managers typically support installing a system-wide version of Boost, and that will be okay as long as the installed version is at least 1.72.0.
apt-get install \
build-essential \ # for gcc
cmake \ # for cmake
libudunits2-dev # for udunits2
yum install \
devtoolset-8 \ # for gcc 8
cmake \ # for cmake
udunits2-devel # for udunits2
# scl enable devtoolset-8 bash # enable to use gcc
dnf install \
gcc-toolset-8 \
cmake \
udunits2-devel
# scl enable gcc-toolset-8 bash # enable to use gcc
brew install \
gcc \
cmake \
udunits
The following optional dependencies allow for additional features when building ngen
:
- Python (≥3.9)
- Enables embedded Python support and routing support.
- SQLite3
- Enables GeoPackage reading support.
- NetCDF
- Enables NetCDF I/O support.
- OpenMPI / MPI Implementation
- Enables parallel orchestration.
Clone the ngen
repo:
git clone https://github.com/NOAA-OWP/ngen.git
cd ngen
Update git submodules
git submodule update --init --recursive
Note
If you do not have a system Boost installation, then you can vendor 1.72.0:
wget https://boostorg.jfrog.io/artifactory/main/release/1.72.0/source/boost_1_72_0.tar.gz tar -xvf boost_1_72_0.tar.gzThis will download Boost 1.72.0 into your current directory, then untar it as
boost_1_72_0/
. To use this directory when buildingngen
, add-DBOOST_ROOT=boost_1_72_0/
to the command-line options below. If you need to force this vendored copy to be used, then add-DBoost_NO_BOOST_CMAKE:BOOL=ON
as well.
Create an out-of-source build with any required options set:
cmake \
-DNGEN_WITH_MPI:BOOL=OFF \ # Enable MPI
-DNGEN_WITH_NETCDF:BOOL=ON \ # Enable NetCDF
-DNGEN_WITH_SQLITE:BOOL=OFF \ # Enable SQLite
-DNGEN_WITH_UDUNITS:BOOL=ON \ # Enable UDUNITS
-DNGEN_WITH_BMI_FORTRAN:BOOL=OFF \ # Enable Fortran
-DNGEN_WITH_BMI_C:BOOL=ON \ # Enable C
-DNGEN_WITH_PYTHON:BOOL=ON \ # Enable Python
-DNGEN_WITH_ROUTING:BOOL=ON \ # Enable t-route
-DNGEN_WITH_TESTS:BOOL=OFF \ # Build unit tests
-DNGEN_QUIET:BOOL=OFF \ # Suppress output
-B cmake_build \ # Build directory
-S .
Build the ngen
executable:
cmake \
--build cmake_build \ # Build directory
-t ngen \ # Target
-- \
-j $(nproc)
Now, you can run ./ngen
to see the usage text.
Tutorial
Getting Started
Configuration
Technical References