added error checking at execution of ABC

Signed-off-by: Clifford Wolf <clifford@clifford.at>
This commit is contained in:
Johann Glaser 2013-03-16 22:04:55 +01:00 committed by Clifford Wolf
parent fb494d4dd7
commit 0cb4a5936f
1 changed files with 19 additions and 1 deletions

View File

@ -441,10 +441,28 @@ static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std
else
snprintf(buffer, 1024, "%s -c 'read_verilog %s/input.v; read_library %s/stdcells.genlib; "
"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);
}
while (fgets(buffer, 1024, f) != NULL)
log("ABC: %s", buffer);
fclose(f);
errno = 0;
int ret = pclose(f);
if (ret < 0) {
log("ABC: pclose failed: %d, %s\n",errno,sys_errlist[errno]);
assert(0);
}
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;
}
assert(0);
}
if (asprintf(&p, "%s/output.v", tempdir_name) < 0) abort();
f = fopen(p, "rt");