mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-07-08 14:43:27 -04:00
The circt-synth mig.mlir integration test was missing the libz3 and circt-lec-jit REQUIRES guards that every sibling LEC test carries, so it ran its circt-lec JIT commands and failed on unresolved Z3 symbols instead of being skipped. Patch it to add the guards. Closes: https://bugs.gentoo.org/977874 Signed-off-by: Huang Rui <vowstar@gmail.com>
145 lines
4.0 KiB
Bash
145 lines
4.0 KiB
Bash
# Copyright 1999-2026 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
EAPI="8"
|
|
|
|
MY_PV="${PV//./\/}"
|
|
MY_LLVM_PV="b7c1a6f8b447fba6fff47d309eb7ba1bc22e8c53"
|
|
CMAKE_BUILD_TYPE="Release"
|
|
PYTHON_COMPAT=( python3_{12..14} )
|
|
inherit cmake python-r1
|
|
|
|
DESCRIPTION="The fast free Verilog/SystemVerilog simulator"
|
|
HOMEPAGE="
|
|
https://circt.llvm.org
|
|
https://github.com/llvm/circt
|
|
"
|
|
|
|
if [[ "${PV}" == "9999" ]] ; then
|
|
inherit git-r3
|
|
EGIT_REPO_URI="https://github.com/llvm/${PN}.git"
|
|
S_CIRCT="${EGIT_CHECKOUT_DIR}"
|
|
S_LLVM="${S_CIRCT}/llvm"
|
|
S="${S_LLVM}/llvm"
|
|
else
|
|
SRC_URI="
|
|
https://github.com/llvm/circt/archive/refs/tags/firtool-${PV}.tar.gz -> ${P}.tar.gz
|
|
https://github.com/llvm/llvm-project/archive/${MY_LLVM_PV}.tar.gz -> llvm-project-${MY_LLVM_PV}.tar.gz
|
|
"
|
|
KEYWORDS="~amd64 ~arm64 ~riscv ~x86"
|
|
S_CIRCT="${WORKDIR}/${PN}-firtool-${PV}"
|
|
S_LLVM="${WORKDIR}/llvm-project-${MY_LLVM_PV}"
|
|
S="${S_LLVM}/llvm"
|
|
fi
|
|
|
|
LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA BSD public-domain rc"
|
|
SLOT="0"
|
|
IUSE="test"
|
|
REQUIRED_USE=" ${PYTHON_REQUIRED_USE} "
|
|
|
|
RESTRICT="!test? ( test )"
|
|
|
|
RDEPEND="
|
|
${PYTHON_DEPS}
|
|
test? (
|
|
dev-python/psutil[${PYTHON_USEDEP}]
|
|
sci-electronics/verilator
|
|
)
|
|
app-arch/zstd:=
|
|
sys-libs/ncurses:0=
|
|
"
|
|
|
|
DEPEND="
|
|
${RDEPEND}
|
|
"
|
|
|
|
BDEPEND="
|
|
virtual/pkgconfig
|
|
"
|
|
|
|
DOCS=(
|
|
"${S_LLVM}/llvm/llvm-LICENSE.TXT"
|
|
"${S_LLVM}/mlir/mlir-LICENSE.TXT"
|
|
"${S_CIRCT}/circt-LICENSE"
|
|
)
|
|
|
|
src_prepare() {
|
|
# mig.mlir lacks the libz3/circt-lec-jit REQUIRES guards its sibling
|
|
# circt-synth LEC tests carry, so it runs and fails when Z3 is
|
|
# unavailable instead of being skipped. See
|
|
# https://bugs.gentoo.org/977874
|
|
pushd "${S_CIRCT}" > /dev/null || die
|
|
eapply "${FILESDIR}"/${PN}-1.140.0-mig-require-libz3.patch
|
|
popd > /dev/null || die
|
|
cmake_src_prepare
|
|
}
|
|
|
|
src_configure() {
|
|
python_setup
|
|
|
|
local mycmakeargs=(
|
|
-D Python3_EXECUTABLE="${PYTHON}"
|
|
-D CMAKE_INSTALL_PREFIX=/usr
|
|
-D CMAKE_SKIP_RPATH=ON
|
|
-D LLVM_ENABLE_PROJECTS=mlir
|
|
-D BUILD_SHARED_LIBS=OFF
|
|
-D LLVM_STATIC_LINK_CXX_STDLIB=ON
|
|
-D LLVM_ENABLE_ASSERTIONS=ON
|
|
# Link zstd deterministically rather than letting cmake autodetect
|
|
# it, so the app-arch/zstd RDEPEND always matches. See
|
|
# https://bugs.gentoo.org/977877
|
|
-D LLVM_ENABLE_ZSTD=FORCE_ON
|
|
-D LLVM_BUILD_EXAMPLES=OFF
|
|
-D LLVM_ENABLE_BINDINGS=OFF
|
|
-D LLVM_ENABLE_OCAMLDOC=OFF
|
|
-D LLVM_OPTIMIZED_TABLEGEN=OFF
|
|
-D LLVM_EXTERNAL_PROJECTS=circt
|
|
-D LLVM_EXTERNAL_CIRCT_SOURCE_DIR="${S_CIRCT}"
|
|
-D LLVM_BUILD_TOOLS=ON
|
|
)
|
|
cmake_src_configure
|
|
}
|
|
|
|
src_test() {
|
|
# Only exercise CIRCT's own suites. check-mlir runs upstream MLIR
|
|
# mlir-runner JIT tests that dlopen the MLIR runtime shared libraries,
|
|
# which our static CMAKE_SKIP_RPATH build does not expose, and which are
|
|
# out of scope for packaging CIRCT. See https://bugs.gentoo.org/977441
|
|
pushd "${BUILD_DIR}" || die
|
|
eninja check-circt
|
|
eninja check-circt-integration
|
|
popd || die
|
|
}
|
|
|
|
src_install() {
|
|
mv "${S_LLVM}/llvm/LICENSE.TXT" "${S_LLVM}/llvm/llvm-LICENSE.TXT" || die
|
|
mv "${S_LLVM}/mlir/LICENSE.TXT" "${S_LLVM}/mlir/mlir-LICENSE.TXT" || die
|
|
mv "${S_CIRCT}/LICENSE" "${S_CIRCT}/circt-LICENSE" || die
|
|
einstalldocs
|
|
|
|
# Several tools are only built when their optional frontend is present:
|
|
# circt-verilog and circt-verilog-lsp-server need the slang
|
|
# SystemVerilog parser, circt-bmc and circt-lec need Z3. When those are
|
|
# unavailable the upstream build simply omits the binaries, so install
|
|
# whatever got built instead of aborting. See
|
|
# https://bugs.gentoo.org/977442
|
|
local tool
|
|
local tools=(
|
|
arcilator circt-as circt-bmc circt-cocotb-driver.py circt-dis
|
|
circt-lec circt-lsp-server circt-opt circt-reduce circt-rtl-sim.py
|
|
circt-synth circt-test circt-translate circt-verilog
|
|
circt-verilog-lsp-server domaintool firld firtool handshake-runner
|
|
hlstool kanagawatool om-linker py-split-input-file.py
|
|
)
|
|
exeinto /usr/bin
|
|
for tool in "${tools[@]}"; do
|
|
if [[ -e "${BUILD_DIR}/bin/${tool}" ]]; then
|
|
doexe "${BUILD_DIR}/bin/${tool}"
|
|
else
|
|
ewarn "Skipping ${tool}, not built (optional frontend unavailable)"
|
|
fi
|
|
done
|
|
|
|
[[ -e "${ED}/usr/bin/firtool" ]] || die "firtool was not built"
|
|
}
|