Building from source#
Build every library of the family yourself, in one prefix. This page is for contributors, for C++ users who
link aether::aether or eagle::eagle directly, and for platforms where you want to control the toolchain. The everyday install is pip from PyPI; the Install section on the landing page is the short version
and this page is the secondary, from-source route.
Prerequisites#
Every command below installs into one prefix, ${CONDA_PREFIX} if you use conda (the repos’ own docs call this
PREFIX — substitute your own install directory everywhere below if you don’t use conda).
Tool |
Requirement |
Notes |
|---|---|---|
CMake |
≥ 3.20 |
aether, eagle |
C++ compiler |
C++23 — GCC ≥ 12 or Clang ≥ 16 |
aether, eagle; stated identically by both |
CUDA toolkit |
CUDA 12.6 or newer (tested with 12.6 and 13.0) |
Optional — build with |
nvcc host-compiler ceiling |
GCC 13 for CUDA 12.6 |
nvcc accepts a host compiler only up to its own ceiling; pass |
Python |
≥ 3.9 for all four packages |
hawk and eagle are tested on CPython 3.9–3.14, including free-threaded 3.13t and 3.14t |
Install, in dependency order#
Clone the four repositories next to each other:
raptor-family/
├── aether/
├── eagle/
├── hawk/
└── raptor/
1. aether (C++)#
git clone https://github.com/amasat01/aether.git
cd aether
# CUDA mode
cmake -DCMAKE_PREFIX_PATH=${CONDA_PREFIX} -DAETHER_BUILD_TESTS=ON -B build .
# CPU-only mode (no CUDA toolchain needed) — use this instead of the line above:
# cmake -DCMAKE_PREFIX_PATH=${CONDA_PREFIX} -DAETHER_CPP_MODE=ON -DAETHER_BUILD_TESTS=ON -B build .
cmake --build build
cmake --install build --prefix ${CONDA_PREFIX}
cd ..
2. eagle (C++, then the Python package)#
eagle depends only on aether, which must already be installed into the same prefix.
git clone https://github.com/amasat01/eagle.git
cd eagle
# CUDA/C++ mode, with tests
cmake -DCMAKE_PREFIX_PATH=${CONDA_PREFIX} -DEAGLE_BUILD_TESTS=ON -B build .
# CPU-only mode — needs an AETHER_CPP_MODE aether install (use this instead of the line above):
# cmake -DCMAKE_PREFIX_PATH=${CONDA_PREFIX} -DEAGLE_CPP_MODE=ON -DEAGLE_BUILD_TESTS=ON -B build .
cmake --build build
cmake --install build --prefix ${CONDA_PREFIX}
The Python package (raptor-eagle, imported as eagle) wraps a compiled extension that is always built as CUDA
code — it needs nvcc even on a machine without a GPU — and needs aether installed in CUDA mode plus eagle’s own
headers, both in the same prefix. It also depends on raptor, installed from a checkout next to this one:
cmake -DCMAKE_PREFIX_PATH=${CONDA_PREFIX} -B build-hdr . && cmake --install build-hdr --prefix ${CONDA_PREFIX}
pip install ../raptor
export CMAKE_PREFIX_PATH=${CONDA_PREFIX}
# append ;-DCMAKE_CUDA_HOST_COMPILER=<g++-13> if your default compiler is newer than nvcc accepts
export SKBUILD_CMAKE_ARGS="-DCMAKE_CUDA_ARCHITECTURES=<your GPU's arch, e.g. 70>"
pip install -e ./python
cd ..
3. aether-dsc#
aether-dsc ships a sealed copy of aether’s own headers for Python-only consumers — hawk’s device compiler is the
primary one. No CUDA toolchain is needed to install it.
cd aether
pip install ./dsc
cd ..
4. hawk#
hawk’s compiled half (hawk._core) resolves the aether/eagle C++ header roots from the sibling checkouts above
(or from $HAWK_AETHER_INCLUDE / $HAWK_EAGLE_INCLUDE if they live elsewhere). aether-dsc (step 3) must already
be installed. A GPU is optional — required only to compile and run a kernel’s device target, not to author one or
run the host path:
git clone https://github.com/amasat01/hawk.git
cd hawk
pip install -e .[test]
cd ..
5. raptor#
raptor is pure Python with zero hard dependencies — no GPU, no CUDA toolkit, no C or C++ compiler needed.
cd raptor
pip install -e .
# the `demo` extra pulls in numpy and torch, needed only to run raptor's own examples:
# pip install -e .[demo]
cd ..
Check it worked#
python -c "import aether_dsc; print(aether_dsc.version)"
python -c "import eagle; print(eagle.ABI_VERSION)"
python -c "import hawk; print(hawk.__version__)"
python -c "import raptor; print(raptor.__version__)"
None of the four need a GPU to import. hawk additionally reports, with no GPU required to call it, what its device compiler path can see on the current machine:
from hawk.compile import cubin_available
cubin_available() # NVRTC importable and a CUDA device present
aether has no Python import of its own; verify it by running its test-integrity gate (built with
AETHER_BUILD_TESTS=ON above) — run the gate script directly, never the test binary bare:
aether/tests/check_gate.sh cpp aether/build/tests/aether_tests # or: cuda, for a CUDA-mode build
Pitfalls#
nvcc rejects your host compiler. nvcc accepts host compilers only up to its own ceiling (GCC 13 for CUDA 12.6). Fix:
-DCMAKE_CUDA_HOST_COMPILER=<g++-13>on the CMake configure line (or appended toSKBUILD_CMAKE_ARGSfor eagle’s Python package).Edited a source file, forgot to rebuild.
import hawkrefuses ahawk._corewhose build digest disagrees with the sources beside it, naming both digests and the loaded binding’s path. Fix:pip install -e . --no-build-isolation --no-deps(from hawk’s checkout), or check for an older hawk earlier onsys.pathshadowing this one.Mixed prefixes. eagle must be installed into the same prefix as aether (
find_packageresolves againstCMAKE_PREFIX_PATH/CMAKE_INSTALL_PREFIX). Fix: use one${CONDA_PREFIX}for everycmake --installandpip installstep above.
Details#
Each repository documents its own build in full — CMake option references, debug builds, every test tier: