diff options
author | Eddie Hung <eddie@fpgeh.com> | 2020-01-08 12:11:55 -0800 |
---|---|---|
committer | Eddie Hung <eddie@fpgeh.com> | 2020-01-08 12:11:55 -0800 |
commit | 0696b7bc9e4bd86eadd0e0b92696392cc5dc6172 (patch) | |
tree | 115b26ce9d55182bb0b6c57fe6b1998eb044a5ac /passes/techmap/abc9.cc | |
parent | 050f03f15b01855d9c3bd6e98c4c47ebab607d57 (diff) | |
download | yosys-0696b7bc9e4bd86eadd0e0b92696392cc5dc6172.tar.gz yosys-0696b7bc9e4bd86eadd0e0b92696392cc5dc6172.tar.bz2 yosys-0696b7bc9e4bd86eadd0e0b92696392cc5dc6172.zip |
abc9: if -script value is a file, then source it, otherwise commands
Diffstat (limited to 'passes/techmap/abc9.cc')
-rw-r--r-- | passes/techmap/abc9.cc | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/passes/techmap/abc9.cc b/passes/techmap/abc9.cc index 652ccafaf..5bcbb1611 100644 --- a/passes/techmap/abc9.cc +++ b/passes/techmap/abc9.cc @@ -267,16 +267,21 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *module, std::string scrip abc9_script += stringf("&read %s/input.xaig; &ps; ", tempdir_name.c_str()); if (!script_file.empty()) { - if (script_file[0] == '+') { - for (size_t i = 1; i < script_file.size(); i++) - if (script_file[i] == '\'') - abc9_script += "'\\''"; - else if (script_file[i] == ',') - abc9_script += " "; - else - abc9_script += script_file[i]; - } else + if (check_file_exists(script_file)) abc9_script += stringf("source %s", script_file.c_str()); + else { + if (script_file[0] == '+') { + for (size_t i = 1; i < script_file.size(); i++) + if (script_file[i] == '\'') + abc9_script += "'\\''"; + else if (script_file[i] == ',') + abc9_script += " "; + else + abc9_script += script_file[i]; + } + else + abc9_script += script_file; + } } else if (!lut_costs.empty() || !lut_file.empty()) { abc9_script += fast_mode ? RTLIL::constpad.at("abc9.script.default.fast") : RTLIL::constpad.at("abc9.script.default"); @@ -302,7 +307,7 @@ void abc9_module(RTLIL::Design *design, RTLIL::Module *module, std::string scrip for (size_t pos = abc9_script.find("&mfs"); pos != std::string::npos; pos = abc9_script.find("&mfs", pos)) abc9_script = abc9_script.erase(pos, strlen("&mfs")); - abc9_script += stringf("&ps -l; &write -n %s/output.aig; time", tempdir_name.c_str()); + abc9_script += stringf("; &ps -l; &write -n %s/output.aig; time", tempdir_name.c_str()); abc9_script = add_echos_to_abc9_cmd(abc9_script); for (size_t i = 0; i+1 < abc9_script.size(); i++) @@ -924,7 +929,7 @@ struct Abc9Pass : public Pass { extra_args(args, argidx, design); rewrite_filename(script_file); - if (!script_file.empty() && !is_absolute_path(script_file) && script_file[0] != '+') + if (!script_file.empty() && !is_absolute_path(script_file) && check_file_exists(script_file)) script_file = std::string(pwd) + "/" + script_file; // handle -lut / -luts args |