xmake.lua 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package("verilator")
  2. set_kind("toolchain")
  3. set_homepage("https://verilator.org")
  4. set_description("Verilator open-source SystemVerilog simulator and lint system")
  5. -- add_urls("https://github.com/verilator/verilator/archive/refs/tags/$(version).tar.gz")
  6. add_urls("https://github.com/verilator/verilator.git")
  7. add_versions("2023.1.10", "5fce23e90d2a721bb712dc9aacde594558489dda")
  8. -- wait for next release with cmake
  9. -- add_versions("v5.004", "7d193a09eebefdbec8defaabfc125663f10cf6ab0963ccbefdfe704a8a4784d2")
  10. on_load(function (package)
  11. if not package:is_precompiled() then
  12. if package:is_plat("windows") then
  13. package:add("deps", "cmake")
  14. package:add("deps", "winflexbison", {kind = "library"})
  15. else
  16. package:add("deps", "flex", {kind = "library"})
  17. package:add("deps", "bison")
  18. package:add("deps", "autoconf", "automake", "libtool")
  19. end
  20. package:add("deps", "python 3.x", {kind = "binary"})
  21. end
  22. package:mark_as_pathenv("VERILATOR_ROOT")
  23. package:addenv("VERILATOR_ROOT", ".")
  24. end)
  25. on_install("windows", function (package)
  26. import("package.tools.cmake")
  27. local configs = {}
  28. local cxflags = {}
  29. local winflexbison = package:dep("winflexbison")
  30. local flex = winflexbison:fetch()
  31. if flex then
  32. local includedirs = flex.sysincludedirs or flex.includedirs
  33. for _, includedir in ipairs(includedirs) do
  34. table.insert(cxflags, "-I" .. includedir)
  35. end
  36. end
  37. local envs = cmake.buildenvs(package)
  38. envs.VERILATOR_ROOT = nil
  39. envs.WIN_FLEX_BISON = winflexbison:installdir()
  40. io.replace("src/CMakeLists.txt", '${ASTGEN} -I"${srcdir}"', '${ASTGEN} -I "${srcdir}"', {plain = true})
  41. cmake.install(package, configs, {envs = envs, cxflags = cxflags})
  42. os.cp(path.join(package:installdir("bin"), "verilator_bin.exe"), path.join(package:installdir("bin"), "verilator.exe"))
  43. end)
  44. on_install("linux", "macosx", function (package)
  45. import("package.tools.autoconf")
  46. local configs = {}
  47. local cxflags = {}
  48. local flex = package:dep("flex"):fetch()
  49. if flex then
  50. local includedirs = flex.sysincludedirs or flex.includedirs
  51. for _, includedir in ipairs(includedirs) do
  52. table.insert(cxflags, "-I" .. includedir)
  53. end
  54. end
  55. os.vrun("autoconf")
  56. local envs = autoconf.buildenvs(package, {cxflags = cxflags})
  57. envs.VERILATOR_ROOT = nil
  58. autoconf.install(package, configs, {envs = envs})
  59. end)
  60. on_test(function (package)
  61. os.vrun("verilator --version")
  62. end)