Build Ladybug from source
The Ladybug repository consists of several submodules:
benchmark- Benchmarking toolsdataset- Sample datasets for testingextension- Extension frameworktools/java_api- Java bindingstools/nodejs_api- Node.js bindingstools/python_api- Python bindingstools/rust_api- Rust bindingstools/wasm- WebAssembly bindings
What are Git submodules?
Git submodules allow you to keep a Git repository as a subdirectory of another Git repository. This lets you separate different components into their own repositories while maintaining them as part of a single parent project.
Checking out submodules
To clone the repository with all submodules:
git clone --recursive https://github.com/LadybugDB/ladybugTo check out a specific submodule individually:
git submodule update --init <submodule-path>For example, to check out only the Python API:
git submodule update --init tools/python_apiTo update all submodules to their latest committed versions:
git submodule update --recursiveContributing Changes
Core changes: Send a pull request against the main repository.
Submodule changes:
- Send a pull request against the specific submodule repository
- Ensure the submodule passes its specific CI pipeline
- Send a second pull request to the main repository to update the submodule reference
To make changes to a submodule, navigate to its directory, make your changes, and push them to the submodule’s repository:
cd tools/python_api# make changesgit add . && git commit -m "description" && git pushThen update the submodule reference in the main repo:
cd ..git add tools/python_apigit commit -m "Update python_api submodule"git pushTo build from source code, Ladybug requires CMake (>=3.15), Python (>=3.9), and a compiler that supports C++20. The minimum supported versions of C++ compilers are GCC 13, Clang 18, and MSVC 19.29. The preferred compiler on Linux is GCC; on macOS, Apple Clang; and on Windows, MSVC. On Linux, Clang is also tested. Other compilers that support C++20 may also work, but are not tested.
Below are the instructions for building Ladybug on Ubuntu, AlmaLinux, Arch Linux, macOS, and Windows. These instructions should also work for other similar platforms:
- For other Debian-based Linux distributions, such as Debian, Linux Mint, and Pop!_OS, the instructions should be similar to Ubuntu.
- For other Red Hat-based Linux distributions, such as Red Hat Enterprise Linux (RHEL), CentOS, Fedora, Rocky Linux, and Oracle Linux, the instructions should be similar to AlmaLinux.
- For other Arch-based Linux distributions, such as Manjaro, the instructions should be similar to Arch Linux.
Building Instructions
Ubuntu 24.04 LTS
apt updateapt install -y build-essential cmake gcc g++ python3 ninja-build ccachemake release NUM_THREADS=$(nproc) GEN=NinjaAlmaLinux 9.2
dnf updatednf install -y cmake gcc gcc-c++ python3 ninja-build ccachemake release NUM_THREADS=$(nproc) GEN=NinjaArch Linux
pacman -Syupacman -S --needed base-devel cmake gcc python ninja ccachemake release NUM_THREADS=$(nproc) GEN=NinjamacOS 14
Install Homebrew.
xcode-select --installbrew install cmake python ninja ccachemake release NUM_THREADS=$(sysctl -n hw.physicalcpu) GEN=NinjaWindows 10
Install Visual Studio
Install Visual Studio 2022 with C++ support, CMake, and the SDK for your version of Windows. For detailed instructions, please refer to Microsoft’s documentation.
Install Chocolatey
Follow the instructions at https://chocolatey.org/install.
Install dependencies
choco install -y python3 make ninjaLaunch Visual Studio Command Prompt
Follow the instructions at Microsoft’s documentation.
Build Ladybug
make release NUM_THREADS=$env:NUMBER_OF_PROCESSORS GEN=NinjaRun the CLI
After building Ladybug, you can run the CLI with the following command:
./build/release/tools/shell/lbug foo.lbdbRun Tests
C/C++ tests
make test NUM_THREADS=XFor additional information regarding the tests, please refer to the documentation for Testing Framework.
Increase ulimit for running tests
For some platforms, such as macOS, the default limit for the number of open files is too low for running tests, which may cause some tests to fail. To increase the limit, please run the following command before running tests.
ulimit -n 10000Build Language Bindings
By default, only C and C++ libraries and the CLI are built. To build other language bindings, please follow the instructions below.
Python
Prerequisites
To install the dependencies, please run the following command.
make -C tools/python_api requirementsIn addition, the Python development headers are required. For example, on Ubuntu, the python3-dev package should be installed.
Build Python bindings
make python NUM_THREADS=$(nproc)Run Python tests
pytest is used for running Python tests. Refer https://docs.pytest.org/en/stable/how-to/usage.html for more information on how to use pytest effectively
make pytest-venv NUM_THREADS=$(nproc)Node.js
Prerequisites
Install Node.js and npm. Please refer to the download page for detailed instructions. The minimum supported version of Node.js is 14.15.0.
Install dependencies
make nodejs-depsBuild Node.js bindings
make nodejs NUM_THREADS=$(nproc)Run Node.js tests
Node.js tests are run using npm test cmd. Refer https://docs.npmjs.com/cli/v9/commands/npm-test for more information on how to use npm test effectively
make nodejstest NUM_THREADS=$(nproc)Java
Prerequisites
The minimum supported version of JDK is 11. Oracle JDK, OpenJDK, and Eclipse Temurin are supported. For detailed instructions on installing JDK, please refer to one of the following links:
- For Oracle JDK, please refer to the download page.
- For OpenJDK, please refer to the download page.
- For Eclipse Temurin, please refer to the download page.
Build Java bindings
make java NUM_THREADS=$(nproc)Run Java tests
Java tests are run using ./gradlew test cmd. Refer https://docs.gradle.org/current/userguide/command_line_interface.html for more information on how to use Gradle effectively
make javatest NUM_THREADS=$(nproc)Rust
Prerequisites
Rust 1.81.0 or later is required. Installing Rust with rustup is recommended. For detailed instructions, please refer to the download page.
Build Rust bindings
cd tools/rust_api && CARGO_BUILD_JOBS=$(nproc) cargo buildRun Rust tests
Rust tests are run using cargo test cmd. Refer https://doc.rust-lang.org/cargo/commands/cargo-test.html for more information on how to use cargo test effectively
make rusttest