From 85b74eaaef9ef9dfbb1657abb516961c7fb77c84 Mon Sep 17 00:00:00 2001 From: Martin Valgur Date: Wed, 25 Oct 2023 18:16:02 +0300 Subject: [PATCH] verilator: fix visibility of flex and other deps --- recipes/verilator/all/conanfile.py | 34 ++++++++++++------- .../verilator/all/test_package/blinky_sc.cpp | 4 +++ .../verilator/all/test_package/conanfile.py | 3 +- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/recipes/verilator/all/conanfile.py b/recipes/verilator/all/conanfile.py index f0f39cdb79562d..2b7b3159c3a25b 100644 --- a/recipes/verilator/all/conanfile.py +++ b/recipes/verilator/all/conanfile.py @@ -4,14 +4,14 @@ from conan import ConanFile from conan.errors import ConanInvalidConfiguration from conan.tools.build import cross_building -from conan.tools.env import Environment +from conan.tools.env import Environment, VirtualBuildEnv from conan.tools.files import apply_conandata_patches, chdir, copy, export_conandata_patches, get, rename, replace_in_file, rm, rmdir from conan.tools.gnu import Autotools, AutotoolsToolchain from conan.tools.layout import basic_layout from conan.tools.microsoft import is_msvc, unix_path from conan.tools.scm import Version -required_conan_version = ">=1.47.0" +required_conan_version = ">=1.60.0 <2.0 || >=2.0.6" class VerilatorConan(ConanFile): @@ -37,13 +37,21 @@ def layout(self): def requirements(self): if self.settings.os == "Windows": - self.requires("strawberryperl/5.32.1.1") + self.requires("strawberryperl/5.32.1.1", visible=False) + if self._needs_old_bison: + # don't upgrade to bison 3.7.0 or above, or it fails to build + # because of https://github.com/verilator/verilator/pull/2505 + self.requires("winflexbison/2.5.22", visible=False) + else: + self.requires("winflexbison/2.5.25", visible=False) + else: + self.requires("flex/2.6.4", visible=False) if is_msvc(self): self.requires("dirent/1.24", visible=False) def package_id(self): - # Verilator is an executable-only package, so the compiler version does not matter - del self.info.settings.compiler.version + # Verilator is an executable-only package, so the compiler does not matter + del self.info.settings.compiler def validate(self): if hasattr(self, "settings_build") and cross_building(self): @@ -69,15 +77,10 @@ def build_requirements(self): if not self.conf.get("tools.microsoft.bash:path", check_type=str): self.tool_requires("msys2/cci.latest") self.tool_requires("automake/1.16.5") - if self._needs_old_bison: - # don't upgrade to bison 3.7.0 or above, or it fails to build - # because of https://github.com/verilator/verilator/pull/2505 - self.tool_requires("winflexbison/2.5.22") - else: - self.tool_requires("winflexbison/2.5.25") - self.tool_requires("strawberryperl/5.32.1.1") + self.tool_requires("winflexbison/") + self.tool_requires("strawberryperl/") else: - self.tool_requires("flex/2.6.4") + self.tool_requires("flex/") if self._needs_old_bison: # don't upgrade to bison 3.7.0 or above, or it fails to build # because of https://github.com/verilator/verilator/pull/2505 @@ -91,6 +94,8 @@ def source(self): get(self, **self.conan_data["sources"][self.version], strip_root=True) def generate(self): + VirtualBuildEnv(self).generate() + tc = AutotoolsToolchain(self) if self.settings.get_safe("compiler.libcxx") == "libc++": tc.extra_cxxflags.append("-lc++") @@ -99,6 +104,9 @@ def generate(self): tc.extra_cxxflags.append("-FS") tc.defines.append("YY_NO_UNISTD_H") tc.configure_args += ["--datarootdir=${prefix}/bin/share"] + flex = "flex" if self.settings.os != "Windows" else "winflexbison" + tc.extra_cxxflags += [f"-I{unix_path(self, self.dependencies[flex].cpp_info.includedir)}"] + tc.extra_ldflags += [f"-L{unix_path(self, self.dependencies[flex].cpp_info.libdir)}"] tc.generate() tc.make_args += [ diff --git a/recipes/verilator/all/test_package/blinky_sc.cpp b/recipes/verilator/all/test_package/blinky_sc.cpp index e9c778f1de9b80..ee83616f30827e 100644 --- a/recipes/verilator/all/test_package/blinky_sc.cpp +++ b/recipes/verilator/all/test_package/blinky_sc.cpp @@ -29,6 +29,10 @@ SC_MODULE(BlinkyTop) } }; +int sc_main(int argc, char **argv) { + return 0; +} + int main(int argc, char **argv) { sc_clock clk("clk", sc_time(1, SC_NS), 0.5); diff --git a/recipes/verilator/all/test_package/conanfile.py b/recipes/verilator/all/test_package/conanfile.py index 1de210452f890f..258863df0205dc 100644 --- a/recipes/verilator/all/test_package/conanfile.py +++ b/recipes/verilator/all/test_package/conanfile.py @@ -13,11 +13,12 @@ class TestPackageConan(ConanFile): def requirements(self): self.requires(self.tested_reference_str) + self.requires("systemc/2.3.4") def build_requirements(self): self.tool_requires(self.tested_reference_str) if self._with_systemc_example: - self.tool_requires("systemc/2.3.4") + self.tool_requires("systemc/") def layout(self): cmake_layout(self)