diff --git a/include/verilated.h b/include/verilated.h index 199f22a67..dbbc2c2c8 100644 --- a/include/verilated.h +++ b/include/verilated.h @@ -321,12 +321,14 @@ extern WDataOutP VL_ZERO_RESET_W(int obits, WDataOutP outwp); ///< Zero reset a extern WDataOutP _vl_moddiv_w(int lbits, WDataOutP owp, WDataInP lwp, WDataInP rwp, bool is_modulus); /// File I/O -extern IData VL_FGETS_IXQ(int obits, void* destp, QData fpq); +extern IData VL_FGETS_IXI(int obits, void* destp, IData fpi); extern QData VL_FOPEN_WI(int fnwords, WDataInP ofilename, IData mode); extern QData VL_FOPEN_QI(QData ofilename, IData mode); inline QData VL_FOPEN_II(IData ofilename, IData mode) { return VL_FOPEN_QI(ofilename,mode); } +extern void VL_FCLOSE_I(IData fdi); + extern void VL_READMEM_W(bool hex, int width, int depth, int array_lsb, int fnwords, WDataInP ofilename, void* memp, IData start, IData end); extern void VL_READMEM_Q(bool hex, int width, int depth, int array_lsb, int fnwords, @@ -336,9 +338,9 @@ inline void VL_READMEM_I(bool hex, int width, int depth, int array_lsb, int fnwo VL_READMEM_Q(hex, width,depth,array_lsb,fnwords, ofilename,memp,start,end); } extern void VL_WRITEF(const char* formatp, ...); -extern void VL_FWRITEF(QData fpq, const char* formatp, ...); +extern void VL_FWRITEF(IData fpi, const char* formatp, ...); -extern IData VL_FSCANF_IX(QData fpq, const char* formatp, ...); +extern IData VL_FSCANF_IX(IData fpi, const char* formatp, ...); extern IData VL_SSCANF_IIX(int lbits, IData ld, const char* formatp, ...); extern IData VL_SSCANF_IQX(int lbits, QData ld, const char* formatp, ...); extern IData VL_SSCANF_IWX(int lbits, WDataInP lwp, const char* formatp, ...); @@ -365,9 +367,8 @@ extern const char* vl_mc_scan_plusargs(const char* prefixp); // PLIish #define _VL_SET_QII(ld,rd) ( ((QData)(ld)<{run_log_filename} ||= "$self->{obj_dir}/vlt_sim.log"; $self->{coverage_filename} ||= "$self->{obj_dir}/vlt_coverage.pl"; $self->{vcd_filename} ||= "$self->{obj_dir}/sim.vcd"; + $self->{main_filename} ||= "$self->{obj_dir}/$self->{VM_PREFIX}__main.cpp"; ($self->{top_filename} = $self->{pl_filename}) =~ s/\.pl$/\.v/; if (!$self->{make_top_shell}) { $self->{top_shell_filename} = $self->{top_filename}; @@ -536,6 +537,11 @@ sub compile { return 1; } + if (!$param{fails} && $param{verilator_make_gcc} + && $param{make_main}) { + $self->_make_main(); + } + $self->_run(logfile=>"$self->{obj_dir}/vlt_compile.log", fails=>$param{fails}, expect=>$param{expect}, @@ -543,9 +549,6 @@ sub compile { return 1 if $self->errors || $self->skips; if (!$param{fails} && $param{verilator_make_gcc}) { - if ($param{make_main}) { - $self->_make_main(); - } if ($self->sp) { $self->_sp_preproc(%param); } @@ -806,7 +809,7 @@ sub _make_main { $self->_read_inputs(); - my $filename = "$self->{obj_dir}/$self->{VM_PREFIX}__main.cpp"; + my $filename = $self->{main_filename}; my $fh = IO::File->new(">$filename") or die "%Error: $! $filename,"; print $fh "// Test defines\n"; diff --git a/test_regress/t/t_sys_file_basic.pl b/test_regress/t/t_sys_file_basic.pl index d319381ef..e5184e2c6 100755 --- a/test_regress/t/t_sys_file_basic.pl +++ b/test_regress/t/t_sys_file_basic.pl @@ -10,12 +10,15 @@ if (!$::Driver) { use FindBin; exec("$FindBin::Bin/bootstrap.pl", @ARGV, $0); di unlink("$Self->{obj_dir}/t_sys_file_basic_test.log"); compile ( - v_flags2 => ['+incdir+../include'], - ); + v_flags2 => ['+incdir+../include', + # Build without cached objects, see bug363 + "--exe ../$Self->{main_filename}"], + make_flags=>'MAKE_MAIN=0 VM_PARALLEL_BUILDS=0', + ); execute ( - check_finished=>1, - ); + check_finished=>1, + ); file_grep ("$Self->{obj_dir}/t_sys_file_basic_test.log", qr/\[0\] hello v=12345667