aboutsummaryrefslogtreecommitdiffstats
path: root/common/router2.cc
diff options
context:
space:
mode:
Diffstat (limited to 'common/router2.cc')
-rw-r--r--common/router2.cc20
1 files changed, 17 insertions, 3 deletions
diff --git a/common/router2.cc b/common/router2.cc
index 26e78eaa..4dfd868b 100644
--- a/common/router2.cc
+++ b/common/router2.cc
@@ -33,7 +33,6 @@
#include <deque>
#include <fstream>
#include <queue>
-#include <thread>
#include "log.h"
#include "nextpnr.h"
#include "router1.h"
@@ -985,8 +984,22 @@ struct Router2
}
if (ctx->verbose)
log_info("%d/%d nets not multi-threadable\n", int(tcs.at(N).route_nets.size()), int(route_queue.size()));
+#ifdef NPNR_DISABLE_THREADS
+ // Singlethreaded routing - quadrants
+ for (int i = 0; i < Nq; i++) {
+ router_thread(tcs.at(i));
+ }
+ // Vertical splits
+ for (int i = Nq; i < Nq + Nv; i++) {
+ router_thread(tcs.at(i));
+ }
+ // Horizontal splits
+ for (int i = Nq + Nv; i < Nq + Nv + Nh; i++) {
+ router_thread(tcs.at(i));
+ }
+#else
// Multithreaded part of routing - quadrants
- std::vector<std::thread> threads;
+ std::vector<boost::thread> threads;
for (int i = 0; i < Nq; i++) {
threads.emplace_back([this, &tcs, i]() { router_thread(tcs.at(i)); });
}
@@ -1007,6 +1020,7 @@ struct Router2
for (auto &t : threads)
t.join();
threads.clear();
+#endif
// Singlethreaded part of routing - nets that cross partitions
// or don't fit within bounding box
for (auto st_net : tcs.at(N).route_nets)
@@ -1130,4 +1144,4 @@ Router2Cfg::Router2Cfg(Context *ctx)
perf_profile = ctx->setting<float>("router2/perfProfile", false);
}
-NEXTPNR_NAMESPACE_END \ No newline at end of file
+NEXTPNR_NAMESPACE_END