mirror of https://github.com/YosysHQ/yosys.git
Cleaned up ABC file/io error handling
This commit is contained in:
parent
e6cbeb5b16
commit
1390de4b74
|
@ -332,7 +332,8 @@ static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std
|
|||
tempdir_name[0] = tempdir_name[4] = '_';
|
||||
char *p = mkdtemp(tempdir_name);
|
||||
log_header("Extracting gate logic of module `%s' to `%s/input.v'..\n", module->name.c_str(), tempdir_name);
|
||||
assert(p != NULL);
|
||||
if (p == NULL)
|
||||
log_error("For some reason mkdtemp() failed!\n");
|
||||
|
||||
std::vector<RTLIL::Cell*> cells;
|
||||
cells.reserve(module->cells.size());
|
||||
|
@ -355,7 +356,8 @@ static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std
|
|||
|
||||
if (asprintf(&p, "%s/input.v", tempdir_name) < 0) abort();
|
||||
FILE *f = fopen(p, "wt");
|
||||
assert(f != NULL);
|
||||
if (f == NULL);
|
||||
log_error("Opening %s for writing failed: %s\n", p, strerrno(errno));
|
||||
free(p);
|
||||
|
||||
fprintf(f, "module logic (");
|
||||
|
@ -418,7 +420,8 @@ static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std
|
|||
|
||||
if (asprintf(&p, "%s/stdcells.genlib", tempdir_name) < 0) abort();
|
||||
f = fopen(p, "wt");
|
||||
assert(f != NULL);
|
||||
if (f == NULL);
|
||||
log_error("Opening %s for writing failed: %s\n", p, strerrno(errno));
|
||||
fprintf(f, "GATE ZERO 1 Y=CONST0;\n");
|
||||
fprintf(f, "GATE ONE 1 Y=CONST1;\n");
|
||||
fprintf(f, "GATE BUF 1 Y=A; PIN * NONINV 1 999 1 0 1 0\n");
|
||||
|
@ -443,25 +446,20 @@ static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std
|
|||
"map; write_verilog %s/output.v' 2>&1", exe_file.c_str(), tempdir_name, tempdir_name, tempdir_name);
|
||||
errno = ENOMEM; // popen does not set errno if memory allocation fails, therefore set it by hand
|
||||
f = popen(buffer, "r");
|
||||
if (!f) {
|
||||
log("ABC: popen failed: %d, %s\n",errno,sys_errlist[errno]);
|
||||
assert(0);
|
||||
}
|
||||
if (f == NULL)
|
||||
log_error("Opening pipe to `%s' for reading failed: %s\n", buffer, strerrno(errno));
|
||||
while (fgets(buffer, 1024, f) != NULL)
|
||||
log("ABC: %s", buffer);
|
||||
errno = 0;
|
||||
int ret = pclose(f);
|
||||
if (ret < 0) {
|
||||
log("ABC: pclose failed: %d, %s\n",errno,sys_errlist[errno]);
|
||||
assert(0);
|
||||
}
|
||||
if (ret < 0)
|
||||
log_error("Closing pipe to `%s' failed: %s\n", buffer, strerrno(errno));
|
||||
if (WEXITSTATUS(ret) != 0) {
|
||||
switch (WEXITSTATUS(ret)) {
|
||||
case 127: log("ABC: execution of command \"%s\" failed: Command not found\n",exe_file.c_str()); break;
|
||||
case 126: log("ABC: execution of command \"%s\" failed: Command not executable\n",exe_file.c_str()); break;
|
||||
default: log("ABC: execution of command \"%s\" failed: the shell returned %d\n",exe_file.c_str(),WEXITSTATUS(ret)); break;
|
||||
case 127: log_error("ABC: execution of command \"%s\" failed: Command not found\n", exe_file.c_str()); break;
|
||||
case 126: log_error("ABC: execution of command \"%s\" failed: Command not executable\n", exe_file.c_str()); break;
|
||||
default: log_error("ABC: execution of command \"%s\" failed: the shell returned %d\n", exe_file.c_str(), WEXITSTATUS(ret)); break;
|
||||
}
|
||||
assert(0);
|
||||
}
|
||||
|
||||
if (asprintf(&p, "%s/output.v", tempdir_name) < 0) abort();
|
||||
|
|
Loading…
Reference in New Issue