xmake.lua 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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("v5.016", "66fc36f65033e5ec904481dd3d0df56500e90c0bfca23b2ae21b4a8d39e05ef1")
  8. on_load(function (package)
  9. if not package:is_precompiled() then
  10. if package:is_plat("windows") then
  11. package:add("deps", "cmake")
  12. package:add("deps", "winflexbison", {kind = "library"})
  13. else
  14. package:add("deps", "flex", {kind = "library"})
  15. package:add("deps", "bison")
  16. package:add("deps", "autoconf", "automake", "libtool")
  17. end
  18. package:add("deps", "python 3.x", {kind = "binary"})
  19. end
  20. package:mark_as_pathenv("VERILATOR_ROOT")
  21. package:addenv("VERILATOR_ROOT", ".")
  22. end)
  23. on_install("windows", function (package)
  24. import("package.tools.cmake")
  25. local configs = {}
  26. local cxflags = {}
  27. local winflexbison = package:dep("winflexbison")
  28. local flex = winflexbison:fetch()
  29. if flex then
  30. local includedirs = flex.sysincludedirs or flex.includedirs
  31. for _, includedir in ipairs(includedirs) do
  32. table.insert(cxflags, "-I" .. includedir)
  33. end
  34. end
  35. local envs = cmake.buildenvs(package)
  36. envs.VERILATOR_ROOT = nil
  37. envs.WIN_FLEX_BISON = winflexbison:installdir()
  38. io.replace("src/CMakeLists.txt", '${ASTGEN} -I"${srcdir}"', '${ASTGEN} -I "${srcdir}"', {plain = true})
  39. cmake.install(package, configs, {envs = envs, cxflags = cxflags})
  40. os.cp(path.join(package:installdir("bin"), "verilator_bin.exe"), path.join(package:installdir("bin"), "verilator.exe"))
  41. end)
  42. on_install("linux", "macosx", function (package)
  43. import("package.tools.autoconf")
  44. local configs = {}
  45. local cxflags = {}
  46. local flex = package:dep("flex"):fetch()
  47. if flex then
  48. local includedirs = flex.sysincludedirs or flex.includedirs
  49. for _, includedir in ipairs(includedirs) do
  50. table.insert(cxflags, "-I" .. includedir)
  51. end
  52. end
  53. os.vrun("autoconf")
  54. local envs = autoconf.buildenvs(package, {cxflags = cxflags})
  55. envs.VERILATOR_ROOT = nil
  56. autoconf.install(package, configs, {envs = envs})
  57. end)
  58. on_test(function (package)
  59. os.vrun("verilator --version")
  60. end)