Finished vcom

This commit is contained in:
Markus Koch 2015-10-23 15:28:26 +02:00
parent d65c627efa
commit 5969ad5848
1 changed files with 34 additions and 7 deletions

41
main.c
View File

@ -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(&params, 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(&params, "");
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");