option("WAVE_ENABLE")
    set_default(true)
    set_showmenu(true)
    set_category("wave")
    set_description("Wave record enable")
    after_check(function (option)
        option:set("configvar", option:name(), option:value())
    end)

option("WAVE_RECORD_MODE")
    set_values("Continuous", "At specified cycle")
    set_default("Continuous")
    set_showmenu(true)
    set_category("wave")
    set_description("Wave record mode")
    after_check(function (option)
        option:set("configvar", "WAVE_RECORE_MODE", option:value() == "Continuous")
    end)

option("WAVE_START_CYC")
    set_default("1000")
    set_showmenu(true)
    set_category("wave")
    set_description("Wave record start cycle")
    add_deps("WAVE_RECORD_MODE")
    after_check(function (option)
        option:enable(option:dep("WAVE_RECORD_MODE"):value() == "At specified cycle")
        option:set("configvar", option:name(), option:value(), {quote = false})
    end)

option("WAVE_LEN")
    set_default("10")
    set_showmenu(true)
    set_category("wave")
    set_description("Record wave max cycles")
    after_check(function (option)
        option:set("configvar", option:name(), option:value(), {quote = false})
    end)

option("MTRACE_ENABLE")
    set_default(true)
    set_showmenu(true)
    set_category("trace")
    set_description("Memory trace enable")
    after_check(function (option)
        option:set("configvar", option:name(), option:value())
    end)

target("nagicore")
    add_rules("verilator.static")
    set_toolchains("@verilator")
    add_files("./rtl/build/*.sv")
    add_values("verilator.flags", "-O3", "--x-assign", "fast", "--trace-fst", "--timing", "-I"..path.absolute("./rtl/build"))

    add_files("./*.cpp")
    add_deps("logger")
    add_includedirs("./", {public = true})
    add_includedirs("../", {public = true})
    add_links("z") -- zlib

    add_options("WAVE_ENABLE", "WAVE_LEN", "WAVE_RECORD_MODE", "WAVE_START_CYC", "MTRACE_ENABLE")
    add_configfiles("config_nagicore.h.in")
    add_includedirs("$(buildir)", {public = true})
