If nec2++ isn't available precompiled in your system, here are the instructions for building from source code.
nec2++ uses CMake (≥ 3.16). Eigen 5.0.1 is bundled in
src/eigen/ — no external libraries are required, just a C++17 compiler and
CMake:
cmake -B build
cmake --build build -j4
sudo cmake --install build
This builds the nec2++ and nec2diff command-line tools, the libnecpp
static and shared libraries, and installs headers, man pages, and a
necpp.pc pkg-config file.
Pass these on the configure step (e.g. -DNECPP_BUILD_TESTS=OFF):
| Option | Default | Effect |
|---|---|---|
CMAKE_BUILD_TYPE |
Release |
Debug adds -O0 -g; use Release for -O2. |
NECPP_BUILD_TESTS |
ON |
Build the Catch2 unit tests (run with ctest --test-dir build). |
NECPP_BUILD_WASM |
OFF |
Build the Emscripten/WASM target (needs emcmake). |
BUILD_SHARED_LIBS |
ON |
Also build libnecpp.so in addition to libnecpp.a. |
cmake -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build -j4
Bounds checking is enabled in the debug build via NEC_ERROR_CHECK=1 in the
test target.
cmake --build build # builds the test runner
ctest --test-dir build --output-on-failure
CMake works out of the box with Apple Clang:
cmake -B build
cmake --build build -j4
To generate an Xcode project instead:
cmake -B build -G Xcode
If you see a linker error like "file was built for archive which is not the
architecture being linked", this is usually caused by Homebrew's binutils
conflicting with the system toolchain. Run brew unlink binutils then rebuild.
You can re-link binutils afterwards with brew link binutils.
sudo apt install g++-mingw-w64-x86-64 # Debian/Ubuntu
cmake -B build -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc \
-DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++
cmake --build build
Older 32-bit MinGW:
cmake -B build -DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++
CMake's Visual Studio generator replaces the old hand-maintained .vcxproj
files:
cmake -B build -G "Visual Studio 17 2022"
cmake --build build --config Release
Two ways:
Native emsdk (if you have it installed):
emcmake cmake -B build-wasm -DNECPP_BUILD_WASM=ON -DNECPP_BUILD_TESTS=OFF
cmake --build build-wasm -j4
Docker wrapper (no local emsdk needed):
./scripts/build_wasm_docker.sh
Both produce nec2pp.js + nec2pp.wasm exposing a C API
(nec_create_context, nec_process_input, nec_get_output, …).
After cmake --install, necpp exposes both pkg-config and a CMake package
config. Pick whichever your build system uses.
pkg-config:
pkg-config --cflags --libs necpp
CMake (find_package):
find_package(necpp REQUIRED)
target_link_libraries(my_app PRIVATE necpp::necpp)CMake's CPack produces split packages (runtime library, development files,
command-line tools) replacing the old debian/ directory:
cd build
cpack -G DEB # libnecpp2, libnecpp-dev, necpp
cpack -G RPM # needs rpmbuild
cpack -G TXZ # plain tarball
nec2++ uses Eigen 5.0.1 (bundled in src/eigen/) for all linear algebra —
safe arrays, 3-vectors, and LU decomposition. No external Eigen, LAPACK, or
BLAS installation is required. The old --with-eigen, --with-lapack, and
--with-atlas configure options have been removed.
The experimental ANTLR 4 NEC parser is built separately (it needs Java + the
antlr4 runtime, which are not part of the core CMake build). See
antlr/README.md:
make -C antlr # builds nec_parse via the Emscripten Docker image
Some source files are header-only and have no corresponding .cpp file.
If your build system expects a .cpp for every .h, the following files
are intentionally header-only and should be included directly:
math_util.h— math constants and thenec_3vectorclassnec_wire.h— wire intersection geometrysafe_array.h— bounds-checked array templatesrc/eigen/— bundled Eigen 5.0.1 headers (include via-I src/eigen)