aboutsummaryrefslogtreecommitdiffstats
path: root/common/placer_heap.cc
diff options
context:
space:
mode:
authorDavid Shah <dave@ds0.me>2019-02-25 11:56:10 +0000
committerDavid Shah <dave@ds0.me>2019-03-22 10:31:54 +0000
commit7142db28a8b828da557729a706c20c8f330ba129 (patch)
treead9898be5e31227bcfeabde06b4c24c5455d143b /common/placer_heap.cc
parent1c824709e21b18073bfdc182793351e40269c373 (diff)
downloadnextpnr-7142db28a8b828da557729a706c20c8f330ba129.tar.gz
nextpnr-7142db28a8b828da557729a706c20c8f330ba129.tar.bz2
nextpnr-7142db28a8b828da557729a706c20c8f330ba129.zip
HeAP: Make HeAP placer optional
A CMake option 'BUILD_HEAP' (default on) configures building of the HeAP placer and the associated Eigen3 dependency. Default for the iCE40 is SA placer, with --heap-placer to use HeAP Default for the ECP5 is HeAP placer, as SA placer can take 1hr+ for large ECP5 designs and HeAP tends to give better QoR. --sa-placer can be used to use SA instead, and auto-fallback to SA if HeAP not built. Signed-off-by: David Shah <dave@ds0.me>
Diffstat (limited to 'common/placer_heap.cc')
-rw-r--r--common/placer_heap.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/common/placer_heap.cc b/common/placer_heap.cc
index b6913473..255a3f54 100644
--- a/common/placer_heap.cc
+++ b/common/placer_heap.cc
@@ -31,6 +31,8 @@
* - To make the placer timing-driven, the bound2bound weights are multiplied by (1 + 10 * crit^2)
*/
+#ifdef WITH_HEAP
+
#include <Eigen/Core>
#include <Eigen/IterativeLinearSolvers>
#include <boost/optional.hpp>
@@ -1509,5 +1511,19 @@ class HeAPPlacer
int HeAPPlacer::CutSpreader::seq = 0;
bool placer_heap(Context *ctx) { return HeAPPlacer(ctx).place(); }
+NEXTPNR_NAMESPACE_END
+
+#else
+
+#include "log.h"
+#include "nextpnr.h"
+NEXTPNR_NAMESPACE_BEGIN
+bool placer_heap(Context *ctx)
+{
+ log_error("nextpnr was built without the HeAP placer\n");
+ return false;
+}
NEXTPNR_NAMESPACE_END
+
+#endif