diff options
Diffstat (limited to 'frontends')
| -rw-r--r-- | frontends/verific/verific.cc | 33 | 
1 files changed, 33 insertions, 0 deletions
| diff --git a/frontends/verific/verific.cc b/frontends/verific/verific.cc index 328593099..a9adb5a17 100644 --- a/frontends/verific/verific.cc +++ b/frontends/verific/verific.cc @@ -53,6 +53,9 @@ USING_YOSYS_NAMESPACE  #include "VhdlUnits.h"  #endif +#include "VerificStream.h" +#include "FileSystem.h" +  #ifdef YOSYSHQ_VERIFIC_EXTENSIONS  #include "InitialAssertions.h"  #endif @@ -118,6 +121,34 @@ string get_full_netlist_name(Netlist *nl)  	return nl->CellBaseName();  } +class YosysStreamCallBackHandler : public VerificStreamCallBackHandler +{ +public: +    YosysStreamCallBackHandler() : VerificStreamCallBackHandler() { } +    virtual ~YosysStreamCallBackHandler() { } + +    virtual verific_stream *GetSysCallStream(const char *file_path) +    { +        if (!file_path) return nullptr; + +        linefile_type src_loc = GetFromLocation(); + +        char *this_file_name = nullptr; +        if (src_loc && !FileSystem::IsAbsolutePath(file_path)) { +            const char *src_file_name = LineFile::GetFileName(src_loc); +            char *dir_name = FileSystem::DirectoryPath(src_file_name); +            if (dir_name) { +                this_file_name = Strings::save(dir_name, "/", file_path); +                Strings::free(dir_name); +                file_path = this_file_name; +            } +        } +        verific_stream *strm = new verific_ifstream(file_path); +        Strings::free(this_file_name); +        return strm; +    } +}; +  // ==================================================================  VerificImporter::VerificImporter(bool mode_gates, bool mode_keep, bool mode_nosva, bool mode_names, bool mode_verific, bool mode_autocover, bool mode_fullinit) : @@ -2648,6 +2679,8 @@ struct VerificPass : public Pass {  		int argidx = 1;  		std::string work = "work"; +		YosysStreamCallBackHandler cb; +		veri_file::RegisterCallBackVerificStream(&cb);  		if (GetSize(args) > argidx && (args[argidx] == "-set-error" || args[argidx] == "-set-warning" ||  				args[argidx] == "-set-info" || args[argidx] == "-set-ignore")) | 
