Building from source
Here, we explain how to build SBMLNetwork from source for different environments:
the native C/C++ library (with optional Python bindings), and
the JavaScript/WebAssembly module for use in browsers.
Building C/C++ library (with optional Python bindings) from source
This section describes how to build the SBMLNetwork native library (C/C++) and, optionally, the associated Python bindings.
Prerequisites
CMake ≥ 3.16 plus a C++17‑capable compiler
libSBML (static) binaries matching your platform – easiest is to download the archive from the libroadrunner-deps release
Python 3.9–3.12 (optional – required only if building the bindings)
Build steps
Download or build the libSBML static binary files (preferably from libroadrunner-deps release) and unpack them to a directory of your choice, e.g., /path/to/libsbml-static. This directory should contain the include and lib subdirectories with the headers and static libraries, respectively.
Clone the SBMLNetwork repository from GitHub:
git clone https://github.com/adelhpour/SBMLNetwork.git
Change into the repository:
cd SBMLNetwork
Create and enter the build directory:
mkdir build cd build
Configure the build:
cmake -DCMAKE_INSTALL_PREFIX=/path/to/install \ -DCMAKE_BUILD_TYPE=Release \ -DDEPENDENCIES_INSTALL_PREFIX=/path/to/libsbml-static \ -DWITH_PYTHON=ON \ -DPYTHON_INSTALL_WITH_SETUP=ON ..
Compile and install:
cmake --build build --target install
CMake options
WITH_PYTHONBuild and install the
sbmlnetworkandlibsbmlnetworkPython packages alongside the native library.DEPENDENCIES_INSTALL_PREFIXPath to the folder containing the unpacked static libSBML libraries and headers.
CMAKE_OSX_ARCHITECTURES(macOS only)Override to build arm64 or x86_64‑only binaries instead of a universal build.
For a complete, automated example of this build process across macOS, Linux, and Windows, see the GitHub Actions workflow:
Building JavaScript/WebAssembly module from source
This section describes how to build the SBMLNetwork JavaScript/WebAssembly module for use in browsers or JavaScript environments like Node.js.
We use Emscripten to compile the C++ core of SBMLNetwork into a .wasm module and generate a corresponding JavaScript interface (.js) that can be loaded in web applications.
Requirements
Before starting, make sure you have:
Emscripten SDK ≥ 3.1.20 – install from https://emscripten.org
CMake ≥ 3.16
GNU Make (or Ninja)
A Linux or macOS build environment (Windows builds are not currently supported)
You will also need to build Expat and libSBML with Emscripten first, before compiling SBMLNetwork.
Build steps
Install and activate Emscripten
git clone https://github.com/emscripten-core/emsdk.git cd emsdk ./emsdk install 3.1.20 ./emsdk activate 3.1.20 source ./emsdk_env.sh
Build Expat with Emscripten
wget https://github.com/libexpat/libexpat/releases/download/R_2_2_10/expat-2.2.10.tar.bz2 tar -xf expat-2.2.10.tar.bz2 && cd expat-2.2.10 mkdir build && cd build emcmake cmake .. -DCMAKE_INSTALL_PREFIX=$PWD/../../install/expat emmake make && emmake make install
Build libSBML with layout and render enabled
wget https://github.com/sbmlteam/libsbml/archive/refs/tags/v5.20.0.zip unzip v5.20.0.zip && cd libsbml-5.20.0 mkdir build && cd build emcmake cmake .. \ -DCMAKE_INSTALL_PREFIX=$PWD/../../../install/sbml \ -DCMAKE_BUILD_TYPE=Release \ -DWITH_CPP_NAMESPACE=ON \ -DWITH_EXPAT=ON \ -DWITH_LIBXML=OFF \ -DLIBSBML_SKIP_SHARED_LIBRARY=ON \ -DENABLE_LAYOUT=ON \ -DENABLE_RENDER=ON \ -DWITH_STABLE_PACKAGES=ON \ -DWITH_SWIG=OFF \ -DEXPAT_INCLUDE_DIR=$PWD/../../../install/expat/include \ -DEXPAT_LIBRARY=$PWD/../../../install/expat/lib/libexpat.a emmake make && emmake make install
Build SBMLNetwork
wget https://github.com/sys-bio/SBMLNetwork/archive/refs/tags/v0.4.5.zip unzip v0.4.5.zip && cd SBMLNetwork-0.4.5 mkdir build && cd build emcmake cmake .. \ -DCMAKE_INSTALL_PREFIX=$PWD/../../../install/sbmlnetwork \ -DCMAKE_BUILD_TYPE=Release \ -DEXPAT_INSTALL_PREFIX=$PWD/../../../install/expat \ -DLIBEXPAT_LIBRARY=$PWD/../../../install/expat/lib/libexpat.a \ -DLIBSBML_INSTALL_PREFIX=$PWD/../../../install/sbml \ -DLIBSBML_LIBRARY=$PWD/../../../install/sbml/lib/libsbml-static.a \ -DWITH_PYTHON=OFF emmake make && emmake make install
Generate the final JavaScript and WASM files
em++ -Iinstall/sbmlnetwork/include \ -Iinstall/sbml/include \ -Iinstall/expat/include \ install/sbmlnetwork/lib/libsbmlnetwork.a \ install/sbml/lib/libsbml-static.a \ install/expat/lib/libexpat.a \ -o libsbmlnetwork.js \ -s WASM=1 \ -s LINKABLE=1 \ -s EXPORT_ALL=1 \ -s MODULARIZE=1 \ -s EXPORT_ES6=1 \ -s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap", "allocateUTF8", "UTF8ToString"]'
This will generate two output files: *
libsbmlnetwork.js– the JavaScript wrapper *libsbmlnetwork.wasm– the compiled WebAssembly module
Usage
Once built, the resulting files (libsbmlnetwork.js and libsbmlnetwork.wasm) can be used. See the Installation page for instructions on how to import and use the WebAssembly module in your application.
For a complete, working version of this WebAssembly build pipeline using Emscripten, see the GitHub Actions workflow: