Make the -M flag add module search paths.
This commit is contained in:
parent
b825f8d2b2
commit
c5234e95cd
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT)
|
#if !defined(WINNT)
|
||||||
#ident "$Id: compile.cc,v 1.89 2001/07/22 00:04:50 steve Exp $"
|
#ident "$Id: compile.cc,v 1.90 2001/07/26 03:13:51 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "arith.h"
|
# include "arith.h"
|
||||||
|
|
@ -234,16 +234,7 @@ void compile_init(void)
|
||||||
|
|
||||||
void compile_load_vpi_module(char*name)
|
void compile_load_vpi_module(char*name)
|
||||||
{
|
{
|
||||||
#ifdef __MINGW32__
|
vpip_load_module(name);
|
||||||
char module_path[4096], *s;
|
|
||||||
GetModuleFileName(NULL,module_path,1024);
|
|
||||||
/* Get to the end. Search back twice for backslashes */
|
|
||||||
s = module_path + strlen(module_path);
|
|
||||||
while (*s != '\\') s--; s--;
|
|
||||||
while (*s != '\\') s--;
|
|
||||||
strcpy(s,"\\lib\\ivl");
|
|
||||||
#endif
|
|
||||||
vpip_load_module(name, module_path);
|
|
||||||
free(name);
|
free(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1546,6 +1537,9 @@ vvp_ipoint_t debug_lookup_functor(const char*name)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: compile.cc,v $
|
* $Log: compile.cc,v $
|
||||||
|
* Revision 1.90 2001/07/26 03:13:51 steve
|
||||||
|
* Make the -M flag add module search paths.
|
||||||
|
*
|
||||||
* Revision 1.89 2001/07/22 00:04:50 steve
|
* Revision 1.89 2001/07/22 00:04:50 steve
|
||||||
* Add the load/x instruction for bit selects.
|
* Add the load/x instruction for bit selects.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
40
vvp/main.cc
40
vvp/main.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT)
|
#if !defined(WINNT)
|
||||||
#ident "$Id: main.cc,v 1.18 2001/07/21 21:18:55 steve Exp $"
|
#ident "$Id: main.cc,v 1.19 2001/07/26 03:13:51 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -66,7 +66,6 @@ inline static double cycles_diff(struct tms *a, struct tms *b) { return 0; }
|
||||||
#endif // ! defined(HAVE_TIMES)
|
#endif // ! defined(HAVE_TIMES)
|
||||||
|
|
||||||
|
|
||||||
const char*module_path = MODULE_DIR;
|
|
||||||
unsigned module_cnt = 0;
|
unsigned module_cnt = 0;
|
||||||
const char*module_tab[64];
|
const char*module_tab[64];
|
||||||
|
|
||||||
|
|
@ -84,6 +83,20 @@ int main(int argc, char*argv[])
|
||||||
char *logfile_name = 0x0;
|
char *logfile_name = 0x0;
|
||||||
FILE *logfile = 0x0;
|
FILE *logfile = 0x0;
|
||||||
|
|
||||||
|
#ifdef __MINGW32__
|
||||||
|
/* In the Windows world, we get the first module path
|
||||||
|
component relative the location where the binary lives. */
|
||||||
|
{ char path[4096], *s;
|
||||||
|
GetModuleFileName(NULL,path,1024);
|
||||||
|
/* Get to the end. Search back twice for backslashes */
|
||||||
|
s = path + strlen(path);
|
||||||
|
while (*s != '\\') s--; s--;
|
||||||
|
while (*s != '\\') s--;
|
||||||
|
strcpy(s,"\\lib\\ivl");
|
||||||
|
vpip_module_path[0] = strdup(path);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "dhl:M:m:v")) != EOF) switch (opt) {
|
while ((opt = getopt(argc, argv, "dhl:M:m:v")) != EOF) switch (opt) {
|
||||||
case 'd':
|
case 'd':
|
||||||
debug_flag = true;
|
debug_flag = true;
|
||||||
|
|
@ -93,19 +106,19 @@ int main(int argc, char*argv[])
|
||||||
"Usage: vvp [options] input-file\n"
|
"Usage: vvp [options] input-file\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
#if defined(WITH_DEBUG)
|
#if defined(WITH_DEBUG)
|
||||||
" -d\t\t" "Enter the debugger.\n"
|
" -d Enter the debugger.\n"
|
||||||
#endif
|
#endif
|
||||||
" -h\t\t" "Print this help message.\n"
|
" -h Print this help message.\n"
|
||||||
" -l file\t" "Logfile, '-' for <stderr>.\n"
|
" -l file Logfile, '-' for <stderr>\n"
|
||||||
" -M path\t" "VPI module directory path.\n"
|
" -M path VPI module directory\n"
|
||||||
" -m module\t" "Load vpi module.\n"
|
" -m module Load vpi module.\n"
|
||||||
" -v\t\t" "Verbose progress messages.\n" );
|
" -v Verbose progress messages.\n" );
|
||||||
exit(0);
|
exit(0);
|
||||||
case 'l':
|
case 'l':
|
||||||
logfile_name = optarg;
|
logfile_name = optarg;
|
||||||
break;
|
break;
|
||||||
case 'M':
|
case 'M':
|
||||||
module_path = optarg;
|
vpip_module_path[vpip_module_path_cnt++] = optarg;
|
||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
module_tab[module_cnt++] = optarg;
|
module_tab[module_cnt++] = optarg;
|
||||||
|
|
@ -154,10 +167,10 @@ int main(int argc, char*argv[])
|
||||||
vvp_vpi_init();
|
vvp_vpi_init();
|
||||||
|
|
||||||
compile_init();
|
compile_init();
|
||||||
#if 0
|
|
||||||
for (unsigned idx = 0 ; idx < module_cnt ; idx += 1)
|
for (unsigned idx = 0 ; idx < module_cnt ; idx += 1)
|
||||||
vpip_load_module(module_tab[idx], module_path);
|
vpip_load_module(module_tab[idx]);
|
||||||
#endif
|
|
||||||
if (int rc = compile_design(design_path))
|
if (int rc = compile_design(design_path))
|
||||||
return rc;
|
return rc;
|
||||||
compile_cleanup();
|
compile_cleanup();
|
||||||
|
|
@ -205,6 +218,9 @@ int main(int argc, char*argv[])
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: main.cc,v $
|
* $Log: main.cc,v $
|
||||||
|
* Revision 1.19 2001/07/26 03:13:51 steve
|
||||||
|
* Make the -M flag add module search paths.
|
||||||
|
*
|
||||||
* Revision 1.18 2001/07/21 21:18:55 steve
|
* Revision 1.18 2001/07/21 21:18:55 steve
|
||||||
* Add the -h flag for help. (Stephan Boettcher)
|
* Add the -h flag for help. (Stephan Boettcher)
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT)
|
#if !defined(WINNT)
|
||||||
#ident "$Id: vpi_modules.cc,v 1.5 2001/06/12 03:53:11 steve Exp $"
|
#ident "$Id: vpi_modules.cc,v 1.6 2001/07/26 03:13:51 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -29,29 +29,45 @@
|
||||||
typedef void (*vlog_startup_routines_t)(void);
|
typedef void (*vlog_startup_routines_t)(void);
|
||||||
typedef int (*vpi_register_sim_t)(p_vpi_thunk tp);
|
typedef int (*vpi_register_sim_t)(p_vpi_thunk tp);
|
||||||
|
|
||||||
void vpip_load_module(const char*name, const char*path)
|
|
||||||
{
|
|
||||||
char buf[4096];
|
|
||||||
#ifdef __MINGW32__
|
|
||||||
char sep = '\\';
|
|
||||||
#else
|
|
||||||
char sep = '/';
|
|
||||||
#endif
|
|
||||||
sprintf(buf, "%s%c%s.vpi", path, sep, name);
|
|
||||||
//printf("Load %s...\n", buf);
|
|
||||||
|
|
||||||
ivl_dll_t dll = ivl_dlopen(buf);
|
char* vpip_module_path[64] = {
|
||||||
|
MODULE_DIR,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
unsigned vpip_module_path_cnt = 1;
|
||||||
|
|
||||||
|
|
||||||
|
void vpip_load_module(const char*name)
|
||||||
|
{
|
||||||
|
#ifdef __MINGW32__
|
||||||
|
const char sep = '\\';
|
||||||
|
#else
|
||||||
|
const char sep = '/';
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ivl_dll_t dll = 0;
|
||||||
|
for (unsigned idx = 0
|
||||||
|
; (dll == 0) && (idx < vpip_module_path_cnt)
|
||||||
|
; idx += 1) {
|
||||||
|
char buf[4096];
|
||||||
|
sprintf(buf, "%s%c%s.vpi", vpip_module_path[idx], sep, name);
|
||||||
|
//printf("Load %s...\n", buf);
|
||||||
|
|
||||||
|
dll = ivl_dlopen(buf);
|
||||||
|
}
|
||||||
|
|
||||||
if (dll == 0) {
|
if (dll == 0) {
|
||||||
fprintf(stderr, "%s: %s\n", name, dlerror());
|
fprintf(stderr, "%s: Unable to find %s.vpi module\n", name, name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *regsub = ivl_dlsym(dll, LU "vpi_register_sim" TU);
|
void *regsub = ivl_dlsym(dll, LU "vpi_register_sim" TU);
|
||||||
vpi_register_sim_t simreg = (vpi_register_sim_t)regsub;
|
vpi_register_sim_t simreg = (vpi_register_sim_t)regsub;
|
||||||
if (regsub == 0) {
|
if (regsub == 0) {
|
||||||
fprintf(stderr, "%s: Unable to locate vpi_register_sim", name);
|
fprintf(stderr, "%s: Unable to locate vpi_register_sim", name);
|
||||||
ivl_dlclose(dll);
|
ivl_dlclose(dll);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern vpi_thunk vvpt;
|
extern vpi_thunk vvpt;
|
||||||
|
|
@ -77,6 +93,9 @@ void vpip_load_module(const char*name, const char*path)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vpi_modules.cc,v $
|
* $Log: vpi_modules.cc,v $
|
||||||
|
* Revision 1.6 2001/07/26 03:13:51 steve
|
||||||
|
* Make the -M flag add module search paths.
|
||||||
|
*
|
||||||
* Revision 1.5 2001/06/12 03:53:11 steve
|
* Revision 1.5 2001/06/12 03:53:11 steve
|
||||||
* Change the VPI call process so that loaded .vpi modules
|
* Change the VPI call process so that loaded .vpi modules
|
||||||
* use a function table instead of implicit binding.
|
* use a function table instead of implicit binding.
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT)
|
#if !defined(WINNT)
|
||||||
#ident "$Id: vpi_priv.h,v 1.19 2001/07/11 02:27:21 steve Exp $"
|
#ident "$Id: vpi_priv.h,v 1.20 2001/07/26 03:13:51 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "vpi_user.h"
|
# include "vpi_user.h"
|
||||||
|
|
@ -215,9 +215,13 @@ vpiHandle vpip_make_vthr_vector(unsigned base, unsigned wid);
|
||||||
* This function is called before any compilation to load VPI
|
* This function is called before any compilation to load VPI
|
||||||
* modules. This gives the modules a chance to announce their
|
* modules. This gives the modules a chance to announce their
|
||||||
* contained functions before compilation commences. It is called only
|
* contained functions before compilation commences. It is called only
|
||||||
* once.
|
* once per module.
|
||||||
*/
|
*/
|
||||||
extern void vpip_load_module(const char*name, const char*path);
|
extern void vpip_load_module(const char*name);
|
||||||
|
|
||||||
|
# define VPIP_MODULE_PATH_MAX 64
|
||||||
|
extern char* vpip_module_path[64];
|
||||||
|
extern unsigned vpip_module_path_cnt;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The vpip_build_vpi_call function creates a __vpiSysTaskCall object
|
* The vpip_build_vpi_call function creates a __vpiSysTaskCall object
|
||||||
|
|
@ -259,6 +263,9 @@ extern void vpip_set_time_precision(int pres);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vpi_priv.h,v $
|
* $Log: vpi_priv.h,v $
|
||||||
|
* Revision 1.20 2001/07/26 03:13:51 steve
|
||||||
|
* Make the -M flag add module search paths.
|
||||||
|
*
|
||||||
* Revision 1.19 2001/07/11 02:27:21 steve
|
* Revision 1.19 2001/07/11 02:27:21 steve
|
||||||
* Add support for REadOnlySync and monitors.
|
* Add support for REadOnlySync and monitors.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
10
vvp/vvp.man
10
vvp/vvp.man
|
|
@ -1,4 +1,4 @@
|
||||||
.TH vvp 1 "$Date: 2001/07/21 21:15:51 $" Version "$Date: 2001/07/21 21:15:51 $"
|
.TH vvp 1 "$Date: 2001/07/26 03:13:51 $" Version "$Date: 2001/07/26 03:13:51 $"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
vvp - Icarus Verilog vvp runtime engine
|
vvp - Icarus Verilog vvp runtime engine
|
||||||
|
|
||||||
|
|
@ -23,10 +23,10 @@ Specify logfile as '-' to send log output to <stderr>. $display and
|
||||||
friends send their output both to <stdout> and <stdlog>.
|
friends send their output both to <stdout> and <stdlog>.
|
||||||
.TP 8
|
.TP 8
|
||||||
.B -M\fIpath\fP
|
.B -M\fIpath\fP
|
||||||
This flag specifies the directory to use to locate VPI modules. This
|
This flag adds a directory to the path list used to locate VPI
|
||||||
is normally not used as the installer places the modules in the
|
modules. The default path includes only the install directory for the
|
||||||
default directory, but it can be used if you choose to use alternate
|
system.vpi module, but this flag can add other directories. Multiple
|
||||||
versions of VPI modules.
|
paths are allowed, and modules will be searched in order.
|
||||||
.TP 8
|
.TP 8
|
||||||
.B -m\fImodule\fP
|
.B -m\fImodule\fP
|
||||||
Tell the vvp run time to load the named module before executing the
|
Tell the vvp run time to load the named module before executing the
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue