diff --git a/src/V3EmitCMake.cpp b/src/V3EmitCMake.cpp index d8a594ef8..c222202e9 100644 --- a/src/V3EmitCMake.cpp +++ b/src/V3EmitCMake.cpp @@ -146,36 +146,9 @@ class CMakeEmitter final { } } - global.emplace_back("${VERILATOR_ROOT}/include/verilated.cpp"); - if (v3Global.dpi()) { // - global.emplace_back("${VERILATOR_ROOT}/include/verilated_dpi.cpp"); - } - if (v3Global.opt.vpi()) { - global.emplace_back("${VERILATOR_ROOT}/include/verilated_vpi.cpp"); - } - if (v3Global.opt.savable()) { - global.emplace_back("${VERILATOR_ROOT}/include/verilated_save.cpp"); - } - if (v3Global.opt.coverage()) { - global.emplace_back("${VERILATOR_ROOT}/include/verilated_cov.cpp"); - } - if (v3Global.opt.trace()) { - global.emplace_back("${VERILATOR_ROOT}/include/" + v3Global.opt.traceSourceBase() - + "_c.cpp"); - } - if (v3Global.usesProbDist()) { - global.emplace_back("${VERILATOR_ROOT}/include/verilated_probdist.cpp"); - } - if (v3Global.usesTiming()) { - global.emplace_back("${VERILATOR_ROOT}/include/verilated_timing.cpp"); - } - if (v3Global.useRandomizeMethods()) { - global.emplace_back("${VERILATOR_ROOT}/include/verilated_random.cpp"); - } - global.emplace_back("${VERILATOR_ROOT}/include/verilated_threads.cpp"); - if (v3Global.opt.usesProfiler()) { - global.emplace_back("${VERILATOR_ROOT}/include/verilated_profiler.cpp"); - } + for (const string& cpp : v3Global.verilatedCppFiles()) + global.emplace_back("${VERILATOR_ROOT}/include/"s + cpp); + if (!v3Global.opt.libCreate().empty()) { global.emplace_back(v3Global.opt.makeDir() + "/" + v3Global.opt.libCreate() + ".cpp"); } diff --git a/src/V3EmitMk.cpp b/src/V3EmitMk.cpp index 54e1ef016..7d2a4006a 100644 --- a/src/V3EmitMk.cpp +++ b/src/V3EmitMk.cpp @@ -593,22 +593,8 @@ public: // Do nothing because VM_GLOBAL is necessary per executable. Top module will // have them. } else if (support == 2 && !slow) { - putMakeClassEntry(of, "verilated.cpp"); - if (v3Global.dpi()) putMakeClassEntry(of, "verilated_dpi.cpp"); - if (v3Global.opt.vpi()) putMakeClassEntry(of, "verilated_vpi.cpp"); - if (v3Global.opt.savable()) putMakeClassEntry(of, "verilated_save.cpp"); - if (v3Global.opt.coverage()) putMakeClassEntry(of, "verilated_cov.cpp"); - if (v3Global.opt.trace()) { - putMakeClassEntry(of, v3Global.opt.traceSourceBase() + "_c.cpp"); - } - if (v3Global.usesProbDist()) putMakeClassEntry(of, "verilated_probdist.cpp"); - if (v3Global.usesTiming()) putMakeClassEntry(of, "verilated_timing.cpp"); - if (v3Global.useRandomizeMethods()) - putMakeClassEntry(of, "verilated_random.cpp"); - putMakeClassEntry(of, "verilated_threads.cpp"); - if (v3Global.opt.usesProfiler()) { - putMakeClassEntry(of, "verilated_profiler.cpp"); - } + for (const string& cpp : v3Global.verilatedCppFiles()) + putMakeClassEntry(of, cpp); } else if (support == 2 && slow) { } else if (support == 0 && v3Global.opt.outputGroups() > 0) { const std::vector& list diff --git a/src/V3EmitMkJson.cpp b/src/V3EmitMkJson.cpp index 1ab2db6e5..9877a510a 100644 --- a/src/V3EmitMkJson.cpp +++ b/src/V3EmitMkJson.cpp @@ -180,36 +180,8 @@ class V3EmitMkJsonEmitter final { const std::string verilatorRoot = V3Os::filenameSlashPath(V3Os::filenameRealPath(V3Options::getenvVERILATOR_ROOT())); - global.emplace_back(verilatorRoot + "/include/verilated.cpp"); - if (v3Global.dpi()) { // - global.emplace_back(verilatorRoot + "/include/verilated_dpi.cpp"); - } - if (v3Global.opt.vpi()) { - global.emplace_back(verilatorRoot + "/include/verilated_vpi.cpp"); - } - if (v3Global.opt.savable()) { - global.emplace_back(verilatorRoot + "/include/verilated_save.cpp"); - } - if (v3Global.opt.coverage()) { - global.emplace_back(verilatorRoot + "/include/verilated_cov.cpp"); - } - if (v3Global.opt.trace()) { - global.emplace_back(verilatorRoot + "/include/" + v3Global.opt.traceSourceBase() - + "_c.cpp"); - } - if (v3Global.usesProbDist()) { - global.emplace_back(verilatorRoot + "/include/verilated_probdist.cpp"); - } - if (v3Global.usesTiming()) { - global.emplace_back(verilatorRoot + "/include/verilated_timing.cpp"); - } - if (v3Global.useRandomizeMethods()) { - global.emplace_back(verilatorRoot + "/include/verilated_random.cpp"); - } - global.emplace_back(verilatorRoot + "/include/verilated_threads.cpp"); - if (v3Global.opt.usesProfiler()) { - global.emplace_back(verilatorRoot + "/include/verilated_profiler.cpp"); - } + for (const string& cpp : v3Global.verilatedCppFiles()) + global.emplace_back(verilatorRoot + "/include/" + cpp); if (!v3Global.opt.libCreate().empty()) { global.emplace_back(makeDir + "/" + v3Global.opt.libCreate() + ".cpp"); } diff --git a/src/V3Global.cpp b/src/V3Global.cpp index 357f910b0..259e2011c 100644 --- a/src/V3Global.cpp +++ b/src/V3Global.cpp @@ -195,3 +195,19 @@ const std::string& V3Global::ptrToId(const void* p) { } return pair.first->second; } + +std::vector V3Global::verilatedCppFiles() { + std::vector result; + result.emplace_back("verilated.cpp"); + if (v3Global.dpi()) result.emplace_back("verilated_dpi.cpp"); + if (v3Global.opt.vpi()) result.emplace_back("verilated_vpi.cpp"); + if (v3Global.opt.savable()) result.emplace_back("verilated_save.cpp"); + if (v3Global.opt.coverage()) result.emplace_back("verilated_cov.cpp"); + if (v3Global.opt.trace()) result.emplace_back(v3Global.opt.traceSourceBase() + "_c.cpp"); + if (v3Global.usesProbDist()) result.emplace_back("verilated_probdist.cpp"); + if (v3Global.usesTiming()) result.emplace_back("verilated_timing.cpp"); + if (v3Global.useRandomizeMethods()) result.emplace_back("verilated_random.cpp"); + result.emplace_back("verilated_threads.cpp"); + if (v3Global.opt.usesProfiler()) result.emplace_back("verilated_profiler.cpp"); + return result; +} diff --git a/src/V3Global.h b/src/V3Global.h index dcbe078ab..99624a2d1 100644 --- a/src/V3Global.h +++ b/src/V3Global.h @@ -208,6 +208,7 @@ public: void idPtrMapDumpJson(std::ostream& os); const std::string& ptrToId(const void* p); std::thread::id mainThreadId() const { return m_mainThreadId; } + static std::vector verilatedCppFiles(); }; extern V3Global v3Global;