From 6f209ca9932d93ceed67b810168a5fc98285fe19 Mon Sep 17 00:00:00 2001 From: 小鸡快跑 <2283572185@qq.com> Date: Sun, 29 Sep 2024 21:05:17 +0800 Subject: 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 --- xmake/rules/iverilog/xmake.lua | 18 +++++++++++++----- 1 file 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) -- cgit v1.3.1 From 8482d2e658cbac1720f500eb3cc37ce9491301eb Mon Sep 17 00:00:00 2001 From: 小鸡快跑 <2283572185@qq.com> Date: Mon, 30 Sep 2024 18:58:34 +0800 Subject: refactor(rules/iverilog): Use target:get_from to get defines --- xmake/rules/iverilog/xmake.lua | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/xmake/rules/iverilog/xmake.lua b/xmake/rules/iverilog/xmake.lua index b538f782b..ec5e0257e 100644 --- a/xmake/rules/iverilog/xmake.lua +++ b/xmake/rules/iverilog/xmake.lua @@ -82,16 +82,8 @@ rule("iverilog.binary") end -- get defines - 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")) + for _, define in ipairs(target:get_from("defines", "*") or {}) do + table.insert(argv, "-D" .. define) end -- get includedirs -- cgit v1.3.1 From 9260be0f35d1e118447c5dfdbf8ac8cb9b187ebb Mon Sep 17 00:00:00 2001 From: ruki Date: Mon, 30 Sep 2024 22:04:00 +0800 Subject: Update xmake.lua --- xmake/rules/iverilog/xmake.lua | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/xmake/rules/iverilog/xmake.lua b/xmake/rules/iverilog/xmake.lua index ec5e0257e..7b9705538 100644 --- a/xmake/rules/iverilog/xmake.lua +++ b/xmake/rules/iverilog/xmake.lua @@ -20,7 +20,6 @@ -- @see https://github.com/xmake-io/xmake/issues/3257 rule("iverilog.binary") - -- support SystemVerilog set_extensions(".v", ".sv", ".vhd") on_load(function (target) target:set("kind", "binary") @@ -82,7 +81,7 @@ rule("iverilog.binary") end -- get defines - for _, define in ipairs(target:get_from("defines", "*") or {}) do + for _, define in ipairs((target:get_from("defines", "*"))) do table.insert(argv, "-D" .. define) end @@ -113,7 +112,5 @@ rule("iverilog.binary") on_run(function (target) 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!") - - -- some oscilloscopes do not support lxt2 os.execv(vvp, {"-n", target:targetfile()}) end) -- cgit v1.3.1 From a1c7cf23142f6476224c250cbc3a83bc1a9a0f8f Mon Sep 17 00:00:00 2001 From: ruki Date: Mon, 30 Sep 2024 22:04:27 +0800 Subject: Update xmake.lua --- xmake/rules/iverilog/xmake.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/xmake/rules/iverilog/xmake.lua b/xmake/rules/iverilog/xmake.lua index 7b9705538..3b55e297a 100644 --- a/xmake/rules/iverilog/xmake.lua +++ b/xmake/rules/iverilog/xmake.lua @@ -32,7 +32,6 @@ 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!") -- cgit v1.3.1