Build from Source
Tip
Unless you really need to build Codon from source, it is strongly recommended to use pre-built binaries if possible.
Dependencies¶
Codon uses an LLVM fork based on LLVM 20. To build it, you can do the following:
git clone --depth 1 -b codon https://github.com/exaloop/llvm-project
cmake -S llvm-project/llvm -B llvm-project/build \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_ZLIB=OFF \
-DLLVM_ENABLE_ZSTD=OFF \
-DLLVM_ENABLE_PROJECTS="openmp" \
-DLLVM_TARGETS_TO_BUILD=all \
-DLLVM_ENABLE_RUNTIMES="compiler-rt" \
-DCOMPILER_RT_BUILD_BUILTINS=ON \
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
-DCOMPILER_RT_BUILD_XRAY=OFF \
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
-DCOMPILER_RT_BUILD_PROFILE=OFF \
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
-DCOMPILER_RT_BUILD_CTX_PROFILE=OFF \
-DCOMPILER_RT_BUILD_ORC=OFF \
-DCOMPILER_RT_BUILD_CRT=OFF \
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
-DCOMPILER_RT_INCLUDE_TESTS=OFF
cmake --build llvm-project/build
cmake --install llvm-project/build --prefix=llvm-project/install
You can use -DLLVM_ENABLE_PROJECTS="clang;openmp" if you do not have clang
installed on your system. We also recommend setting a local prefix during
installation to avoid clashes with the system LLVM.
Build¶
Python 3.8+ is required to verify and unpack the bundled standard-library tables. This step is offline and does not depend on Python's Unicode database version. Generated tables live in the build tree and are embedded and installed automatically. See the table maintenance guide for the separate, version-pinned regeneration workflow.
Codon requires libgfortran, the parent directory of which must be specified via the
CODON_SYSTEM_LIBRARIES environment variable. For example, on macOS, with a
brew-installed libgfortran (obtainable via brew install gcc):
export CODON_SYSTEM_LIBRARIES=/opt/homebrew/opt/gcc/lib/gcc/current
On Linux:
export CODON_SYSTEM_LIBRARIES=/usr/lib/x86_64-linux-gnu
Then, the following can generally be used to build Codon. The build process will automatically download and build several smaller dependencies.
cd codon
mkdir build
cmake -S . -B build \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_DIR=$(llvm-config --cmakedir) \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++
cmake --build build --config Release
cmake --install build --prefix=install
This will produce the codon executable in the install/bin directory, as
well as codon_test in the build directory which runs the test suite.
Additionally, a number of shared libraries are produced in install/lib/codon:
libcodonc: The compiler library used by thecodoncommand-line tool.libcodonrt: The runtime library used during execution.libomp: OpenMP runtime used to execute parallel code.
Warning
Make sure the llvm-config being used corresponds to Codon's LLVM. You can also use
-DLLVM_DIR=llvm-project/install/lib/cmake/llvm on the first cmake command if you
followed the instructions above for compiling LLVM.
Jupyter support¶
To enable Jupyter support, you will need to build the Jupyter plugin:
# Linux version:
cmake -S jupyter -B jupyter/build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DLLVM_DIR=$(llvm-config --cmakedir) \
-DCODON_PATH=install \
-DOPENSSL_ROOT_DIR=$(openssl version -d | cut -d' ' -f2 | tr -d '"') \
-DOPENSSL_CRYPTO_LIBRARY=/usr/lib64/libssl.so \
-DXEUS_USE_DYNAMIC_UUID=ON
# n.b. OPENSSL_CRYPTO_LIBRARY might differ on your system.
# On macOS, do this instead:
OPENSSL_ROOT_DIR=/usr/local/opt/openssl cmake -S jupyter -B jupyter/build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DLLVM_DIR=$(llvm-config --cmakedir) \
-DCODON_PATH=install
# Then:
cmake --build jupyter/build
cmake --install jupyter/build