Improvements in ABCEXTERNAL handling
authorClifford Wolf <clifford@clifford.at>
Sat, 19 Mar 2016 19:02:40 +0000 (20:02 +0100)
committerClifford Wolf <clifford@clifford.at>
Sat, 19 Mar 2016 19:02:40 +0000 (20:02 +0100)
Makefile
passes/techmap/Makefile.inc
passes/techmap/abc.cc

index e67070b73b39428d115eaa7c93c6e2b003ae4a6d..514765db42dac34ecae7346a8a87bf1ee94ca986 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -82,7 +82,7 @@ ABCREV = ae7d65e71adc
 ABCPULL = 1
 ABCMKARGS = CC="$(CXX)" CXX="$(CXX)"
 
-# set ABCEXTERNAL = "abc-command" to use an external ABC instance
+# set ABCEXTERNAL = <abc-command> to use an external ABC instance
 # Note: The in-tree ABC (yosys-abc) will not be installed when ABCEXTERNAL is set.
 ABCEXTERNAL =
 
@@ -210,8 +210,6 @@ ifeq ($(ENABLE_ABC),1)
 CXXFLAGS += -DYOSYS_ENABLE_ABC
 ifeq ($(ABCEXTERNAL),)
 TARGETS += yosys-abc$(EXE)
-else
-CXXFLAGS += -DYOSYS_ABC_EXE=\"$(ABCEXTERNAL)\"
 endif
 endif
 
index 8112516c6b725ac0dd512f75688cab6325ccb087..1a34b9eaf726174b4155209afd9011eae382e3ae 100644 (file)
@@ -7,6 +7,9 @@ OBJS += passes/techmap/libparse.o
 
 ifeq ($(ENABLE_ABC),1)
 OBJS += passes/techmap/abc.o
+ifneq ($(ABCEXTERNAL),)
+passes/techmap/abc.o: CXXFLAGS += -DABCEXTERNAL='"$(ABCEXTERNAL)"'
+endif
 endif
 
 ifneq ($(SMALL),1)
index 0c72781f20def4e1cea38ac26597d8732585a940..cddc23661cdffaa55c94e61a2a02da5f84960782 100644 (file)
 // Kahn, Arthur B. (1962), "Topological sorting of large networks", Communications of the ACM 5 (11): 558-562, doi:10.1145/368996.369025
 // http://en.wikipedia.org/wiki/Topological_sorting
 
-#ifndef YOSYS_ABC_EXE
-#define YOSYS_ABC_EXE "yosys-abc" // uses in-tree ABC by default
-#endif
-
 #define ABC_COMMAND_LIB "strash; scorr; ifraig; retime {D}; strash; dch -f; map {D}"
 #define ABC_COMMAND_CTR "strash; scorr; ifraig; retime {D}; strash; dch -f; map {D}; buffer; upsize {D}; dnsize {D}; stime -p"
 #define ABC_COMMAND_LUT "strash; scorr; ifraig; retime; strash; dch -f; if; mfs"
@@ -1177,7 +1173,11 @@ struct AbcPass : public Pass {
                log("library to a target architecture.\n");
                log("\n");
                log("    -exe <command>\n");
-               log("        use the specified command name instead of \"" YOSYS_ABC_EXE "\" to execute ABC.\n");
+#ifdef ABCEXTERNAL
+               log("        use the specified command instead of \"" ABCEXTERNAL "\" to execute ABC.\n");
+#else
+               log("        use the specified command instead of \"<yosys-bindir>/yosys-abc\" to execute ABC.\n");
+#endif
                log("        This can e.g. be used to call a specific version of ABC or a wrapper.\n");
                log("\n");
                log("    -script <file>\n");
@@ -1302,7 +1302,11 @@ struct AbcPass : public Pass {
                log_header("Executing ABC pass (technology mapping using ABC).\n");
                log_push();
 
-               std::string exe_file = proc_self_dirname() + YOSYS_ABC_EXE;
+#ifdef ABCEXTERNAL
+               std::string exe_file = ABCEXTERNAL;
+#else
+               std::string exe_file = proc_self_dirname() + "yosys-abc";
+#endif
                std::string script_file, liberty_file, constr_file, clk_str, delay_target;
                bool fast_mode = false, dff_mode = false, keepff = false, cleanup = true;
                bool show_tempdir = false;
@@ -1315,8 +1319,10 @@ struct AbcPass : public Pass {
                enabled_gates.clear();
 
 #ifdef _WIN32
-               if (!check_file_exists(exe_file + ".exe") && check_file_exists(proc_self_dirname() + "..\\" YOSYS_ABC_EXE ".exe"))
-                       exe_file = proc_self_dirname() + "..\\" YOSYS_ABC_EXE;
+#ifndef ABCEXTERNAL
+               if (!check_file_exists(exe_file + ".exe") && check_file_exists(proc_self_dirname() + "..\\yosys-abc.exe"))
+                       exe_file = proc_self_dirname() + "..\\yosys-abc";
+#endif
 #endif
 
                size_t argidx;