From 33147c8b047a9fc9cbcca8fe9d806bab3e223a8b Mon Sep 17 00:00:00 2001 From: star9029 Date: Wed, 6 Nov 2024 13:22:53 +0800 Subject: [PATCH] verilator: switch to cmake --- packages/v/verilator/xmake.lua | 64 +++++++++++++++------------------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/packages/v/verilator/xmake.lua b/packages/v/verilator/xmake.lua index a8dde10ba..826364da1 100644 --- a/packages/v/verilator/xmake.lua +++ b/packages/v/verilator/xmake.lua @@ -2,21 +2,22 @@ package("verilator") set_kind("toolchain") set_homepage("https://verilator.org") set_description("Verilator open-source SystemVerilog simulator and lint system") + set_license("LGPL-3.0") - add_urls("https://github.com/verilator/verilator/archive/refs/tags/$(version).tar.gz") - add_urls("https://github.com/verilator/verilator.git") + add_urls("https://github.com/verilator/verilator/archive/refs/tags/$(version).tar.gz", + "https://github.com/verilator/verilator.git") - add_versions("v5.016", "66fc36f65033e5ec904481dd3d0df56500e90c0bfca23b2ae21b4a8d39e05ef1") + add_versions("v5.030", "b9e7e97257ca3825fcc75acbed792b03c3ec411d6808ad209d20917705407eac") + + add_deps("cmake") on_load(function (package) if not package:is_precompiled() then if package:is_plat("windows") then - package:add("deps", "cmake") package:add("deps", "winflexbison", {kind = "library"}) else package:add("deps", "flex", {kind = "library"}) package:add("deps", "bison") - package:add("deps", "autoconf", "automake", "libtool") end package:add("deps", "python 3.x", {kind = "binary"}) end @@ -24,41 +25,34 @@ package("verilator") package:addenv("VERILATOR_ROOT", ".") end) - on_install("windows", function (package) + on_install(function (package) import("package.tools.cmake") - local configs = {} - local cxflags = {} - local winflexbison = package:dep("winflexbison") - local flex = winflexbison:fetch() - if flex then - local includedirs = flex.sysincludedirs or flex.includedirs - for _, includedir in ipairs(includedirs) do - table.insert(cxflags, "-I" .. includedir) - end + + io.replace("src/CMakeLists.txt", "MSVC_RUNTIME_LIBRARY MultiThreaded$,,DebugDLL>", "", {plain = true}) + + local configs = {"-DOBJCACHE_ENABLED=OFF", "-DDEBUG_AND_RELEASE_AND_COVERAGE=OFF"} + table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release")) + table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF")) + + local opt = {} + opt.envs = cmake.buildenvs(package) + if package:is_plat("windows") then + table.insert(configs, "-DCMAKE_COMPILE_PDB_OUTPUT_DIRECTORY=''") + opt.envs.WIN_FLEX_BISON = package:dep("winflexbison"):installdir("include") end - local envs = cmake.buildenvs(package) - envs.VERILATOR_ROOT = nil - envs.WIN_FLEX_BISON = winflexbison:installdir() - io.replace("src/CMakeLists.txt", '${ASTGEN} -I"${srcdir}"', '${ASTGEN} -I "${srcdir}"', {plain = true}) - cmake.install(package, configs, {envs = envs, cxflags = cxflags}) - os.cp(path.join(package:installdir("bin"), "verilator_bin.exe"), path.join(package:installdir("bin"), "verilator.exe")) - end) + cmake.install(package, configs, opt) - on_install("linux", "macosx", function (package) - import("package.tools.autoconf") - local configs = {} - local cxflags = {} - local flex = package:dep("flex"):fetch() - if flex then - local includedirs = flex.sysincludedirs or flex.includedirs - for _, includedir in ipairs(includedirs) do - table.insert(cxflags, "-I" .. includedir) + local bindir = package:installdir("bin") + local subfix = (is_host("windows") and ".exe" or "") + local verilator = path.join(bindir, "verilator" .. subfix) + if not os.isfile(verilator) then + local verilator_bin = "verilator_bin" + if package:is_debug() then + verilator_bin = verilator_bin .. "_dbg" end + verilator_bin = path.join(bindir, verilator_bin .. subfix) + os.trycp(verilator_bin, verilator) end - os.vrun("autoconf") - local envs = autoconf.buildenvs(package, {cxflags = cxflags}) - envs.VERILATOR_ROOT = nil - autoconf.install(package, configs, {envs = envs}) end) on_test(function (package)