mirror of
				https://github.com/cclassic/model-ghdl
				synced 2025-11-04 02:49:33 +01:00 
			
		
		
		
	Finished vcom
This commit is contained in:
		
							
								
								
									
										41
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								main.c
									
									
									
									
									
								
							@@ -40,7 +40,7 @@ int run_ghdl(char *command, ...) {
 | 
				
			|||||||
    va_end(argptr);
 | 
					    va_end(argptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    printf("RUN: %s\n", cmd);
 | 
					    printf("RUN: %s\n", cmd);
 | 
				
			||||||
        proc = popen(cmd, "r");
 | 
					    proc = popen(cmd, "r");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (proc == NULL) {
 | 
					    if (proc == NULL) {
 | 
				
			||||||
        printf("Error: Could not invoke GHDL/GtkWave.\n");
 | 
					        printf("Error: Could not invoke GHDL/GtkWave.\n");
 | 
				
			||||||
@@ -90,11 +90,13 @@ int vcom(int argc, char **argv)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
    int slen = 0;
 | 
					    int slen = 0;
 | 
				
			||||||
    char tempdir[1 K];
 | 
					    char workdir[1 K];
 | 
				
			||||||
 | 
					    char *params = NULL;
 | 
				
			||||||
    char *work;
 | 
					    char *work;
 | 
				
			||||||
    char *files = NULL;
 | 
					    char *files = NULL;
 | 
				
			||||||
 | 
					    char vhdlver[16] = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!getcwd(tempdir, sizeof(tempdir))) { // 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, "Error: Could not invoke GHDL!\n");
 | 
				
			||||||
        return 1;
 | 
					        return 1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -103,8 +105,29 @@ int vcom(int argc, char **argv)
 | 
				
			|||||||
        if (GETOPT("-work")) {
 | 
					        if (GETOPT("-work")) {
 | 
				
			||||||
            work = argv[i];
 | 
					            work = argv[i];
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (GETOPT("-compiledir")) {
 | 
					        else if (GETOPT("-workdir")) {
 | 
				
			||||||
            strcpy(tempdir, argv[i]);
 | 
					            strcpy(workdir, argv[i]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (ISOPT("-87")) {
 | 
				
			||||||
 | 
					            strcpy(vhdlver, "--std=87");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (ISOPT("-93")) {
 | 
				
			||||||
 | 
					            strcpy(vhdlver, "--std=93");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (ISOPT("-93c")) {
 | 
				
			||||||
 | 
					            strcpy(vhdlver, "--std=93c");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (ISOPT("-2000")) {
 | 
				
			||||||
 | 
					            strcpy(vhdlver, "--std=00");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (ISOPT("-2002")) {
 | 
				
			||||||
 | 
					            strcpy(vhdlver, "--std=02");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (ISOPT("-2008")) {
 | 
				
			||||||
 | 
					            strcpy(vhdlver, "--std=08");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (GETOPT("-ghdl")) {
 | 
				
			||||||
 | 
					            append_string(¶ms, argv[i]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (argv[i][0] != '-'){ // VHDL file
 | 
					        else if (argv[i][0] != '-'){ // VHDL file
 | 
				
			||||||
            slen += strlen(argv[i]) + 1;
 | 
					            slen += strlen(argv[i]) + 1;
 | 
				
			||||||
@@ -114,9 +137,13 @@ int vcom(int argc, char **argv)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    run_ghdl("ghdl -s %s 2>&1", files);
 | 
					    if (!params)
 | 
				
			||||||
 | 
					        append_string(¶ms, "");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    run_ghdl("ghdl -i --work=%s --workdir=%s %s %s %s 2>&1",
 | 
				
			||||||
 | 
					             work, workdir, vhdlver, files, params);
 | 
				
			||||||
 | 
					    run_ghdl("ghdl -s --work=%s --workdir=%s %s %s %s 2>&1",
 | 
				
			||||||
 | 
					             work, workdir, vhdlver, files, params);
 | 
				
			||||||
    free(files);
 | 
					    free(files);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    printf("DONE.\n");
 | 
					    printf("DONE.\n");
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user