diff --git a/src/dbSta/src/CMakeLists.txt b/src/dbSta/src/CMakeLists.txt index ad52352fb96..b8117c53867 100644 --- a/src/dbSta/src/CMakeLists.txt +++ b/src/dbSta/src/CMakeLists.txt @@ -17,12 +17,6 @@ target_include_directories(dbSta_lib PUBLIC ../include ${PROJECT_SOURCE_DIR}/include - PRIVATE - # Needed for search/Levelize.hh and the unprefixed transitive - # OpenSTA headers it includes (e.g. Graph.hh) which are not part of - # OpenSTA's public include. - ${OPENSTA_HOME} - ${OPENSTA_HOME}/include/sta ) diff --git a/src/dbSta/src/dbSta.cc b/src/dbSta/src/dbSta.cc index f77ea2ba261..369bc27d2f8 100644 --- a/src/dbSta/src/dbSta.cc +++ b/src/dbSta/src/dbSta.cc @@ -37,7 +37,6 @@ #include "odb/dbBlockCallBackObj.h" #include "odb/dbObject.h" #include "odb/dbTypes.h" -#include "search/Levelize.hh" #include "sta/ArcDelayCalc.hh" #include "sta/Clock.hh" #include "sta/Delay.hh" @@ -45,6 +44,7 @@ #include "sta/Graph.hh" #include "sta/GraphCmp.hh" #include "sta/GraphDelayCalc.hh" +#include "sta/LevelizeObserver.hh" #include "sta/Liberty.hh" #include "sta/MinMax.hh" #include "sta/Mode.hh" @@ -297,24 +297,23 @@ void dbSta::makeSdcNetwork() sdc_network_ = new dbSdcNetwork(network_); } -// Levelize::setObserver takes ownership and deletes the prior observer, -// so this composite must replicate the StaLevelizeObserver behavior that -// Sta::makeObservers installs (forwarding to Search and GraphDelayCalc) -// in addition to invalidating dbSta's cache. -class DbStaLevelizeObserver : public LevelizeObserver +// Extend the default StaLevelizeObserver (Search + GraphDelayCalc forwarding) +// to also invalidate dbSta's driver-vertex cache. +class DbStaLevelizeObserver : public StaLevelizeObserver { public: - explicit DbStaLevelizeObserver(dbSta* sta) : sta_(sta) {} + DbStaLevelizeObserver(dbSta* sta, Search* search, GraphDelayCalc* gdc) + : StaLevelizeObserver(search, gdc), sta_(sta) + { + } void levelsChangedBefore() override { - sta_->search()->levelsChangedBefore(); - sta_->graphDelayCalc()->levelsChangedBefore(); + StaLevelizeObserver::levelsChangedBefore(); sta_->invalidateLevelizedDrvrVertices(); } void levelChangedBefore(Vertex* vertex) override { - sta_->search()->levelChangedBefore(vertex); - sta_->graphDelayCalc()->levelChangedBefore(vertex); + StaLevelizeObserver::levelChangedBefore(vertex); sta_->invalidateLevelizedDrvrVertices(); } @@ -325,7 +324,8 @@ class DbStaLevelizeObserver : public LevelizeObserver void dbSta::makeObservers() { Sta::makeObservers(); - levelize_->setObserver(new DbStaLevelizeObserver(this)); + setLevelizeObserver( + new DbStaLevelizeObserver(this, search_, graph_delay_calc_)); } void dbSta::invalidateLevelizedDrvrVertices()