Skip to content

Commit c4ec647

Browse files
authored
Merge pull request The-OpenROAD-Project#6550 from bnmfw/drt_linker
drt: decoupling of the Graphics classes and stable drt_lib
2 parents 4a7c6dd + cda44c4 commit c4ec647

29 files changed

+505
-247
lines changed

src/dpl/CMakeLists.txt

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ include("openroad")
4040
find_package(TCL)
4141
find_package(Boost)
4242

43+
swig_lib(NAME dpl
44+
NAMESPACE dpl
45+
I_FILE src/Opendp.i
46+
SCRIPTS src/Opendp.tcl
47+
)
48+
4349
add_library(dpl_lib
4450
src/Opendp.cpp
4551
src/dbToOpendp.cpp
@@ -61,18 +67,11 @@ target_link_libraries(dpl_lib
6167
utl_lib
6268
)
6369

64-
6570
target_include_directories(dpl_lib
6671
PUBLIC
6772
include
6873
)
6974

70-
swig_lib(NAME dpl
71-
NAMESPACE dpl
72-
I_FILE src/Opendp.i
73-
SCRIPTS src/Opendp.tcl
74-
)
75-
7675
target_sources(dpl
7776
PRIVATE
7877
src/MakeOpendp.cpp
@@ -90,9 +89,7 @@ target_include_directories(dpl
9089
target_link_libraries(dpl
9190
PRIVATE
9291
${TCL_LIBRARY}
93-
odb
9492
dpl_lib
95-
OpenSTA
9693
gui
9794
)
9895

src/drt/CMakeLists.txt

Lines changed: 99 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -50,105 +50,99 @@ find_package(Boost REQUIRED COMPONENTS serialization)
5050
find_package(OpenMP REQUIRED)
5151
find_package(VTune)
5252

53+
set(FLEXROUTE_HOME ${PROJECT_SOURCE_DIR})
54+
5355
swig_lib(NAME drt
5456
NAMESPACE drt
5557
I_FILE src/TritonRoute.i
5658
SCRIPTS src/TritonRoute.tcl
5759
)
5860

59-
set(FLEXROUTE_HOME ${PROJECT_SOURCE_DIR})
60-
61-
target_sources(drt
62-
PRIVATE
63-
src/gr/FlexGRCMap.cpp
64-
src/gr/FlexGR.cpp
65-
src/gr/FlexGR_end.cpp
66-
src/gr/FlexGRGridGraph.cpp
67-
src/gr/FlexGRGridGraph_maze.cpp
68-
src/gr/FlexGR_init.cpp
69-
src/gr/FlexGR_maze.cpp
70-
src/gr/FlexGR_rq.cpp
71-
src/gr/FlexGR_topo.cpp
72-
src/dr/FlexDR_conn.cpp
73-
src/dr/FlexDR_init.cpp
74-
src/dr/FlexDR.cpp
75-
src/db/drObj/drNet.cpp
76-
src/dr/FlexDR_maze.cpp
77-
src/dr/FlexGridGraph_maze.cpp
78-
src/dr/FlexGridGraph.cpp
79-
src/dr/FlexDR_rq.cpp
80-
src/dr/FlexDR_end.cpp
81-
src/dr/FlexDR_graphics.cpp
82-
src/ta/FlexTA_end.cpp
83-
src/ta/FlexTA_init.cpp
84-
src/ta/FlexTA_rq.cpp
85-
src/ta/FlexTA_assign.cpp
86-
src/ta/FlexTA.cpp
87-
src/ta/FlexTA_graphics.cpp
88-
src/global.cpp
89-
src/gc/FlexGC_end.cpp
90-
src/gc/FlexGC_rq.cpp
91-
src/gc/FlexGC.cpp
92-
src/gc/FlexGC_init.cpp
93-
src/gc/FlexGC_main.cpp
94-
src/gc/FlexGC_eol.cpp
95-
src/gc/FlexGC_inf.cpp
96-
src/gc/FlexGC_cut.cpp
97-
src/gc/FlexGC_metspc.cpp
98-
src/db/drObj/drAccessPattern.cpp
99-
src/db/drObj/drPin.cpp
100-
src/db/drObj/drShape.cpp
101-
src/db/drObj/drVia.cpp
102-
src/db/infra/frTime_helper.cpp
103-
src/db/infra/frTime.cpp
104-
src/db/infra/KDTree.cpp
105-
src/db/taObj/taShape.cpp
106-
src/db/obj/frShape.cpp
107-
src/db/obj/frInst.cpp
108-
src/db/obj/frVia.cpp
109-
src/db/obj/frAccess.cpp
110-
src/db/obj/frRPin.cpp
111-
src/db/obj/frNode.cpp
112-
src/db/obj/frInstTerm.cpp
113-
src/db/obj/frNet.cpp
114-
src/db/tech/frConstraint.cc
115-
src/db/obj/frMarker.cpp
116-
src/db/tech/frLayer.cc
117-
src/frRegionQuery.cpp
118-
src/io/io_pin.cpp
119-
src/io/io.cpp
120-
src/io/GuideProcessor.cpp
121-
src/io/io_parser_helper.cpp
122-
src/pa/FlexPA_init.cpp
123-
src/pa/FlexPA.cpp
124-
src/pa/FlexPA_acc_point.cpp
125-
src/pa/FlexPA_acc_pattern.cpp
126-
src/pa/FlexPA_row_pattern.cpp
127-
src/pa/FlexPA_unique.cpp
128-
src/pa/FlexPA_graphics.cpp
129-
src/rp/FlexRP_init.cpp
130-
src/rp/FlexRP.cpp
131-
src/rp/FlexRP_prep.cpp
132-
src/distributed/frArchive.cpp
133-
src/distributed/drUpdate.cpp
134-
src/distributed/paUpdate.cpp
135-
src/TritonRoute.cpp
136-
src/MakeTritonRoute.cpp
137-
src/frBaseTypes.cpp
138-
src/DesignCallBack.cpp
61+
add_library(drt_lib
62+
src/gr/FlexGRCMap.cpp
63+
src/gr/FlexGR.cpp
64+
src/gr/FlexGR_end.cpp
65+
src/gr/FlexGRGridGraph.cpp
66+
src/gr/FlexGRGridGraph_maze.cpp
67+
src/gr/FlexGR_init.cpp
68+
src/gr/FlexGR_maze.cpp
69+
src/gr/FlexGR_rq.cpp
70+
src/gr/FlexGR_topo.cpp
71+
src/dr/FlexDR_conn.cpp
72+
src/dr/FlexDR_init.cpp
73+
src/dr/FlexDR.cpp
74+
src/db/drObj/drNet.cpp
75+
src/dr/FlexDR_maze.cpp
76+
src/dr/FlexGridGraph_maze.cpp
77+
src/dr/FlexGridGraph.cpp
78+
src/dr/FlexDR_rq.cpp
79+
src/dr/FlexDR_end.cpp
80+
src/ta/FlexTA_end.cpp
81+
src/ta/FlexTA_init.cpp
82+
src/ta/FlexTA_rq.cpp
83+
src/ta/FlexTA_assign.cpp
84+
src/ta/FlexTA.cpp
85+
src/global.cpp
86+
src/gc/FlexGC_end.cpp
87+
src/gc/FlexGC_rq.cpp
88+
src/gc/FlexGC.cpp
89+
src/gc/FlexGC_init.cpp
90+
src/gc/FlexGC_main.cpp
91+
src/gc/FlexGC_eol.cpp
92+
src/gc/FlexGC_inf.cpp
93+
src/gc/FlexGC_cut.cpp
94+
src/gc/FlexGC_metspc.cpp
95+
src/db/drObj/drAccessPattern.cpp
96+
src/db/drObj/drPin.cpp
97+
src/db/drObj/drShape.cpp
98+
src/db/drObj/drVia.cpp
99+
src/db/infra/frTime_helper.cpp
100+
src/db/infra/frTime.cpp
101+
src/db/infra/KDTree.cpp
102+
src/db/taObj/taShape.cpp
103+
src/db/obj/frShape.cpp
104+
src/db/obj/frInst.cpp
105+
src/db/obj/frVia.cpp
106+
src/db/obj/frAccess.cpp
107+
src/db/obj/frRPin.cpp
108+
src/db/obj/frNode.cpp
109+
src/db/obj/frInstTerm.cpp
110+
src/db/obj/frNet.cpp
111+
src/db/tech/frConstraint.cc
112+
src/db/obj/frMarker.cpp
113+
src/db/tech/frLayer.cc
114+
src/frRegionQuery.cpp
115+
src/io/io_pin.cpp
116+
src/io/io.cpp
117+
src/io/GuideProcessor.cpp
118+
src/io/io_parser_helper.cpp
119+
src/pa/FlexPA_init.cpp
120+
src/pa/FlexPA.cpp
121+
src/pa/FlexPA_acc_point.cpp
122+
src/pa/FlexPA_acc_pattern.cpp
123+
src/pa/FlexPA_row_pattern.cpp
124+
src/pa/FlexPA_unique.cpp
125+
src/rp/FlexRP_init.cpp
126+
src/rp/FlexRP.cpp
127+
src/rp/FlexRP_prep.cpp
128+
src/distributed/frArchive.cpp
129+
src/distributed/drUpdate.cpp
130+
src/distributed/paUpdate.cpp
131+
src/TritonRoute.cpp
132+
src/frBaseTypes.cpp
133+
src/DesignCallBack.cpp
139134
)
140135

141-
target_include_directories(drt
136+
target_include_directories(drt_lib
142137
PUBLIC
143138
include
144139

145140
PRIVATE
146141
src
147142
)
148143

149-
target_link_libraries(drt
144+
target_link_libraries(drt_lib
150145
PUBLIC
151-
gui
152146
odb
153147
stt
154148
OpenSTA
@@ -161,6 +155,28 @@ target_link_libraries(drt
161155
ZLIB::ZLIB
162156
)
163157

158+
target_sources(drt
159+
PRIVATE
160+
src/dr/FlexDR_graphics.cpp
161+
src/ta/FlexTA_graphics.cpp
162+
src/pa/FlexPA_graphics.cpp
163+
src/MakeTritonRoute.cpp
164+
)
165+
166+
target_include_directories(drt
167+
PUBLIC
168+
include
169+
170+
PRIVATE
171+
src
172+
)
173+
174+
target_link_libraries(drt
175+
PUBLIC
176+
drt_lib
177+
gui
178+
)
179+
164180
messages(
165181
TARGET drt
166182
)

src/drt/include/triton_route/TritonRoute.h

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,17 @@ namespace drt {
6969
class frDesign;
7070
class DesignCallBack;
7171
class FlexDR;
72+
class FlexPA;
73+
class FlexTA;
7274
class FlexDRWorker;
7375
class drUpdate;
7476
struct frDebugSettings;
75-
class FlexDR;
7677
struct FlexDRViaData;
7778
class frMarker;
7879
struct RouterConfiguration;
80+
class AbstractPAGraphics;
81+
class AbstractTAGraphics;
82+
class AbstractDRGraphics;
7983

8084
struct ParamStruct
8185
{
@@ -107,13 +111,16 @@ class TritonRoute
107111
public:
108112
TritonRoute();
109113
~TritonRoute();
110-
void init(Tcl_Interp* tcl_interp,
111-
odb::dbDatabase* db,
114+
void init(odb::dbDatabase* db,
112115
utl::Logger* logger,
113116
dst::Distributed* dist,
114-
stt::SteinerTreeBuilder* stt_builder);
117+
stt::SteinerTreeBuilder* stt_builder,
118+
std::unique_ptr<AbstractDRGraphics> dr_graphics,
119+
std::unique_ptr<AbstractPAGraphics> pa_graphics,
120+
std::unique_ptr<AbstractTAGraphics> ta_graphics);
115121

116122
frDesign* getDesign() const { return design_.get(); }
123+
utl::Logger* getLogger() const { return logger_; }
117124
RouterConfiguration* getRouterConfiguration() const
118125
{
119126
return router_cfg_.get();
@@ -221,6 +228,10 @@ class TritonRoute
221228
int results_sz_{0};
222229
unsigned int cloud_sz_{0};
223230
std::optional<boost::asio::thread_pool> dist_pool_;
231+
std::unique_ptr<FlexPA> pa_{nullptr};
232+
std::unique_ptr<AbstractDRGraphics> dr_graphics_{nullptr};
233+
std::unique_ptr<AbstractPAGraphics> pa_graphics_{nullptr};
234+
std::unique_ptr<AbstractTAGraphics> ta_graphics_{nullptr};
224235

225236
void initDesign();
226237
void gr();

src/drt/src/MakeTritonRoute.cpp

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,22 @@
3333

3434
#include "triton_route/MakeTritonRoute.h"
3535

36+
#include "dr/FlexDR_graphics.h"
3637
#include "ord/OpenRoad.hh"
38+
#include "pa/FlexPA_graphics.h"
39+
#include "sta/StaMain.hh"
40+
#include "ta/FlexTA_graphics.h"
3741
#include "triton_route/TritonRoute.h"
3842

43+
namespace sta {
44+
// Tcl files encoded into strings.
45+
extern const char* drt_tcl_inits[];
46+
} // namespace sta
47+
48+
extern "C" {
49+
extern int Drt_Init(Tcl_Interp* interp);
50+
}
51+
3952
namespace ord {
4053

4154
drt::TritonRoute* makeTritonRoute()
@@ -50,11 +63,41 @@ void deleteTritonRoute(drt::TritonRoute* router)
5063

5164
void initTritonRoute(OpenRoad* openroad)
5265
{
53-
openroad->getTritonRoute()->init(openroad->tclInterp(),
54-
openroad->getDb(),
55-
openroad->getLogger(),
56-
openroad->getDistributed(),
57-
openroad->getSteinerTreeBuilder());
66+
// Define swig TCL commands.
67+
auto tcl_interp = openroad->tclInterp();
68+
Drt_Init(tcl_interp);
69+
sta::evalTclInit(tcl_interp, sta::drt_tcl_inits);
70+
71+
drt::TritonRoute* router = openroad->getTritonRoute();
72+
std::unique_ptr<drt::FlexDRGraphics> dr_graphics = nullptr;
73+
std::unique_ptr<drt::FlexPAGraphics> pa_graphics = nullptr;
74+
std::unique_ptr<drt::FlexTAGraphics> ta_graphics = nullptr;
75+
76+
if (drt::FlexDRGraphics::guiActive()) {
77+
dr_graphics
78+
= std::make_unique<drt::FlexDRGraphics>(router->getDebugSettings(),
79+
router->getDesign(),
80+
router->getDb(),
81+
router->getLogger());
82+
83+
pa_graphics = std::make_unique<drt::FlexPAGraphics>(
84+
router->getDebugSettings(),
85+
router->getDesign(),
86+
router->getDb(),
87+
router->getLogger(),
88+
router->getRouterConfiguration());
89+
90+
ta_graphics = std::make_unique<drt::FlexTAGraphics>(
91+
router->getDebugSettings(), router->getDesign(), router->getDb());
92+
}
93+
94+
router->init(openroad->getDb(),
95+
openroad->getLogger(),
96+
openroad->getDistributed(),
97+
openroad->getSteinerTreeBuilder(),
98+
std::move(dr_graphics),
99+
std::move(pa_graphics),
100+
std::move(ta_graphics));
58101
}
59102

60103
} // namespace ord

src/drt/src/TritonRoute-py.i

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
//
3434
///////////////////////////////////////////////////////////////////////////////
3535

36+
%ignore drt::TritonRoute::init;
37+
3638
%{
3739

3840
#include "ord/OpenRoad.hh"
@@ -42,4 +44,4 @@
4244

4345
%include <std_string.i>
4446
%include "../../Exception-py.i"
45-
%include "triton_route/TritonRoute.h"
47+
%include "triton_route/TritonRoute.h"

0 commit comments

Comments
 (0)