diff options
| author | 小鸡快跑 <[email protected]> | 2024-09-29 21:05:17 +0800 |
|---|---|---|
| committer | 小鸡快跑 <[email protected]> | 2024-09-29 21:05:17 +0800 |
| commit | 6f209ca9932d93ceed67b810168a5fc98285fe19 (patch) | |
| tree | 2f86871076fbd9d550015d68f60a8b5544d7e712 | |
| parent | 0f7e1ea9a5f790364d44d3f759347620113ad7db (diff) | |
feat(rules/iverilog): Improve the iverilog build rules
1. Add System Verilog support
2. Support add_defines by add_options
3. Use vcd format instead of lxt2 to support WaveTrace plugin
| -rw-r--r-- | xmake/rules/iverilog/xmake.lua | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/xmake/rules/iverilog/xmake.lua b/xmake/rules/iverilog/xmake.lua index 4295d1625..b538f782b 100644 --- a/xmake/rules/iverilog/xmake.lua +++ b/xmake/rules/iverilog/xmake.lua @@ -20,7 +20,8 @@ -- @see https://github.com/xmake-io/xmake/issues/3257 rule("iverilog.binary") - set_extensions(".v", ".vhd") + -- support SystemVerilog + set_extensions(".v", ".sv", ".vhd") on_load(function (target) target:set("kind", "binary") if not target:get("extension") then @@ -32,6 +33,7 @@ rule("iverilog.binary") end) on_linkcmd(function (target, batchcmds, opt) + import("core.project.project") local toolchain = assert(target:toolchain("iverilog"), 'we need set_toolchains("iverilog") in target("%s")', target:name()) local iverilog = assert(toolchain:config("iverilog"), "iverilog not found!") @@ -80,12 +82,17 @@ rule("iverilog.binary") end -- get defines - local defines = target:get("defines") - if defines then - for _, define in ipairs(defines) do + local add_defines = function(defines) + for _, define in ipairs(defines or {}) do table.insert(argv, "-D" .. define) end end + add_defines(target:get("defines")) + -- support add_defines in options + for _, option_name in ipairs(target:get("options") or {}) do + local option = project.option(option_name) + add_defines(option:enabled() and option:get("defines")) + end -- get includedirs local includedirs = target:get("includedirs") @@ -115,5 +122,6 @@ rule("iverilog.binary") local toolchain = assert(target:toolchain("iverilog"), 'we need set_toolchains("iverilog") in target("%s")', target:name()) local vvp = assert(toolchain:config("vvp"), "vvp not found!") - os.execv(vvp, {"-n", target:targetfile(), "-lxt2"}) + -- some oscilloscopes do not support lxt2 + os.execv(vvp, {"-n", target:targetfile()}) end) |
