# Copyright 1999-2025 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 CMAKE_MAKEFILE_GENERATOR=ninja inherit git-r3 DESCRIPTION="High-performance, zero-overhead, extensible Python compiler using LLVM" HOMEPAGE="https://github.com/exaloop/codon" LICENSE="GPL-3" KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" SLOT="0" IUSE="" RDEPEND="dev-libs/libfmt" DEPEND="${RDEPEND}" BDEPEND="dev-build/ninja net-misc/wget" RESTRICT="test network-sandbox" CODON_LLVM_DIR="${WORKDIR}/llvm-project" src_unpack() { # Clone main Codon repository EGIT_REPO_URI="https://github.com/exaloop/codon.git" EGIT_BRANCH="develop" EGIT_SUBMODULES=( '*' ) EGIT_CHECKOUT_DIR="${S}" git-r3_src_unpack # Clone LLVM fork EGIT_REPO_URI="https://github.com/exaloop/llvm-project" EGIT_BRANCH="codon" EGIT_SUBMODULES=() EGIT_CHECKOUT_DIR="${CODON_LLVM_DIR}" git-r3_src_unpack # Download CPM.cmake einfo "Downloading CPM.cmake..." mkdir -p "${S}/cmake" || die wget -q https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake \ -O "${S}/cmake/CPM.cmake" || die "Failed to download CPM.cmake" # Set CODON_SYSTEM_LIBRARIES as per the guide # this one for gcc 15... export CODON_SYSTEM_LIBRARIES="/usr/lib/gcc/x86_64-pc-linux-gnu/15/" # Build LLVM with clang and OpenMP einfo "Building LLVM with clang and OpenMP..." cd "${WORKDIR}" || die cmake -S "${CODON_LLVM_DIR}/llvm" -B "${CODON_LLVM_DIR}/build" -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_INCLUDE_TESTS=OFF \ -DLLVM_ENABLE_RTTI=ON \ -DLLVM_ENABLE_ZLIB=OFF \ -DLLVM_ENABLE_ZSTD=OFF \ -DLLVM_ENABLE_TERMINFO=OFF \ -DLLVM_ENABLE_PROJECTS="clang;openmp" \ -DLLVM_TARGETS_TO_BUILD=all || die "LLVM CMake configuration failed" cmake --build "${CODON_LLVM_DIR}/build" || die "LLVM build failed" cmake --install "${CODON_LLVM_DIR}/build" --prefix="${CODON_LLVM_DIR}/install" || die "LLVM install failed" # Configure and build Codon (must be done here to allow CPM to download dependencies) einfo "Configuring Codon..." cd "${S}" || die cmake -S . -B build -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_DIR="${CODON_LLVM_DIR}/install/lib/cmake/llvm" \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ || die "Codon CMake configuration failed" einfo "Building Codon..." cmake --build build --config Release || die "Codon build failed" } src_configure() { # Configuration already done in src_unpack : } src_compile() { # Compilation already done in src_unpack : } src_install() { cd "${S}" || die DESTDIR="${D}" cmake --install build --prefix=/usr || die "Codon install failed" # Remove bundled fmt files (use system fmt instead) rm -rf "${ED}/usr/include/fmt" || die rm -rf "${ED}/usr/$(get_libdir)/cmake/fmt" || die rm -f "${ED}/usr/$(get_libdir)/pkgconfig/fmt.pc" || die }