blob: 0f8358bd46994fde94ed972038016450a5add09d [file] [log] [blame]
# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2
EAPI=7
inherit autotools
DESCRIPTION="The fastest Verilog/SystemVerilog simulator"
HOMEPAGE="https://www.veripool.org/verilator/"
GIT_REV="20af8a36a77d2b11b0522b214ba95047c16c887b"
SRC_URI="https://github.com/verilator/verilator/archive/${GIT_REV}.tar.gz -> ${P}.tar.gz"
LICENSE="LGPL-3"
SLOT="0"
KEYWORDS="*"
IUSE="+systemc test"
RESTRICT="!test? ( test )"
DEPEND="
systemc? ( sci-electronics/systemc )
"
RDEPEND="${DEPEND}"
BDEPEND="
test? ( sys-apps/grep[pcre] )
"
S="${WORKDIR}/verilator-${GIT_REV}"
src_prepare() {
eautoconf
default
}
src_compile() {
local emake_args=()
if use systemc; then
get_systemc_variable() {
local pkg_config="$(tc-getPKG_CONFIG)"
local result="$(${pkg_config} systemc --variable=${1})"
if [[ -z "${result}" ]]; then
die "'${1}' variable not found in SystemC package with ${pkg_config}"
fi
echo "${result}"
}
# These variables simplify using Verilator with SystemC. They are built-in only
# if set during compilation -- neither autoconf nor configure set them properly.
emake_args+=(
"SYSTEMC_INCLUDE=$(get_systemc_variable includedir)"
"SYSTEMC_LIBDIR=$(get_systemc_variable libarchdir)"
)
fi
emake ${emake_args[@]}
}
# The `default_src_test` doesn't work because `make test -n` fails.
src_test() {
if use systemc; then
# Check if SYSTEMC variables are set. Setting these is error-prone.
[[ -n "$(./bin/verilator --getenv SYSTEMC_INCLUDE)" ]] || die
[[ -n "$(./bin/verilator --getenv SYSTEMC_LIBDIR)" ]] || die
fi
emake test
}