mirror of
				https://github.com/cclassic/model-ghdl
				synced 2025-11-04 02:49:33 +01:00 
			
		
		
		
	Fixed gtkwave automatic save file
This commit is contained in:
		
							
								
								
									
										22
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								main.c
									
									
									
									
									
								
							@@ -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(¶ms, " ");
 | 
					            append_string(¶ms, " ");
 | 
				
			||||||
            append_string(¶ms, argv[i]);
 | 
					            append_string(¶ms, 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(>kwPrefix, "");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    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;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user