From f21d4a3878e2531e3af4930818d9b5968aad9416 Mon Sep 17 00:00:00 2001 From: Matt Liberty Date: Thu, 19 Jun 2025 06:04:53 +0000 Subject: [PATCH] Add initial bazel BUILD file This will live in this fork and not the upstream. Signed-off-by: Matt Liberty --- BUILD | 411 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 411 insertions(+) create mode 100644 BUILD diff --git a/BUILD b/BUILD new file mode 100644 index 00000000..8dad06fa --- /dev/null +++ b/BUILD @@ -0,0 +1,411 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright (c) 2025, The OpenROAD Authors + +load("@rules_hdl//dependency_support/com_github_westes_flex:flex.bzl", "genlex") +load("@rules_hdl//dependency_support/org_gnu_bison:bison.bzl", "genyacc") + +load("//bazel:tcl_encode_sta.bzl", "tcl_encode_sta") +load("//bazel:tcl_wrap_cc.bzl", "tcl_wrap_cc") + +package( + default_visibility = ["//:__subpackages__"], +# features = ["layering_check"], +) + +genlex( + name = "LibExprLex", + src = "liberty/LibExprLex.ll", + out = "liberty/LibExprLex.cc", + prefix = "LibExprLex_", +) + +genyacc( + name = "LibExprParse", + src = "liberty/LibExprParse.yy", + header_out = "liberty/LibExprParse.hh", + prefix = "LibExprParse_", + source_out = "liberty/LibExprParse.cc", +) + +# Liberty Parser +genlex( + name = "LibertyLex", + src = "liberty/LibertyLex.ll", + out = "liberty/LibertyLex.cc", + prefix = "LibertyLex_", +) + +genyacc( + name = "LibertyParser", + src = "liberty/LibertyParse.yy", + extra_outs = ["liberty/LibertyLocation.hh"], + header_out = "liberty/LibertyParse.hh", + prefix = "LibertyParse_", + source_out = "liberty/LibertyParse.cc", +) + +# Spef scan/parse. +genlex( + name = "SpefLex", + src = "parasitics/SpefLex.ll", + out = "parasitics/SpefLex.cc", + prefix = "SpefLex_", +) + +genyacc( + name = "SpefParser", + src = "parasitics/SpefParse.yy", + extra_outs = ["parasitics/SpefLocation.hh"], + header_out = "parasitics/SpefParse.hh", + prefix = "SpefParse_", + source_out = "parasitics/SpefParse.cc", +) + +# Verilog scan/parse. +genlex( + name = "VerilogLex", + src = "verilog/VerilogLex.ll", + out = "verilog/VerilogLex.cc", + prefix = "VerilogLex_", +) + +genyacc( + name = "VerilogParser", + src = "verilog/VerilogParse.yy", + extra_outs = ["verilog/VerilogLocation.hh"], + header_out = "verilog/VerilogParse.hh", + prefix = "VerilogParse_", + source_out = "verilog/VerilogParse.cc", +) + +# sdf scan/parse. +genlex( + name = "SdfLex", + src = "sdf/SdfLex.ll", + out = "sdf/SdfLex.cc", + prefix = "SdfLex_", +) + +genyacc( + name = "SdfParser", + src = "sdf/SdfParse.yy", + extra_outs = ["sdf/SdfLocation.hh"], + header_out = "sdf/SdfParse.hh", + prefix = "SdfParse_", + source_out = "sdf/SdfParse.cc", +) + +genlex( + name = "SaifLex", + src = "power/SaifLex.ll", + out = "power/SaifLex.cc", + prefix = "SaifLex_", +) + +genyacc( + name = "SaifParser", + src = "power/SaifParse.yy", + extra_outs = ["power/SaifLocation.hh"], + header_out = "power/SaifParse.hh", + prefix = "SaifParse_", + source_out = "power/SaifParse.cc", +) + +# The order here is very important as the script to encode these relies on it +tcl_srcs = [ + "tcl/Util.tcl", + "tcl/CmdUtil.tcl", + "tcl/Init.tcl", + "tcl/CmdArgs.tcl", + "tcl/Property.tcl", + "tcl/Sta.tcl", + "tcl/Variables.tcl", + "tcl/Splash.tcl", + "graph/Graph.tcl", + "liberty/Liberty.tcl", + "network/Link.tcl", + "network/Network.tcl", + "network/NetworkEdit.tcl", + "search/Search.tcl", + "dcalc/DelayCalc.tcl", + "parasitics/Parasitics.tcl", + "power/Power.tcl", + "sdc/Sdc.tcl", + "sdf/Sdf.tcl", + "verilog/Verilog.tcl", +] + +exports_files([ + "etc/TclEncode.tcl", +]) + +exported_tcl = [ + "tcl/Util.tcl", + "tcl/CmdUtil.tcl", + "tcl/CmdArgs.tcl", + "tcl/Property.tcl", + "tcl/Splash.tcl", + "tcl/Sta.tcl", + "tcl/Variables.tcl", + "sdc/Sdc.tcl", + "sdf/Sdf.tcl", + "search/Search.tcl", + "dcalc/DelayCalc.tcl", + "graph/Graph.tcl", + "liberty/Liberty.tcl", + "network/Network.tcl", + "network/NetworkEdit.tcl", + "parasitics/Parasitics.tcl", + "power/Power.tcl", +] + +filegroup( + name = "tcl_scripts", + srcs = exported_tcl, + visibility = [ + "//:__subpackages__", + ], +) + +tcl_encode_sta( + name = "StaTclInitVar", + srcs = tcl_srcs, + char_array_name = "tcl_inits", +) + +genrule( + name = "StaConfig", + srcs = [], + outs = ["util/StaConfig.hh"], + cmd = """echo -e ' + #define STA_VERSION "2.2.1" + #define STA_GIT_SHA1 "53d4d57cb8550d2ceed18adad75b73bba7858f4f" + #define CUDD 0 + #define SSTA 0 + #define ZLIB_FOUND' > \"$@\" + """, + visibility = ["//:__subpackages__"], +) + +filegroup( + name = "sta_swig_files", + srcs = [ + "app/StaApp.i", + "dcalc/DelayCalc.i", + "graph/Graph.i", + "liberty/Liberty.i", + "network/Network.i", + "network/NetworkEdit.i", + "parasitics/Parasitics.i", + "power/Power.i", + "sdc/Sdc.i", + "sdf/Sdf.i", + "search/Property.i", + "search/Search.i", + "spice/WriteSpice.i", + "tcl/Exception.i", + "tcl/StaTclTypes.i", + "util/Util.i", + "verilog/Verilog.i", + ], + visibility = ["//:__subpackages__"], +) + +tcl_wrap_cc( + name = "StaApp", + srcs = [ + ":sta_swig_files", + ], + namespace_prefix = "sta", + root_swig_src = "app/StaApp.i", + swig_includes = [ + ".", + ], +) + +parser_cc = [ + # Liberty Expression Parser + ":liberty/LibExprParse.cc", + ":liberty/LibExprLex.cc", + # Liberty Parser + ":liberty/LibertyLex.cc", + ":liberty/LibertyParse.cc", + # Spef scan/parse. + ":parasitics/SpefLex.cc", + ":parasitics/SpefParse.cc", + # Verilog scan/parse. + ":verilog/VerilogLex.cc", + ":verilog/VerilogParse.cc", + # sdf scan/parse. + ":sdf/SdfLex.cc", + ":sdf/SdfParse.cc", + # Saif scan/parse. + ":power/SaifLex.cc", + ":power/SaifParse.cc", +] + +parser_headers = [ + # Liberty Expression Parser + ":liberty/LibExprParse.hh", + # Liberty Parser + ":liberty/LibertyParse.hh", + ":liberty/LibertyLocation.hh", + # Spef scan/parse. + ":parasitics/SpefParse.hh", + ":parasitics/SpefLocation.hh", + # Verilog scan/parse. + ":verilog/VerilogParse.hh", + ":verilog/VerilogLocation.hh", + # sdf scan/parse. + ":sdf/SdfParse.hh", + ":sdf/SdfLocation.hh", + # Saif scan/parse. + ":power/SaifParse.hh", + ":power/SaifLocation.hh", +] + +cc_binary( + name = "opensta", + srcs = [ + "app/Main.cc", + ":StaApp", + ":StaTclInitVar", + "//bazel:runfiles", + ], + copts = [ + "-Wno-error", + "-Wall", + "-Wextra", + "-pedantic", + "-Wno-cast-qual", # typically from TCL swigging + "-Wno-missing-braces", # typically from TCL swigging + "-Wredundant-decls", + "-Wformat-security", + "-Wno-unused-parameter", + "-Wno-sign-compare", + ], + features = ["-use_header_modules"], + includes = [ + "", + "dcalc", + "include/sta", + "util", + ], + malloc = "@tcmalloc//tcmalloc", + visibility = ["//visibility:public"], + deps = [ + ":opensta_lib", + "@rules_cc//cc/runfiles", + "@tk_tcl//:tcl", + ], +) + +cc_library( + name = "opensta_lib", + srcs = parser_cc + parser_headers + glob([ + "dcalc/*.hh", + "util/*.hh", + "parasitics/*.hh", + "liberty/*.hh", + "sdc/*.hh", + "sdf/*.hh", + "search/*.hh", + "verilog/*.hh", + "power/*.hh", + "spice/*.hh", + ]) + glob( + include = [ + "app/StaMain.cc", + "dcalc/*.cc", + "graph/*.cc", + "network/*.cc", + "util/*.cc", + "parasitics/*.cc", + "liberty/*.cc", + "sdc/*.cc", + "sdf/*.cc", + "search/*.cc", + "verilog/*.cc", + "power/*.cc", + "spice/*.cc", + "tcl/*.cc", + ], + exclude = [ + "graph/Delay.cc", + "liberty/LibertyExt.cc", + "util/Machine*.cc", + ], + ) + [ + "util/Machine.cc", + ":StaConfig", + ], + #+ select({ + # "@bazel_tools//src/conditions:windows": ["util/MachineWin32.cc"], + # "@bazel_tools//src/conditions:darwin": ["util/MachineApple.cc"], + # "@bazel_tools//src/conditions:linux": ["util/MachineLinux.cc"], + # "//conditions:default": ["util/MachineUnknown.cc"], + # }) + hdrs = glob( + include = ["include/sta/*.hh"], + ) + [ + # Required for swig + "search/Tag.hh", + "dcalc/ArcDcalcWaveforms.hh", + "power/Power.hh", + "power/VcdReader.hh", + "power/SaifReader.hh", + "sdf/SdfReader.hh", + "sdf/ReportAnnotation.hh", + "sdf/SdfWriter.hh", + "search/Levelize.hh", + "search/ReportPath.hh", + "spice/WritePathSpice.hh", + "dcalc/PrimaDelayCalc.hh", + ], + copts = [ + "-Wno-error", + "-Wall", + "-Wextra", + "-pedantic", + "-Wno-cast-qual", # typically from TCL swigging + "-Wno-missing-braces", # typically from TCL swigging + "-Wredundant-decls", + "-Wformat-security", + "-Wno-unused-parameter", + "-Wno-sign-compare", + "-fopenmp", + ], + features = [ + "-use_header_modules", + ], + includes = [ + ".", + "dcalc", + "include", + "include/sta", + "liberty", + "parasitics", + "power", + "sdf", + "util", + "verilog", + ], + textual_hdrs = ["util/MachineLinux.cc"], + visibility = ["//:__subpackages__"], + deps = [ + "@cudd", + "@eigen", + "@openmp", + "@rules_flex//flex:current_flex_toolchain", + "@tk_tcl//:tcl", + "@zlib", + ], +) + +filegroup( + name = "tcl_util", + srcs = [ + "tcl/Util.tcl", + ], + visibility = ["//visibility:public"], +)