11# SPDX-License-Identifier: BSD-3-Clause
22# Copyright (c) 2025-2025, The OpenROAD Authors
33
4+ load ("@bazel_skylib//rules:build_test.bzl" , "build_test" )
45load ("@bazel_skylib//rules:common_settings.bzl" , "string_flag" )
56load ("@rules_cc//cc:cc_binary.bzl" , "cc_binary" )
67load ("@rules_cc//cc:cc_library.bzl" , "cc_library" )
@@ -98,6 +99,7 @@ OPENROAD_LIBRARY_DEPS = [
9899 "//src/exa:ui" ,
99100 "//src/fin" ,
100101 "//src/gpl" ,
102+ "//src/gpl:ui" ,
101103 "//src/grt" ,
102104 "//src/grt:ui" ,
103105 "//src/ifp" ,
@@ -128,6 +130,8 @@ OPENROAD_LIBRARY_DEPS = [
128130 "//src/rsz:ui" ,
129131 "//src/stt" ,
130132 "//src/stt:ui" ,
133+ "//src/syn" ,
134+ "//src/syn:ui" ,
131135 "//src/tap" ,
132136 "//src/tap:ui" ,
133137 "//src/upf" ,
@@ -138,12 +142,7 @@ OPENROAD_LIBRARY_DEPS = [
138142 "//src/web:ui" ,
139143 "@abc" ,
140144 ":ord" ,
141- ] + select (
142- {
143- ":platform_cli" : ["//src/gui" ],
144- ":platform_gui" : ["//src/gui:gui_qt" ],
145- },
146- )
145+ ]
147146
148147# Flags applied to top-level OpenROAD targets only. Flags that apply
149148# globally to every cc_* target (-Wall, -Wextra, -Wno-sign-compare,
@@ -190,46 +189,113 @@ cc_library(
190189 ],
191190)
192191
192+ # Deps shared by :openroad and :openroad-qt. Kept as a Starlark list
193+ # rather than a cc_library wrapper because layering_check is enabled
194+ # package-wide: a deps-only cc_library does not re-export its deps'
195+ # headers to consumers, so direct binary deps are what each Main.cc
196+ # include needs to see.
197+ OPENROAD_MAIN_DEPS = [
198+ ":openroad_version" ,
199+ ":opt_notification" ,
200+ ":ord" ,
201+ ":tcl_readline_setup" ,
202+ "//bazel:tcl_library_init" ,
203+ "//src/cut" ,
204+ "//src/sta:opensta_lib" ,
205+ "//src/utl" ,
206+ "//src/web" ,
207+ "@abseil-cpp//absl/base:no_destructor" ,
208+ "@boost.stacktrace" ,
209+ "@rules_cc//cc/runfiles" , # sets BAZEL_CURRENT_REPOSITORY
210+ "@tcl_lang//:tcl" ,
211+ ]
212+
193213cc_binary (
194214 name = "openroad" ,
195215 srcs = [
196216 "src/Main.cc" ,
197217 ],
198218 copts = OPENROAD_COPTS ,
219+ defines = OPENROAD_DEFINES ,
199220 features = ["-use_header_modules" ],
200221 malloc = select ({
201222 "@platforms//os:linux" : "@tcmalloc//tcmalloc" ,
202223 "@platforms//os:macos" : "@bazel_tools//tools/cpp:malloc" ,
203224 }),
204225 visibility = ["//visibility:public" ],
226+ deps = OPENROAD_MAIN_DEPS + select (
227+ {
228+ ":platform_cli" : [
229+ ":openroad_lib" ,
230+ "//src/gui" ,
231+ "//src/gui:gui_stub" ,
232+ ],
233+ ":platform_gui" : [
234+ ":openroad_lib_qt" ,
235+ "//src/gui:gui_qt" ,
236+ ],
237+ },
238+ ),
239+ )
240+
241+ # Qt GUI variant. Build explicitly when the interactive GUI is wanted:
242+ # bazelisk build //:openroad-qt
243+ # Additive to the existing `--//:platform=gui //:openroad` flag path —
244+ # this target is preferable for ad-hoc GUI builds because it does not
245+ # invalidate `:openroad`'s cache the way flipping the flag does.
246+ cc_binary (
247+ name = "openroad-qt" ,
248+ srcs = [
249+ "src/Main.cc" ,
250+ ],
251+ copts = OPENROAD_COPTS ,
252+ defines = OPENROAD_DEFINES ,
253+ features = ["-use_header_modules" ],
254+ malloc = select ({
255+ "@platforms//os:linux" : "@tcmalloc//tcmalloc" ,
256+ "@platforms//os:macos" : "@bazel_tools//tools/cpp:malloc" ,
257+ }),
258+ visibility = ["//visibility:public" ],
259+ deps = OPENROAD_MAIN_DEPS + [
260+ ":openroad_lib_qt" ,
261+ "//src/gui:gui_qt" ,
262+ ],
263+ )
264+
265+ # CLI variant: the default. What downstream rule libraries pull as a
266+ # build-time tool, and what `bazelisk build //:openroad` produces.
267+ cc_library (
268+ name = "openroad_lib" ,
269+ srcs = [
270+ "src/Design.cc" ,
271+ "src/OpenRoad.cc" ,
272+ "src/Tech.cc" ,
273+ "src/Timing.cc" ,
274+ ":openroad_swig" ,
275+ ":openroad_tcl" ,
276+ ],
277+ copts = OPENROAD_COPTS ,
278+ defines = OPENROAD_DEFINES + ["BUILD_GUI=false" ],
279+ features = ["-use_header_modules" ],
280+ includes = [
281+ "include" ,
282+ ],
283+ visibility = ["//:__subpackages__" ],
205284 deps = [
206- ":openroad_lib" ,
207- ":openroad_version" ,
208- ":opt_notification" ,
209- ":ord" ,
210- ":tcl_readline_setup" ,
211- "//bazel:tcl_library_init" ,
212- "//src/cut" ,
213285 "//src/gui" ,
214286 "//src/sta:opensta_lib" ,
215- "//src/utl" ,
216- "//src/web" ,
217- "@abseil-cpp//absl/base:no_destructor" ,
287+ "@abseil-cpp//absl/base:core_headers" ,
288+ "@abseil-cpp//absl/synchronization" ,
218289 "@boost.stacktrace" ,
219- "@rules_cc//cc/runfiles" , # sets BAZEL_CURRENT_REPOSITORY
220290 "@tcl_lang//:tcl" ,
221- ],
222- )
223-
224- GUI_BUILD_FLAGS = select (
225- {
226- ":platform_cli" : ["BUILD_GUI=false" ],
227- ":platform_gui" : ["BUILD_GUI=true" ],
228- },
291+ ] + OPENROAD_LIBRARY_DEPS ,
229292)
230293
294+ # Qt variant: same sources, linked against the Qt GUI implementation.
295+ # Used by :openroad-qt, and by :openroad when --//:platform=gui is set.
296+ # Compiled separately (different `BUILD_GUI` define + different gui dep).
231297cc_library (
232- name = "openroad_lib " ,
298+ name = "openroad_lib_qt " ,
233299 srcs = [
234300 "src/Design.cc" ,
235301 "src/OpenRoad.cc" ,
@@ -239,13 +305,14 @@ cc_library(
239305 ":openroad_tcl" ,
240306 ],
241307 copts = OPENROAD_COPTS ,
242- defines = OPENROAD_DEFINES + GUI_BUILD_FLAGS ,
308+ defines = OPENROAD_DEFINES + [ "BUILD_GUI=true" ] ,
243309 features = ["-use_header_modules" ],
244310 includes = [
245311 "include" ,
246312 ],
247313 visibility = ["//:__subpackages__" ],
248314 deps = [
315+ "//src/gui:gui_qt" ,
249316 "//src/sta:opensta_lib" ,
250317 "@abseil-cpp//absl/base:core_headers" ,
251318 "@abseil-cpp//absl/synchronization" ,
@@ -347,6 +414,7 @@ cc_binary(
347414 "//src/gpl" ,
348415 "//src/grt" ,
349416 "//src/gui" ,
417+ "//src/gui:gui_stub" ,
350418 "//src/ifp" ,
351419 "//src/odb/src/db" ,
352420 "//src/par" ,
@@ -478,6 +546,14 @@ sh_test(
478546 tags = ["local" ],
479547)
480548
549+ # Make sure the Qt GUI variant keeps building. :openroad is exercised by
550+ # downstream rule libraries that pull it as a tool; :openroad-qt has no
551+ # such consumer in CI, so a build_test pins its compilability.
552+ build_test (
553+ name = "openroad_qt_build_test" ,
554+ targets = [":openroad-qt" ],
555+ )
556+
481557# ---------------------------------------------------------------------------
482558# Lint & tidy targets
483559#
0 commit comments