1
0
mirror of https://github.com/cclassic/model-ghdl synced 2024-11-24 08:45:05 +01:00

Fixed gtkwave automatic save file

This commit is contained in:
Markus Koch 2016-04-29 20:31:13 +02:00
parent 7f211ef8a3
commit 4a64ba77a0

22
main.c
View File

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