diff options
author | David Shah <dave@ds0.me> | 2019-02-25 11:56:10 +0000 |
---|---|---|
committer | David Shah <dave@ds0.me> | 2019-03-22 10:31:54 +0000 |
commit | 7142db28a8b828da557729a706c20c8f330ba129 (patch) | |
tree | ad9898be5e31227bcfeabde06b4c24c5455d143b /common/placer_heap.cc | |
parent | 1c824709e21b18073bfdc182793351e40269c373 (diff) | |
download | nextpnr-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.cc | 16 |
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 |