Fixed gtkwave automatic save file

This commit is contained in:
Makise Kurisu 2016-04-29 20:31:13 +02:00
parent 7f211ef8a3
commit 4a64ba77a0
1 changed files with 18 additions and 4 deletions

22
main.c
View File

@ -182,7 +182,7 @@ int run_gtkwave(char *toplevel, char *command, ...) {
vsprintf(cmd, command, argptr);
va_end(argptr);
//printf("RUN_SIM: %s\n", cmd);
printf("RUN_SIM: %s\n", cmd);
pid = system2(cmd, NULL, NULL);
//printf("--> PID=%d\n", pid);
@ -208,11 +208,13 @@ int vsim(int argc, char **argv)
char *text = NULL;
char *work = NULL;
char *toplevel = NULL;
char *gtkwPrefix = NULL;
int i;
char *ptr = NULL;
char *lastPtr;
char workdir[1 K];
char sourcedir[1 K];
char *params = NULL;
char *simtime = NULL;
@ -222,6 +224,11 @@ int vsim(int argc, char **argv)
gui_init(&argc, &argv);
if (!getcwd(sourcedir, sizeof(sourcedir))) { // Default compile dir is cwd
sourcedir[0] = 0;
printf("[W] Could not get cwd!\n");
}
fp = fopen("/tmp/model-ghdl-vsim","r");
if (fp) {
fgets(workdir, sizeof(workdir), fp); // lets (ab)use the workdir variable here
@ -269,6 +276,9 @@ int vsim(int argc, char **argv)
append_string(&params, " ");
append_string(&params, argv[i]);
}
else if (GETOPT("-gtkwprefix")) {
gtkwPrefix = argv[i];
}
else {
}
@ -276,6 +286,10 @@ int vsim(int argc, char **argv)
chdir(workdir);
if (gtkwPrefix == NULL) {
append_string(&gtkwPrefix, "");
}
printf("[I] Compiling...\n");
if (run_ghdl("ghdl -m --work=%s --workdir=\"%s\" %s %s", work, workdir, params, toplevel)) {
fprintf(stderr, "[E] Compilation failed!");
@ -298,7 +312,7 @@ int vsim(int argc, char **argv)
showMessage(MESSAGE_ERROR, "Error! Simulation failed.", NULL, NULL);
}
else {
if (run_gtkwave(toplevel, "gtkwave %s/%s.ghw --save=\"%s.gtkw\"", workdir, toplevel, toplevel)) { // TODO: PATH FOR Savefile
if (run_gtkwave(toplevel, "gtkwave %s/%s.ghw --save=\"%s/%s%s.gtkw\"", workdir, toplevel, sourcedir, gtkwPrefix, toplevel)) { // TODO: PATH FOR Savefile
fprintf(stderr, "[E] Could not open GtkWave!");
showMessage(MESSAGE_ERROR, "Error! Could not open GtkWave!", NULL, NULL);
}
@ -323,10 +337,10 @@ int vcom(int argc, char **argv)
char vhdlver[16] = "";
FILE *fp = NULL;
printf ("[I] Emulating vsim.\n");
printf ("[I] Emulating vcom.\n");
if (!getcwd(workdir, sizeof(workdir))) { // Default compile dir is cwd
fprintf(stderr, "Error: Could not invoke GHDL!\n");
fprintf(stderr, "[E] Could not get cwd!\n");
return 1;
}