diff --git a/.bazelignore b/.bazelignore index 7bfdcf03d8..819d9bf3eb 100644 --- a/.bazelignore +++ b/.bazelignore @@ -6,3 +6,4 @@ jenkins/ docs/ +tmp diff --git a/.bazelrc b/.bazelrc index b1d0bd32db..1d550b988f 100644 --- a/.bazelrc +++ b/.bazelrc @@ -1,2 +1,22 @@ +# yosys 0.64 is not yet in BCR; add the unmerged PR's fork as a fallback +# registry until bazelbuild/bazel-central-registry#8862 lands. BCR is +# listed first so all other modules resolve from the official source; +# the fork is only consulted for modules/versions BCR doesn't carry yet. +# The commit hash makes the fork reference immutable. Mirrors what +# bazel-orfs/.bazelrc does upstream — ORFS root has its own .bazelrc so +# the upstream lines don't propagate automatically. +common --registry=https://bcr.bazel.build/ +common --registry=https://raw.githubusercontent.com/oharboe/bazel-central-registry/0586b398db6edd245da97cbec29e26c5e2a808d7/ + build --incompatible_strict_action_env +build --cxxopt "-std=c++20" --host_cxxopt "-std=c++20" + +# Don't track MODULE.bazel.lock. Resolved versions ride along with the +# pinned BCR + git_override(commit=…) coordinates in MODULE.bazel and +# downstream cache hits are what we actually care about. Tracking the +# lockfile just means every bazel-orfs / yosys / openroad bump produces +# a 1000-line lock diff that buries the real change. Matches what +# bazel-orfs itself does (its own .bazelrc:7). +common --lockfile_mode=off + try-import %workspace%/user.bazelrc diff --git a/.dockerignore b/.dockerignore index 971b76fa27..38eaa8132f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,7 @@ # Build working directories +tools/OpenROAD/build/ +tools/yosys-slang/build/ +tools/kepler-formal/build/ # Build files build_openroad.log diff --git a/.github/workflows/github-actions-on-label-create.yml b/.github/workflows/github-actions-on-label-create.yml index 4e083dac8a..6b809642b1 100644 --- a/.github/workflows/github-actions-on-label-create.yml +++ b/.github/workflows/github-actions-on-label-create.yml @@ -51,11 +51,37 @@ jobs: deployToken: ${{ secrets.STAGING_GITHUB_TOKEN }} force: true + - id: resolve_key + name: Compute per-user secret key + env: + PR_AUTHOR: ${{ github.event.pull_request.user.login }} + run: | + key=$(echo "$PR_AUTHOR" | tr 'a-z-' 'A-Z_') + echo "key=$key" >> "$GITHUB_OUTPUT" + + - id: resolve_token + name: Pick per-user PAT or fall back to bot token + env: + USER_PAT: ${{ secrets[format('PAT_{0}', steps.resolve_key.outputs.key)] }} + BOT_TOKEN: ${{ secrets.STAGING_GITHUB_TOKEN }} + run: | + if [ -n "$USER_PAT" ]; then + echo "::add-mask::$USER_PAT" + echo "token=$USER_PAT" >> "$GITHUB_OUTPUT" + echo "source=user-pat" >> "$GITHUB_OUTPUT" + echo "Using per-user PAT for PR creation" + else + echo "::add-mask::$BOT_TOKEN" + echo "token=$BOT_TOKEN" >> "$GITHUB_OUTPUT" + echo "source=bot-fallback" >> "$GITHUB_OUTPUT" + echo "No per-user PAT found; falling back to bot token" + fi + - id: send_pr name: Create PR if needed. uses: The-OpenROAD-Project/actions/send_pr@main env: - STAGING_GITHUB_TOKEN: ${{ secrets.STAGING_GITHUB_TOKEN }} + STAGING_GITHUB_TOKEN: ${{ steps.resolve_token.outputs.token }} - name: Linking to PR using deployment. uses: The-OpenROAD-Project/actions/link_pr@main diff --git a/.gitignore b/.gitignore index 37ebf3fa79..f60309e549 100644 --- a/.gitignore +++ b/.gitignore @@ -102,6 +102,8 @@ bazel-bin bazel-out bazel-OpenROAD-flow-scripts bazel-testlogs +MODULE.bazel.lock # python venv venv/ +tmp/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000000..f4cb490535 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,5 @@ +# OpenROAD-flow-scripts (ORFS) agent context + +See `README.md` for the general ORFS guide. + +The OpenROAD (OR) engine source resides in `tools/OpenROAD/` (git submodule). For C++/Tcl development, refer to `tools/OpenROAD/AGENTS.md`. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 120000 index 0000000000..47dc3e3d86 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file diff --git a/MODULE.bazel b/MODULE.bazel index 227f8f7f3d..1d21ea2f79 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -5,17 +5,83 @@ module( version = "0.0.1", ) -bazel_dep(name = "bazel-orfs") +# --- Regular dependencies (propagated to downstream consumers) --- + +bazel_dep(name = "rules_python", version = "1.8.5") +bazel_dep(name = "rules_shell", version = "0.6.1") + +# --- Dev dependencies (only honoured when @orfs is the root module) --- +# +# When @orfs is consumed as a non-root dep (e.g. by tools/OpenROAD), the +# downstream module brings its own openroad/qt-bazel/bazel-orfs/yosys-slang +# pins and orfs.default() configuration. Marking everything below as +# dev_dependency = True makes those declarations no-ops in that case, so +# our MODULE.bazel doesn't need to be patched at non-root consumption +# time. + +bazel_dep(name = "toolchains_llvm", version = "1.5.0", dev_dependency = True) +bazel_dep(name = "openroad", dev_dependency = True) +local_path_override( + module_name = "openroad", + path = "tools/OpenROAD", +) + +bazel_dep(name = "qt-bazel", dev_dependency = True) +git_override( + module_name = "qt-bazel", + commit = "886104974c2fd72439f2c33b5deebf0fe4649df7", + remote = "https://github.com/The-OpenROAD-Project/qt_bazel_prebuilts", +) + +bazel_dep(name = "bazel-orfs", dev_dependency = True) +bazel_dep(name = "bazel-orfs-verilog", dev_dependency = True) + +BAZEL_ORFS_COMMIT = "6ebadeb4be5c9ada103081c9a5e668c014126616" + +BAZEL_ORFS_REMOTE = "https://github.com/The-OpenROAD-Project/bazel-orfs.git" # To bump version, run: bazelisk run @bazel-orfs//:bump git_override( module_name = "bazel-orfs", - commit = "f8a4b694b37c8f5322323eba9a9ae37f9541ee17", - remote = "https://github.com/The-OpenROAD-Project/bazel-orfs.git", + commit = BAZEL_ORFS_COMMIT, + remote = BAZEL_ORFS_REMOTE, ) -bazel_dep(name = "rules_python", version = "1.8.5") -bazel_dep(name = "rules_shell", version = "0.6.1") +git_override( + module_name = "bazel-orfs-verilog", + commit = BAZEL_ORFS_COMMIT, + remote = BAZEL_ORFS_REMOTE, + strip_prefix = "verilog", +) + +# yosys-slang is not on BCR. Pin to a commit on povik/yosys-slang master +# that has the upstream Bazel build (povik/yosys-slang#310) and the +# slang.so visibility fix (povik/yosys-slang#311). Submodules pull in +# vendored slang and fmt sources. +bazel_dep(name = "yosys-slang", dev_dependency = True) +git_override( + module_name = "yosys-slang", + commit = "7753ea70431d85929292b90c33b32f6dbdb3b048", + init_submodules = True, + remote = "https://github.com/povik/yosys-slang.git", +) + +# --- Extensions --- + +llvm = use_extension( + "@toolchains_llvm//toolchain/extensions:llvm.bzl", + "llvm", + dev_dependency = True, +) +llvm.toolchain( + llvm_version = "20.1.8", +) +use_repo(llvm, "llvm_toolchain") + +register_toolchains( + "@llvm_toolchain//:all", + dev_dependency = True, +) python = use_extension("@rules_python//python/extensions:python.bzl", "python") python.toolchain( @@ -31,16 +97,33 @@ pip.parse( ) use_repo(pip, "orfs-pip") -orfs = use_extension("@bazel-orfs//:extension.bzl", "orfs_repositories") - -# To bump version, run: bazelisk run @bazel-orfs//:bump +orfs = use_extension( + "@bazel-orfs//:extension.bzl", + "orfs_repositories", + dev_dependency = True, +) orfs.default( - image = "docker.io/openroad/orfs:v3.0-3273-gedf3d6bf", - # Use local files instead of docker image - makefile = "//flow:makefile", - makefile_yosys = "//flow:makefile_yosys", - pdk = "//flow:asap7", - sha256 = "f5692c6325ebcf27cc348e033355ec95c82c35ace1af7e72a0d352624ada143e", -) -use_repo(orfs, "com_github_nixos_patchelf_download") -use_repo(orfs, "docker_orfs") + # Expose the yosys-slang plugin via YOSYS_PLUGIN_PATH so + # SYNTH_HDL_FRONTEND=slang works for ibex, cva6, uart, etc. + yosys_plugins = ["@yosys-slang//src/yosys_plugin:slang.so"], +) +use_repo(orfs, "config") +use_repo(orfs, "gnumake") +use_repo(orfs, "orfs_variable_metadata") + +# Auto-generate orfs_flow() targets from config.mk files. +# See flow/README.md for usage. +orfs_designs = use_repo_rule("@bazel-orfs//private:designs.bzl", "orfs_designs") + +orfs_designs( + name = "orfs_designs", + designs_dir = "//flow/designs:BUILD", + platforms = [ + "asap7", + "gf180", + "ihp-sg13g2", + "nangate45", + "sky130hd", + "sky130hs", + ], +) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock deleted file mode 100644 index ffe386712a..0000000000 --- a/MODULE.bazel.lock +++ /dev/null @@ -1,4159 +0,0 @@ -{ - "lockFileVersion": 13, - "registryFileHashes": { - "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", - "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", - "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/MODULE.bazel": "70390338f7a5106231d20620712f7cccb659cd0e9d073d1991c038eb9fc57589", - "https://bcr.bazel.build/modules/abseil-cpp/20230125.1/MODULE.bazel": "89047429cb0207707b2dface14ba7f8df85273d484c2572755be4bab7ce9c3a0", - "https://bcr.bazel.build/modules/abseil-cpp/20230802.0.bcr.1/MODULE.bazel": "1c8cec495288dccd14fdae6e3f95f772c1c91857047a098fad772034264cc8cb", - "https://bcr.bazel.build/modules/abseil-cpp/20230802.0/MODULE.bazel": "d253ae36a8bd9ee3c5955384096ccb6baf16a1b1e93e858370da0a3b94f77c16", - "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/MODULE.bazel": "fa92e2eb41a04df73cdabeec37107316f7e5272650f81d6cc096418fe647b915", - "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/MODULE.bazel": "37bcdb4440fbb61df6a1c296ae01b327f19e9bb521f9b8e26ec854b6f97309ed", - "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", - "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", - "https://bcr.bazel.build/modules/apple_support/1.5.0/source.json": "eb98a7627c0bc486b57f598ad8da50f6625d974c8f723e9ea71bd39f709c9862", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.8.1/MODULE.bazel": "812d2dd42f65dca362152101fbec418029cc8fd34cbad1a2fde905383d705838", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.8.1/source.json": "95a6b56904e2d8bfea164dc6c98ccafe8cb75cb0623cb6ef5b3cfb15fdddabd6", - "https://bcr.bazel.build/modules/aspect_rules_js/2.1.3/MODULE.bazel": "47cc48eec374d69dced3cf9b9e5926beac2f927441acfb1a3568bbb709b25666", - "https://bcr.bazel.build/modules/aspect_rules_js/2.1.3/source.json": "6b0fe67780c101430be087381b7a79d75eeebe1a1eae6a2cee937713603634ac", - "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", - "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", - "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d", - "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", - "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", - "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", - "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", - "https://bcr.bazel.build/modules/bazel_features/1.21.0/source.json": "3e8379efaaef53ce35b7b8ba419df829315a880cb0a030e5bb45c96d6d5ecb5f", - "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", - "https://bcr.bazel.build/modules/bazel_features/1.9.0/MODULE.bazel": "885151d58d90d8d9c811eb75e3288c11f850e1d6b481a8c9f766adee4712358b", - "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", - "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e", - "https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686", - "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a", - "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5", - "https://bcr.bazel.build/modules/bazel_skylib/1.4.1/MODULE.bazel": "a0dcb779424be33100dcae821e9e27e4f2901d9dfd5333efe5ac6a8d7ab75e1d", - "https://bcr.bazel.build/modules/bazel_skylib/1.4.2/MODULE.bazel": "3bd40978e7a1fac911d5989e6b09d8f64921865a45822d8b09e815eaa726a651", - "https://bcr.bazel.build/modules/bazel_skylib/1.5.0/MODULE.bazel": "32880f5e2945ce6a03d1fbd588e9198c0a959bb42297b2cfaf1685b7bc32e138", - "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917", - "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", - "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", - "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953", - "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", - "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", - "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", - "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", - "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", - "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/source.json": "41e9e129f80d8c8bf103a7acc337b76e54fad1214ac0a7084bf24f4cd924b8b4", - "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", - "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", - "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", - "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", - "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", - "https://bcr.bazel.build/modules/platforms/0.0.10/source.json": "f22828ff4cf021a6b577f1bf6341cb9dcd7965092a439f64fc1bb3b7a5ae4bd5", - "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", - "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", - "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", - "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814", - "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d", - "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", - "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", - "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", - "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", - "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92", - "https://bcr.bazel.build/modules/protobuf/29.0-rc3/source.json": "c16a6488fb279ef578da7098e605082d72ed85fc8d843eaae81e7d27d0f4625d", - "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", - "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858", - "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e", - "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/source.json": "be4789e951dd5301282729fe3d4938995dc4c1a81c2ff150afc9f1b0504c6022", - "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206", - "https://bcr.bazel.build/modules/re2/2023-09-01/source.json": "e044ce89c2883cd957a2969a43e79f7752f9656f6b20050b62f90ede21ec6eb4", - "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8", - "https://bcr.bazel.build/modules/rules_android/0.1.1/source.json": "e6986b41626ee10bdc864937ffb6d6bf275bb5b9c65120e6137d56e6331f089e", - "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", - "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002", - "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191", - "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc", - "https://bcr.bazel.build/modules/rules_cc/0.0.16/MODULE.bazel": "7661303b8fc1b4d7f532e54e9d6565771fea666fbdf839e0a86affcd02defe87", - "https://bcr.bazel.build/modules/rules_cc/0.0.16/source.json": "227e83737046aa4f50015da48e98e0d8ab42fd0ec74d8d653b6cc9f9a357f200", - "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c", - "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f", - "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", - "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", - "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", - "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", - "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/source.json": "c8b1e2c717646f1702290959a3302a178fb639d987ab61d548105019f11e527e", - "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", - "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", - "https://bcr.bazel.build/modules/rules_java/6.3.0/MODULE.bazel": "a97c7678c19f236a956ad260d59c86e10a463badb7eb2eda787490f4c969b963", - "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31", - "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a", - "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6", - "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab", - "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", - "https://bcr.bazel.build/modules/rules_java/7.6.5/MODULE.bazel": "481164be5e02e4cab6e77a36927683263be56b7e36fef918b458d7a8a1ebadb1", - "https://bcr.bazel.build/modules/rules_java/8.3.2/MODULE.bazel": "7336d5511ad5af0b8615fdc7477535a2e4e723a357b6713af439fe8cf0195017", - "https://bcr.bazel.build/modules/rules_java/8.5.1/MODULE.bazel": "d8a9e38cc5228881f7055a6079f6f7821a073df3744d441978e7a43e20226939", - "https://bcr.bazel.build/modules/rules_java/8.5.1/source.json": "db1a77d81b059e0f84985db67a22f3f579a529a86b7997605be3d214a0abe38e", - "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", - "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", - "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036", - "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0", - "https://bcr.bazel.build/modules/rules_jvm_external/6.3/source.json": "6f5f5a5a4419ae4e37c35a5bb0a6ae657ed40b7abc5a5189111b47fcebe43197", - "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3", - "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5", - "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", - "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", - "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", - "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", - "https://bcr.bazel.build/modules/rules_nodejs/6.3.0/MODULE.bazel": "45345e4aba35dd6e4701c1eebf5a4e67af4ed708def9ebcdc6027585b34ee52d", - "https://bcr.bazel.build/modules/rules_nodejs/6.3.0/source.json": "1254ffd8d0d908a19c67add7fb5e2a1f604df133bc5d206425264293e2e537fc", - "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", - "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", - "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", - "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", - "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", - "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", - "https://bcr.bazel.build/modules/rules_proto/6.0.2/source.json": "17a2e195f56cb28d6bbf763e49973d13890487c6945311ed141e196fb660426d", - "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", - "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7", - "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300", - "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382", - "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", - "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", - "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", - "https://bcr.bazel.build/modules/rules_python/1.2.0/MODULE.bazel": "5aeeb48b2a6c19d668b48adf2b8a2b209a6310c230db0ce77450f148a89846e4", - "https://bcr.bazel.build/modules/rules_python/1.2.0/source.json": "5b7892685c9a843526fd5a31e7d7a93eb819c59fd7b7fc444b5b143558e1b073", - "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", - "https://bcr.bazel.build/modules/rules_shell/0.6.1/MODULE.bazel": "72e76b0eea4e81611ef5452aa82b3da34caca0c8b7b5c0c9584338aa93bae26b", - "https://bcr.bazel.build/modules/rules_shell/0.6.1/source.json": "20ec05cd5e592055e214b2da8ccb283c7f2a421ea0dc2acbf1aa792e11c03d0c", - "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", - "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", - "https://bcr.bazel.build/modules/stardoc/0.6.2/MODULE.bazel": "7060193196395f5dd668eda046ccbeacebfd98efc77fed418dbe2b82ffaa39fd", - "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", - "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5", - "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", - "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", - "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", - "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", - "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79", - "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d", - "https://bcr.bazel.build/modules/zlib/1.3.1/MODULE.bazel": "751c9940dcfe869f5f7274e1295422a34623555916eb98c174c1e945594bf198" - }, - "selectedYankedVersions": {}, - "moduleExtensions": { - "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { - "general": { - "bzlTransitiveDigest": "PjIds3feoYE8SGbbIq2SFTZy3zmxeO2tQevJZNDo7iY=", - "usagesDigest": "+hz7IHWN6A1oVJJWNDB6yZRG+RYhF76wAYItpAeIUIg=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "local_config_apple_cc_toolchains": { - "bzlFile": "@@apple_support~//crosstool:setup.bzl", - "ruleClassName": "_apple_cc_autoconf_toolchains", - "attributes": {} - }, - "local_config_apple_cc": { - "bzlFile": "@@apple_support~//crosstool:setup.bzl", - "ruleClassName": "_apple_cc_autoconf", - "attributes": {} - } - }, - "recordedRepoMappingEntries": [ - [ - "apple_support~", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@aspect_bazel_lib~//lib:extensions.bzl%toolchains": { - "general": { - "bzlTransitiveDigest": "7dUTNg3iBL3n4jGiBJEkQIvlejRjH/FAR+4XLx1N6Ug=", - "usagesDigest": "G7+soeEmZ7LLgLaiMnIUSm/lpOSfIJkTK5CMBT/YMl4=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "copy_directory_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "copy_directory_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "copy_directory_freebsd_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "freebsd_amd64" - } - }, - "copy_directory_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "copy_directory_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "copy_directory_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "windows_amd64" - } - }, - "copy_directory_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_toolchains_repo", - "attributes": { - "user_repository_name": "copy_directory" - } - }, - "copy_to_directory_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "copy_to_directory_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "copy_to_directory_freebsd_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "freebsd_amd64" - } - }, - "copy_to_directory_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "copy_to_directory_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "copy_to_directory_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "windows_amd64" - } - }, - "copy_to_directory_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_toolchains_repo", - "attributes": { - "user_repository_name": "copy_to_directory" - } - }, - "jq_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "darwin_amd64", - "version": "1.7" - } - }, - "jq_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "darwin_arm64", - "version": "1.7" - } - }, - "jq_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "linux_amd64", - "version": "1.7" - } - }, - "jq_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "linux_arm64", - "version": "1.7" - } - }, - "jq_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "windows_amd64", - "version": "1.7" - } - }, - "jq": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_host_alias_repo", - "attributes": {} - }, - "jq_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_toolchains_repo", - "attributes": { - "user_repository_name": "jq" - } - }, - "yq_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "darwin_amd64", - "version": "4.25.2" - } - }, - "yq_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "darwin_arm64", - "version": "4.25.2" - } - }, - "yq_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "linux_amd64", - "version": "4.25.2" - } - }, - "yq_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "linux_arm64", - "version": "4.25.2" - } - }, - "yq_linux_s390x": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "linux_s390x", - "version": "4.25.2" - } - }, - "yq_linux_ppc64le": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "linux_ppc64le", - "version": "4.25.2" - } - }, - "yq_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "windows_amd64", - "version": "4.25.2" - } - }, - "yq": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_host_alias_repo", - "attributes": {} - }, - "yq_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_toolchains_repo", - "attributes": { - "user_repository_name": "yq" - } - }, - "coreutils_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "darwin_amd64", - "version": "0.0.26" - } - }, - "coreutils_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "darwin_arm64", - "version": "0.0.26" - } - }, - "coreutils_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "linux_amd64", - "version": "0.0.26" - } - }, - "coreutils_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "linux_arm64", - "version": "0.0.26" - } - }, - "coreutils_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "windows_amd64", - "version": "0.0.26" - } - }, - "coreutils_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_toolchains_repo", - "attributes": { - "user_repository_name": "coreutils" - } - }, - "bsd_tar_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "bsd_tar_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "bsd_tar_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "bsd_tar_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "bsd_tar_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "windows_amd64" - } - }, - "bsd_tar_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "tar_toolchains_repo", - "attributes": { - "user_repository_name": "bsd_tar" - } - }, - "zstd_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_binary_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "zstd_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_binary_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "zstd_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_binary_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "zstd_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_binary_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "zstd_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_toolchains_repo", - "attributes": { - "user_repository_name": "zstd" - } - }, - "expand_template_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "expand_template_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "expand_template_freebsd_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "freebsd_amd64" - } - }, - "expand_template_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "expand_template_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "expand_template_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "windows_amd64" - } - }, - "expand_template_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_toolchains_repo", - "attributes": { - "user_repository_name": "expand_template" - } - }, - "bats_support": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "sha256": "7815237aafeb42ddcc1b8c698fc5808026d33317d8701d5ec2396e9634e2918f", - "urls": [ - "https://github.com/bats-core/bats-support/archive/v0.3.0.tar.gz" - ], - "strip_prefix": "bats-support-0.3.0", - "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"support\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-support\",\n visibility = [\"//visibility:public\"]\n)\n" - } - }, - "bats_assert": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "sha256": "98ca3b685f8b8993e48ec057565e6e2abcc541034ed5b0e81f191505682037fd", - "urls": [ - "https://github.com/bats-core/bats-assert/archive/v2.1.0.tar.gz" - ], - "strip_prefix": "bats-assert-2.1.0", - "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"assert\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-assert\",\n visibility = [\"//visibility:public\"]\n)\n" - } - }, - "bats_file": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "sha256": "9b69043241f3af1c2d251f89b4fcafa5df3f05e97b89db18d7c9bdf5731bb27a", - "urls": [ - "https://github.com/bats-core/bats-file/archive/v0.4.0.tar.gz" - ], - "strip_prefix": "bats-file-0.4.0", - "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"file\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-file\",\n visibility = [\"//visibility:public\"]\n)\n" - } - }, - "bats_toolchains": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "sha256": "a1a9f7875aa4b6a9480ca384d5865f1ccf1b0b1faead6b47aa47d79709a5c5fd", - "urls": [ - "https://github.com/bats-core/bats-core/archive/v1.10.0.tar.gz" - ], - "strip_prefix": "bats-core-1.10.0", - "build_file_content": "load(\"@local_config_platform//:constraints.bzl\", \"HOST_CONSTRAINTS\")\nload(\"@aspect_bazel_lib//lib/private:bats_toolchain.bzl\", \"bats_toolchain\")\nload(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"core\",\n hardlink = \"on\",\n srcs = glob([\n \"lib/**\",\n \"libexec/**\"\n ]) + [\"bin/bats\"],\n out = \"bats-core\",\n)\n\nbats_toolchain(\n name = \"toolchain\",\n core = \":core\",\n libraries = [\"@bats_support//:support\", \"@bats_assert//:assert\", \"@bats_file//:file\"]\n)\n\ntoolchain(\n name = \"bats_toolchain\",\n exec_compatible_with = HOST_CONSTRAINTS,\n toolchain = \":toolchain\",\n toolchain_type = \"@aspect_bazel_lib//lib:bats_toolchain_type\",\n)\n" - } - } - }, - "recordedRepoMappingEntries": [ - [ - "aspect_bazel_lib~", - "aspect_bazel_lib", - "aspect_bazel_lib~" - ], - [ - "aspect_bazel_lib~", - "bazel_skylib", - "bazel_skylib~" - ], - [ - "aspect_bazel_lib~", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@bazel-orfs~//:extension.bzl%orfs_repositories": { - "general": { - "bzlTransitiveDigest": "opZMguyG+UPmDQ6vhzXe/u0WnKyao2m9IAQt+JWkhcA=", - "usagesDigest": "ZjAOFUXNXojx6a5mgorvg9pXsDXOsJv7KzaZaxOrWXU=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "com_github_nixos_patchelf_download": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "build_file_content": "\n export_files(\n [\"bin/patchelf\"],\n visibility = [\"//visibility:public\"],\n )\n ", - "sha256": "ce84f2447fb7a8679e58bc54a20dc2b01b37b5802e12c57eece772a6f14bf3f0", - "urls": [ - "https://github.com/NixOS/patchelf/releases/download/0.18.0/patchelf-0.18.0-x86_64.tar.gz" - ] - } - }, - "docker_orfs": { - "bzlFile": "@@bazel-orfs~//:docker.bzl", - "ruleClassName": "docker_pkg", - "attributes": { - "image": "docker.io/openroad/orfs:v3.0-3273-gedf3d6bf", - "sha256": "f5692c6325ebcf27cc348e033355ec95c82c35ace1af7e72a0d352624ada143e", - "build_file": "@@bazel-orfs~//:docker.BUILD.bazel", - "timeout": 3600, - "patch_cmds": [ - "find . -name BUILD.bazel -delete" - ] - } - }, - "config": { - "bzlFile": "@@bazel-orfs~//:config.bzl", - "ruleClassName": "global_config", - "attributes": { - "makefile": "@@//flow:makefile", - "pdk": "@@//flow:asap7", - "makefile_yosys": "@@//flow:makefile_yosys", - "openroad": "@@bazel-orfs~~orfs_repositories~docker_orfs//:openroad", - "yosys": "@@bazel-orfs~~orfs_repositories~docker_orfs//:yosys", - "yosys_abc": "@@bazel-orfs~~orfs_repositories~docker_orfs//:yosys-abc" - } - } - }, - "recordedRepoMappingEntries": [ - [ - "bazel-orfs~", - "bazel_tools", - "bazel_tools" - ], - [ - "bazel-orfs~", - "com_github_nixos_patchelf_download", - "bazel-orfs~~orfs_repositories~com_github_nixos_patchelf_download" - ], - [ - "bazel-orfs~", - "docker_orfs", - "bazel-orfs~~orfs_repositories~docker_orfs" - ] - ] - } - }, - "@@platforms//host:extension.bzl%host_platform": { - "general": { - "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "hgylFkgWSg0ulUwWZzEM1aIftlUnbmw2ynWLdEfHnZc=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "host_platform": { - "bzlFile": "@@platforms//host:extension.bzl", - "ruleClassName": "host_platform_repo", - "attributes": {} - } - }, - "recordedRepoMappingEntries": [] - } - }, - "@@rules_java~//java:rules_java_deps.bzl%compatibility_proxy": { - "general": { - "bzlTransitiveDigest": "KIX40nDfygEWbU+rq3nYpt3tVgTK/iO8PKh5VMBlN7M=", - "usagesDigest": "pwHZ+26iLgQdwvdZeA5wnAjKnNI3y6XO2VbhOTeo5h8=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "compatibility_proxy": { - "bzlFile": "@@rules_java~//java:rules_java_deps.bzl", - "ruleClassName": "_compatibility_proxy_repo_rule", - "attributes": {} - } - }, - "recordedRepoMappingEntries": [ - [ - "rules_java~", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@rules_kotlin~//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { - "general": { - "bzlTransitiveDigest": "fus14IFJ/1LGWWGKPH/U18VnJCoMjfDt1ckahqCnM0A=", - "usagesDigest": "aJF6fLy82rR95Ff5CZPAqxNoFgOMLMN5ImfBS0nhnkg=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "com_github_jetbrains_kotlin_git": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl", - "ruleClassName": "kotlin_compiler_git_repository", - "attributes": { - "urls": [ - "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" - ], - "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88" - } - }, - "com_github_jetbrains_kotlin": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl", - "ruleClassName": "kotlin_capabilities_repository", - "attributes": { - "git_repository_name": "com_github_jetbrains_kotlin_git", - "compiler_version": "1.9.23" - } - }, - "com_github_google_ksp": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:ksp.bzl", - "ruleClassName": "ksp_compiler_plugin_repository", - "attributes": { - "urls": [ - "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" - ], - "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d", - "strip_version": "1.9.23-1.0.20" - } - }, - "com_github_pinterest_ktlint": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985", - "urls": [ - "https://github.com/pinterest/ktlint/releases/download/1.3.0/ktlint" - ], - "executable": true - } - }, - "rules_android": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", - "strip_prefix": "rules_android-0.1.1", - "urls": [ - "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" - ] - } - } - }, - "recordedRepoMappingEntries": [ - [ - "rules_kotlin~", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, - "@@rules_nodejs~//nodejs:extensions.bzl%node": { - "general": { - "bzlTransitiveDigest": "SqbzUarOVzAfK28Ca5+NIU3LUwnW/b3h0xXBUS97oyI=", - "usagesDigest": "vmfHywZCXchJqbQW4G6223xyz/u2CXNbv8BoImtyMPo=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "nodejs_linux_amd64": { - "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl", - "ruleClassName": "_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "16.14.2", - "include_headers": false, - "platform": "linux_amd64" - } - }, - "nodejs_linux_arm64": { - "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl", - "ruleClassName": "_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "16.14.2", - "include_headers": false, - "platform": "linux_arm64" - } - }, - "nodejs_linux_s390x": { - "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl", - "ruleClassName": "_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "16.14.2", - "include_headers": false, - "platform": "linux_s390x" - } - }, - "nodejs_linux_ppc64le": { - "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl", - "ruleClassName": "_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "16.14.2", - "include_headers": false, - "platform": "linux_ppc64le" - } - }, - "nodejs_darwin_amd64": { - "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl", - "ruleClassName": "_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "16.14.2", - "include_headers": false, - "platform": "darwin_amd64" - } - }, - "nodejs_darwin_arm64": { - "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl", - "ruleClassName": "_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "16.14.2", - "include_headers": false, - "platform": "darwin_arm64" - } - }, - "nodejs_windows_amd64": { - "bzlFile": "@@rules_nodejs~//nodejs:repositories.bzl", - "ruleClassName": "_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "16.14.2", - "include_headers": false, - "platform": "windows_amd64" - } - }, - "nodejs": { - "bzlFile": "@@rules_nodejs~//nodejs/private:nodejs_repo_host_os_alias.bzl", - "ruleClassName": "nodejs_repo_host_os_alias", - "attributes": { - "user_node_repository_name": "nodejs" - } - }, - "nodejs_host": { - "bzlFile": "@@rules_nodejs~//nodejs/private:nodejs_repo_host_os_alias.bzl", - "ruleClassName": "nodejs_repo_host_os_alias", - "attributes": { - "user_node_repository_name": "nodejs" - } - }, - "nodejs_toolchains": { - "bzlFile": "@@rules_nodejs~//nodejs/private:nodejs_toolchains_repo.bzl", - "ruleClassName": "nodejs_toolchains_repo", - "attributes": { - "user_node_repository_name": "nodejs" - } - } - }, - "recordedRepoMappingEntries": [] - } - }, - "@@rules_python~//python/extensions:pip.bzl%pip": { - "general": { - "bzlTransitiveDigest": "wDKx+PsqgAb8Kll8JbxI6+g8BUNJT48gxqvlHp+uPaM=", - "usagesDigest": "Pmo+R+aERo0wl9TIu+O0dXTNmE8JG2ElzftJqGKKsXk=", - "recordedFileInputs": { - "@@rules_python~//tools/publish/requirements_linux.txt": "d576e0d8542df61396a9b38deeaa183c24135ed5e8e73bb9622f298f2671811e", - "@@bazel-orfs~//requirements_lock_3_13.txt": "6d409e2c9f81ceee67c23e6f26b6742b4ee6c32826c7d0591c5c57df72a6a16b", - "@@//flow/util/requirements_lock.txt": "21d4a2f4b126820247f3f9b3554210fc78861c0a367c2b52d87771900b40520c", - "@@rules_fuzzing~//fuzzing/requirements.txt": "ab04664be026b632a0d2a2446c4f65982b7654f5b6851d2f9d399a19b7242a5b", - "@@rules_python~//tools/publish/requirements_windows.txt": "d18538a3982beab378fd5687f4db33162ee1ece69801f9a451661b1b64286b76", - "@@protobuf~//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5", - "@@rules_python~//tools/publish/requirements_darwin.txt": "095d4a4f3d639dce831cd493367631cd51b53665292ab20194bac2c0c6458fa8" - }, - "recordedDirentsInputs": {}, - "envVariables": { - "RULES_PYTHON_REPO_DEBUG": null, - "RULES_PYTHON_REPO_DEBUG_VERBOSITY": null - }, - "generatedRepoSpecs": { - "bazel-orfs-pip_313_contourpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "contourpy==1.3.1 --hash=sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1 --hash=sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda --hash=sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d --hash=sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509 --hash=sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6 --hash=sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f --hash=sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e --hash=sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751 --hash=sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86 --hash=sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b --hash=sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc --hash=sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546 --hash=sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec --hash=sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f --hash=sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82 --hash=sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c --hash=sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b --hash=sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c --hash=sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c --hash=sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53 --hash=sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80 --hash=sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242 --hash=sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85 --hash=sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124 --hash=sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5 --hash=sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2 --hash=sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3 --hash=sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d --hash=sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc --hash=sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342 --hash=sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1 --hash=sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1 --hash=sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595 --hash=sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30 --hash=sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab --hash=sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3 --hash=sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2 --hash=sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd --hash=sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7 --hash=sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277 --hash=sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453 --hash=sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697 --hash=sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b --hash=sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454 --hash=sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9 --hash=sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1 --hash=sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6 --hash=sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291 --hash=sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750 --hash=sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699 --hash=sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e --hash=sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81 --hash=sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9 --hash=sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375" - } - }, - "bazel-orfs-pip_313_cycler": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "cycler==0.12.1 --hash=sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 --hash=sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c" - } - }, - "bazel-orfs-pip_313_fonttools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "fonttools==4.55.3 --hash=sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7 --hash=sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b --hash=sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261 --hash=sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0 --hash=sha256:22f38464daa6cdb7b6aebd14ab06609328fe1e9705bb0fcc7d1e69de7109ee02 --hash=sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841 --hash=sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45 --hash=sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4 --hash=sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b --hash=sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a --hash=sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048 --hash=sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90 --hash=sha256:5e8d657cd7326eeaba27de2740e847c6b39dde2f8d7cd7cc56f6aad404ddf0bd --hash=sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674 --hash=sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72 --hash=sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c --hash=sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07 --hash=sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b --hash=sha256:86721fbc389ef5cc1e2f477019e5069e8e4421e8d9576e9c26f840dbb04678de --hash=sha256:89bdc5d88bdeec1b15af790810e267e8332d92561dce4f0748c2b95c9bdf3926 --hash=sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e --hash=sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628 --hash=sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca --hash=sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29 --hash=sha256:a8c2794ded89399cc2169c4d0bf7941247b8d5932b2659e09834adfbb01589aa --hash=sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe --hash=sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427 --hash=sha256:aedbeb1db64496d098e6be92b2e63b5fac4e53b1b92032dfc6988e1ea9134a4d --hash=sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765 --hash=sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5 --hash=sha256:b586ab5b15b6097f2fb71cafa3c98edfd0dba1ad8027229e7b1e204a58b0e09d --hash=sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314 --hash=sha256:bc5dbb4685e51235ef487e4bd501ddfc49be5aede5e40f4cefcccabc6e60fb4b --hash=sha256:bdcc9f04b36c6c20978d3f060e5323a43f6222accc4e7fcbef3f428e216d96af --hash=sha256:c3ca99e0d460eff46e033cd3992a969658c3169ffcd533e0a39c63a38beb6831 --hash=sha256:caf8230f3e10f8f5d7593eb6d252a37caf58c480b19a17e250a63dad63834cf3 --hash=sha256:cd70de1a52a8ee2d1877b6293af8a2484ac82514f10b1c67c1c5762d38073e56 --hash=sha256:cf4fe7c124aa3f4e4c1940880156e13f2f4d98170d35c749e6b4f119a872551e --hash=sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276 --hash=sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0 --hash=sha256:dc5294a3d5c84226e3dbba1b6f61d7ad813a8c0238fceea4e09aa04848c3d851 --hash=sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5 --hash=sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54 --hash=sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b --hash=sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f --hash=sha256:ed63959d00b61959b035c7d47f9313c2c1ece090ff63afea702fe86de00dbed4 --hash=sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977 --hash=sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f --hash=sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35 --hash=sha256:fb594b5a99943042c702c550d5494bdd7577f6ef19b0bc73877c948a63184a32" - } - }, - "bazel-orfs-pip_313_kiwisolver": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "kiwisolver==1.4.7 --hash=sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a --hash=sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95 --hash=sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5 --hash=sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0 --hash=sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d --hash=sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18 --hash=sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b --hash=sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258 --hash=sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95 --hash=sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e --hash=sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383 --hash=sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02 --hash=sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b --hash=sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523 --hash=sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee --hash=sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88 --hash=sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd --hash=sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb --hash=sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4 --hash=sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e --hash=sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c --hash=sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935 --hash=sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee --hash=sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e --hash=sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038 --hash=sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d --hash=sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b --hash=sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5 --hash=sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107 --hash=sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f --hash=sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2 --hash=sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17 --hash=sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb --hash=sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674 --hash=sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706 --hash=sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327 --hash=sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3 --hash=sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a --hash=sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2 --hash=sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f --hash=sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948 --hash=sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3 --hash=sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e --hash=sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545 --hash=sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc --hash=sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f --hash=sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650 --hash=sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a --hash=sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8 --hash=sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750 --hash=sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b --hash=sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34 --hash=sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225 --hash=sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51 --hash=sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c --hash=sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3 --hash=sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde --hash=sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599 --hash=sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c --hash=sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76 --hash=sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6 --hash=sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39 --hash=sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9 --hash=sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933 --hash=sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad --hash=sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520 --hash=sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1 --hash=sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503 --hash=sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b --hash=sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36 --hash=sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a --hash=sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643 --hash=sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60 --hash=sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483 --hash=sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf --hash=sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d --hash=sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6 --hash=sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644 --hash=sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2 --hash=sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9 --hash=sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2 --hash=sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640 --hash=sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade --hash=sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a --hash=sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c --hash=sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6 --hash=sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00 --hash=sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27 --hash=sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2 --hash=sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4 --hash=sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379 --hash=sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54 --hash=sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09 --hash=sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a --hash=sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c --hash=sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89 --hash=sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407 --hash=sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904 --hash=sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376 --hash=sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583 --hash=sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278 --hash=sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a --hash=sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d --hash=sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935 --hash=sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb --hash=sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895 --hash=sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b --hash=sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417 --hash=sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608 --hash=sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07 --hash=sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05 --hash=sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a --hash=sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d --hash=sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052" - } - }, - "bazel-orfs-pip_313_matplotlib": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "matplotlib==3.10.0 --hash=sha256:01d2b19f13aeec2e759414d3bfe19ddfb16b13a1250add08d46d5ff6f9be83c6 --hash=sha256:12eaf48463b472c3c0f8dbacdbf906e573013df81a0ab82f0616ea4b11281908 --hash=sha256:2c5829a5a1dd5a71f0e31e6e8bb449bc0ee9dbfb05ad28fc0c6b55101b3a4be6 --hash=sha256:2fbbabc82fde51391c4da5006f965e36d86d95f6ee83fb594b279564a4c5d0d2 --hash=sha256:3547d153d70233a8496859097ef0312212e2689cdf8d7ed764441c77604095ae --hash=sha256:359f87baedb1f836ce307f0e850d12bb5f1936f70d035561f90d41d305fdacea --hash=sha256:3b427392354d10975c1d0f4ee18aa5844640b512d5311ef32efd4dd7db106ede --hash=sha256:4659665bc7c9b58f8c00317c3c2a299f7f258eeae5a5d56b4c64226fca2f7c59 --hash=sha256:4673ff67a36152c48ddeaf1135e74ce0d4bce1bbf836ae40ed39c29edf7e2765 --hash=sha256:503feb23bd8c8acc75541548a1d709c059b7184cde26314896e10a9f14df5f12 --hash=sha256:5439f4c5a3e2e8eab18e2f8c3ef929772fd5641876db71f08127eed95ab64683 --hash=sha256:5cdbaf909887373c3e094b0318d7ff230b2ad9dcb64da7ade654182872ab2593 --hash=sha256:5e6c6461e1fc63df30bf6f80f0b93f5b6784299f721bc28530477acd51bfc3d1 --hash=sha256:5fd41b0ec7ee45cd960a8e71aea7c946a28a0b8a4dcee47d2856b2af051f334c --hash=sha256:607b16c8a73943df110f99ee2e940b8a1cbf9714b65307c040d422558397dac5 --hash=sha256:7e8632baebb058555ac0cde75db885c61f1212e47723d63921879806b40bec6a --hash=sha256:81713dd0d103b379de4516b861d964b1d789a144103277769238c732229d7f03 --hash=sha256:845d96568ec873be63f25fa80e9e7fae4be854a66a7e2f0c8ccc99e94a8bd4ef --hash=sha256:95b710fea129c76d30be72c3b38f330269363fbc6e570a5dd43580487380b5ff --hash=sha256:96f2886f5c1e466f21cc41b70c5a0cd47bfa0015eb2d5793c88ebce658600e25 --hash=sha256:994c07b9d9fe8d25951e3202a68c17900679274dadfc1248738dcfa1bd40d7f3 --hash=sha256:9ade1003376731a971e398cc4ef38bb83ee8caf0aee46ac6daa4b0506db1fd06 --hash=sha256:9b0558bae37f154fffda54d779a592bc97ca8b4701f1c710055b609a3bac44c8 --hash=sha256:a2a43cbefe22d653ab34bb55d42384ed30f611bcbdea1f8d7f431011a2e1c62e --hash=sha256:a994f29e968ca002b50982b27168addfd65f0105610b6be7fa515ca4b5307c95 --hash=sha256:ad2e15300530c1a94c63cfa546e3b7864bd18ea2901317bae8bbf06a5ade6dcf --hash=sha256:ae80dc3a4add4665cf2faa90138384a7ffe2a4e37c58d83e115b54287c4f06ef --hash=sha256:b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278 --hash=sha256:c40ba2eb08b3f5de88152c2333c58cee7edcead0a2a0d60fcafa116b17117adc --hash=sha256:c55b20591ced744aa04e8c3e4b7543ea4d650b6c3c4b208c08a05b4010e8b442 --hash=sha256:c58a9622d5dbeb668f407f35f4e6bfac34bb9ecdcc81680c04d0258169747997 --hash=sha256:d44cb942af1693cced2604c33a9abcef6205601c445f6d0dc531d813af8a2f5a --hash=sha256:d907fddb39f923d011875452ff1eca29a9e7f21722b873e90db32e5d8ddff12e --hash=sha256:fd44fc75522f58612ec4a33958a7e5552562b7705b42ef1b4f8c0818e304a363" - } - }, - "bazel-orfs-pip_313_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "numpy==2.2.0 --hash=sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608 --hash=sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef --hash=sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90 --hash=sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae --hash=sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83 --hash=sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0 --hash=sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73 --hash=sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671 --hash=sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69 --hash=sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa --hash=sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066 --hash=sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da --hash=sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9 --hash=sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e --hash=sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3 --hash=sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a --hash=sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74 --hash=sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3 --hash=sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410 --hash=sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72 --hash=sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d --hash=sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4 --hash=sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038 --hash=sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e --hash=sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13 --hash=sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d --hash=sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95 --hash=sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31 --hash=sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3 --hash=sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03 --hash=sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6 --hash=sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2 --hash=sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b --hash=sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7 --hash=sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab --hash=sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219 --hash=sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571 --hash=sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d --hash=sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1 --hash=sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca --hash=sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661 --hash=sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e --hash=sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e --hash=sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e --hash=sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a --hash=sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3 --hash=sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881 --hash=sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221 --hash=sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742 --hash=sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773 --hash=sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e --hash=sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529 --hash=sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67 --hash=sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c --hash=sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367" - } - }, - "bazel-orfs-pip_313_packaging": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "packaging==24.2 --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" - } - }, - "bazel-orfs-pip_313_pandas": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "pandas==2.3.0 --hash=sha256:034abd6f3db8b9880aaee98f4f5d4dbec7c4829938463ec046517220b2f8574e --hash=sha256:094e271a15b579650ebf4c5155c05dcd2a14fd4fdd72cf4854b2f7ad31ea30be --hash=sha256:14a0cc77b0f089d2d2ffe3007db58f170dae9b9f54e569b299db871a3ab5bf46 --hash=sha256:1a881bc1309f3fce34696d07b00f13335c41f5f5a8770a33b09ebe23261cfc67 --hash=sha256:1d2b33e68d0ce64e26a4acc2e72d747292084f4e8db4c847c6f5f6cbe56ed6d8 --hash=sha256:213cd63c43263dbb522c1f8a7c9d072e25900f6975596f883f4bebd77295d4f3 --hash=sha256:23c2b2dc5213810208ca0b80b8666670eb4660bbfd9d45f58592cc4ddcfd62e1 --hash=sha256:2c7e2fc25f89a49a11599ec1e76821322439d90820108309bf42130d2f36c983 --hash=sha256:2eb4728a18dcd2908c7fccf74a982e241b467d178724545a48d0caf534b38ebf --hash=sha256:34600ab34ebf1131a7613a260a61dbe8b62c188ec0ea4c296da7c9a06b004133 --hash=sha256:39ff73ec07be5e90330cc6ff5705c651ace83374189dcdcb46e6ff54b4a72cd6 --hash=sha256:404d681c698e3c8a40a61d0cd9412cc7364ab9a9cc6e144ae2992e11a2e77a20 --hash=sha256:40cecc4ea5abd2921682b57532baea5588cc5f80f0231c624056b146887274d2 --hash=sha256:430a63bae10b5086995db1b02694996336e5a8ac9a96b4200572b413dfdfccb9 --hash=sha256:4930255e28ff5545e2ca404637bcc56f031893142773b3468dc021c6c32a1390 --hash=sha256:6021910b086b3ca756755e86ddc64e0ddafd5e58e076c72cb1585162e5ad259b --hash=sha256:625466edd01d43b75b1883a64d859168e4556261a5035b32f9d743b67ef44634 --hash=sha256:75651c14fde635e680496148a8526b328e09fe0572d9ae9b638648c46a544ba3 --hash=sha256:84141f722d45d0c2a89544dd29d35b3abfc13d2250ed7e68394eda7564bd6324 --hash=sha256:8adff9f138fc614347ff33812046787f7d43b3cef7c0f0171b3340cae333f6ca --hash=sha256:951805d146922aed8357e4cc5671b8b0b9be1027f0619cea132a9f3f65f2f09c --hash=sha256:9efc0acbbffb5236fbdf0409c04edce96bec4bdaa649d49985427bd1ec73e085 --hash=sha256:9ff730713d4c4f2f1c860e36c005c7cefc1c7c80c21c0688fd605aa43c9fcf09 --hash=sha256:a6872d695c896f00df46b71648eea332279ef4077a409e2fe94220208b6bb675 --hash=sha256:b198687ca9c8529662213538a9bb1e60fa0bf0f6af89292eb68fea28743fcd5a --hash=sha256:b9d8c3187be7479ea5c3d30c32a5d73d62a621166675063b2edd21bc47614027 --hash=sha256:ba24af48643b12ffe49b27065d3babd52702d95ab70f50e1b34f71ca703e2c0d --hash=sha256:bb32dc743b52467d488e7a7c8039b821da2826a9ba4f85b89ea95274f863280f --hash=sha256:bb3be958022198531eb7ec2008cfc78c5b1eed51af8600c6c5d9160d89d8d249 --hash=sha256:bf5be867a0541a9fb47a4be0c5790a4bccd5b77b92f0a59eeec9375fafc2aa14 --hash=sha256:c06f6f144ad0a1bf84699aeea7eff6068ca5c63ceb404798198af7eb86082e33 --hash=sha256:c6da97aeb6a6d233fb6b17986234cc723b396b50a3c6804776351994f2a658fd --hash=sha256:e0f51973ba93a9f97185049326d75b942b9aeb472bec616a129806facb129ebb --hash=sha256:e1991bbb96f4050b09b5f811253c4f3cf05ee89a589379aa36cd623f21a31d6f --hash=sha256:e5f08eb9a445d07720776df6e641975665c9ea12c9d8a331e0f6890f2dcd76ef --hash=sha256:e78ad363ddb873a631e92a3c063ade1ecfb34cae71e9a2be6ad100f875ac1042 --hash=sha256:ed16339bc354a73e0a609df36d256672c7d296f3f767ac07257801aa064ff73c --hash=sha256:f4dd97c19bd06bc557ad787a15b6489d2614ddaab5d104a0310eb314c724b2d2 --hash=sha256:f925f1ef673b4bd0271b1809b72b3270384f2b7d9d14a189b12b7fc02574d575 --hash=sha256:f95a2aef32614ed86216d3c450ab12a4e82084e8102e355707a1d96e33d51c34 --hash=sha256:fa07e138b3f6c04addfeaf56cc7fdb96c3b68a3fe5e5401251f231fce40a0d7a --hash=sha256:fa35c266c8cd1a67d75971a1912b185b492d257092bdd2709bbdebe574ed228d" - } - }, - "bazel-orfs-pip_313_pillow": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "pillow==11.0.0 --hash=sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7 --hash=sha256:006bcdd307cc47ba43e924099a038cbf9591062e6c50e570819743f5607404f5 --hash=sha256:084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903 --hash=sha256:0ae08bd8ffc41aebf578c2af2f9d8749d91f448b3bfd41d7d9ff573d74f2a6b2 --hash=sha256:0e038b0745997c7dcaae350d35859c9715c71e92ffb7e0f4a8e8a16732150f38 --hash=sha256:1187739620f2b365de756ce086fdb3604573337cc28a0d3ac4a01ab6b2d2a6d2 --hash=sha256:16095692a253047fe3ec028e951fa4221a1f3ed3d80c397e83541a3037ff67c9 --hash=sha256:1a61b54f87ab5786b8479f81c4b11f4d61702830354520837f8cc791ebba0f5f --hash=sha256:1c1d72714f429a521d8d2d018badc42414c3077eb187a59579f28e4270b4b0fc --hash=sha256:1e2688958a840c822279fda0086fec1fdab2f95bf2b717b66871c4ad9859d7e8 --hash=sha256:20ec184af98a121fb2da42642dea8a29ec80fc3efbaefb86d8fdd2606619045d --hash=sha256:21a0d3b115009ebb8ac3d2ebec5c2982cc693da935f4ab7bb5c8ebe2f47d36f2 --hash=sha256:224aaa38177597bb179f3ec87eeefcce8e4f85e608025e9cfac60de237ba6316 --hash=sha256:2679d2258b7f1192b378e2893a8a0a0ca472234d4c2c0e6bdd3380e8dfa21b6a --hash=sha256:27a7860107500d813fcd203b4ea19b04babe79448268403172782754870dac25 --hash=sha256:290f2cc809f9da7d6d622550bbf4c1e57518212da51b6a30fe8e0a270a5b78bd --hash=sha256:2e46773dc9f35a1dd28bd6981332fd7f27bec001a918a72a79b4133cf5291dba --hash=sha256:3107c66e43bda25359d5ef446f59c497de2b5ed4c7fdba0894f8d6cf3822dafc --hash=sha256:375b8dd15a1f5d2feafff536d47e22f69625c1aa92f12b339ec0b2ca40263273 --hash=sha256:45c566eb10b8967d71bf1ab8e4a525e5a93519e29ea071459ce517f6b903d7fa --hash=sha256:499c3a1b0d6fc8213519e193796eb1a86a1be4b1877d678b30f83fd979811d1a --hash=sha256:4ad70c4214f67d7466bea6a08061eba35c01b1b89eaa098040a35272a8efb22b --hash=sha256:4b60c9520f7207aaf2e1d94de026682fc227806c6e1f55bba7606d1c94dd623a --hash=sha256:5178952973e588b3f1360868847334e9e3bf49d19e169bbbdfaf8398002419ae --hash=sha256:52a2d8323a465f84faaba5236567d212c3668f2ab53e1c74c15583cf507a0291 --hash=sha256:598b4e238f13276e0008299bd2482003f48158e2b11826862b1eb2ad7c768b97 --hash=sha256:5bd2d3bdb846d757055910f0a59792d33b555800813c3b39ada1829c372ccb06 --hash=sha256:5c39ed17edea3bc69c743a8dd3e9853b7509625c2462532e62baa0732163a904 --hash=sha256:5d203af30149ae339ad1b4f710d9844ed8796e97fda23ffbc4cc472968a47d0b --hash=sha256:5ddbfd761ee00c12ee1be86c9c0683ecf5bb14c9772ddbd782085779a63dd55b --hash=sha256:607bbe123c74e272e381a8d1957083a9463401f7bd01287f50521ecb05a313f8 --hash=sha256:61b887f9ddba63ddf62fd02a3ba7add935d053b6dd7d58998c630e6dbade8527 --hash=sha256:6619654954dc4936fcff82db8eb6401d3159ec6be81e33c6000dfd76ae189947 --hash=sha256:674629ff60030d144b7bca2b8330225a9b11c482ed408813924619c6f302fdbb --hash=sha256:6ec0d5af64f2e3d64a165f490d96368bb5dea8b8f9ad04487f9ab60dc4bb6003 --hash=sha256:6f4dba50cfa56f910241eb7f883c20f1e7b1d8f7d91c750cd0b318bad443f4d5 --hash=sha256:70fbbdacd1d271b77b7721fe3cdd2d537bbbd75d29e6300c672ec6bb38d9672f --hash=sha256:72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739 --hash=sha256:7326a1787e3c7b0429659e0a944725e1b03eeaa10edd945a86dead1913383944 --hash=sha256:73853108f56df97baf2bb8b522f3578221e56f646ba345a372c78326710d3830 --hash=sha256:73e3a0200cdda995c7e43dd47436c1548f87a30bb27fb871f352a22ab8dcf45f --hash=sha256:75acbbeb05b86bc53cbe7b7e6fe00fbcf82ad7c684b3ad82e3d711da9ba287d3 --hash=sha256:8069c5179902dcdce0be9bfc8235347fdbac249d23bd90514b7a47a72d9fecf4 --hash=sha256:846e193e103b41e984ac921b335df59195356ce3f71dcfd155aa79c603873b84 --hash=sha256:8594f42df584e5b4bb9281799698403f7af489fba84c34d53d1c4bfb71b7c4e7 --hash=sha256:86510e3f5eca0ab87429dd77fafc04693195eec7fd6a137c389c3eeb4cfb77c6 --hash=sha256:8853a3bf12afddfdf15f57c4b02d7ded92c7a75a5d7331d19f4f9572a89c17e6 --hash=sha256:88a58d8ac0cc0e7f3a014509f0455248a76629ca9b604eca7dc5927cc593c5e9 --hash=sha256:8ba470552b48e5835f1d23ecb936bb7f71d206f9dfeee64245f30c3270b994de --hash=sha256:8c676b587da5673d3c75bd67dd2a8cdfeb282ca38a30f37950511766b26858c4 --hash=sha256:8ec4a89295cd6cd4d1058a5e6aec6bf51e0eaaf9714774e1bfac7cfc9051db47 --hash=sha256:94f3e1780abb45062287b4614a5bc0874519c86a777d4a7ad34978e86428b8dd --hash=sha256:9a0f748eaa434a41fccf8e1ee7a3eed68af1b690e75328fd7a60af123c193b50 --hash=sha256:a5629742881bcbc1f42e840af185fd4d83a5edeb96475a575f4da50d6ede337c --hash=sha256:a65149d8ada1055029fcb665452b2814fe7d7082fcb0c5bed6db851cb69b2086 --hash=sha256:b3c5ac4bed7519088103d9450a1107f76308ecf91d6dabc8a33a2fcfb18d0fba --hash=sha256:b4fd7bd29610a83a8c9b564d457cf5bd92b4e11e79a4ee4716a63c959699b306 --hash=sha256:bcd1fb5bb7b07f64c15618c89efcc2cfa3e95f0e3bcdbaf4642509de1942a699 --hash=sha256:c12b5ae868897c7338519c03049a806af85b9b8c237b7d675b8c5e089e4a618e --hash=sha256:c26845094b1af3c91852745ae78e3ea47abf3dbcd1cf962f16b9a5fbe3ee8488 --hash=sha256:c6a660307ca9d4867caa8d9ca2c2658ab685de83792d1876274991adec7b93fa --hash=sha256:c809a70e43c7977c4a42aefd62f0131823ebf7dd73556fa5d5950f5b354087e2 --hash=sha256:c8b2351c85d855293a299038e1f89db92a2f35e8d2f783489c6f0b2b5f3fe8a3 --hash=sha256:cb929ca942d0ec4fac404cbf520ee6cac37bf35be479b970c4ffadf2b6a1cad9 --hash=sha256:d2c0a187a92a1cb5ef2c8ed5412dd8d4334272617f532d4ad4de31e0495bd923 --hash=sha256:d69bfd8ec3219ae71bcde1f942b728903cad25fafe3100ba2258b973bd2bc1b2 --hash=sha256:daffdf51ee5db69a82dd127eabecce20729e21f7a3680cf7cbb23f0829189790 --hash=sha256:e58876c91f97b0952eb766123bfef372792ab3f4e3e1f1a2267834c2ab131734 --hash=sha256:eda2616eb2313cbb3eebbe51f19362eb434b18e3bb599466a1ffa76a033fb916 --hash=sha256:ee217c198f2e41f184f3869f3e485557296d505b5195c513b2bfe0062dc537f1 --hash=sha256:f02541ef64077f22bf4924f225c0fd1248c168f86e4b7abdedd87d6ebaceab0f --hash=sha256:f1b82c27e89fffc6da125d5eb0ca6e68017faf5efc078128cfaa42cf5cb38798 --hash=sha256:fba162b8872d30fea8c52b258a542c5dfd7b235fb5cb352240c8d63b414013eb --hash=sha256:fbbcb7b57dc9c794843e3d1258c0fbf0f48656d46ffe9e09b63bbd6e8cd5d0a2 --hash=sha256:fcb4621042ac4b7865c179bb972ed0da0218a076dc1820ffc48b1d74c1e37fe9" - } - }, - "bazel-orfs-pip_313_pyparsing": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "pyparsing==3.2.0 --hash=sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84 --hash=sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c" - } - }, - "bazel-orfs-pip_313_python_dateutil": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "python-dateutil==2.9.0.post0 --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" - } - }, - "bazel-orfs-pip_313_pytz": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "pytz==2025.2 --hash=sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3 --hash=sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" - } - }, - "bazel-orfs-pip_313_pyyaml": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "pyyaml==6.0.2 --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" - } - }, - "bazel-orfs-pip_313_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "six==1.17.0 --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" - } - }, - "bazel-orfs-pip_313_tzdata": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@bazel-orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "bazel-orfs-pip_313", - "requirement": "tzdata==2025.2 --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9" - } - }, - "orfs-pip_313_contourpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "contourpy==1.3.1 --hash=sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1 --hash=sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda --hash=sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d --hash=sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509 --hash=sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6 --hash=sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f --hash=sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e --hash=sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751 --hash=sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86 --hash=sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b --hash=sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc --hash=sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546 --hash=sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec --hash=sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f --hash=sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82 --hash=sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c --hash=sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b --hash=sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c --hash=sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c --hash=sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53 --hash=sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80 --hash=sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242 --hash=sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85 --hash=sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124 --hash=sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5 --hash=sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2 --hash=sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3 --hash=sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d --hash=sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc --hash=sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342 --hash=sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1 --hash=sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1 --hash=sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595 --hash=sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30 --hash=sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab --hash=sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3 --hash=sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2 --hash=sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd --hash=sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7 --hash=sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277 --hash=sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453 --hash=sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697 --hash=sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b --hash=sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454 --hash=sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9 --hash=sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1 --hash=sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6 --hash=sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291 --hash=sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750 --hash=sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699 --hash=sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e --hash=sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81 --hash=sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9 --hash=sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375" - } - }, - "orfs-pip_313_cycler": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "cycler==0.12.1 --hash=sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 --hash=sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c" - } - }, - "orfs-pip_313_fonttools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "fonttools==4.55.7 --hash=sha256:05568a66b090ed9d79aefdce2ceb180bb64fc856961deaedc29f5ad51355ce2c --hash=sha256:087ace2d06894ccdb03e6975d05da6bb9cec0c689b2a9983c059880e33a1464a --hash=sha256:09740feed51f9ed816aebf5d82071b7fecf693ac3a7e0fc8ea433f5dc3bd92f5 --hash=sha256:0ed25d7b5fa4ae6a805c2a9cc0e5307d45cbb3b8e155584fe932d0f3b6a997bf --hash=sha256:1101976c703ff4008a928fc3fef42caf06d035bfc4614230d7e797cbe356feb0 --hash=sha256:12e81d44f762156d28b5c93a6b65d98ed73678be45b22546de8ed29736c3cb96 --hash=sha256:1d4be8354c245c00aecfc90f5d3da8606226f0ac22e1cb0837b39139e4c2df85 --hash=sha256:23df0f1003abaf8a435543f59583fc247e7ae1b047ee2263510e0654a5f207e0 --hash=sha256:2dbc08e227fbeb716776905a7bd3c4fc62c8e37c8ef7d481acd10cb5fde12222 --hash=sha256:2e6dffe9cbcd163ef617fab1f81682e4d1629b7a5b9c5e598274dc2d03e88bcd --hash=sha256:3098355e7a7b5ac48d5dc29684a65271187b865b85675033958b57c40364ee34 --hash=sha256:30c3501328363b73a90acc8a722dd199c993f2c4369ea16886128d94e91897ec --hash=sha256:3304dfcf9ca204dd0ef691a287bd851ddd8e8250108658c0677c3fdfec853a20 --hash=sha256:371197de1283cc99f5f10eb91496520eb0e2d079312d014fd6cef9e802174c6a --hash=sha256:3976db357484bf4cb533dfd0d1a444b38ad06062458715ebf21e38c71aff325d --hash=sha256:418ece624fbc04e199f58398ffef3eaad645baba65434871b09eb7350a3a346b --hash=sha256:5ff0daf8b2e0612e5761fed2e4a2f54eff9d9ec0aeb4091c9f3666f9a118325e --hash=sha256:6899e3d97225a8218f525e9754da0376e1c62953a0d57a76c5abaada51e0d140 --hash=sha256:69ed0660750993150f7c4d966c0c1ffaa0385f23ccef85c2ff108062d80dd7ea --hash=sha256:6eb93cbba484a463b5ee83f7dd3211905f27a3871d20d90fb72de84c6c5056e3 --hash=sha256:775ed0700ee6f781436641f18a0c61b1846a8c1aecae6da6b395c4417e2cb567 --hash=sha256:77e5115a425d53be6e31cd0fe9210f62a488bccf81eb113ab5dd7f4fa88e4d81 --hash=sha256:7858dc6823296a053d85b831fa8428781c6c6f06fca44582bf7b6b2ff32a9089 --hash=sha256:7ff8e606f905048dc91a55a06d994b68065bf35752ae199df54a9bf30013dcaa --hash=sha256:82163d58b43eff6e2025a25c32905fdb9042a163cc1ff82dab393e7ffc77a7d5 --hash=sha256:833927d089e6585019f2c85e3f8f7d87733e3fe81cd704ebaca7afa27e2e7113 --hash=sha256:8ef5ee98fc320c158e4e459a5ee40d1ac3728d4ce11c3c8dfd854aa0aa5c042f --hash=sha256:9074a2848ea5b607377e16998dfcf90cf5eb614d0c388541b9782d5cc038e149 --hash=sha256:916e1d926823b4b3b3815c59fc79f4ed670696fdd5fd9a5e690a0503eef38f79 --hash=sha256:9ec71d0cc0242899f87e4c230ed0b22c7b8681f288fb80e3d81c2c54c5bd2c79 --hash=sha256:a3d19ea483b3cd8833e9e2ee8115f3d2044d55d3743d84f9c23b48b52d7516d8 --hash=sha256:a7831d16c95b60866772a15fdcc03772625c4bb6d858e0ad8ef3d6e48709b2ef --hash=sha256:b89da448e0073408d7b2c44935f9fdae4fdc93644899f99f6102ef883ecf083c --hash=sha256:bee4920ebeb540849bc3555d871e2a8487e39ce8263c281f74d5b6d44d2bf1df --hash=sha256:c135c91d47351b84893fb6fcbb8f178eba14f7cb195850264c0675c85e4238b6 --hash=sha256:c26445a7be689f8b70df7d5d2e2c85ec4407bdb769902a23dd45ac44f767575d --hash=sha256:c2680a3e6e2e2d104a7ea81fb89323e1a9122c23b03d6569d0768887d0d76e69 --hash=sha256:c665df9c9d99937a5bf807bace1c0c95bd13f55de8c82aaf9856b868dcbfe5d9 --hash=sha256:d4b1c5939c0521525f45522823508e6fad21175bca978583688ea3b3736e6625 --hash=sha256:d4bd27f0fa5120aaa39f76de5768959bc97300e0f59a3160d466b51436a38aea --hash=sha256:e10c7fb80cdfdc32244514cbea0906e9f53e3cc80d64d3389da09502fd999b55 --hash=sha256:e2cbafedb9462be7cf68c66b6ca1d8309842fe36b729f1b1969595f5d660e5c2 --hash=sha256:e4bde87985012adbd7559bc363d802fb335e92a07ff86a76cf02bebb0b8566d1 --hash=sha256:e696d6e2baf4cc57ded34bb87e5d3a9e4da9732f3d9e8e2c6db0746e57a6dc0b --hash=sha256:ee7aa8bb716318e3d835ef473978e22b7a39c0f1b3b08cc0b0ee1bba6f73bc1e --hash=sha256:f0899cd23967950e7b902ea75af06cfe5f59ac71eb38e98a774c9e596790e6aa --hash=sha256:f0c45eae32d090763820756b18322a70571dada3f1cbe003debc37a9c35bc260 --hash=sha256:f3b63648600dd0081bdd6856a86d014a7f1d2d11c3c974542f866478d832e103 --hash=sha256:f669910b64d27750398f6c56c651367d4954b05c86ff067af1c9949e109cf1e2 --hash=sha256:fd4ebc475d43f3de2b26e0cf551eff92c24e22d1aee03dc1b33adb52fc2e6cb2" - } - }, - "orfs-pip_313_kiwisolver": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "kiwisolver==1.4.8 --hash=sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50 --hash=sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c --hash=sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8 --hash=sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc --hash=sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f --hash=sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79 --hash=sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6 --hash=sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2 --hash=sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605 --hash=sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09 --hash=sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab --hash=sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e --hash=sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc --hash=sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8 --hash=sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7 --hash=sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880 --hash=sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b --hash=sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b --hash=sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff --hash=sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3 --hash=sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c --hash=sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0 --hash=sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6 --hash=sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30 --hash=sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47 --hash=sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0 --hash=sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1 --hash=sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90 --hash=sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d --hash=sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b --hash=sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c --hash=sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a --hash=sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e --hash=sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc --hash=sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16 --hash=sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a --hash=sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712 --hash=sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c --hash=sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3 --hash=sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc --hash=sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561 --hash=sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d --hash=sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc --hash=sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db --hash=sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed --hash=sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751 --hash=sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957 --hash=sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165 --hash=sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2 --hash=sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476 --hash=sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84 --hash=sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246 --hash=sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4 --hash=sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25 --hash=sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d --hash=sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271 --hash=sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb --hash=sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31 --hash=sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e --hash=sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85 --hash=sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b --hash=sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7 --hash=sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03 --hash=sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b --hash=sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d --hash=sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a --hash=sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d --hash=sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3 --hash=sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67 --hash=sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f --hash=sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c --hash=sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502 --hash=sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062 --hash=sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954 --hash=sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb --hash=sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a --hash=sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b --hash=sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed --hash=sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34 --hash=sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794" - } - }, - "orfs-pip_313_matplotlib": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "matplotlib==3.10.0 --hash=sha256:01d2b19f13aeec2e759414d3bfe19ddfb16b13a1250add08d46d5ff6f9be83c6 --hash=sha256:12eaf48463b472c3c0f8dbacdbf906e573013df81a0ab82f0616ea4b11281908 --hash=sha256:2c5829a5a1dd5a71f0e31e6e8bb449bc0ee9dbfb05ad28fc0c6b55101b3a4be6 --hash=sha256:2fbbabc82fde51391c4da5006f965e36d86d95f6ee83fb594b279564a4c5d0d2 --hash=sha256:3547d153d70233a8496859097ef0312212e2689cdf8d7ed764441c77604095ae --hash=sha256:359f87baedb1f836ce307f0e850d12bb5f1936f70d035561f90d41d305fdacea --hash=sha256:3b427392354d10975c1d0f4ee18aa5844640b512d5311ef32efd4dd7db106ede --hash=sha256:4659665bc7c9b58f8c00317c3c2a299f7f258eeae5a5d56b4c64226fca2f7c59 --hash=sha256:4673ff67a36152c48ddeaf1135e74ce0d4bce1bbf836ae40ed39c29edf7e2765 --hash=sha256:503feb23bd8c8acc75541548a1d709c059b7184cde26314896e10a9f14df5f12 --hash=sha256:5439f4c5a3e2e8eab18e2f8c3ef929772fd5641876db71f08127eed95ab64683 --hash=sha256:5cdbaf909887373c3e094b0318d7ff230b2ad9dcb64da7ade654182872ab2593 --hash=sha256:5e6c6461e1fc63df30bf6f80f0b93f5b6784299f721bc28530477acd51bfc3d1 --hash=sha256:5fd41b0ec7ee45cd960a8e71aea7c946a28a0b8a4dcee47d2856b2af051f334c --hash=sha256:607b16c8a73943df110f99ee2e940b8a1cbf9714b65307c040d422558397dac5 --hash=sha256:7e8632baebb058555ac0cde75db885c61f1212e47723d63921879806b40bec6a --hash=sha256:81713dd0d103b379de4516b861d964b1d789a144103277769238c732229d7f03 --hash=sha256:845d96568ec873be63f25fa80e9e7fae4be854a66a7e2f0c8ccc99e94a8bd4ef --hash=sha256:95b710fea129c76d30be72c3b38f330269363fbc6e570a5dd43580487380b5ff --hash=sha256:96f2886f5c1e466f21cc41b70c5a0cd47bfa0015eb2d5793c88ebce658600e25 --hash=sha256:994c07b9d9fe8d25951e3202a68c17900679274dadfc1248738dcfa1bd40d7f3 --hash=sha256:9ade1003376731a971e398cc4ef38bb83ee8caf0aee46ac6daa4b0506db1fd06 --hash=sha256:9b0558bae37f154fffda54d779a592bc97ca8b4701f1c710055b609a3bac44c8 --hash=sha256:a2a43cbefe22d653ab34bb55d42384ed30f611bcbdea1f8d7f431011a2e1c62e --hash=sha256:a994f29e968ca002b50982b27168addfd65f0105610b6be7fa515ca4b5307c95 --hash=sha256:ad2e15300530c1a94c63cfa546e3b7864bd18ea2901317bae8bbf06a5ade6dcf --hash=sha256:ae80dc3a4add4665cf2faa90138384a7ffe2a4e37c58d83e115b54287c4f06ef --hash=sha256:b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278 --hash=sha256:c40ba2eb08b3f5de88152c2333c58cee7edcead0a2a0d60fcafa116b17117adc --hash=sha256:c55b20591ced744aa04e8c3e4b7543ea4d650b6c3c4b208c08a05b4010e8b442 --hash=sha256:c58a9622d5dbeb668f407f35f4e6bfac34bb9ecdcc81680c04d0258169747997 --hash=sha256:d44cb942af1693cced2604c33a9abcef6205601c445f6d0dc531d813af8a2f5a --hash=sha256:d907fddb39f923d011875452ff1eca29a9e7f21722b873e90db32e5d8ddff12e --hash=sha256:fd44fc75522f58612ec4a33958a7e5552562b7705b42ef1b4f8c0818e304a363" - } - }, - "orfs-pip_313_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "numpy==2.2.2 --hash=sha256:02935e2c3c0c6cbe9c7955a8efa8908dd4221d7755644c59d1bba28b94fd334f --hash=sha256:0349b025e15ea9d05c3d63f9657707a4e1d471128a3b1d876c095f328f8ff7f0 --hash=sha256:09d6a2032faf25e8d0cadde7fd6145118ac55d2740132c1d845f98721b5ebcfd --hash=sha256:0bc61b307655d1a7f9f4b043628b9f2b721e80839914ede634e3d485913e1fb2 --hash=sha256:0eec19f8af947a61e968d5429f0bd92fec46d92b0008d0a6685b40d6adf8a4f4 --hash=sha256:106397dbbb1896f99e044efc90360d098b3335060375c26aa89c0d8a97c5f648 --hash=sha256:128c41c085cab8a85dc29e66ed88c05613dccf6bc28b3866cd16050a2f5448be --hash=sha256:149d1113ac15005652e8d0d3f6fd599360e1a708a4f98e43c9c77834a28238cb --hash=sha256:159ff6ee4c4a36a23fe01b7c3d07bd8c14cc433d9720f977fcd52c13c0098160 --hash=sha256:22ea3bb552ade325530e72a0c557cdf2dea8914d3a5e1fecf58fa5dbcc6f43cd --hash=sha256:23ae9f0c2d889b7b2d88a3791f6c09e2ef827c2446f1c4a3e3e76328ee4afd9a --hash=sha256:250c16b277e3b809ac20d1f590716597481061b514223c7badb7a0f9993c7f84 --hash=sha256:2ec6c689c61df613b783aeb21f945c4cbe6c51c28cb70aae8430577ab39f163e --hash=sha256:2ffbb1acd69fdf8e89dd60ef6182ca90a743620957afb7066385a7bbe88dc748 --hash=sha256:3074634ea4d6df66be04f6728ee1d173cfded75d002c75fac79503a880bf3825 --hash=sha256:356ca982c188acbfa6af0d694284d8cf20e95b1c3d0aefa8929376fea9146f60 --hash=sha256:3fbe72d347fbc59f94124125e73fc4976a06927ebc503ec5afbfb35f193cd957 --hash=sha256:40c7ff5da22cd391944a28c6a9c638a5eef77fcf71d6e3a79e1d9d9e82752715 --hash=sha256:41184c416143defa34cc8eb9d070b0a5ba4f13a0fa96a709e20584638254b317 --hash=sha256:451e854cfae0febe723077bd0cf0a4302a5d84ff25f0bfece8f29206c7bed02e --hash=sha256:4525b88c11906d5ab1b0ec1f290996c0020dd318af8b49acaa46f198b1ffc283 --hash=sha256:463247edcee4a5537841d5350bc87fe8e92d7dd0e8c71c995d2c6eecb8208278 --hash=sha256:4dbd80e453bd34bd003b16bd802fac70ad76bd463f81f0c518d1245b1c55e3d9 --hash=sha256:57b4012e04cc12b78590a334907e01b3a85efb2107df2b8733ff1ed05fce71de --hash=sha256:5a8c863ceacae696aff37d1fd636121f1a512117652e5dfb86031c8d84836369 --hash=sha256:5acea83b801e98541619af398cc0109ff48016955cc0818f478ee9ef1c5c3dcb --hash=sha256:642199e98af1bd2b6aeb8ecf726972d238c9877b0f6e8221ee5ab945ec8a2189 --hash=sha256:64bd6e1762cd7f0986a740fee4dff927b9ec2c5e4d9a28d056eb17d332158014 --hash=sha256:6d9fc9d812c81e6168b6d405bf00b8d6739a7f72ef22a9214c4241e0dc70b323 --hash=sha256:7079129b64cb78bdc8d611d1fd7e8002c0a2565da6a47c4df8062349fee90e3e --hash=sha256:7dca87ca328f5ea7dafc907c5ec100d187911f94825f8700caac0b3f4c384b49 --hash=sha256:860fd59990c37c3ef913c3ae390b3929d005243acca1a86facb0773e2d8d9e50 --hash=sha256:8e6da5cffbbe571f93588f562ed130ea63ee206d12851b60819512dd3e1ba50d --hash=sha256:8ec0636d3f7d68520afc6ac2dc4b8341ddb725039de042faf0e311599f54eb37 --hash=sha256:9491100aba630910489c1d0158034e1c9a6546f0b1340f716d522dc103788e39 --hash=sha256:97b974d3ba0fb4612b77ed35d7627490e8e3dff56ab41454d9e8b23448940576 --hash=sha256:995f9e8181723852ca458e22de5d9b7d3ba4da3f11cc1cb113f093b271d7965a --hash=sha256:9dd47ff0cb2a656ad69c38da850df3454da88ee9a6fde0ba79acceee0e79daba --hash=sha256:9fad446ad0bc886855ddf5909cbf8cb5d0faa637aaa6277fb4b19ade134ab3c7 --hash=sha256:a972cec723e0563aa0823ee2ab1df0cb196ed0778f173b381c871a03719d4826 --hash=sha256:ac9bea18d6d58a995fac1b2cb4488e17eceeac413af014b1dd26170b766d8467 --hash=sha256:b0531f0b0e07643eb089df4c509d30d72c9ef40defa53e41363eca8a8cc61495 --hash=sha256:b208cfd4f5fe34e1535c08983a1a6803fdbc7a1e86cf13dd0c61de0b51a0aadc --hash=sha256:b3482cb7b3325faa5f6bc179649406058253d91ceda359c104dac0ad320e1391 --hash=sha256:b6fb9c32a91ec32a689ec6410def76443e3c750e7cfc3fb2206b985ffb2b85f0 --hash=sha256:b78ea78450fd96a498f50ee096f69c75379af5138f7881a51355ab0e11286c97 --hash=sha256:bd249bc894af67cbd8bad2c22e7cbcd46cf87ddfca1f1289d1e7e54868cc785c --hash=sha256:c7d1fd447e33ee20c1f33f2c8e6634211124a9aabde3c617687d8b739aa69eac --hash=sha256:d0bbe7dd86dca64854f4b6ce2ea5c60b51e36dfd597300057cf473d3615f2369 --hash=sha256:d6d6a0910c3b4368d89dde073e630882cdb266755565155bc33520283b2d9df8 --hash=sha256:da1eeb460ecce8d5b8608826595c777728cdf28ce7b5a5a8c8ac8d949beadcf2 --hash=sha256:e0c8854b09bc4de7b041148d8550d3bd712b5c21ff6a8ed308085f190235d7ff --hash=sha256:e0d4142eb40ca6f94539e4db929410f2a46052a0fe7a2c1c59f6179c39938d2a --hash=sha256:e9e82dcb3f2ebbc8cb5ce1102d5f1c5ed236bf8a11730fb45ba82e2841ec21df --hash=sha256:ed6906f61834d687738d25988ae117683705636936cc605be0bb208b23df4d8f" - } - }, - "orfs-pip_313_packaging": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "packaging==24.2 --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" - } - }, - "orfs-pip_313_pillow": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "pillow==11.1.0 --hash=sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83 --hash=sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96 --hash=sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65 --hash=sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a --hash=sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352 --hash=sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f --hash=sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20 --hash=sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c --hash=sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114 --hash=sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49 --hash=sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91 --hash=sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0 --hash=sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2 --hash=sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5 --hash=sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884 --hash=sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e --hash=sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c --hash=sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196 --hash=sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756 --hash=sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861 --hash=sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269 --hash=sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1 --hash=sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb --hash=sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a --hash=sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081 --hash=sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1 --hash=sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8 --hash=sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90 --hash=sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc --hash=sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5 --hash=sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1 --hash=sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3 --hash=sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35 --hash=sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f --hash=sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c --hash=sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2 --hash=sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2 --hash=sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf --hash=sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65 --hash=sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b --hash=sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442 --hash=sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2 --hash=sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade --hash=sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482 --hash=sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe --hash=sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc --hash=sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a --hash=sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec --hash=sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3 --hash=sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a --hash=sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07 --hash=sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6 --hash=sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f --hash=sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e --hash=sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192 --hash=sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0 --hash=sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6 --hash=sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73 --hash=sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f --hash=sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6 --hash=sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547 --hash=sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9 --hash=sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457 --hash=sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8 --hash=sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26 --hash=sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5 --hash=sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab --hash=sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070 --hash=sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71 --hash=sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9 --hash=sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761" - } - }, - "orfs-pip_313_pyparsing": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "pyparsing==3.2.1 --hash=sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1 --hash=sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a" - } - }, - "orfs-pip_313_python_dateutil": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "python-dateutil==2.9.0.post0 --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" - } - }, - "orfs-pip_313_pyyaml": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "pyyaml==6.0.2 --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4" - } - }, - "orfs-pip_313_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@orfs-pip//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_13_host//:python", - "repo": "orfs-pip_313", - "requirement": "six==1.17.0 --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81" - } - }, - "pip_deps_310_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", - "repo": "pip_deps_310", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_310_setuptools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", - "repo": "pip_deps_310", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_311_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "pip_deps_311", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_311_setuptools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "pip_deps_311", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_312_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", - "repo": "pip_deps_312", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_312_setuptools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", - "repo": "pip_deps_312", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_38_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", - "repo": "pip_deps_38", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_38_setuptools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", - "repo": "pip_deps_38", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_39_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", - "repo": "pip_deps_39", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_39_setuptools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", - "repo": "pip_deps_39", - "requirement": "setuptools<=70.3.0" - } - }, - "rules_fuzzing_py_deps_310_absl_py": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", - "repo": "rules_fuzzing_py_deps_310", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_310_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", - "repo": "rules_fuzzing_py_deps_310", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_311_absl_py": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_fuzzing_py_deps_311", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_311_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_fuzzing_py_deps_311", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_312_absl_py": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", - "repo": "rules_fuzzing_py_deps_312", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_312_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", - "repo": "rules_fuzzing_py_deps_312", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_38_absl_py": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", - "repo": "rules_fuzzing_py_deps_38", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_38_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", - "repo": "rules_fuzzing_py_deps_38", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_39_absl_py": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", - "repo": "rules_fuzzing_py_deps_39", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_39_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", - "repo": "rules_fuzzing_py_deps_39", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "backports.tarfile-1.2.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "backports-tarfile==1.2.0", - "sha256": "77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", - "urls": [ - "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "backports_tarfile-1.2.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "backports-tarfile==1.2.0", - "sha256": "d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", - "urls": [ - "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_certifi_py3_none_any_922820b5": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "certifi-2024.8.30-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "certifi==2024.8.30", - "sha256": "922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", - "urls": [ - "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_certifi_sdist_bec941d2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "certifi-2024.8.30.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "certifi==2024.8.30", - "sha256": "bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", - "urls": [ - "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", - "urls": [ - "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", - "urls": [ - "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", - "urls": [ - "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", - "urls": [ - "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", - "urls": [ - "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", - "urls": [ - "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_sdist_1c39c601": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "cffi-1.17.1.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", - "urls": [ - "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", - "urls": [ - "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", - "urls": [ - "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", - "urls": [ - "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", - "urls": [ - "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", - "urls": [ - "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", - "urls": [ - "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", - "urls": [ - "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", - "urls": [ - "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", - "urls": [ - "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", - "urls": [ - "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", - "urls": [ - "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", - "urls": [ - "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", - "urls": [ - "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_sdist_223217c3": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "charset_normalizer-3.4.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", - "urls": [ - "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5", - "urls": [ - "https://files.pythonhosted.org/packages/2f/78/55356eb9075d0be6e81b59f45c7b48df87f76a20e73893872170471f3ee8/cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4", - "urls": [ - "https://files.pythonhosted.org/packages/2a/2c/488776a3dc843f95f86d2f957ca0fc3407d0242b50bede7fad1e339be03f/cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7", - "urls": [ - "https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405", - "urls": [ - "https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16", - "urls": [ - "https://files.pythonhosted.org/packages/21/ce/b9c9ff56c7164d8e2edfb6c9305045fbc0df4508ccfdb13ee66eb8c95b0e/cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73", - "urls": [ - "https://files.pythonhosted.org/packages/2a/33/b3682992ab2e9476b9c81fff22f02c8b0a1e6e1d49ee1750a67d85fd7ed2/cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_sdist_315b9001": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "cryptography-43.0.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805", - "urls": [ - "https://files.pythonhosted.org/packages/0d/05/07b55d1fa21ac18c3a8c79f764e2514e6f6a9698f1be44994f5adf0d29db/cryptography-43.0.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "docutils-0.21.2-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "docutils==0.21.2", - "sha256": "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", - "urls": [ - "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_docutils_sdist_3a6b1873": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "docutils-0.21.2.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "docutils==0.21.2", - "sha256": "3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", - "urls": [ - "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_idna_py3_none_any_946d195a": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "idna-3.10-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "idna==3.10", - "sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", - "urls": [ - "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_idna_sdist_12f65c9b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "idna-3.10.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "idna==3.10", - "sha256": "12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", - "urls": [ - "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "importlib_metadata-8.5.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "importlib-metadata==8.5.0", - "sha256": "45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", - "urls": [ - "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_importlib_metadata_sdist_71522656": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "importlib_metadata-8.5.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "importlib-metadata==8.5.0", - "sha256": "71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", - "urls": [ - "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "jaraco.classes-3.4.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-classes==3.4.0", - "sha256": "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", - "urls": [ - "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jaraco.classes-3.4.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-classes==3.4.0", - "sha256": "47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", - "urls": [ - "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "jaraco.context-6.0.1-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-context==6.0.1", - "sha256": "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", - "urls": [ - "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jaraco_context-6.0.1.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-context==6.0.1", - "sha256": "9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", - "urls": [ - "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "jaraco.functools-4.1.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-functools==4.1.0", - "sha256": "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649", - "urls": [ - "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jaraco_functools-4.1.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-functools==4.1.0", - "sha256": "70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d", - "urls": [ - "https://files.pythonhosted.org/packages/ab/23/9894b3df5d0a6eb44611c36aec777823fc2e07740dabbd0b810e19594013/jaraco_functools-4.1.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "jeepney-0.8.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jeepney==0.8.0", - "sha256": "c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755", - "urls": [ - "https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jeepney_sdist_5efe48d2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jeepney-0.8.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jeepney==0.8.0", - "sha256": "5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", - "urls": [ - "https://files.pythonhosted.org/packages/d6/f4/154cf374c2daf2020e05c3c6a03c91348d59b23c5366e968feb198306fdf/jeepney-0.8.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_keyring_py3_none_any_5426f817": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "keyring-25.4.1-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "keyring==25.4.1", - "sha256": "5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf", - "urls": [ - "https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_keyring_sdist_b07ebc55": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "keyring-25.4.1.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "keyring==25.4.1", - "sha256": "b07ebc55f3e8ed86ac81dd31ef14e81ace9dd9c3d4b5d77a6e9a2016d0d71a1b", - "urls": [ - "https://files.pythonhosted.org/packages/a5/1c/2bdbcfd5d59dc6274ffb175bc29aa07ecbfab196830e0cfbde7bd861a2ea/keyring-25.4.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "markdown_it_py-3.0.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "markdown-it-py==3.0.0", - "sha256": "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", - "urls": [ - "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "markdown-it-py-3.0.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "markdown-it-py==3.0.0", - "sha256": "e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", - "urls": [ - "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_mdurl_py3_none_any_84008a41": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "mdurl-0.1.2-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "mdurl==0.1.2", - "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", - "urls": [ - "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_mdurl_sdist_bb413d29": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "mdurl-0.1.2.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "mdurl==0.1.2", - "sha256": "bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", - "urls": [ - "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "more_itertools-10.5.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "more-itertools==10.5.0", - "sha256": "037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", - "urls": [ - "https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_more_itertools_sdist_5482bfef": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "more-itertools-10.5.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "more-itertools==10.5.0", - "sha256": "5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6", - "urls": [ - "https://files.pythonhosted.org/packages/51/78/65922308c4248e0eb08ebcbe67c95d48615cc6f27854b6f2e57143e9178f/more-itertools-10.5.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86", - "urls": [ - "https://files.pythonhosted.org/packages/b3/89/1daff5d9ba5a95a157c092c7c5f39b8dd2b1ddb4559966f808d31cfb67e0/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811", - "urls": [ - "https://files.pythonhosted.org/packages/2c/b6/42fc3c69cabf86b6b81e4c051a9b6e249c5ba9f8155590222c2622961f58/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200", - "urls": [ - "https://files.pythonhosted.org/packages/45/b9/833f385403abaf0023c6547389ec7a7acf141ddd9d1f21573723a6eab39a/nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164", - "urls": [ - "https://files.pythonhosted.org/packages/05/2b/85977d9e11713b5747595ee61f381bc820749daf83f07b90b6c9964cf932/nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189", - "urls": [ - "https://files.pythonhosted.org/packages/72/f2/5c894d5265ab80a97c68ca36f25c8f6f0308abac649aaf152b74e7e854a8/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad", - "urls": [ - "https://files.pythonhosted.org/packages/ab/a7/375afcc710dbe2d64cfbd69e31f82f3e423d43737258af01f6a56d844085/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b", - "urls": [ - "https://files.pythonhosted.org/packages/c2/a8/3bb02d0c60a03ad3a112b76c46971e9480efa98a8946677b5a59f60130ca/nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307", - "urls": [ - "https://files.pythonhosted.org/packages/1b/63/6ab90d0e5225ab9780f6c9fb52254fa36b52bb7c188df9201d05b647e5e1/nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe", - "urls": [ - "https://files.pythonhosted.org/packages/a3/da/0c4e282bc3cff4a0adf37005fa1fb42257673fbc1bbf7d1ff639ec3d255a/nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a", - "urls": [ - "https://files.pythonhosted.org/packages/de/81/c291231463d21da5f8bba82c8167a6d6893cc5419b0639801ee5d3aeb8a9/nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204", - "urls": [ - "https://files.pythonhosted.org/packages/eb/61/73a007c74c37895fdf66e0edcd881f5eaa17a348ff02f4bb4bc906d61085/nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-win_amd64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844", - "urls": [ - "https://files.pythonhosted.org/packages/26/8d/53c5b19c4999bdc6ba95f246f4ef35ca83d7d7423e5e38be43ad66544e5d/nh3-0.2.18-cp37-abi3-win_amd64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_sdist_94a16692": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "nh3-0.2.18.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4", - "urls": [ - "https://files.pythonhosted.org/packages/62/73/10df50b42ddb547a907deeb2f3c9823022580a7a47281e8eae8e003a9639/nh3-0.2.18.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "pkginfo-1.10.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pkginfo==1.10.0", - "sha256": "889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097", - "urls": [ - "https://files.pythonhosted.org/packages/56/09/054aea9b7534a15ad38a363a2bd974c20646ab1582a387a95b8df1bfea1c/pkginfo-1.10.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pkginfo_sdist_5df73835": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pkginfo-1.10.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pkginfo==1.10.0", - "sha256": "5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297", - "urls": [ - "https://files.pythonhosted.org/packages/2f/72/347ec5be4adc85c182ed2823d8d1c7b51e13b9a6b0c1aae59582eca652df/pkginfo-1.10.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "pycparser-2.22-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pycparser==2.22", - "sha256": "c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", - "urls": [ - "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pycparser_sdist_491c8be9": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pycparser-2.22.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pycparser==2.22", - "sha256": "491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", - "urls": [ - "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "pygments-2.18.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pygments==2.18.0", - "sha256": "b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", - "urls": [ - "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pygments_sdist_786ff802": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pygments-2.18.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pygments==2.18.0", - "sha256": "786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", - "urls": [ - "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_windows_x86_64" - ], - "filename": "pywin32_ctypes-0.2.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pywin32-ctypes==0.2.3", - "sha256": "8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", - "urls": [ - "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pywin32-ctypes-0.2.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pywin32-ctypes==0.2.3", - "sha256": "d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", - "urls": [ - "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "readme_renderer-44.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "readme-renderer==44.0", - "sha256": "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", - "urls": [ - "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_readme_renderer_sdist_8712034e": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "readme_renderer-44.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "readme-renderer==44.0", - "sha256": "8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", - "urls": [ - "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_requests_py3_none_any_70761cfe": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "requests-2.32.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests==2.32.3", - "sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", - "urls": [ - "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_requests_sdist_55365417": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "requests-2.32.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests==2.32.3", - "sha256": "55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", - "urls": [ - "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "requests_toolbelt-1.0.0-py2.py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests-toolbelt==1.0.0", - "sha256": "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", - "urls": [ - "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "requests-toolbelt-1.0.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests-toolbelt==1.0.0", - "sha256": "7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", - "urls": [ - "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "rfc3986-2.0.0-py2.py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rfc3986==2.0.0", - "sha256": "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", - "urls": [ - "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_rfc3986_sdist_97aacf9d": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "rfc3986-2.0.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rfc3986==2.0.0", - "sha256": "97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", - "urls": [ - "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_rich_py3_none_any_6049d5e6": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "rich-13.9.4-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rich==13.9.4", - "sha256": "6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", - "urls": [ - "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_rich_sdist_43959497": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "rich-13.9.4.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rich==13.9.4", - "sha256": "439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", - "urls": [ - "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "SecretStorage-3.3.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "secretstorage==3.3.3", - "sha256": "f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", - "urls": [ - "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_secretstorage_sdist_2403533e": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "SecretStorage-3.3.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "secretstorage==3.3.3", - "sha256": "2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", - "urls": [ - "https://files.pythonhosted.org/packages/53/a4/f48c9d79cb507ed1373477dbceaba7401fd8a23af63b837fa61f1dcd3691/SecretStorage-3.3.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_twine_py3_none_any_215dbe7b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "twine-5.1.1-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "twine==5.1.1", - "sha256": "215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997", - "urls": [ - "https://files.pythonhosted.org/packages/5d/ec/00f9d5fd040ae29867355e559a94e9a8429225a0284a3f5f091a3878bfc0/twine-5.1.1-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_twine_sdist_9aa08251": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "twine-5.1.1.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "twine==5.1.1", - "sha256": "9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db", - "urls": [ - "https://files.pythonhosted.org/packages/77/68/bd982e5e949ef8334e6f7dcf76ae40922a8750aa2e347291ae1477a4782b/twine-5.1.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "urllib3-2.2.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "urllib3==2.2.3", - "sha256": "ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", - "urls": [ - "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_urllib3_sdist_e7d814a8": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "urllib3-2.2.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "urllib3==2.2.3", - "sha256": "e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", - "urls": [ - "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_zipp_py3_none_any_a817ac80": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "zipp-3.20.2-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "zipp==3.20.2", - "sha256": "a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", - "urls": [ - "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_zipp_sdist_bc9eb26f": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "zipp-3.20.2.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "zipp==3.20.2", - "sha256": "bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29", - "urls": [ - "https://files.pythonhosted.org/packages/54/bf/5c0000c44ebc80123ecbdddba1f5dcd94a5ada602a9c225d84b5aaa55e86/zipp-3.20.2.tar.gz" - ] - } - }, - "bazel-orfs-pip": { - "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", - "ruleClassName": "hub_repository", - "attributes": { - "repo_name": "bazel-orfs-pip", - "extra_hub_aliases": {}, - "whl_map": { - "contourpy": "{\"bazel-orfs-pip_313_contourpy\":[{\"version\":\"3.13\"}]}", - "cycler": "{\"bazel-orfs-pip_313_cycler\":[{\"version\":\"3.13\"}]}", - "fonttools": "{\"bazel-orfs-pip_313_fonttools\":[{\"version\":\"3.13\"}]}", - "kiwisolver": "{\"bazel-orfs-pip_313_kiwisolver\":[{\"version\":\"3.13\"}]}", - "matplotlib": "{\"bazel-orfs-pip_313_matplotlib\":[{\"version\":\"3.13\"}]}", - "numpy": "{\"bazel-orfs-pip_313_numpy\":[{\"version\":\"3.13\"}]}", - "packaging": "{\"bazel-orfs-pip_313_packaging\":[{\"version\":\"3.13\"}]}", - "pandas": "{\"bazel-orfs-pip_313_pandas\":[{\"version\":\"3.13\"}]}", - "pillow": "{\"bazel-orfs-pip_313_pillow\":[{\"version\":\"3.13\"}]}", - "pyparsing": "{\"bazel-orfs-pip_313_pyparsing\":[{\"version\":\"3.13\"}]}", - "python_dateutil": "{\"bazel-orfs-pip_313_python_dateutil\":[{\"version\":\"3.13\"}]}", - "pytz": "{\"bazel-orfs-pip_313_pytz\":[{\"version\":\"3.13\"}]}", - "pyyaml": "{\"bazel-orfs-pip_313_pyyaml\":[{\"version\":\"3.13\"}]}", - "six": "{\"bazel-orfs-pip_313_six\":[{\"version\":\"3.13\"}]}", - "tzdata": "{\"bazel-orfs-pip_313_tzdata\":[{\"version\":\"3.13\"}]}" - }, - "packages": [ - "contourpy", - "cycler", - "fonttools", - "kiwisolver", - "matplotlib", - "numpy", - "packaging", - "pandas", - "pillow", - "pyparsing", - "python_dateutil", - "pytz", - "pyyaml", - "six", - "tzdata" - ], - "groups": {} - } - }, - "orfs-pip": { - "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", - "ruleClassName": "hub_repository", - "attributes": { - "repo_name": "orfs-pip", - "extra_hub_aliases": {}, - "whl_map": { - "contourpy": "{\"orfs-pip_313_contourpy\":[{\"version\":\"3.13\"}]}", - "cycler": "{\"orfs-pip_313_cycler\":[{\"version\":\"3.13\"}]}", - "fonttools": "{\"orfs-pip_313_fonttools\":[{\"version\":\"3.13\"}]}", - "kiwisolver": "{\"orfs-pip_313_kiwisolver\":[{\"version\":\"3.13\"}]}", - "matplotlib": "{\"orfs-pip_313_matplotlib\":[{\"version\":\"3.13\"}]}", - "numpy": "{\"orfs-pip_313_numpy\":[{\"version\":\"3.13\"}]}", - "packaging": "{\"orfs-pip_313_packaging\":[{\"version\":\"3.13\"}]}", - "pillow": "{\"orfs-pip_313_pillow\":[{\"version\":\"3.13\"}]}", - "pyparsing": "{\"orfs-pip_313_pyparsing\":[{\"version\":\"3.13\"}]}", - "python_dateutil": "{\"orfs-pip_313_python_dateutil\":[{\"version\":\"3.13\"}]}", - "pyyaml": "{\"orfs-pip_313_pyyaml\":[{\"version\":\"3.13\"}]}", - "six": "{\"orfs-pip_313_six\":[{\"version\":\"3.13\"}]}" - }, - "packages": [ - "contourpy", - "cycler", - "fonttools", - "kiwisolver", - "matplotlib", - "numpy", - "packaging", - "pillow", - "pyparsing", - "python_dateutil", - "pyyaml", - "six" - ], - "groups": {} - } - }, - "pip_deps": { - "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", - "ruleClassName": "hub_repository", - "attributes": { - "repo_name": "pip_deps", - "extra_hub_aliases": {}, - "whl_map": { - "numpy": "{\"pip_deps_310_numpy\":[{\"version\":\"3.10\"}],\"pip_deps_311_numpy\":[{\"version\":\"3.11\"}],\"pip_deps_312_numpy\":[{\"version\":\"3.12\"}],\"pip_deps_38_numpy\":[{\"version\":\"3.8\"}],\"pip_deps_39_numpy\":[{\"version\":\"3.9\"}]}", - "setuptools": "{\"pip_deps_310_setuptools\":[{\"version\":\"3.10\"}],\"pip_deps_311_setuptools\":[{\"version\":\"3.11\"}],\"pip_deps_312_setuptools\":[{\"version\":\"3.12\"}],\"pip_deps_38_setuptools\":[{\"version\":\"3.8\"}],\"pip_deps_39_setuptools\":[{\"version\":\"3.9\"}]}" - }, - "packages": [ - "numpy", - "setuptools" - ], - "groups": {} - } - }, - "rules_fuzzing_py_deps": { - "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", - "ruleClassName": "hub_repository", - "attributes": { - "repo_name": "rules_fuzzing_py_deps", - "extra_hub_aliases": {}, - "whl_map": { - "absl_py": "{\"rules_fuzzing_py_deps_310_absl_py\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_absl_py\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_absl_py\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_absl_py\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_absl_py\":[{\"version\":\"3.9\"}]}", - "six": "{\"rules_fuzzing_py_deps_310_six\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_six\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_six\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_six\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_six\":[{\"version\":\"3.9\"}]}" - }, - "packages": [ - "absl_py", - "six" - ], - "groups": {} - } - }, - "rules_python_publish_deps": { - "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", - "ruleClassName": "hub_repository", - "attributes": { - "repo_name": "rules_python_publish_deps", - "extra_hub_aliases": {}, - "whl_map": { - "backports_tarfile": "{\"rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7\":[{\"filename\":\"backports.tarfile-1.2.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2\":[{\"filename\":\"backports_tarfile-1.2.0.tar.gz\",\"version\":\"3.11\"}]}", - "certifi": "{\"rules_python_publish_deps_311_certifi_py3_none_any_922820b5\":[{\"filename\":\"certifi-2024.8.30-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_certifi_sdist_bec941d2\":[{\"filename\":\"certifi-2024.8.30.tar.gz\",\"version\":\"3.11\"}]}", - "cffi": "{\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_sdist_1c39c601\":[{\"filename\":\"cffi-1.17.1.tar.gz\",\"version\":\"3.11\"}]}", - "charset_normalizer": "{\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe\":[{\"filename\":\"charset_normalizer-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_sdist_223217c3\":[{\"filename\":\"charset_normalizer-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", - "cryptography": "{\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_sdist_315b9001\":[{\"filename\":\"cryptography-43.0.3.tar.gz\",\"version\":\"3.11\"}]}", - "docutils": "{\"rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9\":[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_docutils_sdist_3a6b1873\":[{\"filename\":\"docutils-0.21.2.tar.gz\",\"version\":\"3.11\"}]}", - "idna": "{\"rules_python_publish_deps_311_idna_py3_none_any_946d195a\":[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_idna_sdist_12f65c9b\":[{\"filename\":\"idna-3.10.tar.gz\",\"version\":\"3.11\"}]}", - "importlib_metadata": "{\"rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197\":[{\"filename\":\"importlib_metadata-8.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_importlib_metadata_sdist_71522656\":[{\"filename\":\"importlib_metadata-8.5.0.tar.gz\",\"version\":\"3.11\"}]}", - "jaraco_classes": "{\"rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b\":[{\"filename\":\"jaraco.classes-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5\":[{\"filename\":\"jaraco.classes-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", - "jaraco_context": "{\"rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48\":[{\"filename\":\"jaraco.context-6.0.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5\":[{\"filename\":\"jaraco_context-6.0.1.tar.gz\",\"version\":\"3.11\"}]}", - "jaraco_functools": "{\"rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13\":[{\"filename\":\"jaraco.functools-4.1.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2\":[{\"filename\":\"jaraco_functools-4.1.0.tar.gz\",\"version\":\"3.11\"}]}", - "jeepney": "{\"rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad\":[{\"filename\":\"jeepney-0.8.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jeepney_sdist_5efe48d2\":[{\"filename\":\"jeepney-0.8.0.tar.gz\",\"version\":\"3.11\"}]}", - "keyring": "{\"rules_python_publish_deps_311_keyring_py3_none_any_5426f817\":[{\"filename\":\"keyring-25.4.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_keyring_sdist_b07ebc55\":[{\"filename\":\"keyring-25.4.1.tar.gz\",\"version\":\"3.11\"}]}", - "markdown_it_py": "{\"rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684\":[{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94\":[{\"filename\":\"markdown-it-py-3.0.0.tar.gz\",\"version\":\"3.11\"}]}", - "mdurl": "{\"rules_python_publish_deps_311_mdurl_py3_none_any_84008a41\":[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_mdurl_sdist_bb413d29\":[{\"filename\":\"mdurl-0.1.2.tar.gz\",\"version\":\"3.11\"}]}", - "more_itertools": "{\"rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32\":[{\"filename\":\"more_itertools-10.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_more_itertools_sdist_5482bfef\":[{\"filename\":\"more-itertools-10.5.0.tar.gz\",\"version\":\"3.11\"}]}", - "nh3": "{\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_sdist_94a16692\":[{\"filename\":\"nh3-0.2.18.tar.gz\",\"version\":\"3.11\"}]}", - "pkginfo": "{\"rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2\":[{\"filename\":\"pkginfo-1.10.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pkginfo_sdist_5df73835\":[{\"filename\":\"pkginfo-1.10.0.tar.gz\",\"version\":\"3.11\"}]}", - "pycparser": "{\"rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d\":[{\"filename\":\"pycparser-2.22-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pycparser_sdist_491c8be9\":[{\"filename\":\"pycparser-2.22.tar.gz\",\"version\":\"3.11\"}]}", - "pygments": "{\"rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0\":[{\"filename\":\"pygments-2.18.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pygments_sdist_786ff802\":[{\"filename\":\"pygments-2.18.0.tar.gz\",\"version\":\"3.11\"}]}", - "pywin32_ctypes": "{\"rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337\":[{\"filename\":\"pywin32_ctypes-0.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04\":[{\"filename\":\"pywin32-ctypes-0.2.3.tar.gz\",\"version\":\"3.11\"}]}", - "readme_renderer": "{\"rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b\":[{\"filename\":\"readme_renderer-44.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_readme_renderer_sdist_8712034e\":[{\"filename\":\"readme_renderer-44.0.tar.gz\",\"version\":\"3.11\"}]}", - "requests": "{\"rules_python_publish_deps_311_requests_py3_none_any_70761cfe\":[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_sdist_55365417\":[{\"filename\":\"requests-2.32.3.tar.gz\",\"version\":\"3.11\"}]}", - "requests_toolbelt": "{\"rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66\":[{\"filename\":\"requests_toolbelt-1.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3\":[{\"filename\":\"requests-toolbelt-1.0.0.tar.gz\",\"version\":\"3.11\"}]}", - "rfc3986": "{\"rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b\":[{\"filename\":\"rfc3986-2.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rfc3986_sdist_97aacf9d\":[{\"filename\":\"rfc3986-2.0.0.tar.gz\",\"version\":\"3.11\"}]}", - "rich": "{\"rules_python_publish_deps_311_rich_py3_none_any_6049d5e6\":[{\"filename\":\"rich-13.9.4-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rich_sdist_43959497\":[{\"filename\":\"rich-13.9.4.tar.gz\",\"version\":\"3.11\"}]}", - "secretstorage": "{\"rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662\":[{\"filename\":\"SecretStorage-3.3.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_secretstorage_sdist_2403533e\":[{\"filename\":\"SecretStorage-3.3.3.tar.gz\",\"version\":\"3.11\"}]}", - "twine": "{\"rules_python_publish_deps_311_twine_py3_none_any_215dbe7b\":[{\"filename\":\"twine-5.1.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_twine_sdist_9aa08251\":[{\"filename\":\"twine-5.1.1.tar.gz\",\"version\":\"3.11\"}]}", - "urllib3": "{\"rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0\":[{\"filename\":\"urllib3-2.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_urllib3_sdist_e7d814a8\":[{\"filename\":\"urllib3-2.2.3.tar.gz\",\"version\":\"3.11\"}]}", - "zipp": "{\"rules_python_publish_deps_311_zipp_py3_none_any_a817ac80\":[{\"filename\":\"zipp-3.20.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_zipp_sdist_bc9eb26f\":[{\"filename\":\"zipp-3.20.2.tar.gz\",\"version\":\"3.11\"}]}" - }, - "packages": [ - "backports_tarfile", - "certifi", - "charset_normalizer", - "docutils", - "idna", - "importlib_metadata", - "jaraco_classes", - "jaraco_context", - "jaraco_functools", - "keyring", - "markdown_it_py", - "mdurl", - "more_itertools", - "nh3", - "pkginfo", - "pygments", - "readme_renderer", - "requests", - "requests_toolbelt", - "rfc3986", - "rich", - "twine", - "urllib3", - "zipp" - ], - "groups": {} - } - } - }, - "moduleExtensionMetadata": { - "useAllRepos": "NO", - "reproducible": false - }, - "recordedRepoMappingEntries": [ - [ - "bazel_features~", - "bazel_features_globals", - "bazel_features~~version_extension~bazel_features_globals" - ], - [ - "bazel_features~", - "bazel_features_version", - "bazel_features~~version_extension~bazel_features_version" - ], - [ - "rules_python~", - "bazel_features", - "bazel_features~" - ], - [ - "rules_python~", - "bazel_skylib", - "bazel_skylib~" - ], - [ - "rules_python~", - "bazel_tools", - "bazel_tools" - ], - [ - "rules_python~", - "pypi__build", - "rules_python~~internal_deps~pypi__build" - ], - [ - "rules_python~", - "pypi__click", - "rules_python~~internal_deps~pypi__click" - ], - [ - "rules_python~", - "pypi__colorama", - "rules_python~~internal_deps~pypi__colorama" - ], - [ - "rules_python~", - "pypi__importlib_metadata", - "rules_python~~internal_deps~pypi__importlib_metadata" - ], - [ - "rules_python~", - "pypi__installer", - "rules_python~~internal_deps~pypi__installer" - ], - [ - "rules_python~", - "pypi__more_itertools", - "rules_python~~internal_deps~pypi__more_itertools" - ], - [ - "rules_python~", - "pypi__packaging", - "rules_python~~internal_deps~pypi__packaging" - ], - [ - "rules_python~", - "pypi__pep517", - "rules_python~~internal_deps~pypi__pep517" - ], - [ - "rules_python~", - "pypi__pip", - "rules_python~~internal_deps~pypi__pip" - ], - [ - "rules_python~", - "pypi__pip_tools", - "rules_python~~internal_deps~pypi__pip_tools" - ], - [ - "rules_python~", - "pypi__pyproject_hooks", - "rules_python~~internal_deps~pypi__pyproject_hooks" - ], - [ - "rules_python~", - "pypi__setuptools", - "rules_python~~internal_deps~pypi__setuptools" - ], - [ - "rules_python~", - "pypi__tomli", - "rules_python~~internal_deps~pypi__tomli" - ], - [ - "rules_python~", - "pypi__wheel", - "rules_python~~internal_deps~pypi__wheel" - ], - [ - "rules_python~", - "pypi__zipp", - "rules_python~~internal_deps~pypi__zipp" - ], - [ - "rules_python~", - "pythons_hub", - "rules_python~~python~pythons_hub" - ], - [ - "rules_python~~python~pythons_hub", - "python_3_10_host", - "rules_python~~python~python_3_10_host" - ], - [ - "rules_python~~python~pythons_hub", - "python_3_11_host", - "rules_python~~python~python_3_11_host" - ], - [ - "rules_python~~python~pythons_hub", - "python_3_12_host", - "rules_python~~python~python_3_12_host" - ], - [ - "rules_python~~python~pythons_hub", - "python_3_13_host", - "rules_python~~python~python_3_13_host" - ], - [ - "rules_python~~python~pythons_hub", - "python_3_8_host", - "rules_python~~python~python_3_8_host" - ], - [ - "rules_python~~python~pythons_hub", - "python_3_9_host", - "rules_python~~python~python_3_9_host" - ] - ] - } - } - } -} diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel deleted file mode 100644 index 6ba4a02382..0000000000 --- a/WORKSPACE.bazel +++ /dev/null @@ -1,2 +0,0 @@ -# This file marks the root of the Bazel workspace. -# See MODULE.bazel for external dependencies setup. diff --git a/bazel/BUILD b/bazel/BUILD new file mode 100644 index 0000000000..d518110449 --- /dev/null +++ b/bazel/BUILD @@ -0,0 +1 @@ +exports_files(glob(["*.patch"])) diff --git a/build_openroad.sh b/build_openroad.sh index dd4fbbe169..6563c76bef 100755 --- a/build_openroad.sh +++ b/build_openroad.sh @@ -69,7 +69,7 @@ Options: -n, --nice Nice all jobs. Use all cpus unless --threads is also given, then use N threads. - --yosys-args-overwrite Do not use default flags set by this scrip during + --yosys-args-overwrite Do not use default flags set by this script during Yosys compilation. --yosys-args STRING Additional compilation flags for Yosys compilation. @@ -78,7 +78,7 @@ Options: to the Verific source folder. --openroad-args-overwrite - Do not use default flags set by this scrip during + Do not use default flags set by this script during OpenROAD app compilation. --openroad-args STRING Additional compilation flags for OpenROAD app @@ -237,13 +237,13 @@ __docker_build() cp .dockerignore{,.bak} sed -i '/flow\/platforms/d' .dockerignore fi - options="" - if [ -n "${WITH_VERIFIC}" ]; then + local options=() + if [ "${WITH_VERIFIC}" -eq 1 ]; then cp -r "${VERIFIC_SRC}" tools/verific - options="-buildArgs=--build-arg verificPath=tools/verific" + options=("-buildArgs=--build-arg verificPath=tools/verific") fi ./etc/DockerHelper.sh create -target=dev -os="${DOCKER_OS_NAME}" -threads="${PROC}" - ./etc/DockerHelper.sh create -target=builder -os="${DOCKER_OS_NAME}" -threads="${PROC}" "${options}" + ./etc/DockerHelper.sh create -target=builder -os="${DOCKER_OS_NAME}" -threads="${PROC}" "${options[@]}" rm -rf tools/verific if [ ! -z "${DOCKER_COPY_PLATFORMS+x}" ]; then mv .dockerignore{.bak,} diff --git a/docker/Dockerfile.builder b/docker/Dockerfile.builder index 7b8ff10f7f..a5a18d80b6 100644 --- a/docker/Dockerfile.builder +++ b/docker/Dockerfile.builder @@ -15,15 +15,9 @@ COPY --link build_openroad.sh build_openroad.sh FROM orfs-base AS orfs-builder-base -# Inject compiler wrapper scripts that append the macros -RUN mkdir -p /usr/local/bin/wrapped-cc && \ - echo '#!/bin/sh' > /usr/local/bin/wrapped-cc/gcc && \ - echo 'exec /usr/bin/gcc -D__TIME__="\"0\"" -D__DATE__="\"0\"" -D__TIMESTAMP__="\"0\"" -Wno-builtin-macro-redefined "$@"' >> /usr/local/bin/wrapped-cc/gcc && \ - chmod +x /usr/local/bin/wrapped-cc/gcc && \ - ln -sf /usr/local/bin/wrapped-cc/gcc /usr/local/bin/wrapped-cc/cc && \ - echo '#!/bin/sh' > /usr/local/bin/wrapped-cc/g++ && \ - echo 'exec /usr/bin/g++ -D__TIME__="\"0\"" -D__DATE__="\"0\"" -D__TIMESTAMP__="\"0\"" -Wno-builtin-macro-redefined "$@"' >> /usr/local/bin/wrapped-cc/g++ && \ - chmod +x /usr/local/bin/wrapped-cc/g++ +# Add compiler wrapper scripts for reproducible builds +COPY --link etc/setup_compiler_wrappers.sh /tmp/ +RUN sh /tmp/setup_compiler_wrappers.sh && rm /tmp/setup_compiler_wrappers.sh # Prepend wrapper directory to PATH so they override system compilers ENV PATH="/usr/local/bin/wrapped-cc:$PATH" @@ -51,6 +45,19 @@ if [ -n "${verificPath}" ]; then fi EOF +# Collect LICENSE files from tool source trees into the install directory so +# they are available in the final image. tools/OpenROAD/src/sta is excluded +# because it is covered by a separate commercial license agreement. +RUN find /OpenROAD-flow-scripts/tools \( -name "*LICENSE*" -o -name "*LICENSES*" \) \ + | grep -v '/OpenROAD/src/sta/' \ + | grep -v '/AutoTuner/' \ + | grep -v '^/OpenROAD-flow-scripts/tools/install/' \ + | while IFS= read -r f; do \ + rel="${f#/OpenROAD-flow-scripts/tools/}"; \ + mkdir -p "/OpenROAD-flow-scripts/tools/install/licenses/$(dirname "$rel")"; \ + cp -r "$f" "/OpenROAD-flow-scripts/tools/install/licenses/$rel"; \ + done + FROM orfs-base # The order for copying the directories is based on the frequency of changes (ascending order), diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index 288d4ef709..162d5d2dc0 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -15,20 +15,14 @@ COPY InstallerOpenROAD.sh \ ARG options="" ARG constantBuildDir="-constant-build-dir" -# add compiler wrapper scripts -# inject the macro definitions during compilation only -RUN mkdir -p /usr/local/bin/wrapped-cc && \ - echo '#!/bin/sh' > /usr/local/bin/wrapped-cc/gcc && \ - echo 'exec /usr/bin/gcc -D__TIME__="\"0\"" -D__DATE__="\"0\"" -D__TIMESTAMP__="\"0\"" -Wno-builtin-macro-redefined "$@"' >> /usr/local/bin/wrapped-cc/gcc && \ - chmod +x /usr/local/bin/wrapped-cc/gcc && \ - ln -sf /usr/local/bin/wrapped-cc/gcc /usr/local/bin/wrapped-cc/cc && \ - echo '#!/bin/sh' > /usr/local/bin/wrapped-cc/g++ && \ - echo 'exec /usr/bin/g++ -D__TIME__="\"0\"" -D__DATE__="\"0\"" -D__TIMESTAMP__="\"0\"" -Wno-builtin-macro-redefined "$@"' >> /usr/local/bin/wrapped-cc/g++ && \ - chmod +x /usr/local/bin/wrapped-cc/g++ +# add compiler wrapper scripts for reproducible builds +COPY setup_compiler_wrappers.sh /tmp/ +RUN sh /tmp/setup_compiler_wrappers.sh && rm /tmp/setup_compiler_wrappers.sh ENV PATH="/usr/local/bin/wrapped-cc:$PATH" -RUN ./DependencyInstaller.sh -all $options $constantBuildDir -save-deps-prefixes=/etc/openroad_deps_prefixes.txt \ +RUN ./DependencyInstaller.sh -base $options $constantBuildDir -save-deps-prefixes=/etc/openroad_deps_prefixes.txt \ + && ./DependencyInstaller.sh -common $options $constantBuildDir -save-deps-prefixes=/etc/openroad_deps_prefixes.txt \ && rm -rf /tmp/installer /tmp/* /var/tmp/* /var/lib/apt/lists/* ARG fromImage diff --git a/docs/index.md b/docs/index.md index fb37dc006e..2c78e4310a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -150,6 +150,7 @@ OpenROAD-flow-scripts supports Verilog to GDS for the following open platforms: - Nangate45 / FreePDK45 - SKY130 - GF180 +- SG13G2 These platforms have a permissive license which allows us to redistribute the PDK and OpenROAD platform-specific files. The platform diff --git a/docs/user/FlowVariables.md b/docs/user/FlowVariables.md index c2c630e4e4..161e77d5a2 100644 --- a/docs/user/FlowVariables.md +++ b/docs/user/FlowVariables.md @@ -173,6 +173,7 @@ configuration file. | LEC_AUX_VERILOG_FILES| Additional Verilog files (e.g. blackbox stubs) to include in LEC equivalence checks. Appended to the generated Verilog netlist before running the formal equivalence check.| | | LEC_CHECK| Perform a formal equivalence check between before and after netlists. If this fails, report an issue to OpenROAD.| 0| | LIB_FILES| A Liberty file of the standard cell library with PVT characterization, input and output characteristics, timing and power definitions for each cell.| | +| LIB_MODEL| Selects between NLDM and CCS timing models for the ASAP7 platform. Valid values: NLDM (default), CCS. Used in flow/platforms/asap7/config.mk to pick the LIB_DIR subdirectory and accumulate the corresponding $(CORNER)_$(LIB_MODEL)_LIB_FILES list, and in flow/scripts/load.tcl to gate CCS-specific Tcl branches.| NLDM| | MACRO_BLOCKAGE_HALO| Distance beyond the edges of a macro that will also be covered by the blockage generated for that macro. Note that the default macro blockage halo comes from the largest of the specified MACRO_PLACE_HALO x or y values. This variable overrides that calculation.| | | MACRO_EXTENSION| Sets the number of GCells added to the blockages boundaries from macros.| | | MACRO_PLACEMENT_TCL| Specifies the path of a TCL file on how to place macros manually. The user may choose to place just some of the macros in the design. The macro placer will handle the remaining unplaced macros.| | @@ -188,6 +189,7 @@ configuration file. | MAX_REPAIR_TIMING_ITER| Maximum number of iterations for repair setup and repair hold.| | | MAX_ROUTING_LAYER| The highest metal layer name to be used in routing.| | | MIN_BUF_CELL_AND_PORTS| Used to insert a buffer cell to pass through wires. Used in synthesis.| | +| MIN_CLK_ROUTING_LAYER| The lowest metal layer name to be used for clock-net routing in global routing. Used in flow/platforms/*/fastroute.tcl as the lower bound of `set_routing_layers -clock`. Typically higher than MIN_ROUTING_LAYER so clock nets prefer the upper, lower-RC layers. No `stages:` list because floorplan.tcl also `source`s the platform fastroute.tcl.| | | MIN_PLACE_STEP_COEF| Sets the minimum phi coefficient (pcof_min / µ_k Lower Bound) for global placement optimization. This parameter controls the step size lower bound in the RePlAce Nesterov optimization algorithm. Lower values may improve convergence but can increase runtime. Valid range: 0.95-1.05| 0.95| | MIN_ROUTING_LAYER| The lowest metal layer name to be used in routing.| | | NUM_CORES| Passed to `openroad -threads $(NUM_CORES)`, defaults to numbers of cores in system as determined by system specific code in Makefile, `nproc` is tried first. OpenROAD does not limit itself to this number of cores across OpenROAD running instances, which can lead to overprovisioning in contexts such as bazel-orfs where there could be many routing, or place jobs running at the same time.| | @@ -291,6 +293,7 @@ configuration file. | SYNTH_ARGS| Optional synthesis variables for yosys.| | | SYNTH_BLACKBOXES| List of cells treated as a black box by Yosys. With Bazel, this can be used to run synthesis in parallel for the large modules of the design. Non-existant modules are ignored silently, useful when listing modules statically, even if modules come and go dynamically.| | | SYNTH_CANONICALIZE_TCL| Specifies a Tcl script with commands to run as part of the synth canonicalize step.| | +| SYNTH_CHECKPOINT| Path to a Yosys RTLIL checkpoint to read in place of the default canonicalization checkpoint at the start of synth.tcl. Intended for parallel synthesis flows that reuse a checkpoint taken after coarse synthesis and `keep_hierarchy` have already been decided, so each partition skips that common prefix. Leave unset for the normal flow.| | | SYNTH_GUT| Load design and remove all internal logic before doing synthesis. This is useful when creating a mock .lef abstract that has a smaller area than the amount of logic would allow. bazel-orfs uses this to mock SRAMs, for instance.| 0| | SYNTH_HDL_FRONTEND| Select an alternative language frontend to ingest the design. Available option is "slang". If the variable is empty, design is read with the Yosys read_verilog command.| | | SYNTH_HIERARCHICAL| Enable to Synthesis hierarchically, otherwise considered flat synthesis.| 0| @@ -306,6 +309,7 @@ configuration file. | SYNTH_OPT_HIER| Optimize constants across hierarchical boundaries.| | | SYNTH_REPEATABLE_BUILD| License to prune anything that makes builds less repeatable, typically used with Bazel to ensure that builds are bit-for-bit identical so that caching works optimally. Removes debug information that encodes paths, timestamps, etc.| 0| | SYNTH_RETIME_MODULES| *This is an experimental option and may cause adverse effects.* *No effort has been made to check if the retimed RTL is logically equivalent to the non-retimed RTL.* List of modules to apply automatic retiming to. These modules must not get dissolved and as such they should either be the top module or be included in SYNTH_KEEP_MODULES. The main use case is to quickly identify if performance can be improved by manually retiming the input RTL. Retiming will treat module ports like register endpoints/startpoints. The objective function of retiming isn't informed by SDC, even the clock period is ignored. As such, retiming will optimize for best delay at potentially high register number cost. Automatic retiming can produce suboptimal results as its timing model is crude and it doesn't find the optimal distribution of registers on long pipelines. See OR discussion # 8080.| | +| SYNTH_SKIP_KEEP| Only meaningful together with SYNTH_CHECKPOINT. When set, signals that the supplied checkpoint is still canonical RTLIL (coarse synth and `keep_hierarchy` have not been run yet), so synth.tcl runs the full coarse+fine synthesis flattened. When unset and SYNTH_CHECKPOINT is used, synth.tcl assumes the checkpoint already has coarse synth + `keep_hierarchy` done and resumes from `coarse:fine`.| 0| | SYNTH_SLANG_ARGS| Additional arguments passed to the slang frontend during synthesis.| | | SYNTH_WRAPPED_ADDERS| Specify the adder modules that can be used for synthesis, separated by commas. The default adder module is determined by the first element of this variable.| | | SYNTH_WRAPPED_MULTIPLIERS| Specify the multiplier modules that can be used for synthesis, separated by commas. The default multiplier module is determined by the first element of this variable.| | @@ -319,6 +323,7 @@ configuration file. | TNS_END_PERCENT| Default TNS_END_PERCENT value for post CTS timing repair. Try fixing all violating endpoints by default (reduce to 5% for runtime). Specifies how many percent of violating paths to fix [0-100]. Worst path will always be fixed.| 100| | UNSET_ABC9_BOX_CELLS| List of cells to unset the abc9_box attribute on| | | USE_FILL| Whether to perform metal density filling.| 0| +| USE_NEGOTIATION| Enable using negotiation legalizer for detailed placement.| 0| | VERILOG_DEFINES| Preprocessor defines passed to the language frontend. Example: `-D HPDCACHE_ASSERT_OFF`| | | VERILOG_FILES| The path to the design Verilog/SystemVerilog files providing a description of modules.| | | VERILOG_INCLUDE_DIRS| Specifies the include directories for the Verilog input files.| | @@ -348,6 +353,7 @@ configuration file. - [SYNTH_ARGS](#SYNTH_ARGS) - [SYNTH_BLACKBOXES](#SYNTH_BLACKBOXES) - [SYNTH_CANONICALIZE_TCL](#SYNTH_CANONICALIZE_TCL) +- [SYNTH_CHECKPOINT](#SYNTH_CHECKPOINT) - [SYNTH_GUT](#SYNTH_GUT) - [SYNTH_HDL_FRONTEND](#SYNTH_HDL_FRONTEND) - [SYNTH_HIERARCHICAL](#SYNTH_HIERARCHICAL) @@ -363,6 +369,7 @@ configuration file. - [SYNTH_OPT_HIER](#SYNTH_OPT_HIER) - [SYNTH_REPEATABLE_BUILD](#SYNTH_REPEATABLE_BUILD) - [SYNTH_RETIME_MODULES](#SYNTH_RETIME_MODULES) +- [SYNTH_SKIP_KEEP](#SYNTH_SKIP_KEEP) - [SYNTH_SLANG_ARGS](#SYNTH_SLANG_ARGS) - [SYNTH_WRAPPED_ADDERS](#SYNTH_WRAPPED_ADDERS) - [SYNTH_WRAPPED_MULTIPLIERS](#SYNTH_WRAPPED_MULTIPLIERS) @@ -638,7 +645,9 @@ configuration file. - [KLAYOUT_TECH_FILE](#KLAYOUT_TECH_FILE) - [LAYER_PARASITICS_FILE](#LAYER_PARASITICS_FILE) - [LIB_FILES](#LIB_FILES) +- [LIB_MODEL](#LIB_MODEL) - [MACRO_EXTENSION](#MACRO_EXTENSION) +- [MIN_CLK_ROUTING_LAYER](#MIN_CLK_ROUTING_LAYER) - [PLATFORM](#PLATFORM) - [PLATFORM_TCL](#PLATFORM_TCL) - [PROCESS](#PROCESS) @@ -655,4 +664,5 @@ configuration file. - [TAP_CELL_NAME](#TAP_CELL_NAME) - [TECH_LEF](#TECH_LEF) - [USE_FILL](#USE_FILL) +- [USE_NEGOTIATION](#USE_NEGOTIATION) diff --git a/etc/DependencyInstaller.sh b/etc/DependencyInstaller.sh index c95b6aeec6..2a74e9e675 100755 --- a/etc/DependencyInstaller.sh +++ b/etc/DependencyInstaller.sh @@ -71,8 +71,11 @@ _install_EL7_Packages() { yum -y update yum -y install \ time \ + readline \ ruby \ - ruby-devel + ruby-devel \ + tcl-tclreadline \ + tcl-tclreadline-devel if ! [ -x "$(command -v klayout)" ]; then yum -y install https://www.klayout.org/downloads/CentOS_7/klayout-${klayoutVersion}-0.x86_64.rpm @@ -108,9 +111,21 @@ _install_EL8_EL9_Packages() { dnf -y update dnf -y install \ time \ + readline \ ruby \ ruby-devel + if [[ "${elVersion}" == "8" ]]; then + dnf -y install \ + tcl-tclreadline \ + tcl-tclreadline-devel + fi + + if [[ "${elVersion}" == "9" ]]; then + dnf -y install \ + https://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages/readline-devel-8.1-4.el9.x86_64.rpm + fi + # Install KLayout based on EL version, note the different URLs case "${elVersion}" in "8") @@ -186,6 +201,7 @@ _installUbuntuPackages() { libqt5opengl5 \ libqt5svg5-dev \ libqt5xmlpatterns5-dev \ + libreadline-dev \ libtbb-dev \ libz-dev \ perl \ @@ -196,6 +212,7 @@ _installUbuntuPackages() { qttools5-dev \ ruby \ ruby-dev \ + tcl-tclreadline \ time \ zlib1g \ zlib1g-dev diff --git a/etc/setup_compiler_wrappers.sh b/etc/setup_compiler_wrappers.sh new file mode 100644 index 0000000000..64bcb7747b --- /dev/null +++ b/etc/setup_compiler_wrappers.sh @@ -0,0 +1,27 @@ +#!/bin/sh +# setup_compiler_wrappers.sh +# Creates compiler wrapper scripts for reproducible builds by overriding +# __TIME__, __DATE__, and __TIMESTAMP__ macros with constant values. +# This ensures Docker image builds are deterministic regardless of build time. + +set -e + +WRAPPER_DIR="/usr/local/bin/wrapped-cc" +mkdir -p "$WRAPPER_DIR" + +# GCC wrapper +cat > "$WRAPPER_DIR/gcc" << 'WRAPPER' +#!/bin/sh +exec /usr/bin/gcc -D__TIME__="\"0\"" -D__DATE__="\"0\"" -D__TIMESTAMP__="\"0\"" -Wno-builtin-macro-redefined "$@" +WRAPPER +chmod +x "$WRAPPER_DIR/gcc" + +# Symlink cc to gcc wrapper +ln -sf "$WRAPPER_DIR/gcc" "$WRAPPER_DIR/cc" + +# G++ wrapper +cat > "$WRAPPER_DIR/g++" << 'WRAPPER' +#!/bin/sh +exec /usr/bin/g++ -D__TIME__="\"0\"" -D__DATE__="\"0\"" -D__TIMESTAMP__="\"0\"" -Wno-builtin-macro-redefined "$@" +WRAPPER +chmod +x "$WRAPPER_DIR/g++" diff --git a/flow/BUILD b/flow/BUILD new file mode 100644 index 0000000000..c3f0599758 --- /dev/null +++ b/flow/BUILD @@ -0,0 +1,175 @@ +load("@bazel-orfs//:openroad.bzl", "orfs_pdk") + +# Expose every individual file under platforms/ as a public source-file +# target, so designs in other packages can refer to e.g. +# //flow:platforms/asap7/verilog/fakeram7_64x28.sv directly. This is the +# label form bazel-orfs's config_mk_parser produces for VERILOG_FILES / +# ADDITIONAL_LEFS / ADDITIONAL_LIBS that point at platform-provided files. +# Exclude package BUILD files so they aren't claimed as source labels by +# any future sub-package under platforms/. +exports_files( + glob( + ["platforms/**/*"], + exclude = [ + "platforms/**/BUILD", + "platforms/**/BUILD.bazel", + ], + ), + visibility = ["//visibility:public"], +) + +# Expose synth.tcl as an addressable source label so bazel-orfs can +# point its `_synth_tcl` attr default at `@orfs//flow:scripts/synth.tcl` +# instead of vendoring its own (drifting) copy at the bazel-orfs repo +# root. See bazel-orfs `private/rules.bzl`. +exports_files( + ["scripts/synth.tcl"], + visibility = ["//visibility:public"], +) + +# files shared between scripts/synth.sh and scripts/flow.sh steps +MAKEFILE_SHARED = [ + "scripts/variables.json", + "scripts/*.py", + "scripts/*.sh", + "scripts/*.yaml", + "scripts/*.mk", +] + +# makefile and scripts used by script/synth.sh steps +filegroup( + name = "makefile_yosys", + srcs = ["Makefile"], + data = glob(MAKEFILE_SHARED + [ + "scripts/*.script", + "scripts/*.v", + "scripts/util.tcl", + "scripts/synth*.tcl", + "scripts/synth*.v", + "platforms/common/**/*.v", + ]) + [ + "//flow/util:makefile_yosys", + ], + visibility = ["//visibility:public"], +) + +# makefile and scripts used in the scripts/flow.sh steps +filegroup( + name = "makefile", + srcs = ["Makefile"], + data = glob(MAKEFILE_SHARED + [ + "scripts/*.tcl", + "platforms/common/**/*.v", + ]) + [ + "//flow/util:makefile", + ], + visibility = ["//visibility:public"], +) + +[orfs_pdk( + name = pdk, + srcs = glob([ + "platforms/{pdk}/**/*.{ext}".format( + ext = ext, + pdk = pdk, + ) + for ext in { + "asap7": [ + "cfg", + "gds", + "lef", + "lib", + "lib.gz", + "lyt", + "mk", + "rules", + "sdc", + "sv", + "tcl", + "v", + ], + "gf180": [ + "cfg", + "gds", + "lef", + "lib.gz", + "lyt", + "mk", + "rules", + "tcl", + "v", + ], + "ihp-sg13g2": [ + "gds", + "json", + "lef", + "lib", + "lyt", + "mk", + "rules", + "tcl", + "v", + ], + "nangate45": [ + "cfg", + "gds", + "lef", + "lib", + "lyt", + "mk", + "rules", + "tcl", + "v", + ], + "sky130hd": [ + "gds", + "lef", + "lib", + "lyt", + "mk", + "rules", + "tcl", + "tlef", + "v", + ], + "sky130hs": [ + "gds", + "lef", + "lib", + "lyt", + "mk", + "rules", + "tcl", + "tlef", + "v", + ], + }.get(pdk, []) + ] + [ + "platforms/common/**/*.v", + ]), + config = ":platforms/{pdk}/config.mk".format(pdk = pdk), + libs = glob([ + "platforms/{pdk}/**/*.{ext}".format( + ext = ext, + pdk = pdk, + ) + for ext in { + "asap7": [ + "lib", + "lib.gz", + ], + "gf180": ["lib.gz"], + }.get( + pdk, + ["lib"], + ) + ]), + visibility = ["//visibility:public"], +) for pdk in [ + "asap7", + "gf180", + "ihp-sg13g2", + "nangate45", + "sky130hd", + "sky130hs", +]] diff --git a/flow/BUILD.bazel b/flow/BUILD.bazel deleted file mode 100644 index 62e0125948..0000000000 --- a/flow/BUILD.bazel +++ /dev/null @@ -1,92 +0,0 @@ -load("@bazel-orfs//:openroad.bzl", "orfs_pdk") - -exports_files( - ["scripts/variables.yaml"], - visibility = ["//visibility:public"], -) - -# files shared between scripts/synth.sh and scripts/flow.sh steps -MAKEFILE_SHARED = [ - "scripts/variables.json", - "scripts/*.py", - "scripts/*.sh", - "scripts/*.yaml", - "scripts/*.mk", -] - -# makefile and scripts used by script/synth.sh steps -filegroup( - name = "makefile_yosys", - srcs = ["Makefile"], - data = glob(MAKEFILE_SHARED + [ - "scripts/*.script", - "scripts/util.tcl", - "scripts/synth*.tcl", - "scripts/synth*.v", - "platforms/common/**/*.v", - ]) + [ - "//flow/util:makefile_yosys", - ], - visibility = ["//visibility:public"], -) - -# makefile and scripts used in the scripts/flow.sh steps -filegroup( - name = "makefile", - srcs = ["Makefile"], - data = glob(MAKEFILE_SHARED + [ - "scripts/*.tcl", - "platforms/common/**/*.v", - ]) + [ - "//flow/util:makefile", - ], - visibility = ["//visibility:public"], -) - -[orfs_pdk( - name = pdk, - srcs = glob([ - "platforms/{pdk}/**/*.{ext}".format( - ext = ext, - pdk = pdk, - ) - for ext in [ - "gds", - "lef", - "lyp", - "lyt", - "mk", - "rules", - "tcl", - "v", - ] + { - "asap7": ["cfg", "json", "lib.gz", "sdc"], - "gf180": ["cfg", "layermap", "lyt_generic"], - "ihp-sg13g2": ["json"], - "nangate45": ["cfg"], - "sky130hd": ["json", "tlef"], - "sky130hs": ["json", "tlef"], - }.get(pdk, []) - ] + [ - "platforms/common/**/*.v", - ]), - libs = glob([ - "platforms/{pdk}/**/*.{ext}".format( - pdk = pdk, - ext = ext, - ) - for ext in { - "asap7": ["lib", "lib.gz"], - "gf180": ["lib.gz"], - }.get(pdk, ["lib"]) - ]), - config = ":platforms/{pdk}/config.mk".format(pdk = pdk), - visibility = ["//visibility:public"], -) for pdk in [ - "asap7", - "gf180", - "ihp-sg13g2", - "nangate45", - "sky130hd", - "sky130hs", -]] diff --git a/flow/Makefile b/flow/Makefile index dbb4692d96..1bb45047a4 100644 --- a/flow/Makefile +++ b/flow/Makefile @@ -200,7 +200,6 @@ do-klayout: --template $(KLAYOUT_TECH_FILE) \ --output $(OBJECTS_DIR)/klayout.lyt \ --lef-files $(OBJECTS_DIR)/klayout_tech.lef $(SC_LEF) $(ADDITIONAL_LEFS) \ - --reference-dir $(RESULTS_DIR) \ --map-files $(wildcard $(FLOW_HOME)/platforms/$(PLATFORM)/*map) $(OBJECTS_DIR)/klayout_wrap.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef @@ -212,8 +211,7 @@ do-klayout_wrap: $(PYTHON_EXE) $(UTILS_DIR)/generate_klayout_tech.py \ --template $(KLAYOUT_TECH_FILE) \ --output $(OBJECTS_DIR)/klayout_wrap.lyt \ - --lef-files $(OBJECTS_DIR)/klayout_tech.lef $(WRAP_LEFS) \ - --reference-dir $(OBJECTS_DIR)/def + --lef-files $(OBJECTS_DIR)/klayout_tech.lef $(WRAP_LEFS) $(WRAPPED_LEFS): mkdir -p $(OBJECTS_DIR)/lef $(OBJECTS_DIR)/def @@ -315,17 +313,20 @@ $(OBJECTS_DIR)/copyright.txt: @touch $(OBJECTS_DIR)/copyright.txt define OPEN_GUI_SHORTCUT -.PHONY: gui_$(1) open_$(1) +.PHONY: gui_$(1) open_$(1) web_$(1) gui_$(1): gui_$(2) open_$(1): open_$(2) +web_$(1): web_$(2) endef define OPEN_GUI -.PHONY: open_$(1) gui_$(1) +.PHONY: open_$(1) gui_$(1) web_$(1) open_$(1): $(2)=$(RESULTS_DIR)/$(1) $(OPENROAD_NO_EXIT_CMD) $(SCRIPTS_DIR)/open.tcl gui_$(1): $(2)=$(RESULTS_DIR)/$(1) $(OPENROAD_GUI_CMD) $(SCRIPTS_DIR)/open.tcl +web_$(1): + $(2)=$(RESULTS_DIR)/$(1) $(OPENROAD_WEB_CMD) $(SCRIPTS_DIR)/open.tcl endef # Enables "make gui_5_1_grt-failed" diff --git a/flow/README.md b/flow/README.md new file mode 100644 index 0000000000..9c4f2ff678 --- /dev/null +++ b/flow/README.md @@ -0,0 +1,58 @@ +# bazel-orfs + +Bazel front-end for the ORFS Make flow. Designs declared via +`config.mk` are exposed as Bazel targets through +[bazel-orfs](https://github.com/The-OpenROAD-Project/bazel-orfs). + +## Targets + +For a design at `flow/designs///` with `DESIGN_NAME = +`: + +| Target | Output | +|---|---| +| `_synth` | Yosys synthesis | +| `_floorplan` | Floorplan + I/O placement | +| `_place` | Placement | +| `_cts` | Clock tree synthesis | +| `_grt` | Global routing | +| `_route` | Detailed routing | +| `_final` | Final + fill | +| `_generate_abstract` | LEF/LIB abstract | +| `_test` | Full flow + QoR check against `rules-base.json` | +| `_update` | Rebuild and write thresholds back to `rules-base.json` | + +Stages depend on the previous, so `_final` runs the whole flow. + +```bash +bazelisk build //flow/designs/asap7/gcd:gcd_synth +bazelisk test //flow/designs/asap7/gcd:gcd_test +bazelisk run //flow/designs/asap7/gcd:gcd_update +bazelisk query //flow/designs/asap7/...:* +``` + +## Adding a design + +```starlark +# flow/designs///BUILD.bazel +load("//flow/designs:design.bzl", "design") + +design() +``` + +If `flow/designs/src//BUILD.bazel` is missing, add: + +```starlark +load("//flow/designs:design.bzl", "files") + +files("verilog") +``` + +A design counts as CI-tested iff `rules-base.json` exists; without it +the generated targets get `tags = ["manual"]`. + +## Parallelism + +Each OpenROAD invocation takes `-threads `. A wildcard +`bazelisk test` runs designs in parallel and overcommits the host. Cap +with `--jobs=N`. diff --git a/flow/designs/.gitignore b/flow/designs/.gitignore new file mode 100644 index 0000000000..3082923988 --- /dev/null +++ b/flow/designs/.gitignore @@ -0,0 +1,2 @@ +# Ignore the rapidus2hp symlink (leading slash anchors to this directory, no trailing slash to match symlink) +/rapidus2hp diff --git a/flow/designs/BUILD b/flow/designs/BUILD new file mode 100644 index 0000000000..0fe28bc544 --- /dev/null +++ b/flow/designs/BUILD @@ -0,0 +1 @@ +exports_files(["BUILD"]) diff --git a/flow/designs/asap7/aes-block/BUILD b/flow/designs/asap7/aes-block/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/aes-block/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/aes-block/constraint.sdc b/flow/designs/asap7/aes-block/constraint.sdc index 05f966e5e6..3bf7f2f029 100644 --- a/flow/designs/asap7/aes-block/constraint.sdc +++ b/flow/designs/asap7/aes-block/constraint.sdc @@ -1,13 +1,12 @@ set clk_name clk set clk_port_name clk set clk_period 450 -set clk_io_pct 0.2 -set clk_port [get_ports $clk_port_name] +# Match the old set_input/output_delay = 0.2 * clk_period budget, as +# optimization targets only (no set_input/output_delay — see rationale in +# $PLATFORM_DIR/constraints.sdc). +set in2reg_max [expr { $clk_period * 0.8 }] +set reg2out_max [expr { $clk_period * 0.8 }] +set in2out_max [expr { $clk_period * 0.6 }] -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [all_inputs -no_clocks] - -set_input_delay [expr $clk_period * $clk_io_pct] -clock $clk_name $non_clock_inputs -set_output_delay [expr $clk_period * $clk_io_pct] -clock $clk_name [all_outputs] +source $::env(PLATFORM_DIR)/constraints.sdc diff --git a/flow/designs/asap7/aes-block/rules-base.json b/flow/designs/asap7/aes-block/rules-base.json index f727c2d2bf..788ac0af85 100644 --- a/flow/designs/asap7/aes-block/rules-base.json +++ b/flow/designs/asap7/aes-block/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "83fdb355d67936eac58202298e680864403e2e7c", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "d11001678e38263ee1a14c55bc48935b767ef70e", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 2010.0, + "value": 1930.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,7 +18,7 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 7139, + "value": 6699, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { @@ -28,19 +38,19 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -78.0, + "value": -89.2, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -4840.0, + "value": -3220.0, "compare": ">=" }, "cts__timing__hold__ws": { - "value": -52.3, + "value": -22.5, "compare": ">=" }, "cts__timing__hold__tns": { - "value": -6310.0, + "value": -90.0, "compare": ">=" }, "globalroute__antenna_diodes_count": { @@ -48,23 +58,23 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -125.0, + "value": -22.5, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -3660.0, + "value": -90.0, "compare": ">=" }, "globalroute__timing__hold__ws": { - "value": -25.9, + "value": -22.5, "compare": ">=" }, "globalroute__timing__hold__tns": { - "value": -1080.0, + "value": -90.0, "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 51873, + "value": 49870, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -94.0, + "value": -31.5, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -1470.0, + "value": -123.0, "compare": ">=" }, "finish__timing__hold__ws": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 7205, + "value": 6742, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/asap7/aes-mbff/BUILD b/flow/designs/asap7/aes-mbff/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/aes-mbff/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/aes-mbff/constraint.sdc b/flow/designs/asap7/aes-mbff/constraint.sdc index fd7d806652..09b55083d9 100644 --- a/flow/designs/asap7/aes-mbff/constraint.sdc +++ b/flow/designs/asap7/aes-mbff/constraint.sdc @@ -1,13 +1,12 @@ set clk_name clk set clk_port_name clk set clk_period 380 -set clk_io_pct 0.2 -set clk_port [get_ports $clk_port_name] +# Match the old set_input/output_delay = 0.2 * clk_period budget, as +# optimization targets only (no set_input/output_delay — see rationale in +# $PLATFORM_DIR/constraints.sdc). +set in2reg_max [expr { $clk_period * 0.8 }] +set reg2out_max [expr { $clk_period * 0.8 }] +set in2out_max [expr { $clk_period * 0.6 }] -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [all_inputs -no_clocks] - -set_input_delay [expr $clk_period * $clk_io_pct] -clock $clk_name $non_clock_inputs -set_output_delay [expr $clk_period * $clk_io_pct] -clock $clk_name [all_outputs] +source $::env(PLATFORM_DIR)/constraints.sdc diff --git a/flow/designs/asap7/aes-mbff/rules-base.json b/flow/designs/asap7/aes-mbff/rules-base.json index 08c173c711..417a3a04fc 100644 --- a/flow/designs/asap7/aes-mbff/rules-base.json +++ b/flow/designs/asap7/aes-mbff/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "f657f68d8fc6a5a1050e3594864d42efefcbc3ad", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "a04d44da52dba7d4a701d80927ba32d1d89ef9a1", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 1900.0, + "value": 1780.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 2103, + "value": 1898, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 19594, + "value": 18149, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,19 +30,19 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 1704, + "value": 1578, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 1704, + "value": 1578, "compare": "<=" }, "cts__timing__setup__ws": { - "value": -28.8, + "value": -25.4, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -164.0, + "value": -82.7, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -41.3, + "value": -19.7, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -1010.0, + "value": -76.7, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 74169, + "value": 69010, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -31.8, + "value": -19.0, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -235.0, + "value": -76.0, "compare": ">=" }, "finish__timing__hold__ws": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 2206, + "value": 1952, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/asap7/aes/BUILD b/flow/designs/asap7/aes/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/aes/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/aes/rules-base.json b/flow/designs/asap7/aes/rules-base.json index 5d37adb92a..8aa7ffb047 100644 --- a/flow/designs/asap7/aes/rules-base.json +++ b/flow/designs/asap7/aes/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "3882365f5e814a21a600274234b3a087270968d4", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "a04d44da52dba7d4a701d80927ba32d1d89ef9a1", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 1900.0, + "value": 1780.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 2032, + "value": 1849, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 19153, + "value": 17477, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,19 +30,19 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 1666, + "value": 1520, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 1666, + "value": 1520, "compare": "<=" }, "cts__timing__setup__ws": { - "value": -28.8, + "value": -19.0, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -164.0, + "value": -76.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -37.6, + "value": -20.0, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -846.0, + "value": -78.2, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 66246, + "value": 60650, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -39.9, + "value": -20.8, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -384.0, + "value": -77.8, "compare": ">=" }, "finish__timing__hold__ws": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 2108, + "value": 1884, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/asap7/aes_lvt/BUILD b/flow/designs/asap7/aes_lvt/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/aes_lvt/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/aes_lvt/constraint.sdc b/flow/designs/asap7/aes_lvt/constraint.sdc index c55ecb8cf6..68227cb969 100644 --- a/flow/designs/asap7/aes_lvt/constraint.sdc +++ b/flow/designs/asap7/aes_lvt/constraint.sdc @@ -1,13 +1,12 @@ set clk_name clk set clk_port_name clk set clk_period 360 -set clk_io_pct 0.2 -set clk_port [get_ports $clk_port_name] +# Match the old set_input/output_delay = 0.2 * clk_period budget, as +# optimization targets only (no set_input/output_delay — see rationale in +# $PLATFORM_DIR/constraints.sdc). +set in2reg_max [expr { $clk_period * 0.8 }] +set reg2out_max [expr { $clk_period * 0.8 }] +set in2out_max [expr { $clk_period * 0.6 }] -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [all_inputs -no_clocks] - -set_input_delay [expr $clk_period * $clk_io_pct] -clock $clk_name $non_clock_inputs -set_output_delay [expr $clk_period * $clk_io_pct] -clock $clk_name [all_outputs] +source $::env(PLATFORM_DIR)/constraints.sdc diff --git a/flow/designs/asap7/aes_lvt/rules-base.json b/flow/designs/asap7/aes_lvt/rules-base.json index 2fb6b362f8..edcc2391ea 100644 --- a/flow/designs/asap7/aes_lvt/rules-base.json +++ b/flow/designs/asap7/aes_lvt/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "7cb97d6d20f0fb4831af6dc20aea1d411aecc09a", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "d84684a5256bf993bde8bccdff31af8237663019", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 1910.0, + "value": 1780.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 1954, + "value": 1818, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 17740, + "value": 17450, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +30,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 1543, + "value": 1517, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 1543, + "value": 1517, "compare": "<=" }, "cts__timing__setup__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 68956, + "value": 65052, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -18.0, + "value": -27.0, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -72.0, + "value": -94.2, "compare": ">=" }, "finish__timing__hold__ws": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 1992, + "value": 1846, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/asap7/cva6/BUILD b/flow/designs/asap7/cva6/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/cva6/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/cva6/rules-base.json b/flow/designs/asap7/cva6/rules-base.json index 6de4b33e01..79ed1a192b 100644 --- a/flow/designs/asap7/cva6/rules-base.json +++ b/flow/designs/asap7/cva6/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "b2dd6370ed8478581c9a1ee9550b27cfeec93f86", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "bc34db09fd40dc22fbdf270e8983632fcfad1e91", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 18784.414249, + "value": 18700.0, "compare": "<=" }, "constraints__clocks__count": { diff --git a/flow/designs/asap7/ethmac/BUILD b/flow/designs/asap7/ethmac/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/ethmac/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/ethmac/rules-base.json b/flow/designs/asap7/ethmac/rules-base.json index a33d0ccd91..5f8cfb627c 100644 --- a/flow/designs/asap7/ethmac/rules-base.json +++ b/flow/designs/asap7/ethmac/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "80bd19c2d0b116a1d88f0f84cbfe00da3a31d68c", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "ef3244761c23b0d7c0d2ee7eaf97545ad0b74921", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 8450.0, "compare": "<=" @@ -12,7 +22,7 @@ "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 68920, + "value": 68676, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +30,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 5993, + "value": 5972, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 5993, + "value": 5972, "compare": "<=" }, "cts__timing__setup__ws": { @@ -32,7 +42,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -1530.0, + "value": -1370.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -2140.0, + "value": -1790.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -102.0, + "value": -98.5, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -1630.0, + "value": -1450.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/asap7/ethmac_lvt/BUILD b/flow/designs/asap7/ethmac_lvt/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/ethmac_lvt/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/ethmac_lvt/rules-base.json b/flow/designs/asap7/ethmac_lvt/rules-base.json index 3f6b71c8b5..b36fe4ec4a 100644 --- a/flow/designs/asap7/ethmac_lvt/rules-base.json +++ b/flow/designs/asap7/ethmac_lvt/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "33992b5da1dc882c4608f47bc0409c878a97d6c8", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "0b1dcc331782e587fe4b21d90bfc8961d47c4a16", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 8418.677166, "compare": "<=" @@ -28,7 +38,7 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -21.7, + "value": -21.4, "compare": ">=" }, "cts__timing__setup__tns": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -263.0, + "value": -260.0, "compare": ">=" }, "globalroute__timing__hold__ws": { diff --git a/flow/designs/asap7/gcd-ccs/BUILD b/flow/designs/asap7/gcd-ccs/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/gcd-ccs/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/gcd-ccs/rules-base.json b/flow/designs/asap7/gcd-ccs/rules-base.json index 9b72922970..e5c6f561eb 100644 --- a/flow/designs/asap7/gcd-ccs/rules-base.json +++ b/flow/designs/asap7/gcd-ccs/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "9b1daddbf16520e983085be7f06a02bc2fc2e27a", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "2d3fbf9f1b7357c0cadb1e193d984ae458d68fa8", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 43.1, "compare": "<=" @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 1165, + "value": 1162, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -86.7, + "value": -84.2, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -1270.0, + "value": -1200.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/asap7/gcd/BUILD b/flow/designs/asap7/gcd/BUILD index 0736578fe6..527d6542e1 100644 --- a/flow/designs/asap7/gcd/BUILD +++ b/flow/designs/asap7/gcd/BUILD @@ -1,20 +1,3 @@ -load("@bazel-orfs//:openroad.bzl", "orfs_flow") +load("//flow/designs:design.bzl", "design") -orfs_flow( - name = "gcd", - arguments = { - # Faster builds - "SKIP_INCREMENTAL_REPAIR": "1", - "GPL_TIMING_DRIVEN": "0", - "SKIP_LAST_GASP": "1", - # Various - "DIE_AREA": "0 0 16.2 16.2", - "CORE_AREA": "1.08 1.08 15.12 15.12", - "PLACE_DENSITY": "0.35", - }, - sources = { - "RULES_JSON": [":rules-base.json"], - "SDC_FILE": [":constraint.sdc"], - }, - verilog_files = ["//flow/designs/src/gcd:verilog"], -) +design(config = "config.mk") diff --git a/flow/designs/asap7/gcd/rules-base.json b/flow/designs/asap7/gcd/rules-base.json index becba41774..a4e8fca570 100644 --- a/flow/designs/asap7/gcd/rules-base.json +++ b/flow/designs/asap7/gcd/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "9b1daddbf16520e983085be7f06a02bc2fc2e27a", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "2d3fbf9f1b7357c0cadb1e193d984ae458d68fa8", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 43.1, "compare": "<=" @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -112.0, + "value": -110.0, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -1790.0, + "value": -1770.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 1324, + "value": 1302, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -104.0, + "value": -99.2, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -1570.0, + "value": -1520.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/asap7/ibex/BUILD b/flow/designs/asap7/ibex/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/ibex/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/ibex/rules-base.json b/flow/designs/asap7/ibex/rules-base.json index f36982ad3e..0439318ef4 100644 --- a/flow/designs/asap7/ibex/rules-base.json +++ b/flow/designs/asap7/ibex/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "c71c7862fff7c81741b828a339928acda020c3b5", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "9c66bcd0e25e2d13f6ede8450ee0fede3085d513", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 2440.0, + "value": 2430.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,7 +18,7 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 2745, + "value": 2680, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { @@ -32,7 +42,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -1160.0, + "value": -1630.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -87.4, + "value": -75.7, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -9030.0, + "value": -451.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 100926, + "value": 98982, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -69.1, + "value": -52.5, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -722.0, + "value": -205.0, "compare": ">=" }, "finish__timing__hold__ws": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 2867, + "value": 2804, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/asap7/jpeg/BUILD b/flow/designs/asap7/jpeg/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/jpeg/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/jpeg/jpeg_encoder15_7nm.sdc b/flow/designs/asap7/jpeg/jpeg_encoder15_7nm.sdc index 063b06987a..59a02fa15c 100644 --- a/flow/designs/asap7/jpeg/jpeg_encoder15_7nm.sdc +++ b/flow/designs/asap7/jpeg/jpeg_encoder15_7nm.sdc @@ -3,15 +3,14 @@ current_design jpeg_encoder set clk_name clk set clk_port_name clk set clk_period 680 -set clk_io_pct 0.2 -set clk_port [get_ports $clk_port_name] +# Match the old set_input/output_delay = 0.2 * clk_period budget, as +# optimization targets only (no set_input/output_delay — see rationale in +# $PLATFORM_DIR/constraints.sdc). +set in2reg_max [expr { $clk_period * 0.8 }] +set reg2out_max [expr { $clk_period * 0.8 }] +set in2out_max [expr { $clk_period * 0.6 }] -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [all_inputs -no_clocks] - -set_input_delay [expr $clk_period * $clk_io_pct] -clock $clk_name $non_clock_inputs -set_output_delay [expr $clk_period * $clk_io_pct] -clock $clk_name [all_outputs] +source $::env(PLATFORM_DIR)/constraints.sdc set_max_fanout 10 [current_design] diff --git a/flow/designs/asap7/jpeg/rules-base.json b/flow/designs/asap7/jpeg/rules-base.json index bbcd2221de..ca27aae59b 100644 --- a/flow/designs/asap7/jpeg/rules-base.json +++ b/flow/designs/asap7/jpeg/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "b67ad398424800920e8203a11987e51a89b89070", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "d045877b85c5a9e18d5284e8ad3a41dcbc5f3f11", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 7008.24, "compare": "<=" diff --git a/flow/designs/asap7/jpeg_lvt/BUILD b/flow/designs/asap7/jpeg_lvt/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/jpeg_lvt/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/jpeg_lvt/jpeg_encoder15_7nm.sdc b/flow/designs/asap7/jpeg_lvt/jpeg_encoder15_7nm.sdc index aea1920f55..3fef65b618 100644 --- a/flow/designs/asap7/jpeg_lvt/jpeg_encoder15_7nm.sdc +++ b/flow/designs/asap7/jpeg_lvt/jpeg_encoder15_7nm.sdc @@ -3,13 +3,12 @@ current_design jpeg_encoder set clk_name clk set clk_port_name clk set clk_period 600 -set clk_io_pct 0.2 -set clk_port [get_ports $clk_port_name] +# Match the old set_input/output_delay = 0.2 * clk_period budget, as +# optimization targets only (no set_input/output_delay — see rationale in +# $PLATFORM_DIR/constraints.sdc). +set in2reg_max [expr { $clk_period * 0.8 }] +set reg2out_max [expr { $clk_period * 0.8 }] +set in2out_max [expr { $clk_period * 0.6 }] -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [all_inputs -no_clocks] - -set_input_delay [expr $clk_period * $clk_io_pct] -clock $clk_name $non_clock_inputs -set_output_delay [expr $clk_period * $clk_io_pct] -clock $clk_name [all_outputs] +source $::env(PLATFORM_DIR)/constraints.sdc diff --git a/flow/designs/asap7/jpeg_lvt/rules-base.json b/flow/designs/asap7/jpeg_lvt/rules-base.json index 5304309a43..e3daf05f53 100644 --- a/flow/designs/asap7/jpeg_lvt/rules-base.json +++ b/flow/designs/asap7/jpeg_lvt/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "c46712834957de101139bda123c9da786f05b392", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "8c44353e931d56077e9f64190819c1fe10a05909", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 7047.572508, "compare": "<=" diff --git a/flow/designs/asap7/minimal/BUILD b/flow/designs/asap7/minimal/BUILD new file mode 100644 index 0000000000..1603de4372 --- /dev/null +++ b/flow/designs/asap7/minimal/BUILD @@ -0,0 +1,6 @@ +# Skipped: minimal has no VERILOG_FILES in config.mk (empty SDC test design). +filegroup( + name = "design_config", + srcs = glob(["*.mk", "*.sdc"], allow_empty = True), + visibility = ["//visibility:public"], +) diff --git a/flow/designs/asap7/mock-alu/BUILD b/flow/designs/asap7/mock-alu/BUILD new file mode 100644 index 0000000000..958faf32e9 --- /dev/null +++ b/flow/designs/asap7/mock-alu/BUILD @@ -0,0 +1,9 @@ +load("//flow/designs:design.bzl", "design") + +design( + config = "config.mk", + user_arguments = [ + "MOCK_ALU_OPERATIONS", + "MOCK_ALU_WIDTH", + ], +) diff --git a/flow/designs/asap7/mock-alu/constraints.sdc b/flow/designs/asap7/mock-alu/constraints.sdc index f5a7e5d92d..f0cd3bd6ef 100644 --- a/flow/designs/asap7/mock-alu/constraints.sdc +++ b/flow/designs/asap7/mock-alu/constraints.sdc @@ -1,16 +1,16 @@ set clk_name clock set clk_port_name clock set clk_period 300 -set clk_io_pct 0.2 -set clk_port [get_ports $clk_port_name] +# Match the old set_input_delay = 0.7 * clk_period (tight, stress-test) +# and set_output_delay = 0.2 * clk_period budgets, as optimization targets +# only (no set_input/output_delay — see rationale in +# $PLATFORM_DIR/constraints.sdc). +set in2reg_max [expr { $clk_period * 0.3 }] +set reg2out_max [expr { $clk_period * 0.8 }] +set in2out_max [expr { $clk_period * 0.1 }] -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [all_inputs -no_clocks] - -set_input_delay [expr $clk_period * 0.7] -clock $clk_name $non_clock_inputs -set_output_delay [expr $clk_period * $clk_io_pct] -clock $clk_name [all_outputs] +source $::env(PLATFORM_DIR)/constraints.sdc set output_regs [get_cells *io_out_REG*] if { [llength $output_regs] == 0 } { diff --git a/flow/designs/asap7/mock-alu/rules-base.json b/flow/designs/asap7/mock-alu/rules-base.json index fa18407f83..bed5107006 100644 --- a/flow/designs/asap7/mock-alu/rules-base.json +++ b/flow/designs/asap7/mock-alu/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "d0a6833a306cda71e37ecddd17bb91eea73ac61d", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "40ca8160347fae3c64f7382fb857373eae66ec98", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 1640.0, "compare": "<=" @@ -28,11 +38,11 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -308.0, + "value": -289.0, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -14100.0, + "value": -17800.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -321.0, + "value": -303.0, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -18100.0, + "value": -19300.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -303.0, + "value": -285.0, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -15700.0, + "value": -18400.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/asap7/mock-cpu/BUILD b/flow/designs/asap7/mock-cpu/BUILD new file mode 100644 index 0000000000..9ee4c80c1c --- /dev/null +++ b/flow/designs/asap7/mock-cpu/BUILD @@ -0,0 +1,11 @@ +load("//flow/designs:design.bzl", "design") + +# SDC_FILE_EXTRA is a design-private path hook: set in this design's +# config.mk, source'd from this design's io.tcl, never read by ORFS. +# bazel-orfs's config_mk_parser SOURCE_VARS still stages the file into +# the sandbox; user_sources= tells the validator to leave the name +# alone (no variables.yaml entry required). +design( + config = "config.mk", + user_sources = ["SDC_FILE_EXTRA"], +) diff --git a/flow/designs/asap7/mock-cpu/config.mk b/flow/designs/asap7/mock-cpu/config.mk index 6168ebbae6..92b55b75d0 100644 --- a/flow/designs/asap7/mock-cpu/config.mk +++ b/flow/designs/asap7/mock-cpu/config.mk @@ -7,6 +7,22 @@ export VERILOG_FILES = $(wildcard $(DESIGN_HOME)/src/fifo/*.v) export SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint.sdc export SDC_FILE_EXTRA = $(DESIGN_HOME)/src/mock-array/util.tcl +# The SDC references fifo_in/ and fifo_out/ directly. Two +# knobs must agree to make those pin paths resolve in OpenSTA: +# +# 1. Yosys must keep the fifo1 module boundary through flattening. +# SYNTH_KEEP_MODULES doesn't work here because hierarchy elaboration +# specializes fifo1 into $paramod$\fifo1 before the flow's +# keep loop runs — instead we use an (* keep_hierarchy *) RTL +# attribute on the module itself (see src/fifo/fifo1.v). +# +# 2. OpenROAD must link the netlist hierarchically, otherwise +# link_design flattens the fifo_in / fifo_out instances even though +# Yosys preserved them. OPENROAD_HIERARCHICAL=1 switches link_design +# to -hier mode. (Same mechanism used by asap7/mock-alu, cva6, +# swerv_wrapper.) +export OPENROAD_HIERARCHICAL = 1 + export CORE_UTILIZATION = 40 export CORE_ASPECT_RATIO = 1 export CORE_MARGIN = 2 diff --git a/flow/designs/asap7/mock-cpu/constraint.sdc b/flow/designs/asap7/mock-cpu/constraint.sdc index c2a2c3b26a..7cde9a6035 100644 --- a/flow/designs/asap7/mock-cpu/constraint.sdc +++ b/flow/designs/asap7/mock-cpu/constraint.sdc @@ -1,6 +1,31 @@ -# https://gist.github.com/brabect1/7695ead3d79be47576890bbcd61fe426 +# mock-cpu: multi-clock async-FIFO bridge macro. +# +# PR #4170 idiom (multi-clock variant): optimization targets use +# set_max_delay -ignore_clock_latency so hold-fixing does not invent +# phantom budgets against the deep clock tree's insertion delay. See +# flow/platforms/asap7/constraints.sdc lines 1-56 for the single-clock +# rationale; this file can't `source` that template because mock-cpu +# has two async clocks. +# +# The IO optimization targets below are deliberately surgical: +# set_max_delay from top-level ports to fifo_in/ and from +# fifo_out/ to top-level ports, rather than -to [all_registers] / +# -from [all_registers]. Functionally equivalent for this topology +# (all IO paths begin/end at the FIFO), but it exercises more flow +# features — SYNTH_KEEP_MODULES hierarchy preservation, hierarchical +# get_pins selection, and io2fifo/fifo2io path grouping. Intentional +# regression coverage; do not "simplify" back to [all_registers]. # -# This fifo is from http://www.sunburst-design.com/papers/CummingsSNUG2002SJ_FIFO1.pdf +# (* keep_hierarchy *) on the fifo1 module (src/fifo/fifo1.v) preserves +# the FIFO instance boundary through Yosys flattening so the fifo_in/ +# and fifo_out/ paths below resolve. An RTL attribute is used rather +# than SYNTH_KEEP_MODULES because the latter matches exact module names +# and hierarchy elaboration specializes fifo1 into $paramod$\fifo1 +# before SYNTH_KEEP_MODULES runs. +# +# FIFO RTL: Cummings SNUG 2002 — gray-coded pointers, 2-FF synchronizers +# (sync_r2w, sync_w2r). Metastability handled by construction. +# https://gist.github.com/brabect1/7695ead3d79be47576890bbcd61fe426 source $::env(SDC_FILE_EXTRA) @@ -10,57 +35,73 @@ set clk_period 333 set clk2_period 1000 set clk1_name clk -create_clock -name $clk1_name -period $clk_period -waveform \ - [list 0 [expr $clk_period/2]] [get_ports $clk1_name] +create_clock -name $clk1_name -period $clk_period \ + -waveform [list 0 [expr $clk_period/2]] [get_ports $clk1_name] set_clock_uncertainty 10 [get_clocks $clk1_name] set clk2_name clk_uncore -create_clock -name $clk2_name -period $clk2_period -waveform \ - [list 0 [expr $clk_period/2]] [get_ports $clk2_name] +create_clock -name $clk2_name -period $clk2_period \ + -waveform [list 0 [expr $clk2_period/2]] [get_ports $clk2_name] set_clock_uncertainty 10 [get_clocks $clk2_name] + set_clock_groups -group $clk1_name -group $clk2_name -asynchronous -allow_paths +# Async reset distribution. set_false_path -from [get_ports *rst_n] set_false_path -to [get_ports *rst_n] -# The mock-cpu is a macro connecting to a slower peripheral bus and possibly DRAM. -# Avoid using set_input/output_delay here. -# Register-to-register paths are checked at the mock-cpu level or from the mock-cpu -# .lib file to an external register. -# Timing closure is ensured at the SoC level where the mock-cpu is connected. -# Instead, set strict optimization targets for inputs and outputs to ensure -# constraints are not too loose. -set non_clk_inputs {} -set clock_ports [list [get_ports $clk1_name] [get_ports $clk2_name]] -foreach input [all_inputs] { - if { [lsearch -exact $clock_ports $input] == -1 } { - lappend non_clk_inputs $input - } -} +# Timing firewall: surgical port <-> FIFO boundary optimization targets. +# Internal 1024-stage pipeline is reg2reg, constrained by the clock +# period alone. IO paths end/begin at the FIFO boundary — no further. +set io_target 80 -set_max_delay 80 -from $non_clk_inputs -to [all_outputs] -group_path -name in2out -from $non_clk_inputs -to [all_outputs] +set fifo_in_wdata [get_pins fifo_in/wdata[*]] +set fifo_in_winc [get_pins fifo_in/winc] +set fifo_out_rinc [get_pins fifo_out/rinc] -set all_register_outputs [get_pins -of_objects [all_registers] -filter {direction == output}] -set_max_delay 80 -from $non_clk_inputs -to [all_registers] -set_max_delay 80 -from $all_register_outputs -to [all_outputs] -group_path -name in2reg -from $non_clk_inputs -to [all_registers] +# Port -> FIFO. -to on a hierarchical instance input pin is accepted: +# OpenSTA traverses into the instance and finds the leaf endpoint. +set_max_delay -ignore_clock_latency $io_target \ + -from [get_ports wdata*] -to $fifo_in_wdata +set_max_delay -ignore_clock_latency $io_target \ + -from [get_ports winc] -to $fifo_in_winc +set_max_delay -ignore_clock_latency $io_target \ + -from [get_ports rinc] -to $fifo_out_rinc + +# FIFO -> Port. The symmetric surgical form -from $fifo_out_ +# hits STA-1554 ("not a valid start point") because a hierarchical +# instance output pin has no implicit launch clock. Use +# [all_registers] instead — OPENROAD_HIERARCHICAL=1 plus the fifo1 +# keep_hierarchy makes [all_registers] enumerate leaf flops inside +# fifo_out (fifomem and pointer-sync flops) whose Q pins are valid +# start points, matching the platform template's single-clock form. +# rdata is excluded here; it's false_path'd at the bottom. +set_max_delay -ignore_clock_latency $io_target \ + -from [all_registers] -to [get_ports rempty] +set_max_delay -ignore_clock_latency $io_target \ + -from [all_registers] -to [get_ports wfull] + +group_path -name io2fifo \ + -from [all_inputs -no_clocks] \ + -to [list $fifo_in_wdata $fifo_in_winc $fifo_out_rinc] group_path -name reg2out -from [all_registers] -to [all_outputs] group_path -name reg2reg -from [all_registers] -to [all_registers] -## Dual clock fifo timing constraints -# Using fastest clock as constaint +# Dual-clock FIFO CDC: bound combinational delay on pointer-sync paths +# (sync_r2w, sync_w2r) to the fastest clock period, ignore clock +# latency (deep tree), and declare hold false — gray-coded pointers +# and 2-FF synchronizers handle metastability by construction. set cdc_max_delay $clk_period - -# rdata from fifo_out goes directly to I/O-pins so we need special handling of this case -# to ignore timing path from wclk -> rdata for this special case -# In normal cases fifo output (rdata) will most likely have a FF on I/O output signal -set_false_path -from $clk1_name -to [match_pins rdata* output 0] - -# Set timing constraint between clock domains set_max_delay $cdc_max_delay -from $clk1_name -to $clk2_name -ignore_clock_latency set_max_delay $cdc_max_delay -from $clk2_name -to $clk1_name -ignore_clock_latency - -# Hold times between clock domain makes no sense, and should just be ignored set_false_path -hold -from $clk1_name -to $clk2_name set_false_path -hold -from $clk2_name -to $clk1_name + +# rdata port has no launch FF on the IO side. It's driven +# combinationally by fifo_out.fifomem (mem[raddr]): +# clk-clocked fifomem flops -> rdata (wclk launch path) +# clk_uncore-clocked rbin -> raddr -> mem mux -> rdata (rclk launch) +# Both are "valid when rempty is low" by FIFO protocol, not a +# single-cycle timing. Declare every path to rdata as false — normal +# FIFO deployments would put an FF on rdata in the consumer domain. +set_false_path -to [get_ports rdata*] diff --git a/flow/designs/asap7/mock-cpu/rules-base.json b/flow/designs/asap7/mock-cpu/rules-base.json index c2a38b7ff2..8fada3953e 100644 --- a/flow/designs/asap7/mock-cpu/rules-base.json +++ b/flow/designs/asap7/mock-cpu/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "771a9d0326dc83e6280f73ddf3224fc1ea11b6d2", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "2f58a268bf553a76653f0379ec897523fbe0e817", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 7302.54, + "value": 7400.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 7379, + "value": 7471, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 46274, + "value": 47168, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,19 +30,19 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 530, + "value": 4102, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 530, + "value": 4102, "compare": "<=" }, "cts__timing__setup__ws": { - "value": -89.5, + "value": -16.6, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -1730.0, + "value": -66.6, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -90.9, + "value": -16.6, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -2160.0, + "value": -66.6, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 50994, + "value": 55190, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,23 +90,23 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -84.6, + "value": -16.6, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -2050.0, + "value": -66.6, "compare": ">=" }, "finish__timing__hold__ws": { - "value": -16.6, + "value": -17.4, "compare": ">=" }, "finish__timing__hold__tns": { - "value": -66.6, + "value": -67.3, "compare": ">=" }, "finish__design__instance__area": { - "value": 7617, + "value": 8045, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/asap7/riscv32i-mock-sram/BUILD b/flow/designs/asap7/riscv32i-mock-sram/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/riscv32i-mock-sram/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/riscv32i-mock-sram/fakeram7_256x32/BUILD b/flow/designs/asap7/riscv32i-mock-sram/fakeram7_256x32/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/riscv32i-mock-sram/fakeram7_256x32/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/riscv32i-mock-sram/rules-base.json b/flow/designs/asap7/riscv32i-mock-sram/rules-base.json index fe4797062a..1827aeca17 100644 --- a/flow/designs/asap7/riscv32i-mock-sram/rules-base.json +++ b/flow/designs/asap7/riscv32i-mock-sram/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "52b64582f28d0ff10363e398dcb68a7ada693e7a", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "dcacb109edc520790edef0e3dafa7f41c263bb4f", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 1570.0, "compare": "<=" @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -56.5, + "value": -47.5, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -209.0, + "value": -190.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 65578, + "value": 64405, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -66.8, + "value": -61.6, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -363.0, + "value": -230.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/asap7/riscv32i/BUILD b/flow/designs/asap7/riscv32i/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/riscv32i/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/riscv32i/rules-base.json b/flow/designs/asap7/riscv32i/rules-base.json index b36cbd984a..e898153053 100644 --- a/flow/designs/asap7/riscv32i/rules-base.json +++ b/flow/designs/asap7/riscv32i/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "1b153640320fe931005e9414a100c25715206b08", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "3cda72525274bb1b952aec8e0a640cf60c42b6da", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 2830.0, + "value": 2810.0, "compare": "<=" }, "constraints__clocks__count": { @@ -28,11 +38,11 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -48.6, + "value": -47.5, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -191.0, + "value": -190.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -60.9, + "value": -47.5, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -3290.0, + "value": -190.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 67276, + "value": 61129, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -50.0, + "value": -47.5, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -6710.0, + "value": -190.0, "compare": ">=" }, "finish__timing__hold__ws": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 3070, + "value": 3052, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/asap7/swerv_wrapper/BUILD b/flow/designs/asap7/swerv_wrapper/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/swerv_wrapper/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/swerv_wrapper/constraint.sdc b/flow/designs/asap7/swerv_wrapper/constraint.sdc index 99e95e8e24..a3eb1dd11a 100644 --- a/flow/designs/asap7/swerv_wrapper/constraint.sdc +++ b/flow/designs/asap7/swerv_wrapper/constraint.sdc @@ -3,13 +3,12 @@ current_design swerv_wrapper set clk_name core_clock set clk_port_name clk set clk_period 1600 -set clk_io_pct 0.2 -set clk_port [get_ports $clk_port_name] +# Match the old set_input/output_delay = 0.2 * clk_period budget, as +# optimization targets only (no set_input/output_delay — see rationale in +# $PLATFORM_DIR/constraints.sdc). +set in2reg_max [expr { $clk_period * 0.8 }] +set reg2out_max [expr { $clk_period * 0.8 }] +set in2out_max [expr { $clk_period * 0.6 }] -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [all_inputs -no_clocks] - -set_input_delay [expr $clk_period * $clk_io_pct] -clock $clk_name $non_clock_inputs -set_output_delay [expr $clk_period * $clk_io_pct] -clock $clk_name [all_outputs] +source $::env(PLATFORM_DIR)/constraints.sdc diff --git a/flow/designs/asap7/swerv_wrapper/lef/BUILD b/flow/designs/asap7/swerv_wrapper/lef/BUILD new file mode 100644 index 0000000000..14238a10ec --- /dev/null +++ b/flow/designs/asap7/swerv_wrapper/lef/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("lef") diff --git a/flow/designs/asap7/swerv_wrapper/lib/BUILD b/flow/designs/asap7/swerv_wrapper/lib/BUILD new file mode 100644 index 0000000000..c477f56c5e --- /dev/null +++ b/flow/designs/asap7/swerv_wrapper/lib/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("lib") diff --git a/flow/designs/asap7/swerv_wrapper/rules-base.json b/flow/designs/asap7/swerv_wrapper/rules-base.json index 037a9c707e..2869bcbb7e 100644 --- a/flow/designs/asap7/swerv_wrapper/rules-base.json +++ b/flow/designs/asap7/swerv_wrapper/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "68ba4d0498b5f5509620f1587c58f834db0e2ba5", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "1dad51c25993385e0c22055e59b392b87bf78f13", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 52700.0, "compare": "<=" @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 54990, + "value": 54927, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 155444, + "value": 155203, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +30,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 13517, + "value": 13496, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 13517, + "value": 13496, "compare": "<=" }, "cts__timing__setup__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 1288494, + "value": 1287970, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,23 +90,23 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -142.0, + "value": -319.0, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -2390.0, + "value": -47000.0, "compare": ">=" }, "finish__timing__hold__ws": { - "value": -134.0, + "value": -89.0, "compare": ">=" }, "finish__timing__hold__tns": { - "value": -17100.0, + "value": -338.0, "compare": ">=" }, "finish__design__instance__area": { - "value": 55427, + "value": 55372, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/asap7/uart/BUILD b/flow/designs/asap7/uart/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/asap7/uart/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/asap7/uart/rules-base.json b/flow/designs/asap7/uart/rules-base.json index 6d58786bf9..3081e6c0a3 100644 --- a/flow/designs/asap7/uart/rules-base.json +++ b/flow/designs/asap7/uart/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "9d22ef80013103403a033908fb53508a1d450230", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "ce0d25d00d85be55467e23ccf3d02f7dbb38fd93", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 82.7, "compare": "<=" @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -37.8, + "value": -47.0, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -1320.0, + "value": -1230.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/design.bzl b/flow/designs/design.bzl new file mode 100644 index 0000000000..b4efc0b1d0 --- /dev/null +++ b/flow/designs/design.bzl @@ -0,0 +1,96 @@ +"""BUILD boilerplate for flow/designs/.""" + +load("@orfs_designs//:designs.bzl", "orfs_design") + +# Per filegroup target: extensions included in the filegroup. +# bazel-orfs's config_mk_parser produces these target names from +# VERILOG_FILES wildcard patterns. +_GROUPS = { + "verilog": ["v", "sv"], + "include": ["v", "sv", "svh"], + "lef": ["lef"], + "lib": ["lib"], + "gds": ["gds", "gds.gz"], +} + +# Extensions exported as individual labels so bazel-orfs's per-file +# cross-package references resolve. Kept tight on purpose: globbing "*" +# silently exposes LICENSE/.gitignore/etc. as the public API surface. +# gds/gds.gz are inputs in hierarchical flows via ADDITIONAL_GDS. +_EXPORTED_EXTS = ["v", "sv", "svh", "tcl", "sdc", "def", "cfg", "lef", "lib", "gds", "gds.gz"] + +_EXPORTS_SENTINEL = "_orfs_design_exports_sentinel" + +def _export_design_files(): + """Publicly export per-file labels for cross-package references. + + bazel-orfs's config_mk_parser turns $(DESIGN_HOME)/... and + $(PLATFORM_DIR)/... paths in a config.mk into per-file bazel labels + like //flow/designs//:constraint.sdc. Those labels + resolve only if the source package calls exports_files() on the + individual files — being part of a public filegroup is not + sufficient. + + Idempotent: design() and files() both call this, and a BUILD file + may legitimately call files() more than once (e.g. files("verilog") + and files("lef") in the same package). A second native.exports_files + over the same paths is a duplicate-target error, so a sentinel rule + short-circuits subsequent calls within the same package. + """ + if _EXPORTS_SENTINEL in native.existing_rules(): + return + exported = native.glob( + ["*.{}".format(e) for e in _EXPORTED_EXTS], + allow_empty = True, + ) + if exported: + native.exports_files(exported, visibility = ["//visibility:public"]) + native.filegroup( + name = _EXPORTS_SENTINEL, + srcs = [], + visibility = ["//visibility:private"], + ) + +def design(config = "config.mk", user_arguments = [], user_sources = [], local_arguments = []): + """Standard BUILD body for flow/designs///. + + Args: + config: The config.mk file that drives this design. + user_arguments: see orfs_design — list of config.mk var names that + are project-specific (read by the design's own .tcl/.mk, not by + ORFS) and should bypass the variables.yaml validator. + user_sources: see orfs_design — list of config.mk var names that + are project-specific source-typed (path-label) hooks read only + by the design's own .tcl/.mk; the file is still staged into the + sandbox but the var name skips variables.yaml validation. + local_arguments: see orfs_design — list of config.mk var names that + are pure make-only helpers (used only via $(VAR) expansion + within the same config.mk, never read by ORFS or by user + .tcl/.mk). Dropped entirely before orfs_flow() is invoked. + """ + _export_design_files() + orfs_design( + config = config, + user_arguments = user_arguments, + user_sources = user_sources, + local_arguments = local_arguments, + blender = True, + ) + +def files(group, extra_srcs = None): + """Named filegroup over conventional extensions. + + Also exports the same files individually so per-file labels + (e.g. //flow/designs/src/gcd:gcd.v) resolve from sibling packages. + bazel-orfs's config_mk_parser emits such labels for + $(DESIGN_HOME)/src// references. + """ + exts = _GROUPS[group] + srcs = native.glob(["*.{}".format(e) for e in exts], allow_empty = True) + \ + (extra_srcs or []) + native.filegroup( + name = group, + srcs = srcs, + visibility = ["//visibility:public"], + ) + _export_design_files() diff --git a/flow/designs/gf12/aes/rules-base.json b/flow/designs/gf12/aes/rules-base.json index e4cbf9b775..57b2c21656 100644 --- a/flow/designs/gf12/aes/rules-base.json +++ b/flow/designs/gf12/aes/rules-base.json @@ -64,7 +64,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 108230, + "value": 126525, "compare": "<=" }, "detailedroute__route__drc_errors": { diff --git a/flow/designs/gf12/ariane/rules-base.json b/flow/designs/gf12/ariane/rules-base.json index 30f8f24b2b..bbbbc988fd 100644 --- a/flow/designs/gf12/ariane/rules-base.json +++ b/flow/designs/gf12/ariane/rules-base.json @@ -8,7 +8,7 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 214069, + "value": 213164, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { @@ -44,7 +44,7 @@ "compare": ">=" }, "globalroute__antenna_diodes_count": { - "value": 180, + "value": 179, "compare": "<=" }, "globalroute__timing__setup__ws": { @@ -64,7 +64,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 3948737, + "value": 3769820, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -76,7 +76,7 @@ "compare": "<=" }, "detailedroute__antenna_diodes_count": { - "value": 180, + "value": 179, "compare": "<=" }, "finish__timing__setup__ws": { @@ -96,7 +96,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 216316, + "value": 215570, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/gf12/bp_dual/rules-base.json b/flow/designs/gf12/bp_dual/rules-base.json index 08ba233a67..34fe103ff6 100644 --- a/flow/designs/gf12/bp_dual/rules-base.json +++ b/flow/designs/gf12/bp_dual/rules-base.json @@ -24,11 +24,11 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -100.0, + "value": -758.0, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -400.0, + "value": -1480000.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -60,7 +60,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 13738224, + "value": 13534035, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,7 +80,7 @@ "compare": ">=" }, "finish__timing__setup__tns": { - "value": -1440.0, + "value": -1180.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/gf12/bp_single/rules-base.json b/flow/designs/gf12/bp_single/rules-base.json index e3585846e5..51ef470134 100644 --- a/flow/designs/gf12/bp_single/rules-base.json +++ b/flow/designs/gf12/bp_single/rules-base.json @@ -28,19 +28,19 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -100.0, + "value": -632.0, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -400.0, + "value": -331000.0, "compare": ">=" }, "cts__timing__hold__ws": { - "value": -385.0, + "value": -305.0, "compare": ">=" }, "cts__timing__hold__tns": { - "value": -4460.0, + "value": -784.0, "compare": ">=" }, "globalroute__antenna_diodes_count": { @@ -48,19 +48,19 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -100.0, + "value": -470.0, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -400.0, + "value": -32700.0, "compare": ">=" }, "globalroute__timing__hold__ws": { - "value": -382.0, + "value": -275.0, "compare": ">=" }, "globalroute__timing__hold__tns": { - "value": -2210.0, + "value": -577.0, "compare": ">=" }, "detailedroute__route__wirelength": { @@ -80,15 +80,15 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -109.0, + "value": -227.0, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -415.0, + "value": -1600.0, "compare": ">=" }, "finish__timing__hold__ws": { - "value": -208.0, + "value": -126.0, "compare": ">=" }, "finish__timing__hold__tns": { diff --git a/flow/designs/gf12/ca53/rules-base.json b/flow/designs/gf12/ca53/rules-base.json index a2d1eb0a25..f2a7433e66 100644 --- a/flow/designs/gf12/ca53/rules-base.json +++ b/flow/designs/gf12/ca53/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "N/A", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "b6f8ea66f3c6e3acaa00d44dd0b50c5f80dbaaef", + "compare": "==", + "level": "warning" + }, "constraints__clocks__count": { "value": 1, "compare": "==" @@ -88,7 +98,7 @@ "compare": ">=" }, "finish__timing__hold__tns": { - "value": -3000.0, + "value": -4350.0, "compare": ">=" }, "finish__design__instance__area": { diff --git a/flow/designs/gf12/coyote/rules-base.json b/flow/designs/gf12/coyote/rules-base.json index 4daf60b172..e4286e371c 100644 --- a/flow/designs/gf12/coyote/rules-base.json +++ b/flow/designs/gf12/coyote/rules-base.json @@ -8,11 +8,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 197211, + "value": 196510, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 319739, + "value": 316293, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +20,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 27803, + "value": 27504, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 27803, + "value": 27504, "compare": "<=" }, "cts__timing__setup__ws": { @@ -44,7 +44,7 @@ "compare": ">=" }, "globalroute__antenna_diodes_count": { - "value": 264, + "value": 261, "compare": "<=" }, "globalroute__timing__setup__ws": { @@ -64,7 +64,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 4257073, + "value": 4125688, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -76,7 +76,7 @@ "compare": "<=" }, "detailedroute__antenna_diodes_count": { - "value": 264, + "value": 261, "compare": "<=" }, "finish__timing__setup__ws": { @@ -96,7 +96,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 201687, + "value": 200742, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/gf12/gcd/rules-base.json b/flow/designs/gf12/gcd/rules-base.json index 9f0efac453..2a9c1a04af 100644 --- a/flow/designs/gf12/gcd/rules-base.json +++ b/flow/designs/gf12/gcd/rules-base.json @@ -1,6 +1,6 @@ { "synth__design__instance__area__stdcell": { - "value": 111.0, + "value": 107.0, "compare": "<=" }, "constraints__clocks__count": { @@ -32,7 +32,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -94.6, + "value": -178.0, "compare": ">=" }, "cts__timing__hold__ws": { diff --git a/flow/designs/gf12/ibex/rules-base.json b/flow/designs/gf12/ibex/rules-base.json index bd5e360b32..f63e0fbc86 100644 --- a/flow/designs/gf12/ibex/rules-base.json +++ b/flow/designs/gf12/ibex/rules-base.json @@ -24,7 +24,7 @@ "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 1752, + "value": 1664, "compare": "<=" }, "cts__timing__setup__ws": { diff --git a/flow/designs/gf12/jpeg/rules-base.json b/flow/designs/gf12/jpeg/rules-base.json index 731c0a8a25..caa0d2187d 100644 --- a/flow/designs/gf12/jpeg/rules-base.json +++ b/flow/designs/gf12/jpeg/rules-base.json @@ -1,6 +1,6 @@ { "synth__design__instance__area__stdcell": { - "value": 20440.28, + "value": 19900.0, "compare": "<=" }, "constraints__clocks__count": { @@ -12,7 +12,7 @@ "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 102448, + "value": 95595, "compare": "<=" }, "detailedplace__design__violations": { @@ -28,11 +28,11 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -99.1, + "value": -96.0, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -23600.0, + "value": -18500.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +48,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -198.0, + "value": -53.2, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -13200.0, + "value": -8510.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +64,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 427011, + "value": 409584, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +80,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -207.0, + "value": -25.0, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -3360.0, + "value": -100.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/gf12/swerv_wrapper/rules-base.json b/flow/designs/gf12/swerv_wrapper/rules-base.json index 9d6f77b636..3cd8fb200b 100644 --- a/flow/designs/gf12/swerv_wrapper/rules-base.json +++ b/flow/designs/gf12/swerv_wrapper/rules-base.json @@ -8,7 +8,7 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 173119, + "value": 172761, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { @@ -28,7 +28,7 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -171.0, + "value": -75.0, "compare": ">=" }, "cts__timing__setup__tns": { @@ -36,15 +36,15 @@ "compare": ">=" }, "cts__timing__hold__ws": { - "value": -197.0, + "value": -104.0, "compare": ">=" }, "cts__timing__hold__tns": { - "value": -671.0, + "value": -376.0, "compare": ">=" }, "globalroute__antenna_diodes_count": { - "value": 107, + "value": 106, "compare": "<=" }, "globalroute__timing__setup__ws": { @@ -64,7 +64,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 2518773, + "value": 2307185, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -76,7 +76,7 @@ "compare": "<=" }, "detailedroute__antenna_diodes_count": { - "value": 107, + "value": 106, "compare": "<=" }, "finish__timing__setup__ws": { @@ -96,7 +96,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 177792, + "value": 177526, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/gf12/tinyRocket/rules-base.json b/flow/designs/gf12/tinyRocket/rules-base.json index 6d12bb810e..ade7a44031 100644 --- a/flow/designs/gf12/tinyRocket/rules-base.json +++ b/flow/designs/gf12/tinyRocket/rules-base.json @@ -32,7 +32,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -166.0, + "value": -160.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -92,7 +92,7 @@ "compare": ">=" }, "finish__timing__hold__tns": { - "value": -545.0, + "value": -160.0, "compare": ">=" }, "finish__design__instance__area": { diff --git a/flow/designs/gf180/aes-hybrid/BUILD b/flow/designs/gf180/aes-hybrid/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/gf180/aes-hybrid/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/gf180/aes-hybrid/rules-base.json b/flow/designs/gf180/aes-hybrid/rules-base.json index 42ece06169..e18fb3e874 100644 --- a/flow/designs/gf180/aes-hybrid/rules-base.json +++ b/flow/designs/gf180/aes-hybrid/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "cb76090294d41168eff7dddd95f901bb5e9fd698", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "26133b8cad5c107df83894f1aa7b5596148c932d", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 489779.41376, + "value": 459000.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 650139, + "value": 615897, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 21903, + "value": 20709, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,19 +30,19 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 1831, + "value": 1801, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 1831, + "value": 1801, "compare": "<=" }, "cts__timing__setup__ws": { - "value": -1.14, + "value": -1.0, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -137.0, + "value": -117.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -1.27, + "value": -1.14, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -154.0, + "value": -136.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 1501193, + "value": 1467928, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -1.28, + "value": -1.16, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -148.0, + "value": -130.0, "compare": ">=" }, "finish__timing__hold__ws": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 752796, + "value": 729928, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/gf180/aes/BUILD b/flow/designs/gf180/aes/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/gf180/aes/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/gf180/aes/rules-base.json b/flow/designs/gf180/aes/rules-base.json index 864fdbe9fb..fb70fa8c57 100644 --- a/flow/designs/gf180/aes/rules-base.json +++ b/flow/designs/gf180/aes/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "81caafe3373a66c19b1d410499aa01b986fb035f", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "1a64bcfb75a7d6b9ff2e80afe7eb59cafe6281f0", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 620000.0, + "value": 575000.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 806649, + "value": 746094, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 23788, + "value": 22216, "compare": "<=" }, "detailedplace__design__violations": { @@ -28,11 +38,11 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -0.925, + "value": -0.769, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -98.7, + "value": -83.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -1.04, + "value": -0.918, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -118.0, + "value": -100.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 1359688, + "value": 1320652, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -1.04, + "value": -0.92, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -112.0, + "value": -96.4, "compare": ">=" }, "finish__timing__hold__ws": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 844209, + "value": 808662, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/gf180/ibex/BUILD b/flow/designs/gf180/ibex/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/gf180/ibex/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/gf180/ibex/rules-base.json b/flow/designs/gf180/ibex/rules-base.json index 18835caee7..7c98367547 100644 --- a/flow/designs/gf180/ibex/rules-base.json +++ b/flow/designs/gf180/ibex/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "6802b34b5eefcea7ad359fcab4cbfdb147b0b429", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "57bb58dc8f0a0d1d15f65ef4931851770748c5da", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 673000.0, + "value": 666000.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 735895, + "value": 725528, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 16149, + "value": 15776, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +30,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 1404, + "value": 1372, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 1404, + "value": 1372, "compare": "<=" }, "cts__timing__setup__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -2.32, + "value": -3.92, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 1364900, + "value": 1348399, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 772718, + "value": 764974, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/gf180/jpeg/BUILD b/flow/designs/gf180/jpeg/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/gf180/jpeg/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/gf180/jpeg/rules-base.json b/flow/designs/gf180/jpeg/rules-base.json index 67e5147e29..89974a4af5 100644 --- a/flow/designs/gf180/jpeg/rules-base.json +++ b/flow/designs/gf180/jpeg/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "aa9bc304dbc45967051276389be2740a43a3bb00", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "06f0c630bca493ed46babc169447150de8b8d6b8", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 2161429.49, "compare": "<=" @@ -12,7 +22,7 @@ "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 51218, + "value": 51106, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +30,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 4454, + "value": 4444, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 4454, + "value": 4444, "compare": "<=" }, "cts__timing__setup__ws": { diff --git a/flow/designs/gf180/riscv32i/BUILD b/flow/designs/gf180/riscv32i/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/gf180/riscv32i/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/gf180/riscv32i/rules-base.json b/flow/designs/gf180/riscv32i/rules-base.json index 70205c18d5..b09a16af77 100644 --- a/flow/designs/gf180/riscv32i/rules-base.json +++ b/flow/designs/gf180/riscv32i/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "11b5d04be805a2e9c42e900e82f1fe5d500efc8e", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "ee6238ff69f9b797b6c5986d9d38992427027343", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 330000.0, "compare": "<=" @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -5.52, + "value": -4.53, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 653747, + "value": 646077, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -84,7 +94,7 @@ "compare": ">=" }, "finish__timing__setup__tns": { - "value": -4.92, + "value": -3.69, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/gf180/uart-blocks/BUILD b/flow/designs/gf180/uart-blocks/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/gf180/uart-blocks/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/gf180/uart-blocks/rules-base.json b/flow/designs/gf180/uart-blocks/rules-base.json index de20a48fd8..d340068a4a 100644 --- a/flow/designs/gf180/uart-blocks/rules-base.json +++ b/flow/designs/gf180/uart-blocks/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "48ea06f839af2a2b1eaada6c74e256cfe1064972", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "fc902d066ae5174f3fd8abcf3c8e5e5ece7cca0d", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 61300.0, "compare": "<=" @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 21354, + "value": 20528, "compare": "<=" }, "detailedroute__route__drc_errors": { diff --git a/flow/designs/gf180/uart-blocks/tapcell.tcl b/flow/designs/gf180/uart-blocks/tapcell.tcl index aa4a9daa9d..185fb32dd9 100644 --- a/flow/designs/gf180/uart-blocks/tapcell.tcl +++ b/flow/designs/gf180/uart-blocks/tapcell.tcl @@ -1,5 +1,4 @@ tapcell \ - -endcap_cpp "12" \ -distance 100 \ -tapcell_master $::env(TIE_CELL) \ -endcap_master $::env(ENDCAP_CELL) \ diff --git a/flow/designs/gf180/uart-blocks/uart_rx/BUILD b/flow/designs/gf180/uart-blocks/uart_rx/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/gf180/uart-blocks/uart_rx/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/ihp-sg13g2/aes/BUILD b/flow/designs/ihp-sg13g2/aes/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/ihp-sg13g2/aes/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/ihp-sg13g2/aes/rules-base.json b/flow/designs/ihp-sg13g2/aes/rules-base.json index d20b95319c..1ee4ac2f8b 100644 --- a/flow/designs/ihp-sg13g2/aes/rules-base.json +++ b/flow/designs/ihp-sg13g2/aes/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "03f345300073bffe008c28ae418579c55a61a047", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "9ed4fbb1904f7531317bb9162ca084ebe650f588", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 208000.0, "compare": "<=" @@ -72,7 +82,7 @@ "compare": "<=" }, "detailedroute__antenna__violating__nets": { - "value": 1, + "value": 0, "compare": "<=" }, "detailedroute__antenna_diodes_count": { diff --git a/flow/designs/ihp-sg13g2/gcd/BUILD b/flow/designs/ihp-sg13g2/gcd/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/ihp-sg13g2/gcd/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/ihp-sg13g2/gcd/rules-base.json b/flow/designs/ihp-sg13g2/gcd/rules-base.json index a74bfae7db..cb9c2aa47d 100644 --- a/flow/designs/ihp-sg13g2/gcd/rules-base.json +++ b/flow/designs/ihp-sg13g2/gcd/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "5a518ec61d78294e2e31f7564caba70a2e603a8b", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "3fd7066325a56dedbd71ff32ffc04a42a6888885", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 5260.0, "compare": "<=" @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 11091, + "value": 11061, "compare": "<=" }, "detailedroute__route__drc_errors": { diff --git a/flow/designs/ihp-sg13g2/i2c-gpio-expander/BUILD b/flow/designs/ihp-sg13g2/i2c-gpio-expander/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/ihp-sg13g2/i2c-gpio-expander/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/ihp-sg13g2/i2c-gpio-expander/I2cDeviceCtrl/BUILD b/flow/designs/ihp-sg13g2/i2c-gpio-expander/I2cDeviceCtrl/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/ihp-sg13g2/i2c-gpio-expander/I2cDeviceCtrl/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/ihp-sg13g2/i2c-gpio-expander/rules-base.json b/flow/designs/ihp-sg13g2/i2c-gpio-expander/rules-base.json index 9a579e936f..9a96ef9805 100644 --- a/flow/designs/ihp-sg13g2/i2c-gpio-expander/rules-base.json +++ b/flow/designs/ihp-sg13g2/i2c-gpio-expander/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "79bb486be7570e7e421fd58aa35e4fd0cbbafb61", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "e9b3e4abd3ee516a83a28b91bda7e49828af43df", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 358000.0, "compare": "<=" diff --git a/flow/designs/ihp-sg13g2/ibex/BUILD b/flow/designs/ihp-sg13g2/ibex/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/ihp-sg13g2/ibex/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/ihp-sg13g2/ibex/rules-base.json b/flow/designs/ihp-sg13g2/ibex/rules-base.json index 82add0697a..a9f814c115 100644 --- a/flow/designs/ihp-sg13g2/ibex/rules-base.json +++ b/flow/designs/ihp-sg13g2/ibex/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "baa8886b2d156c1dff12efae38c38956730bb00a", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "c7cf43cf1bf4c698e7c304853e39fc9cb4f2e3c4", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 280000.0, + "value": 278000.0, "compare": "<=" }, "constraints__clocks__count": { @@ -12,7 +22,7 @@ "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 20659, + "value": 20256, "compare": "<=" }, "detailedplace__design__violations": { diff --git a/flow/designs/ihp-sg13g2/jpeg/BUILD b/flow/designs/ihp-sg13g2/jpeg/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/ihp-sg13g2/jpeg/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/ihp-sg13g2/jpeg/rules-base.json b/flow/designs/ihp-sg13g2/jpeg/rules-base.json index 3e35a44c1a..1f2b9062d3 100644 --- a/flow/designs/ihp-sg13g2/jpeg/rules-base.json +++ b/flow/designs/ihp-sg13g2/jpeg/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "d3f3846909d24de41ed7f1dfcefe047a6e1ed607", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "11e38d8a9ded5dc5aa8465f4a0920d256ce76287", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 1499147.11, "compare": "<=" @@ -76,7 +86,7 @@ "compare": "<=" }, "detailedroute__antenna_diodes_count": { - "value": 142, + "value": 114, "compare": "<=" }, "finish__timing__setup__ws": { diff --git a/flow/designs/ihp-sg13g2/riscv32i/BUILD b/flow/designs/ihp-sg13g2/riscv32i/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/ihp-sg13g2/riscv32i/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/ihp-sg13g2/riscv32i/rules-base.json b/flow/designs/ihp-sg13g2/riscv32i/rules-base.json index 4815a5a94f..c3b2347a30 100644 --- a/flow/designs/ihp-sg13g2/riscv32i/rules-base.json +++ b/flow/designs/ihp-sg13g2/riscv32i/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "4db909030190a23886f847e432968207d8d195ab", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "82281e3369193e7868c1b129369f0b9dd383bb12", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 137000.0, "compare": "<=" @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 469295, + "value": 455443, "compare": "<=" }, "detailedroute__route__drc_errors": { diff --git a/flow/designs/ihp-sg13g2/spi/BUILD b/flow/designs/ihp-sg13g2/spi/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/ihp-sg13g2/spi/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/ihp-sg13g2/spi/rules-base.json b/flow/designs/ihp-sg13g2/spi/rules-base.json index 8a15a24775..662842528f 100644 --- a/flow/designs/ihp-sg13g2/spi/rules-base.json +++ b/flow/designs/ihp-sg13g2/spi/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "f7354abbc4aaadbe1314ff7b7e6d90abe00552d0", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "18a69f11ee0edcba0b5cc569a0122b51f08e7e81", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 2180.0, "compare": "<=" diff --git a/flow/designs/nangate45/aes/BUILD b/flow/designs/nangate45/aes/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/aes/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/aes/rules-base.json b/flow/designs/nangate45/aes/rules-base.json index 4553fb432d..d0029ea200 100644 --- a/flow/designs/nangate45/aes/rules-base.json +++ b/flow/designs/nangate45/aes/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "b22aff1a902c9a3b92518568a664a9940a6e620c", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "6e964d773cd4264089062fbdcb980944fd9a8f53", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 19000.0, + "value": 17700.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 22666, + "value": 21344, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 18129, + "value": 16753, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +30,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 1576, + "value": 1457, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 1576, + "value": 1457, "compare": "<=" }, "cts__timing__setup__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -0.846, + "value": -0.673, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -60,11 +70,11 @@ "compare": ">=" }, "globalroute__timing__hold__tns": { - "value": -0.398, + "value": -0.726, "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 271242, + "value": 255768, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 22909, + "value": 21629, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/nangate45/ariane133/BUILD b/flow/designs/nangate45/ariane133/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/ariane133/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/ariane133/rules-base.json b/flow/designs/nangate45/ariane133/rules-base.json index 89fe754c5f..d685a74fa3 100644 --- a/flow/designs/nangate45/ariane133/rules-base.json +++ b/flow/designs/nangate45/ariane133/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "608c7e7060b1b403c0e893101b0bd83a23b7f306", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "624023bd257848127135daf0c0d20528d8fb9315", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 823000.0, "compare": "<=" @@ -8,7 +18,7 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 827643, + "value": 827380, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { @@ -32,7 +42,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -502.0, + "value": -480.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -550.0, + "value": -572.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -84,7 +94,7 @@ "compare": ">=" }, "finish__timing__setup__tns": { - "value": -541.0, + "value": -606.0, "compare": ">=" }, "finish__timing__hold__ws": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 837050, + "value": 836564, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/nangate45/ariane136/BUILD b/flow/designs/nangate45/ariane136/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/ariane136/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/ariane136/rules-base.json b/flow/designs/nangate45/ariane136/rules-base.json index e48b97d4ae..63c71db747 100644 --- a/flow/designs/nangate45/ariane136/rules-base.json +++ b/flow/designs/nangate45/ariane136/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "6c9002c57746f4972e32be9b4cfe5005ebaef1c1", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "dc8d849db712a5c083fc68717415a5693bdf4171", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 845000.0, "compare": "<=" @@ -40,11 +50,11 @@ "compare": ">=" }, "cts__timing__hold__tns": { - "value": -8.05, + "value": -5.55, "compare": ">=" }, "globalroute__antenna_diodes_count": { - "value": 200, + "value": 199, "compare": "<=" }, "globalroute__timing__setup__ws": { @@ -76,7 +86,7 @@ "compare": "<=" }, "detailedroute__antenna_diodes_count": { - "value": 201, + "value": 199, "compare": "<=" }, "finish__timing__setup__ws": { diff --git a/flow/designs/nangate45/black_parrot/BUILD b/flow/designs/nangate45/black_parrot/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/black_parrot/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/black_parrot/rules-base.json b/flow/designs/nangate45/black_parrot/rules-base.json index 037012fef2..e0be1ee1b5 100644 --- a/flow/designs/nangate45/black_parrot/rules-base.json +++ b/flow/designs/nangate45/black_parrot/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "210c384f9c2a89ccf1280c471d73221156295759", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "7090ebd00ebb9249819329915c2b1de342ca6ab6", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 776000.0, "compare": "<=" @@ -28,7 +38,7 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -3.32, + "value": -3.31, "compare": ">=" }, "cts__timing__setup__tns": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -3.47, + "value": -3.45, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -4.37, + "value": -4.35, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -80,7 +90,7 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -3.28, + "value": -3.26, "compare": ">=" }, "finish__timing__setup__tns": { diff --git a/flow/designs/nangate45/bp_be_top/BUILD b/flow/designs/nangate45/bp_be_top/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/bp_be_top/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/bp_be_top/rules-base.json b/flow/designs/nangate45/bp_be_top/rules-base.json index 2140525de9..781dcf9265 100644 --- a/flow/designs/nangate45/bp_be_top/rules-base.json +++ b/flow/designs/nangate45/bp_be_top/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "286f0e89ee80674f5cd0d745e22c3b51a403a176", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "ec33b7192745ed1dc7f63168a782c05264dd5d46", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 268204.56, "compare": "<=" @@ -28,11 +38,11 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -0.411, + "value": -0.331, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -24.3, + "value": -20.2, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -0.427, + "value": -0.315, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -29.9, + "value": -19.3, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -0.418, + "value": -0.325, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -28.5, + "value": -19.6, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/nangate45/bp_fe_top/BUILD b/flow/designs/nangate45/bp_fe_top/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/bp_fe_top/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/bp_fe_top/config.mk b/flow/designs/nangate45/bp_fe_top/config.mk index 633035aa22..b63012a4ba 100644 --- a/flow/designs/nangate45/bp_fe_top/config.mk +++ b/flow/designs/nangate45/bp_fe_top/config.mk @@ -25,7 +25,6 @@ export IO_CONSTRAINTS = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NAME)/io.tcl export MACRO_PLACE_HALO = 10 10 export PLACE_DENSITY_LB_ADDON = 0.11 -export PLACE_DENSITY_MAX_POST_HOLD = 0.13 export TNS_END_PERCENT = 100 export FASTROUTE_TCL = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NAME)/fastroute.tcl diff --git a/flow/designs/nangate45/bp_fe_top/rules-base.json b/flow/designs/nangate45/bp_fe_top/rules-base.json index 71f52c53ee..720db504af 100644 --- a/flow/designs/nangate45/bp_fe_top/rules-base.json +++ b/flow/designs/nangate45/bp_fe_top/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "3a1bcb01d4fa53b30f75de87a60c6f75047794ed", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "fce601b688cf5ea819f8cc4879b50bf5be92267f", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 241575.35, "compare": "<=" @@ -32,7 +42,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -0.36, + "value": -0.369, "compare": ">=" }, "cts__timing__hold__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -0.396, + "value": -0.36, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -0.206, + "value": -0.139, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -20.5, + "value": -1.23, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/nangate45/bp_multi_top/BUILD b/flow/designs/nangate45/bp_multi_top/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/bp_multi_top/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/bp_multi_top/rules-base.json b/flow/designs/nangate45/bp_multi_top/rules-base.json index 15e50bdcba..9af846208c 100644 --- a/flow/designs/nangate45/bp_multi_top/rules-base.json +++ b/flow/designs/nangate45/bp_multi_top/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "55a5212c345ad6c1a829a6c7bcc9c0f1fbba2e0c", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "782af267c077f3c19466cec267afa50f06769f37", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 568000.0, "compare": "<=" @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 574894, + "value": 574454, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 108887, + "value": 104245, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +30,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 9468, + "value": 9065, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 9468, + "value": 9065, "compare": "<=" }, "cts__timing__setup__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 3920880, + "value": 3608728, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -92,11 +102,11 @@ "compare": ">=" }, "finish__timing__hold__tns": { - "value": -1.32, + "value": -0.96, "compare": ">=" }, "finish__design__instance__area": { - "value": 581449, + "value": 581042, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/nangate45/bp_quad/BUILD b/flow/designs/nangate45/bp_quad/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/bp_quad/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/dynamic_node/BUILD b/flow/designs/nangate45/dynamic_node/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/dynamic_node/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/dynamic_node/rules-base.json b/flow/designs/nangate45/dynamic_node/rules-base.json index 9cf3eed023..6fee368470 100644 --- a/flow/designs/nangate45/dynamic_node/rules-base.json +++ b/flow/designs/nangate45/dynamic_node/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "2427a81238731cb7068ba9ca3da18ec2837ebf31", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "4617e66bebd8728c158a91b4760b8d4ca0bb2114", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 24000.0, "compare": "<=" @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 25242, + "value": 25239, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 12080, + "value": 12066, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +30,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 1050, + "value": 1049, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 1050, + "value": 1049, "compare": "<=" }, "cts__timing__setup__ws": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 26358, + "value": 26188, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/nangate45/gcd/BUILD b/flow/designs/nangate45/gcd/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/gcd/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/gcd/rules-base.json b/flow/designs/nangate45/gcd/rules-base.json index 40ceae99f8..94ceccbed8 100644 --- a/flow/designs/nangate45/gcd/rules-base.json +++ b/flow/designs/nangate45/gcd/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "b4584cdffb3d5a45147d77a3679994ad29cfdf40", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "289aafd13c34674b5b73304f73cb2e2c3270b7b9", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 723.0, "compare": "<=" @@ -28,11 +38,11 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -0.0599, + "value": -0.0529, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -0.448, + "value": -0.396, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -0.0751, + "value": -0.0657, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -1.06, + "value": -0.51, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 5236, + "value": 4818, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -0.0688, + "value": -0.0559, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -0.821, + "value": -0.404, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/nangate45/ibex/BUILD b/flow/designs/nangate45/ibex/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/ibex/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/ibex/rules-base.json b/flow/designs/nangate45/ibex/rules-base.json index 57b78f4f4e..b09e25a906 100644 --- a/flow/designs/nangate45/ibex/rules-base.json +++ b/flow/designs/nangate45/ibex/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "d62ca5e98a2d8d44c61de670097e0a95186b8865", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "69690eec0194a9f3f2caa44cfafff668f1ad2b5e", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 32500.0, "compare": "<=" @@ -12,7 +22,7 @@ "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 17800, + "value": 17225, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +30,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 1548, + "value": 1498, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 1548, + "value": 1498, "compare": "<=" }, "cts__timing__setup__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -0.626, + "value": -0.549, "compare": ">=" }, "globalroute__timing__hold__ws": { diff --git a/flow/designs/nangate45/jpeg/BUILD b/flow/designs/nangate45/jpeg/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/jpeg/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/jpeg/rules-base.json b/flow/designs/nangate45/jpeg/rules-base.json index b9828daea8..28e68745bb 100644 --- a/flow/designs/nangate45/jpeg/rules-base.json +++ b/flow/designs/nangate45/jpeg/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "56c9540922259f15a1fffb9059112f37e4b738e5", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "7c78f4d083cd663a3e077213ee11a8c23d7db0c6", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 102000.0, + "value": 99800.0, "compare": "<=" }, "constraints__clocks__count": { @@ -12,7 +22,7 @@ "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 68509, + "value": 68111, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +30,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 5957, + "value": 5923, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 5957, + "value": 5923, "compare": "<=" }, "cts__timing__setup__ws": { @@ -32,7 +42,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -54.6, + "value": -37.1, "compare": ">=" }, "cts__timing__hold__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -66.5, + "value": -45.8, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -0.144, + "value": -0.151, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -53.3, + "value": -37.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/nangate45/mempool_group/BUILD b/flow/designs/nangate45/mempool_group/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/mempool_group/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/mempool_group/rules-base.json b/flow/designs/nangate45/mempool_group/rules-base.json index b8e74353b9..6ef583ee7f 100644 --- a/flow/designs/nangate45/mempool_group/rules-base.json +++ b/flow/designs/nangate45/mempool_group/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "8d625be11b7d8ed2cc2355768ce2bdf527fef80b", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "20ca7215c21f56a11575a513c6497c6f7b1390c4", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 424000.0, "compare": "<=" @@ -12,7 +22,7 @@ "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 194613, + "value": 188318, "compare": "<=" }, "detailedplace__design__violations": { @@ -32,7 +42,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -13300.0, + "value": -12000.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -11400.0, + "value": -13900.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 5508759, + "value": 5256342, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -84,7 +94,7 @@ "compare": ">=" }, "finish__timing__setup__tns": { - "value": -11300.0, + "value": -13600.0, "compare": ">=" }, "finish__timing__hold__ws": { @@ -92,7 +102,7 @@ "compare": ">=" }, "finish__timing__hold__tns": { - "value": -1.16, + "value": -0.6, "compare": ">=" }, "finish__design__instance__area": { diff --git a/flow/designs/nangate45/swerv/BUILD b/flow/designs/nangate45/swerv/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/swerv/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/swerv/config.mk b/flow/designs/nangate45/swerv/config.mk index 2a76357c5a..ecb13be9cf 100644 --- a/flow/designs/nangate45/swerv/config.mk +++ b/flow/designs/nangate45/swerv/config.mk @@ -8,7 +8,7 @@ export CORE_UTILIZATION = 65 export CORE_ASPECT_RATIO = 1 export CORE_MARGIN = 5 -export PLACE_DENSITY_LB_ADDON = 0.25 +export PLACE_DENSITY_LB_ADDON = 0.20 export TNS_END_PERCENT = 100 export SWAP_ARITH_OPERATORS = 1 diff --git a/flow/designs/nangate45/swerv/rules-base.json b/flow/designs/nangate45/swerv/rules-base.json index cb2b247f0d..8a92189f4b 100644 --- a/flow/designs/nangate45/swerv/rules-base.json +++ b/flow/designs/nangate45/swerv/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "f629e4aa498e447379b68ffc9cdb766011e285b4", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "506af1f9684109c71fdfad3ca8b29cc6d34b36ed", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 178043.59, + "value": 166000.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 179149, + "value": 177859, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 99342, + "value": 98426, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,11 +30,11 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 8638, + "value": 8559, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 8638, + "value": 8559, "compare": "<=" }, "cts__timing__setup__ws": { @@ -32,7 +42,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -363.0, + "value": -497.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -44,7 +54,7 @@ "compare": ">=" }, "globalroute__antenna_diodes_count": { - "value": 102, + "value": 101, "compare": "<=" }, "globalroute__timing__setup__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -420.0, + "value": -512.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 2659376, + "value": 2367802, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -84,7 +94,7 @@ "compare": ">=" }, "finish__timing__setup__tns": { - "value": -396.0, + "value": -516.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/nangate45/swerv_wrapper/BUILD b/flow/designs/nangate45/swerv_wrapper/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/swerv_wrapper/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/swerv_wrapper/rules-base.json b/flow/designs/nangate45/swerv_wrapper/rules-base.json index 686db1bf96..9853c78a3e 100644 --- a/flow/designs/nangate45/swerv_wrapper/rules-base.json +++ b/flow/designs/nangate45/swerv_wrapper/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "0d7fee749bac759eb10f6fde45e2dcfb0c8f5840", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "ddafe53bb7b23bf02ed07f5f4876904c136c982b", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 712000.0, "compare": "<=" @@ -28,11 +38,11 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -0.442, + "value": -0.308, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -239.0, + "value": -156.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -0.425, + "value": -0.345, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -342.0, + "value": -146.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 4395665, + "value": 4392572, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -84,7 +94,7 @@ "compare": ">=" }, "finish__timing__setup__tns": { - "value": -366.0, + "value": -127.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/nangate45/tinyRocket/BUILD b/flow/designs/nangate45/tinyRocket/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/nangate45/tinyRocket/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/nangate45/tinyRocket/rules-base.json b/flow/designs/nangate45/tinyRocket/rules-base.json index 0dc4dc3ffe..ea89a3f132 100644 --- a/flow/designs/nangate45/tinyRocket/rules-base.json +++ b/flow/designs/nangate45/tinyRocket/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "abfc243d51ab54251bdfc4307cdc795f9c71a2f0", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "0ae6cea3d765aa7a11f21b7e1b2ac48a67fa8a81", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 59681.09, "compare": "<=" @@ -32,7 +42,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -30.3, + "value": -32.4, "compare": ">=" }, "cts__timing__hold__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -46.6, + "value": -53.9, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -84,7 +94,7 @@ "compare": ">=" }, "finish__timing__setup__tns": { - "value": -38.1, + "value": -46.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/rapidus2hp/README.md b/flow/designs/rapidus2hp/README.md deleted file mode 100644 index 644784177a..0000000000 --- a/flow/designs/rapidus2hp/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Rapidus Environment Setup - -## Clone Rapidus Repo from Private GH - -The ORFS-specific files for the Rapidus platform are stored separately in the private rapidus repo. Clone out the repo into a separate directory and then set PLATFORM_HOME to point to it: - -``` -cd rapidus_platform_dir_goes_here -git clone git@github.com:The-OpenROAD-Project-private/rapidus -export PLATFORM_HOME=`pwd`/rapidus_platform_dir_goes_here/rapidus -``` - -For more information, check out (http://github.com/The-OpenROAD-Project-private/rapidus) - diff --git a/flow/designs/rapidus2hp/cva6/autotuner.json b/flow/designs/rapidus2hp/cva6/autotuner.json deleted file mode 100644 index 734b7d6808..0000000000 --- a/flow/designs/rapidus2hp/cva6/autotuner.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "_SDC_FILE_PATH": "constraint.sdc", - "_SDC_CLK_PERIOD": { - "type": "float", - "minmax": [ - 990, - 1250 - ], - "step": 0 - }, - "CORE_UTILIZATION": { - "type": "int", - "minmax": [ - 40, - 60 - ], - "step": 1 - }, - "CTS_BUF_DISTANCE": { - "type": "int", - "minmax": [ - 25, - 50 - ], - "step": 1 - }, - "CTS_CLUSTER_SIZE": { - "type": "int", - "minmax": [ - 30, - 60 - ], - "step": 1 - }, - "CTS_CLUSTER_DIAMETER": { - "type": "int", - "minmax": [ - 15, - 25 - ], - "step": 1 - }, - "CORE_MARGIN": { - "type": "float", - "minmax": [ - 1.8, - 2.1 - ], - "step": 0 - } -} diff --git a/flow/designs/rapidus2hp/cva6/autotuner_freq.json b/flow/designs/rapidus2hp/cva6/autotuner_freq.json deleted file mode 100644 index 3264182502..0000000000 --- a/flow/designs/rapidus2hp/cva6/autotuner_freq.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "_SDC_FILE_PATH": "constraint.sdc", - "_SDC_CLK_PERIOD": { - "type": "float", - "minmax": [ - 1270, - 1370 - ], - "step": 0 - } -} diff --git a/flow/designs/rapidus2hp/cva6/autotuner_phys.json b/flow/designs/rapidus2hp/cva6/autotuner_phys.json deleted file mode 100644 index bb5b759339..0000000000 --- a/flow/designs/rapidus2hp/cva6/autotuner_phys.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_SDC_FILE_PATH": "constraint.sdc", - "_SDC_CLK_PERIOD": { - "type": "float", - "minmax": [ - 1297.0415261866478, - 1297.0415261866478 - ], - "step": 0 - }, - "CORE_UTILIZATION": { - "type": "int", - "minmax": [ - 40, - 60 - ], - "step": 1 - }, - "CTS_BUF_DISTANCE": { - "type": "int", - "minmax": [ - 25, - 50 - ], - "step": 1 - }, - "CTS_CLUSTER_SIZE": { - "type": "int", - "minmax": [ - 30, - 60 - ], - "step": 1 - }, - "CTS_CLUSTER_DIAMETER": { - "type": "int", - "minmax": [ - 15, - 25 - ], - "step": 1 - }, - "CELL_PAD_IN_SITES_GLOBAL_PLACEMENT": { - "type": "int", - "minmax": [ - 0, - 3 - ], - "step": 1 - }, - "CELL_PAD_IN_SITES_DETAIL_PLACEMENT": { - "type": "int", - "minmax": [ - 0, - 3 - ], - "step": 1 - }, - "PLACE_SITE": { - "type": "string", - "values": [ - "SC6T", - "SC8T" - ] - }, - "CORE_MARGIN": { - "type": "float", - "minmax": [ - 0.75, - 1.5 - ], - "step": 0 - } -} diff --git a/flow/designs/rapidus2hp/cva6/canonicalize.tcl b/flow/designs/rapidus2hp/cva6/canonicalize.tcl deleted file mode 100644 index d9f81be71f..0000000000 --- a/flow/designs/rapidus2hp/cva6/canonicalize.tcl +++ /dev/null @@ -1,4 +0,0 @@ -# Remove rvfi_probes_o interface since it's not in the baseline and contributes -# 4k ports and connections (many of which are buffers tied to tie cells) - -delete cva6/o:rvfi_probes_o* diff --git a/flow/designs/rapidus2hp/cva6/config.mk b/flow/designs/rapidus2hp/cva6/config.mk deleted file mode 100644 index 4097e83b1a..0000000000 --- a/flow/designs/rapidus2hp/cva6/config.mk +++ /dev/null @@ -1,154 +0,0 @@ -export PLATFORM = rapidus2hp - -export DESIGN_NAME = cva6 - -ifeq ($(FLOW_VARIANT), verific) - export SYNTH_HDL_FRONTEND = verific -endif - -# Some files are listed specifically vs. sorted wilcard to control the order (makes Verific happy) -export SRC_HOME = $(DESIGN_HOME)/src/$(DESIGN_NICKNAME) -export VERILOG_FILES = $(sort $(wildcard $(SRC_HOME)/common/local/util/*.sv)) \ - $(SRC_HOME)/core/include/config_pkg.sv \ - $(SRC_HOME)/core/include/cv32a65x_config_pkg.sv \ - $(SRC_HOME)/core/include/riscv_pkg.sv \ - $(SRC_HOME)/core/include/ariane_pkg.sv \ - $(SRC_HOME)/core/include/build_config_pkg.sv \ - $(SRC_HOME)/core/include/std_cache_pkg.sv \ - $(SRC_HOME)/core/include/wt_cache_pkg.sv \ - $(sort $(wildcard $(SRC_HOME)/vendor/pulp-platform/common_cells/src/*.sv)) \ - $(SRC_HOME)/core/cvfpu/src/fpnew_pkg.sv \ - $(sort $(wildcard $(SRC_HOME)/vendor/pulp-platform/axi/src/*.sv)) \ - $(SRC_HOME)/core/cvfpu/src/fpnew_cast_multi.sv \ - $(SRC_HOME)/core/cvfpu/src/fpnew_classifier.sv \ - $(SRC_HOME)/core/cvfpu/src/fpnew_divsqrt_multi.sv \ - $(SRC_HOME)/core/cvfpu/src/fpnew_fma.sv \ - $(SRC_HOME)/core/cvfpu/src/fpnew_fma_multi.sv \ - $(SRC_HOME)/core/cvfpu/src/fpnew_noncomp.sv \ - $(SRC_HOME)/core/cvfpu/src/fpnew_opgroup_block.sv \ - $(SRC_HOME)/core/cvfpu/src/fpnew_opgroup_fmt_slice.sv \ - $(SRC_HOME)/core/cvfpu/src/fpnew_opgroup_multifmt_slice.sv \ - $(SRC_HOME)/core/cvfpu/src/fpnew_rounding.sv \ - $(SRC_HOME)/core/cvfpu/src/fpnew_top.sv \ - $(sort $(wildcard $(SRC_HOME)/core/*.sv)) \ - $(sort $(wildcard $(SRC_HOME)/core/pmp/src/*.sv)) \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_pkg.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_amo.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_cmo.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_core_arbiter.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_ctrl.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_ctrl_pe.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_flush.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_memctrl.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_miss_handler.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_mshr.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_rtab.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_uncached.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_victim_plru.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_victim_random.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_victim_sel.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hpdcache_wbuf.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hwpf_stride/hwpf_stride_pkg.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hwpf_stride/hwpf_stride.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hwpf_stride/hwpf_stride_arb.sv \ - $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/hwpf_stride/hwpf_stride_wrapper.sv \ - $(sort $(wildcard $(SRC_HOME)/core/cache_subsystem/*.sv)) \ - $(sort $(wildcard $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/common/*.sv)) \ - $(sort $(wildcard $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/common/macros/blackbox/*.sv)) \ - $(sort $(wildcard $(SRC_HOME)/core/cache_subsystem/hpdcache/rtl/src/utils/*.sv)) \ - $(sort $(wildcard $(SRC_HOME)/core/cva6_mmu/*.sv)) \ - $(SRC_HOME)/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/defs_div_sqrt_mvp.sv \ - $(SRC_HOME)/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/control_mvp.sv \ - $(SRC_HOME)/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/div_sqrt_top_mvp.sv \ - $(SRC_HOME)/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/iteration_div_sqrt_mvp.sv \ - $(SRC_HOME)/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/norm_div_sqrt_mvp.sv \ - $(SRC_HOME)/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/nrbd_nrsc_mvp.sv \ - $(SRC_HOME)/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/preprocess_mvp.sv \ - $(SRC_HOME)/core/cvxif_example/include/cvxif_instr_pkg.sv \ - $(sort $(wildcard $(SRC_HOME)/core/frontend/*.sv)) \ - $(SRC_HOME)/vendor/pulp-platform/tech_cells_generic/src/rtl/tc_sram.sv \ - $(PLATFORM_DIR)/ram/verilog/fakeram7_64x256_shim_half.sv \ - $(PLATFORM_DIR)/ram/verilog/sacrls0g0d1p64x128m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.sv \ - $(PLATFORM_DIR)/ram/verilog/fakeram7_128x64_shim.sv \ - $(PLATFORM_DIR)/ram/verilog/sacrls0g0d1p128x64m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.sv \ - $(PLATFORM_DIR)/ram/verilog/fakeram7_64x28_shim.sv \ - $(PLATFORM_DIR)/ram/verilog/sacrls0g0d1p64x28m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.sv \ - $(PLATFORM_DIR)/ram/verilog/fakeram7_64x25_shim.sv \ - $(PLATFORM_DIR)/ram/verilog/sacrls0g0d1p64x25m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.sv - -export VERILOG_INCLUDE_DIRS = $(DESIGN_HOME)/src/$(DESIGN_NICKNAME)/core/include \ - $(DESIGN_HOME)/src/$(DESIGN_NICKNAME)/core/cvfpu/src/common_cells/include \ - $(DESIGN_HOME)/src/$(DESIGN_NICKNAME)/core/cache_subsystem/hpdcache/rtl/include - -export VERILOG_DEFINES += -D HPDCACHE_ASSERT_OFF - -export ADDITIONAL_LEFS = $(PLATFORM_DIR)/ram/lef/sacrls0g0d1p64x128m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.lef \ - $(PLATFORM_DIR)/ram/lef/sacrls0g0d1p128x64m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.lef \ - $(PLATFORM_DIR)/ram/lef/sacrls0g0d1p64x28m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.lef \ - $(PLATFORM_DIR)/ram/lef/sacrls0g0d1p64x25m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.lef - -export ADDITIONAL_LIBS += $(PLATFORM_DIR)/ram/lib/sacrls0g0d1p64x128m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.lib \ - $(PLATFORM_DIR)/ram/lib/sacrls0g0d1p128x64m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.lib \ - $(PLATFORM_DIR)/ram/lib/sacrls0g0d1p64x28m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.lib \ - $(PLATFORM_DIR)/ram/lib/sacrls0g0d1p64x25m2b1w0c1p0d0i0s0cr0rr0rm4rw00ms0.lib - - -.DEFAULT_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint.sdc -._0P2A_6T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_0.2a_6T.sdc -._0P2A_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_0.2a_8T.sdc -._0P15_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_0.15_8T.sdc -._0P3S_6T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_0.3s_6T.sdc -._0P3S_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_0.3s_8T.sdc -.T0P5_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_t0.5_8T.sdc - -# Use $(if) to defer conditional eval until all makefiles are read -export SDC_FILE = $(strip \ - $(if $(filter 0.2a,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - $(._0P2A_6T_SDC_FILE), \ - $(._0P2A_8T_SDC_FILE) \ - ), \ - $(if $(filter 0.15,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h184_HST_45CPP,$(PLACE_SITE)), \ - $(._0P15_8T_SDC_FILE), \ - $(.DEFAULT_SDC_FILE) \ - ), \ - $(if $(filter 0.3s,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - $(._0P3S_6T_SDC_FILE), \ - $(._0P3S_8T_SDC_FILE) \ - ), \ - $(if $(and $(filter t0.5,$(RAPIDUS_PDK_VERSION)),$(filter SC8T,$(PLACE_SITE)),$(filter verific,$(SYNTH_HDL_FRONTEND))), \ - $(.T0P5_8T_SDC_FILE), \ - $(.DEFAULT_SDC_FILE) \ - ) \ - ) \ - ) \ - )) - -# Must be defined before the ifeq's -export SYNTH_HDL_FRONTEND ?= slang -export SYNTH_HIERARCHICAL = 1 - -export CORE_UTILIZATION = 65 - -export CORE_MARGIN = 2 -export MACRO_PLACE_HALO = 2 2 - -export ENABLE_DPO = 0 - -# a smoketest for this option, there are a -# few last gasp iterations -export SKIP_LAST_GASP ?= 1 - -# For use with SYNTH_HIERARCHICAL -export SYNTH_MINIMUM_KEEP_SIZE ?= 40000 - -#export IO_CONSTRAINTS = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NAME)/io_constraints.tcl - -# Remove rvfi_probes_o interface -export SYNTH_CANONICALIZE_TCL = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NAME)/canonicalize.tcl - -export SWAP_ARITH_OPERATORS = 1 -export OPENROAD_HIERARCHICAL = 1 diff --git a/flow/designs/rapidus2hp/cva6/constraint.sdc b/flow/designs/rapidus2hp/cva6/constraint.sdc deleted file mode 100644 index 3107eb6e7c..0000000000 --- a/flow/designs/rapidus2hp/cva6/constraint.sdc +++ /dev/null @@ -1,16 +0,0 @@ -# Derived from cva6_synth.tcl and Makefiles - -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name main_clk -set clk_port clk_i -set clk_ports_list [list $clk_port] -set clk_period 800 - -convert_time_value clk_period - -set input_delay [convert_time_value 0.46] -set output_delay [convert_time_value 0.11] - - -create_clock [get_ports $clk_port] -name $clk_name -period $clk_period diff --git a/flow/designs/rapidus2hp/cva6/constraint_0.15_8T.sdc b/flow/designs/rapidus2hp/cva6/constraint_0.15_8T.sdc deleted file mode 100644 index 3b08af9063..0000000000 --- a/flow/designs/rapidus2hp/cva6/constraint_0.15_8T.sdc +++ /dev/null @@ -1,16 +0,0 @@ -# Derived from cva6_synth.tcl and Makefiles - -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name main_clk -set clk_port clk_i -set clk_ports_list [list $clk_port] -set clk_period 650 - -convert_time_value clk_period - -set input_delay [convert_time_value 0.46] -set output_delay [convert_time_value 0.11] - - -create_clock [get_ports $clk_port] -name $clk_name -period $clk_period diff --git a/flow/designs/rapidus2hp/cva6/constraint_0.2a_6T.sdc b/flow/designs/rapidus2hp/cva6/constraint_0.2a_6T.sdc deleted file mode 100644 index 80c7cedeb4..0000000000 --- a/flow/designs/rapidus2hp/cva6/constraint_0.2a_6T.sdc +++ /dev/null @@ -1,16 +0,0 @@ -# Derived from cva6_synth.tcl and Makefiles - -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name main_clk -set clk_port clk_i -set clk_ports_list [list $clk_port] -set clk_period 820 - -convert_time_value clk_period - -set input_delay [convert_time_value 0.46] -set output_delay [convert_time_value 0.11] - - -create_clock [get_ports $clk_port] -name $clk_name -period $clk_period diff --git a/flow/designs/rapidus2hp/cva6/constraint_0.2a_8T.sdc b/flow/designs/rapidus2hp/cva6/constraint_0.2a_8T.sdc deleted file mode 100644 index 37c1b2ccd9..0000000000 --- a/flow/designs/rapidus2hp/cva6/constraint_0.2a_8T.sdc +++ /dev/null @@ -1,16 +0,0 @@ -# Derived from cva6_synth.tcl and Makefiles - -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name main_clk -set clk_port clk_i -set clk_ports_list [list $clk_port] -set clk_period 600 - -convert_time_value clk_period - -set input_delay [convert_time_value 0.46] -set output_delay [convert_time_value 0.11] - - -create_clock [get_ports $clk_port] -name $clk_name -period $clk_period diff --git a/flow/designs/rapidus2hp/cva6/constraint_0.3s_6T.sdc b/flow/designs/rapidus2hp/cva6/constraint_0.3s_6T.sdc deleted file mode 100644 index 3b08af9063..0000000000 --- a/flow/designs/rapidus2hp/cva6/constraint_0.3s_6T.sdc +++ /dev/null @@ -1,16 +0,0 @@ -# Derived from cva6_synth.tcl and Makefiles - -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name main_clk -set clk_port clk_i -set clk_ports_list [list $clk_port] -set clk_period 650 - -convert_time_value clk_period - -set input_delay [convert_time_value 0.46] -set output_delay [convert_time_value 0.11] - - -create_clock [get_ports $clk_port] -name $clk_name -period $clk_period diff --git a/flow/designs/rapidus2hp/cva6/constraint_0.3s_8T.sdc b/flow/designs/rapidus2hp/cva6/constraint_0.3s_8T.sdc deleted file mode 100644 index c663984bf1..0000000000 --- a/flow/designs/rapidus2hp/cva6/constraint_0.3s_8T.sdc +++ /dev/null @@ -1,16 +0,0 @@ -# Derived from cva6_synth.tcl and Makefiles - -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name main_clk -set clk_port clk_i -set clk_ports_list [list $clk_port] -set clk_period 500 - -convert_time_value clk_period - -set input_delay [convert_time_value 0.46] -set output_delay [convert_time_value 0.11] - - -create_clock [get_ports $clk_port] -name $clk_name -period $clk_period diff --git a/flow/designs/rapidus2hp/cva6/constraint_t0.5_8T.sdc b/flow/designs/rapidus2hp/cva6/constraint_t0.5_8T.sdc deleted file mode 100644 index 2af5e68946..0000000000 --- a/flow/designs/rapidus2hp/cva6/constraint_t0.5_8T.sdc +++ /dev/null @@ -1,16 +0,0 @@ -# Derived from cva6_synth.tcl and Makefiles - -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name main_clk -set clk_port clk_i -set clk_ports_list [list $clk_port] -set clk_period 700 - -convert_time_value clk_period - -set input_delay [convert_time_value 0.46] -set output_delay [convert_time_value 0.11] - - -create_clock [get_ports $clk_port] -name $clk_name -period $clk_period diff --git a/flow/designs/rapidus2hp/cva6/io_constraints.tcl b/flow/designs/rapidus2hp/cva6/io_constraints.tcl deleted file mode 100644 index 44c48e5927..0000000000 --- a/flow/designs/rapidus2hp/cva6/io_constraints.tcl +++ /dev/null @@ -1,34 +0,0 @@ -# left (bottom to top) -set_io_pin_constraint -group -order -region left:4.09-40.70 -pin_names {cvxif_req_o[*]} -set_io_pin_constraint -group -order -region left:40.85-90.13 -pin_names {noc_req_o[*]} - -# right (bottom to top) -# The intervals have been expanded based on pin placer feedback -set_io_pin_constraint -group -order -region right:5.25-45.34 -pin_names {noc_resp_i[*]} -set_io_pin_constraint -group -order -region right:45.62-93.07 -pin_names {cvxif_resp_i[*]} -set_io_pin_constraint -group -order -region right:93.32-93.73 \ - -pin_names { - debug_req_i time_irq_i ipi_i - } -set_io_pin_constraint -group -order -region right:94.01-94.28 -pin_names {irq_i[*]} -set_io_pin_constraint -group -order -region right:94.51-102.01 -pin_names {hart_id_i[*]} -set_io_pin_constraint -group -order -region right:102.25-109.74 -pin_names {boot_addr_i[*]} -set_io_pin_constraint -group -order -region right:109.99-110.25 -pin_names {rst_ni clk_i} - -# The rvfi_probes_o pins don't exist in reference design implementation -# put a third of them on the top, a third on the bottom, and let the placer -# decide where to put the remaining third -set num_rvfi_probes_ports 4295 -set third_rvfi_probes_ports [expr $num_rvfi_probes_ports / 3] -set top_group {} -for { set i 0 } { $i < $third_rvfi_probes_ports } { incr i } { - lappend top_group "rvfi_probes_o\[$i\]" -} -set bottom_group {} -for { } { $i < $third_rvfi_probes_ports * 2 } { incr i } { - lappend bottom_group "rvfi_probes_o\[$i\]" -} - - -set_io_pin_constraint -group -order -region bottom:* -pin_names $top_group -set_io_pin_constraint -group -order -region top:* -pin_names $bottom_group diff --git a/flow/designs/rapidus2hp/cva6/rules-base.json b/flow/designs/rapidus2hp/cva6/rules-base.json deleted file mode 100644 index d91f21e63a..0000000000 --- a/flow/designs/rapidus2hp/cva6/rules-base.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 16800.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 13856, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 142196, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 12365, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 12365, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.04, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -0.16, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.025, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.1, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 118, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.0412, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -0.381, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.025, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.1, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.0412, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -0.381, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.025, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.1, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 14305, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/cva6/rules-verific.json b/flow/designs/rapidus2hp/cva6/rules-verific.json deleted file mode 100644 index 61b8668d9c..0000000000 --- a/flow/designs/rapidus2hp/cva6/rules-verific.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 17000.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 14025, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 145376, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 12641, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 12641, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.04, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -0.16, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.025, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.1, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 121, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.04, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -0.16, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.025, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.1, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.04, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -0.16, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.025, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.1, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 14478, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/cva6/test/test_params.py b/flow/designs/rapidus2hp/cva6/test/test_params.py deleted file mode 100755 index 7bca1cee7b..0000000000 --- a/flow/designs/rapidus2hp/cva6/test/test_params.py +++ /dev/null @@ -1,180 +0,0 @@ -#!/usr/bin/env python3 - -import os -import sys -import unittest - -if __name__ == "__main__": - util_dir = os.path.join( - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), - "utils", - ) - sys.path.insert(0, util_dir) -from param_test_base import ParamTestBase - - -class TestParams(ParamTestBase): - """Unit test for checking correct Makefile settings""" - - def setUp(self): - """Sets up test variables""" - - ParamTestBase.setUp(self, "cva6") - - def get_exp_sdc(self, place_site, pdk_version, front_end): - """Returns the expected SDC file path""" - - if pdk_version in ["0.2a", "0.3s"]: - if place_site == "ra02h138_DST_45CPP": - return os.path.join( - self._design_full_dir, f"constraint_{pdk_version}_6T.sdc" - ) - return os.path.join( - self._design_full_dir, f"constraint_{pdk_version}_8T.sdc" - ) - if pdk_version == "0.15" and place_site in ["", "ra02h184_HST_45CPP"]: - return os.path.join( - self._design_full_dir, f"constraint_{pdk_version}_8T.sdc" - ) - if ( - pdk_version == "t0.5" - and place_site in ["", "SC8T"] - and front_end == "verific" - ): - return os.path.join( - self._design_full_dir, f"constraint_{pdk_version}_8T.sdc" - ) - return os.path.join(self._design_full_dir, "constraint.sdc") - - def test_pdk_0p3_default(self): - """ - Tests PDK 0.3 - """ - - pdk_version = "" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2(self): - """ - Tests PDK 0.2 - """ - - pdk_version = "0.2" - for front_end in self._front_end_list: - for place_site in self._ibm_site_list: - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2a(self): - """ - Tests PDK 0.2a - """ - - pdk_version = "0.2a" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p15(self): - """ - Tests PDK 0.15 - """ - - pdk_version = "0.15" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3s(self): - """ - Tests PDK 0.3s - """ - - pdk_version = "0.3s" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3(self): - """ - Tests PDK 0.3 - """ - - pdk_version = "0.3" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_t0p5(self): - """ - Tests Titan PDK 0.5 - """ - - pdk_version = "t0.5" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_flow_variant(self): - """Tests that setting the flow variant uses the right frontend""" - - test_tag = "flow_variant default" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND") - self.execute_cmd_int(cmd, test_tag, "slang") - test_tag = "flow_variant verific" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND", flow_variant="verific") - self.execute_cmd_int(cmd, test_tag, "verific") - - -if __name__ == "__main__": - unittest.main() diff --git a/flow/designs/rapidus2hp/ethmac/config.mk b/flow/designs/rapidus2hp/ethmac/config.mk deleted file mode 100644 index f49bdc5577..0000000000 --- a/flow/designs/rapidus2hp/ethmac/config.mk +++ /dev/null @@ -1,30 +0,0 @@ -export PLATFORM = rapidus2hp - -export DESIGN_NAME = ethmac - -ifeq ($(FLOW_VARIANT), verific) - export SYNTH_HDL_FRONTEND = verific -endif - -export SRC_HOME = $(DESIGN_HOME)/src/$(DESIGN_NICKNAME) -export VERILOG_INCLUDE_DIRS = $(SRC_HOME) -export VERILOG_FILES = $(sort $(wildcard $(SRC_HOME)/*.v)) -export SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint.sdc -export ABC_AREA = 1 - -export CORE_UTILIZATION = $(strip \ - $(if $(filter 0.15,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - 63, \ - 65), \ - $(if $(filter 0.3s,$(RAPIDUS_PDK_VERSION)), \ - 65, \ - $(if $(filter 0.3,$(RAPIDUS_PDK_VERSION)), \ - 63, \ - 70 \ - ) \ - ) \ - )) - -export CORE_ASPECT_RATIO = 1 -export CORE_MARGIN = 0.75 diff --git a/flow/designs/rapidus2hp/ethmac/constraint.sdc b/flow/designs/rapidus2hp/ethmac/constraint.sdc deleted file mode 100644 index 72510532cb..0000000000 --- a/flow/designs/rapidus2hp/ethmac/constraint.sdc +++ /dev/null @@ -1,50 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -set top_clk_name wb_clk_i -set clk_period 875 -set clk_io_pct 0.2 -set clk_port [get_ports $top_clk_name] - -convert_time_value clk_period - -create_clock -name $top_clk_name -period $clk_period $clk_port -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $top_clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $top_clk_name \ - [all_outputs] - -set tx_clk_name mtx_clk_pad_i -set tx_clk_port [get_ports $tx_clk_name] -set tx_clk_period 300 - -convert_time_value tx_clk_period - -create_clock -name $tx_clk_name -period $tx_clk_period $tx_clk_port -set mtx_non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] \ - $tx_clk_port] -set_input_delay [expr { $tx_clk_period * $clk_io_pct }] -clock $tx_clk_name \ - $mtx_non_clock_inputs -set_output_delay [expr { $tx_clk_period * $clk_io_pct }] -clock $tx_clk_name \ - [all_outputs] - -set rx_clk_name mrx_clk_pad_i -set rx_clk_port [get_ports $rx_clk_name] -set rx_clk_period 110 - -convert_time_value rx_clk_period - -create_clock -name $rx_clk_name -period $rx_clk_period $rx_clk_port -set mrx_non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] \ - $rx_clk_port] -set_input_delay [expr { $rx_clk_period * $clk_io_pct }] -clock $rx_clk_name \ - $mrx_non_clock_inputs -set_output_delay [expr { $rx_clk_period * $clk_io_pct }] -clock $rx_clk_name \ - [all_outputs] - -set_clock_groups -name core_clock -logically_exclusive \ - -group [get_clocks $top_clk_name] \ - -group [get_clocks $tx_clk_name] \ - -group [get_clocks $rx_clk_name] - -set_max_fanout 10 [current_design] diff --git a/flow/designs/rapidus2hp/ethmac/rules-base.json b/flow/designs/rapidus2hp/ethmac/rules-base.json deleted file mode 100644 index 896f29e0b6..0000000000 --- a/flow/designs/rapidus2hp/ethmac/rules-base.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 3290.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 3, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 4563, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 88191, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 5929, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 5929, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.0725, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -4.25, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.0055, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.022, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.0981, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -7.21, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.0055, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.022, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.0981, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -7.21, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.0055, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.022, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 4731, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/ethmac/rules-verific.json b/flow/designs/rapidus2hp/ethmac/rules-verific.json deleted file mode 100644 index d606007e92..0000000000 --- a/flow/designs/rapidus2hp/ethmac/rules-verific.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 3780.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 3, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 4536, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 86754, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 6307, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 6307, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.0705, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -3.69, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.0055, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.022, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.0933, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -5.54, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.0055, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.022, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.0933, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -5.54, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.0055, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.022, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 4707, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/ethmac/test/test_params.py b/flow/designs/rapidus2hp/ethmac/test/test_params.py deleted file mode 100755 index df25476cb0..0000000000 --- a/flow/designs/rapidus2hp/ethmac/test/test_params.py +++ /dev/null @@ -1,154 +0,0 @@ -#!/usr/bin/env python3 - -import os -import sys -import unittest - -if __name__ == "__main__": - util_dir = os.path.join( - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), - "utils", - ) - sys.path.insert(0, util_dir) -from param_test_base import ParamTestBase - - -class TestParams(ParamTestBase): - """Unit test for checking correct Makefile settings""" - - def setUp(self): - """Sets up test variables""" - - ParamTestBase.setUp(self, "ethmac") - - def get_exp_util(self, place_site, pdk_version): - """Returns the expected utilization""" - - if pdk_version == "0.15": - if place_site == "ra02h138_DST_45CPP": - return 63 - return 65 - if pdk_version == "0.3s": - return 65 - if pdk_version in ["", "0.3"]: - return 63 - return 70 - - def test_pdk_0p3_default(self): - """Tests PDK 0.3 Utilization""" - - pdk_version = "" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2(self): - """Tests PDK 0.2 Utilization""" - - pdk_version = "0.2" - for front_end in self._front_end_list: - for place_site in self._ibm_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2a(self): - """Tests PDK 0.2a Utilization""" - - pdk_version = "0.2a" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p15(self): - """Tests PDK 0.15 Utilization""" - - pdk_version = "0.15" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3s(self): - """Tests PDK 0.3s Utilization""" - - pdk_version = "0.3s" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3(self): - """Tests PDK 0.3 Utilization""" - - pdk_version = "0.3" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_t0p5(self): - """Tests Titan PDK 0.5 Utilization""" - - pdk_version = "t0.5" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_flow_variant(self): - """Tests that setting the flow variant uses the right frontend""" - - test_tag = "flow_variant default" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND") - self.execute_cmd_int(cmd, test_tag, None) - test_tag = "flow_variant verific" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND", flow_variant="verific") - self.execute_cmd_int(cmd, test_tag, "verific") - - -if __name__ == "__main__": - unittest.main() diff --git a/flow/designs/rapidus2hp/gcd/autotuner.json b/flow/designs/rapidus2hp/gcd/autotuner.json deleted file mode 100644 index e622bbf82d..0000000000 --- a/flow/designs/rapidus2hp/gcd/autotuner.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "_SDC_FILE_PATH": "constraint.sdc", - "_SDC_CLK_PERIOD": { - "type": "float", - "minmax": [ - 180, - 300 - ], - "step": 0 - }, - "CORE_UTILIZATION": { - "type": "float", - "minmax": [ - 21, - 60 - ], - "step": 0 - }, - "CTS_CLUSTER_SIZE": { - "type": "int", - "minmax": [ - 10, - 200 - ], - "step": 1 - }, - "CTS_CLUSTER_DIAMETER": { - "type": "int", - "minmax": [ - 20, - 400 - ], - "step": 1 - } -} diff --git a/flow/designs/rapidus2hp/gcd/config.mk b/flow/designs/rapidus2hp/gcd/config.mk deleted file mode 100644 index f6b053364e..0000000000 --- a/flow/designs/rapidus2hp/gcd/config.mk +++ /dev/null @@ -1,29 +0,0 @@ -export DESIGN_NICKNAME = gcd -export DESIGN_NAME = gcd -export PLATFORM = rapidus2hp - -ifeq ($(FLOW_VARIANT), verific) - export SYNTH_HDL_FRONTEND = verific -endif - -export VERILOG_FILES = $(DESIGN_HOME)/src/$(DESIGN_NAME)/gcd.v -export SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NAME)/constraint.sdc - -# Use $(if) to defer conditional eval until all makefiles are read -export CORE_UTILIZATION = $(strip \ - $(if $(filter 0.15,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - 36, \ - 40), \ - $(if $(filter 0.3,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - 36, \ - 41), \ - $(if $(filter ra02h138_DST_45CPP SC6T,$(PLACE_SITE)), \ - 43, \ - 45 \ - ) \ - ) \ - )) - -export CORE_MARGIN = .5 diff --git a/flow/designs/rapidus2hp/gcd/constraint.sdc b/flow/designs/rapidus2hp/gcd/constraint.sdc deleted file mode 100644 index 486ff7fa86..0000000000 --- a/flow/designs/rapidus2hp/gcd/constraint.sdc +++ /dev/null @@ -1,21 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -current_design gcd - -set clk_name core_clock -set clk_port_name clk -set clk_period 100 -set clk_io_pct 0.2 - -convert_time_value clk_period - -set clk_port [get_ports $clk_port_name] - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/gcd/rules-base.json b/flow/designs/rapidus2hp/gcd/rules-base.json deleted file mode 100644 index a15dce1f31..0000000000 --- a/flow/designs/rapidus2hp/gcd/rules-base.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 20.89, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 36, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 692, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 54, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 54, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.0564, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -1.7, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.005, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.02, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.067, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -2.07, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.005, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.02, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.067, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -2.07, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.005, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.02, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 47, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/gcd/rules-verific.json b/flow/designs/rapidus2hp/gcd/rules-verific.json deleted file mode 100644 index 9cabc90642..0000000000 --- a/flow/designs/rapidus2hp/gcd/rules-verific.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 20.2, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 37, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 688, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 58, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 58, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.0452, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -1.03, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.005, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.02, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.0511, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -1.41, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.005, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.02, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.0511, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -1.41, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.005, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.02, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 41, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/gcd/test/test_params.py b/flow/designs/rapidus2hp/gcd/test/test_params.py deleted file mode 100755 index f7f845950b..0000000000 --- a/flow/designs/rapidus2hp/gcd/test/test_params.py +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env python3 - -import os -import sys -import unittest - -if __name__ == "__main__": - util_dir = os.path.join( - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), - "utils", - ) - sys.path.insert(0, util_dir) -from param_test_base import ParamTestBase - - -class TestParams(ParamTestBase): - """Unit test for checking correct Makefile settings""" - - def setUp(self): - """Sets up test variables""" - - ParamTestBase.setUp(self, "gcd") - - def get_exp_util(self, place_site, pdk_version): - """Returns the expected value""" - - if pdk_version == "0.15": - if place_site == "ra02h138_DST_45CPP": - return 36 - return 40 - if pdk_version in ["", "0.3"]: - if place_site == "ra02h138_DST_45CPP": - return 36 - return 41 - if place_site in ["SC6T", "ra02h138_DST_45CPP"]: - return 43 - return 45 - - def test_pdk_0p3_default(self): - """ - Tests PDK 0.3 utilization - """ - - pdk_version = "" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2(self): - """ - Tests PDK 0.2 utilization - """ - - pdk_version = "0.2" - for front_end in self._front_end_list: - for place_site in self._ibm_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2a(self): - """ - Tests PDK 0.2a utilization - """ - - pdk_version = "0.2a" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p15(self): - """ - Tests PDK 0.15 utilization - """ - - pdk_version = "0.15" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3s(self): - """ - Tests PDK 0.3s utilization - """ - - pdk_version = "0.3s" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3(self): - """ - Tests PDK 0.3 utilization - """ - - pdk_version = "0.3" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_t0p5(self): - """ - Tests Titan PDK 0.5 utilization - """ - - pdk_version = "t0.5" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/flow/designs/rapidus2hp/hercules_idecode/config.mk b/flow/designs/rapidus2hp/hercules_idecode/config.mk deleted file mode 100644 index 145ccb5ec7..0000000000 --- a/flow/designs/rapidus2hp/hercules_idecode/config.mk +++ /dev/null @@ -1,81 +0,0 @@ -export PLATFORM = rapidus2hp - -export DESIGN_NAME = hercules_idecode - -ifeq ($(FLOW_VARIANT), verific) - export SYNTH_HDL_FRONTEND = verific -endif - -export SRC_HOME = /platforms/Rapidus/designs/hercules_idecode -export VERILOG_FILES = $(sort $(wildcard $(SRC_HOME)/hercules_idecode/verilog/*.sv)) \ - $(sort $(wildcard $(SRC_HOME)/shared/verilog/*.sv)) \ - $(sort $(wildcard $(SRC_HOME)/models/cells/generic/*.sv)) - -export VERILOG_INCLUDE_DIRS = $(SRC_HOME)/hercules_idecode/verilog \ - $(SRC_HOME)/shared/verilog \ - $(SRC_HOME)/models/cells/generic - -.DEFAULT_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/prects.sdc -._0P3_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/prects_0.3.sdc -export SDC_FILE = $(strip \ - $(if $(filter 0.3,$(RAPIDUS_PDK_VERSION)), \ - $(._0P3_SDC_FILE), \ - $(.DEFAULT_SDC_FILE) \ - )) - -export SYNTH_HDL_FRONTEND ?= slang - - -# Use $(if) to defer conditional eval until all makefiles are read -export CORE_UTILIZATION = $(strip \ - $(if $(filter 0.15,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - $(if $(filter slang,$(SYNTH_HDL_FRONTEND)), \ - 42, \ - 43 \ - ), \ - $(if $(filter slang,$(SYNTH_HDL_FRONTEND)), \ - 50, \ - 48 \ - ) \ - ), \ - $(if $(filter 0.3,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - $(if $(filter slang,$(SYNTH_HDL_FRONTEND)), \ - 45, \ - 45 \ - ), \ - $(if $(filter slang,$(SYNTH_HDL_FRONTEND)), \ - 58, \ - 54 \ - ) \ - ), \ - $(if $(and $(filter t0.5,$(RAPIDUS_PDK_VERSION)),$(filter SC5T,$(PLACE_SITE))), \ - $(if $(filter slang,$(SYNTH_HDL_FRONTEND)), \ - 44, \ - 42 \ - ), \ - $(if $(filter ra02h138_DST_45CPP SC6T,$(PLACE_SITE)), \ - $(if $(filter slang,$(SYNTH_HDL_FRONTEND)), \ - 44, \ - 43 \ - ), \ - $(if $(filter slang,$(SYNTH_HDL_FRONTEND)), \ - 50, \ - 48 \ - ) \ - ) \ - ) \ - ) \ - )) - -export CORE_MARGIN = 1 - -# a smoketest for this option, there are a -# few last gasp iterations -export SKIP_LAST_GASP ?= 1 - -export CELL_PAD_IN_SITES_GLOBAL_PLACEMENT = 0 -export CELL_PAD_IN_SITES_DETAIL_PLACEMENT = 0 - -export SYNTH_SLANG_ARGS = --no-implicit-memories diff --git a/flow/designs/rapidus2hp/hercules_idecode/prects.sdc b/flow/designs/rapidus2hp/hercules_idecode/prects.sdc deleted file mode 100755 index 15b6a6fdf9..0000000000 --- a/flow/designs/rapidus2hp/hercules_idecode/prects.sdc +++ /dev/null @@ -1,16 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -#set sdc_version 2.1 -set sdc_version 1.4 -current_design hercules_idecode - -set clk_period 250 - -convert_time_value clk_period - -set_max_fanout 32 [current_design] -set_load [convert_cap_value 10] [all_outputs] -set_max_capacitance [convert_cap_value 10] [all_inputs] - -create_clock -name "clk" -add -period $clk_period \ - -waveform [list 0.0 [expr 0.5*$clk_period]] [get_ports clk] diff --git a/flow/designs/rapidus2hp/hercules_idecode/prects_0.3.sdc b/flow/designs/rapidus2hp/hercules_idecode/prects_0.3.sdc deleted file mode 100644 index 486d682dc2..0000000000 --- a/flow/designs/rapidus2hp/hercules_idecode/prects_0.3.sdc +++ /dev/null @@ -1,26 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -#set sdc_version 2.1 -set sdc_version 1.4 -current_design hercules_idecode - -set clk_period 370 -# Roughly 150ps for a 370ps clock -set input_pct 0.4054 -# Roughly 50ps for a 370ps clock -set output_pct 0.1351 - -convert_time_value clk_period - -set_max_fanout 32 [current_design] -set_load [convert_cap_value 10] [all_outputs] -set_max_capacitance [convert_cap_value 10] [all_inputs] - -create_clock -name "clk" -add -period $clk_period \ - -waveform [list 0.0 [expr { 0.5 * $clk_period }]] [get_ports clk] - -set_clock_latency $clk_period clk - -### Setup input delay is set to 20% of CT -set_input_delay [expr { $clk_period * $input_pct }] -clock clk [all_inputs] -set_output_delay [expr { $clk_period * $output_pct }] -clock clk [all_outputs] diff --git a/flow/designs/rapidus2hp/hercules_idecode/rules-base.json b/flow/designs/rapidus2hp/hercules_idecode/rules-base.json deleted file mode 100644 index 32470fd6f7..0000000000 --- a/flow/designs/rapidus2hp/hercules_idecode/rules-base.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 8720.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 10320, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 230511, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 20044, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 20044, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.0676, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -14.1, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.05, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 0, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.231, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -89.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.05, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.231, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -89.1, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.05, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 10628, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/hercules_idecode/rules-verific.json b/flow/designs/rapidus2hp/hercules_idecode/rules-verific.json deleted file mode 100644 index 1205b1cb59..0000000000 --- a/flow/designs/rapidus2hp/hercules_idecode/rules-verific.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 8680.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 10358, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 232846, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 20248, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 20248, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.0792, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -0.407, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.05, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 202, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.0894, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -120.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.05, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.0894, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -120.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.05, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 10645, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/hercules_idecode/test/test_params.py b/flow/designs/rapidus2hp/hercules_idecode/test/test_params.py deleted file mode 100755 index 4c6824f453..0000000000 --- a/flow/designs/rapidus2hp/hercules_idecode/test/test_params.py +++ /dev/null @@ -1,186 +0,0 @@ -#!/usr/bin/env python3 - -import os -import sys -import unittest - -if __name__ == "__main__": - util_dir = os.path.join( - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), - "utils", - ) - sys.path.insert(0, util_dir) -from param_test_base import ParamTestBase - - -class TestParams(ParamTestBase): - """Unit test for checking correct Makefile settings""" - - def setUp(self): - """Sets up test variables""" - - ParamTestBase.setUp(self, "hercules_idecode") - - def get_exp_util(self, place_site, pdk_version, front_end): - """Returns the expected value""" - - if pdk_version == "0.15": - if place_site == "ra02h138_DST_45CPP": - if front_end in ["", "slang"]: - return 42 - return 43 - if front_end in ["", "slang"]: - return 50 - return 48 - if pdk_version in ["", "0.3"]: - if place_site == "ra02h138_DST_45CPP": - if front_end in ["", "slang"]: - return 45 - return 45 - if front_end in ["", "slang"]: - return 58 - return 54 - if pdk_version == "t0.5" and place_site == "SC5T": - if front_end in ["", "slang"]: - return 48 - return 46 - if place_site in ["SC6T", "ra02h138_DST_45CPP"]: - if front_end in ["", "slang"]: - return 44 - return 43 - if front_end in ["", "slang"]: - return 50 - return 48 - - def test_pdk_0p3_default(self): - """ - Tests PDK 0.3 utilization - """ - - pdk_version = "" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2(self): - """ - Tests PDK 0.2 utilization - """ - - pdk_version = "0.2" - for front_end in self._front_end_list: - for place_site in self._ibm_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2a(self): - """ - Tests PDK 0.2a utilization - """ - - pdk_version = "0.2a" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p15(self): - """ - Tests PDK 0.15 utilization - """ - - pdk_version = "0.15" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3s(self): - """ - Tests PDK 0.3s utilization - """ - - pdk_version = "0.3s" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3(self): - """ - Tests PDK 0.3 utilization - """ - - pdk_version = "0.3" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_t0p5(self): - """ - Tests Titan PDK 0.5 utilization - """ - - pdk_version = "t0.5" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_flow_variant(self): - """Tests that setting the flow variant uses the right frontend""" - - test_tag = "flow_variant default" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND") - self.execute_cmd_int(cmd, test_tag, "slang") - test_tag = "flow_variant verific" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND", flow_variant="verific") - self.execute_cmd_int(cmd, test_tag, "verific") - - -if __name__ == "__main__": - unittest.main() diff --git a/flow/designs/rapidus2hp/hercules_is_int/config.mk b/flow/designs/rapidus2hp/hercules_is_int/config.mk deleted file mode 100644 index 1fe6b8df6e..0000000000 --- a/flow/designs/rapidus2hp/hercules_is_int/config.mk +++ /dev/null @@ -1,117 +0,0 @@ -export PLATFORM = rapidus2hp - -export DESIGN_NAME = hercules_is_int - -export SRC_HOME = /platforms/Rapidus/designs/hercules_is_int - -ifeq ($(FLOW_VARIANT), gatelevel) - export SYNTH_NETLIST_FILES = $(SRC_HOME)/ca78_8t_postroute_0707.v -endif - -ifeq ($(FLOW_VARIANT), verific) - export SYNTH_HDL_FRONTEND = verific -endif - -export VERILOG_FILES = $(sort $(wildcard $(SRC_HOME)/hercules_issue/verilog/*.sv)) \ - $(sort $(wildcard $(SRC_HOME)/shared/verilog/*.sv)) \ - $(sort $(wildcard $(SRC_HOME)/models/cells/generic/*.sv)) - -export VERILOG_INCLUDE_DIRS = $(SRC_HOME)/hercules_issue/verilog \ - $(SRC_HOME)/shared/verilog \ - $(SRC_HOME)/models/cells/generic - -.DEFAULT_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/prects.sdc -._0P3_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/prects_0.3.sdc -export SDC_FILE = $(strip \ - $(if $(filter 0.3,$(RAPIDUS_PDK_VERSION)), \ - $(._0P3_SDC_FILE), \ - $(.DEFAULT_SDC_FILE) \ - )) - -# Must be defined before the ifeq's -export SYNTH_HDL_FRONTEND ?= slang -export SYNTH_HIERARCHICAL ?= 0 - -# Use $(if) to defer conditional eval until all makefiles are read -export CORE_UTILIZATION = $(strip \ - $(if $(filter 0.3s,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - $(if $(filter slang,$(SYNTH_HDL_FRONTEND)), \ - $(if $(filter 14LM,$(LAYER_STACK_OPTION)), \ - 52, \ - $(if $(filter 16LM,$(LAYER_STACK_OPTION)), \ - 54, \ - 56 \ - ) \ - ), \ - $(if $(filter 14LM,$(LAYER_STACK_OPTION)), \ - 50, \ - 56 \ - ) \ - ), \ - 56 \ - ), \ - $(if $(filter 0.15,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP SC6T,$(PLACE_SITE)), \ - 30, \ - 52 \ - ), \ - $(if $(filter 0.3,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP SC6T,$(PLACE_SITE)), \ - 52, \ - $(if $(filter slang,$(SYNTH_HDL_FRONTEND)), \ - 60, \ - 61 \ - ) \ - ), \ - $(if $(and $(filter t0.5,$(RAPIDUS_PDK_VERSION)),$(filter SC5T,$(PLACE_SITE))), \ - 45, \ - $(if $(filter slang,$(SYNTH_HDL_FRONTEND)), \ - $(if $(filter ra02h138_DST_45CPP SC6T,$(PLACE_SITE)), \ - 30, \ - 52 \ - ), \ - $(if $(filter ra02h138_DST_45CPP SC6T,$(PLACE_SITE)), \ - 30, \ - 54 \ - ) \ - ) \ - ) \ - ) \ - ) \ - )) - -export CORE_MARGIN = 1 - -export PLACE_PINS_ARGS = -min_distance_in_tracks -min_distance 1 -export CELL_PAD_IN_SITES_GLOBAL_PLACEMENT = 0 -export CELL_PAD_IN_SITES_DETAIL_PLACEMENT = 0 -# temporarily skip over DPO to bypass one-site gap issues -export ENABLE_DPO = 0 - -# Selectively keep module hierarchies to match baseline data -# ifeq ($(SYNTH_HDL_FRONTEND), verific) -# export SYNTH_KEEP_MODULES = \hercules_is_grbt \ -# \hercules_is_grf \ -# \hercules_is_lsq \ -# \hercules_is_lsq2 \ -# \hercules_is_mx0(HERCULES_IQ_DATA_GATING=0)\ -# \hercules_is_mx1(HERCULES_IQ_DATA_GATING=0) \ -# \hercules_is_pcrf \ -# \hercules_is_resc_ix \ -# \hercules_is_resc_ls \ -# \hercules_is_sxq -# else -# export SYNTH_KEEP_MODULES = \hercules_is_grbt$$hercules_is_int.u_grbt \ -# \\hercules_is_grf$$hercules_is_int.u_grf \ -# \\hercules_is_lsq$$hercules_is_int.u_ls0_iq \ -# \\hercules_is_lsq$$hercules_is_int.u_ls1_iq \ -# \\hercules_is_lsq2$$hercules_is_int.u_ls2_iq \ -# \\hercules_is_mx0$$hercules_is_int.u_mx0_iq \ -# \\hercules_is_mx1$$hercules_is_int.u_mx1_iq \ -# \\hercules_is_pcrf$$hercules_is_int.u_pcrf \ -# \\hercules_is_resc_ix$$hercules_is_int.u_grcx \ -# \\hercules_is_resc_ls$$hercules_is_int.u_grcl \ -# \\hercules_is_sxq$$hercules_is_int.u_sx0_iq \ -# \\hercules_is_sxq$$hercules_is_int.u_sx1_iq -# endif diff --git a/flow/designs/rapidus2hp/hercules_is_int/prects.sdc b/flow/designs/rapidus2hp/hercules_is_int/prects.sdc deleted file mode 100644 index 51ed806dd5..0000000000 --- a/flow/designs/rapidus2hp/hercules_is_int/prects.sdc +++ /dev/null @@ -1,16 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -#set sdc_version 2.1 -set sdc_version 1.4 -current_design hercules_is_int - -set clk_period 250 - -convert_time_value clk_period - -set_max_fanout 32 [current_design] -set_load [convert_cap_value 10] [all_outputs] -set_max_capacitance [convert_cap_value 10] [all_inputs] - -create_clock -name "clk" -add -period $clk_period \ - -waveform [list 0.0 [expr { 0.5 * $clk_period }]] [get_ports clk] diff --git a/flow/designs/rapidus2hp/hercules_is_int/prects_0.3.sdc b/flow/designs/rapidus2hp/hercules_is_int/prects_0.3.sdc deleted file mode 100644 index bbe482cbd7..0000000000 --- a/flow/designs/rapidus2hp/hercules_is_int/prects_0.3.sdc +++ /dev/null @@ -1,26 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -#set sdc_version 2.1 -set sdc_version 1.4 -current_design hercules_is_int - -set clk_period 370 -# Roughly 150ps for a 370ps clock -set input_pct 0.4054 -# Roughly 50ps for a 370ps clock -set output_pct 0.1351 - -convert_time_value clk_period - -set_max_fanout 32 [current_design] -set_load [convert_cap_value 10] [all_outputs] -set_max_capacitance [convert_cap_value 10] [all_inputs] - -create_clock -name "clk" -add -period $clk_period \ - -waveform [list 0.0 [expr { 0.5 * $clk_period }]] [get_ports clk] - -set_clock_latency $clk_period clk - -### Setup input delay is set to 20% of CT -set_input_delay [expr { $clk_period * $input_pct }] -clock clk [all_inputs] -set_output_delay [expr { $clk_period * $output_pct }] -clock clk [all_outputs] diff --git a/flow/designs/rapidus2hp/hercules_is_int/prects_prop.sdc b/flow/designs/rapidus2hp/hercules_is_int/prects_prop.sdc deleted file mode 100644 index 60e7b5814f..0000000000 --- a/flow/designs/rapidus2hp/hercules_is_int/prects_prop.sdc +++ /dev/null @@ -1,18 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -#set sdc_version 2.1 -set sdc_version 1.4 -current_design hercules_is_int - -set clk_period 250 - -convert_time_value clk_period - -set_max_fanout 32 [current_design] -set_load [convert_cap_value 10] [all_outputs] -set_max_capacitance [convert_cap_value 10] [all_inputs] - -create_clock -name "clk" -add -period $clk_period \ - -waveform [list 0.0 [expr { 0.5 * $clk_period }]] [get_ports clk] - -set_propagated_clock [all_clocks] diff --git a/flow/designs/rapidus2hp/hercules_is_int/rules-base.json b/flow/designs/rapidus2hp/hercules_is_int/rules-base.json deleted file mode 100644 index 4d79ddf22f..0000000000 --- a/flow/designs/rapidus2hp/hercules_is_int/rules-base.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 26600.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 31739, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 647436, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 56299, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 56299, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.218, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -591.0, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.05, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 567, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.498, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -1700.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.153, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.498, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -1700.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.153, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 33275, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/hercules_is_int/rules-verific.json b/flow/designs/rapidus2hp/hercules_is_int/rules-verific.json deleted file mode 100644 index afed860c2a..0000000000 --- a/flow/designs/rapidus2hp/hercules_is_int/rules-verific.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 26600.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 31868, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 646997, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 56261, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 56261, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.198, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -620.0, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.05, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 567, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.449, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -1530.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.0973, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.449, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -1530.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.0125, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.0973, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 33377, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/hercules_is_int/test/test_params.py b/flow/designs/rapidus2hp/hercules_is_int/test/test_params.py deleted file mode 100755 index 1930cd5882..0000000000 --- a/flow/designs/rapidus2hp/hercules_is_int/test/test_params.py +++ /dev/null @@ -1,226 +0,0 @@ -#!/usr/bin/env python3 - -import os -import sys -import unittest - -if __name__ == "__main__": - util_dir = os.path.join( - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), - "utils", - ) - sys.path.insert(0, util_dir) -from param_test_base import ParamTestBase - - -class TestParams(ParamTestBase): - """Unit test for checking correct Makefile settings""" - - def setUp(self): - """Sets up test variables""" - - ParamTestBase.setUp(self, "hercules_is_int") - - def get_exp_util(self, place_site, front_end, pdk_version, layer_stack): - """Returns the expected value""" - - if pdk_version == "0.15": - if place_site == "ra02h138_DST_45CPP": - return 30 - return 52 - if pdk_version == "0.3s": - if place_site == "ra02h138_DST_45CPP": - if front_end in ["", "slang"]: - if layer_stack == "14LM": - return 52 - if layer_stack in ["", "16LM"]: - return 54 - else: - if layer_stack == "14LM": - return 50 - return 56 - if pdk_version in ["", "0.3"]: - if place_site == "ra02h138_DST_45CPP": - return 52 - if front_end in ["", "slang"]: - return 60 - return 61 - if pdk_version == "t0.5" and place_site == "SC5T": - return 45 - if front_end == "verific": - if place_site in ["SC6T", "ra02h138_DST_45CPP"]: - return 30 - return 54 - else: - if place_site in ["SC6T", "ra02h138_DST_45CPP"]: - return 30 - return 52 - - def get_exp_sdc(self, place_site, pdk_version): - """Returns the expected SDC file path""" - - if pdk_version in ["", "0.3"]: - if pdk_version == "": - pdk_version = "0.3" - return os.path.join(self._design_full_dir, f"prects_{pdk_version}.sdc") - return os.path.join(self._design_full_dir, "prects.sdc") - - def test_pdk_0p3_default(self): - """ - Tests PDK 0.3 utilization - """ - - pdk_version = "" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - for layer_stack in self._layer_stack_list: - exp_util = self.get_exp_util( - place_site, front_end, pdk_version, layer_stack - ) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - layer_stack=layer_stack, - ) - - def test_pdk_0p2(self): - """ - Tests PDK 0.2 utilization - """ - - pdk_version = "0.2" - layer_stack = "16LM" - for front_end in self._front_end_list: - for place_site in self._ibm_site_list: - exp_util = self.get_exp_util( - place_site, front_end, pdk_version, layer_stack - ) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2a(self): - """ - Tests PDK 0.2a utilization - """ - - pdk_version = "0.2a" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - for layer_stack in self._layer_stack_list: - exp_util = self.get_exp_util( - place_site, front_end, pdk_version, layer_stack - ) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - layer_stack=layer_stack, - ) - - def test_pdk_0p15(self): - """ - Tests PDK 0.15 utilization - """ - - pdk_version = "0.15" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - for layer_stack in self._layer_stack_list: - exp_util = self.get_exp_util( - place_site, front_end, pdk_version, layer_stack - ) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - layer_stack=layer_stack, - ) - - def test_pdk_0p3s(self): - """ - Tests PDK 0.3s utilization - """ - - pdk_version = "0.3s" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - for layer_stack in self._layer_stack_list: - exp_util = self.get_exp_util( - place_site, front_end, pdk_version, layer_stack - ) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - layer_stack=layer_stack, - ) - - def test_pdk_0p3(self): - """ - Tests PDK 0.3 utilization - """ - - pdk_version = "0.3" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - for layer_stack in self._layer_stack_list: - exp_util = self.get_exp_util( - place_site, front_end, pdk_version, layer_stack - ) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - layer_stack=layer_stack, - ) - - def test_pdk_t0p5(self): - """ - Tests Titan PDK 0.5 utilization - """ - - layer_stack = "16LM" - pdk_version = "t0.5" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util( - place_site, front_end, pdk_version, layer_stack - ) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - layer_stack=layer_stack, - ) - - def test_flow_variant(self): - """Tests that setting the flow variant uses the right frontend""" - - test_tag = "flow_variant default" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND") - self.execute_cmd_int(cmd, test_tag, "slang") - test_tag = "flow_variant verific" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND", flow_variant="verific") - self.execute_cmd_int(cmd, test_tag, "verific") - - -if __name__ == "__main__": - unittest.main() diff --git a/flow/designs/rapidus2hp/ibex/autotuner.json b/flow/designs/rapidus2hp/ibex/autotuner.json deleted file mode 100644 index 7225bfab51..0000000000 --- a/flow/designs/rapidus2hp/ibex/autotuner.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "_SDC_FILE_PATH": "constraint_0.2a_8T.sdc", - "_SDC_CLK_PERIOD": { - "type": "range_int", - "min": 350, - "max": 500, - "step": 0 - }, - "CORE_UTILIZATION": { - "type": "range_int", - "min": 65, - "max": 80, - "step": 0 - }, - "CTS_CLUSTER_SIZE": { - "type": "range_int", - "min": 10, - "max": 200, - "step": 1 - }, - "CTS_CLUSTER_DIAMETER": { - "type": "range_int", - "min": 20, - "max": 400, - "step": 1 - } -} diff --git a/flow/designs/rapidus2hp/ibex/config.mk b/flow/designs/rapidus2hp/ibex/config.mk deleted file mode 100644 index f10f31e32a..0000000000 --- a/flow/designs/rapidus2hp/ibex/config.mk +++ /dev/null @@ -1,94 +0,0 @@ -export PLATFORM = rapidus2hp - -export DESIGN_NICKNAME = ibex -export DESIGN_NAME = ibex_core - -ifeq ($(FLOW_VARIANT), verific) - export SYNTH_HDL_FRONTEND = verific -endif - -export VERILOG_FILES = \ - $(DESIGN_HOME)/src/ibex_sv/ibex_pkg.sv \ - $(sort $(filter-out %/ibex_pkg.sv, $(wildcard $(DESIGN_HOME)/src/ibex_sv/*.sv))) \ - $(DESIGN_HOME)/src/ibex_sv/syn/rtl/prim_clock_gating.v - -export VERILOG_INCLUDE_DIRS = \ - $(DESIGN_HOME)/src/ibex_sv/vendor/lowrisc_ip/prim/rtl/ - -export SYNTH_HDL_FRONTEND ?= slang - - -# if FLOW_VARIANT == pos_slack, use an SDC file that has a larger clock -# resulting in positive slack -ifeq ($(FLOW_VARIANT),pos_slack) -export SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_pos_slack.sdc -else - .DEFAULT_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint.sdc - ._0P2A_6T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_0.2a_6T.sdc - ._0P2A_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_0.2a_8T.sdc - ._0P15_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_0.15.sdc - ._0P3S_6T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_0.3s_6T.sdc - ._0P3S_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_0.3s_8T.sdc - ._0P3_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_0.3_8T.sdc - .T0P5_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint_t0.5_8T.sdc - - # Use $(if) to defer conditional eval until all makefiles are read - export SDC_FILE = $(strip \ - $(if $(filter 0.2a,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - $(._0P2A_6T_SDC_FILE), \ - $(._0P2A_8T_SDC_FILE) \ - ), \ - $(if $(filter 0.15,$(RAPIDUS_PDK_VERSION)), \ - $(._0P15_SDC_FILE), \ - $(if $(filter 0.3s,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - $(._0P3S_6T_SDC_FILE), \ - $(._0P3S_8T_SDC_FILE) \ - ), \ - $(if $(filter 0.3,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h184_HST_45CPP,$(PLACE_SITE)), \ - $(._0P3_8T_SDC_FILE), \ - $(.DEFAULT_SDC_FILE) \ - ), \ - $(if $(and $(filter t0.5,$(RAPIDUS_PDK_VERSION)),$(filter SC8T,$(PLACE_SITE))), \ - $(.T0P5_8T_SDC_FILE), \ - $(.DEFAULT_SDC_FILE) \ - ) \ - ) \ - ) \ - ) \ - )) -endif - -export CORE_UTILIZATION = $(strip \ - $(if $(filter 0.15,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - 52, \ - 65 \ - ), \ - $(if $(filter 0.3s,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - 60, \ - 65 \ - ), \ - $(if $(filter 0.3,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - 55, \ - 60 \ - ), \ - $(if $(and $(filter t0.5,$(RAPIDUS_PDK_VERSION)),$(filter SC5T,$(PLACE_SITE))), \ - 65, \ - 70 \ - ) \ - ) \ - ) \ - )) - -export CORE_ASPECT_RATIO = 1 -export CORE_MARGIN = 0.75 -export PLACE_DENSITY_LB_ADDON = 0.20 - -export ENABLE_DPO = 0 - -export TNS_END_PERCENT = 100 diff --git a/flow/designs/rapidus2hp/ibex/constraint.sdc b/flow/designs/rapidus2hp/ibex/constraint.sdc deleted file mode 100644 index 26620f6aee..0000000000 --- a/flow/designs/rapidus2hp/ibex/constraint.sdc +++ /dev/null @@ -1,19 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name core_clock -set clk_port_name clk_i -set clk_period 590 -set clk_io_pct 0.2 - -set clk_port [get_ports $clk_port_name] - -convert_time_value clk_period - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/ibex/constraint_0.15.sdc b/flow/designs/rapidus2hp/ibex/constraint_0.15.sdc deleted file mode 100644 index f539d55b82..0000000000 --- a/flow/designs/rapidus2hp/ibex/constraint_0.15.sdc +++ /dev/null @@ -1,19 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name core_clock -set clk_port_name clk_i -set clk_period 450 -set clk_io_pct 0.2 - -set clk_port [get_ports $clk_port_name] - -convert_time_value clk_period - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/ibex/constraint_0.2a_6T.sdc b/flow/designs/rapidus2hp/ibex/constraint_0.2a_6T.sdc deleted file mode 100644 index 471590ee50..0000000000 --- a/flow/designs/rapidus2hp/ibex/constraint_0.2a_6T.sdc +++ /dev/null @@ -1,19 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name core_clock -set clk_port_name clk_i -set clk_period 730 -set clk_io_pct 0.2 - -set clk_port [get_ports $clk_port_name] - -convert_time_value clk_period - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/ibex/constraint_0.2a_8T.sdc b/flow/designs/rapidus2hp/ibex/constraint_0.2a_8T.sdc deleted file mode 100644 index ab67202b80..0000000000 --- a/flow/designs/rapidus2hp/ibex/constraint_0.2a_8T.sdc +++ /dev/null @@ -1,19 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name core_clock -set clk_port_name clk_i -set clk_period 480 -set clk_io_pct 0.2 - -set clk_port [get_ports $clk_port_name] - -convert_time_value clk_period - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/ibex/constraint_0.3_8T.sdc b/flow/designs/rapidus2hp/ibex/constraint_0.3_8T.sdc deleted file mode 100644 index f539d55b82..0000000000 --- a/flow/designs/rapidus2hp/ibex/constraint_0.3_8T.sdc +++ /dev/null @@ -1,19 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name core_clock -set clk_port_name clk_i -set clk_period 450 -set clk_io_pct 0.2 - -set clk_port [get_ports $clk_port_name] - -convert_time_value clk_period - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/ibex/constraint_0.3s_6T.sdc b/flow/designs/rapidus2hp/ibex/constraint_0.3s_6T.sdc deleted file mode 100644 index bdece50956..0000000000 --- a/flow/designs/rapidus2hp/ibex/constraint_0.3s_6T.sdc +++ /dev/null @@ -1,19 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name core_clock -set clk_port_name clk_i -set clk_period 550 -set clk_io_pct 0.2 - -set clk_port [get_ports $clk_port_name] - -convert_time_value clk_period - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/ibex/constraint_0.3s_8T.sdc b/flow/designs/rapidus2hp/ibex/constraint_0.3s_8T.sdc deleted file mode 100644 index f539d55b82..0000000000 --- a/flow/designs/rapidus2hp/ibex/constraint_0.3s_8T.sdc +++ /dev/null @@ -1,19 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name core_clock -set clk_port_name clk_i -set clk_period 450 -set clk_io_pct 0.2 - -set clk_port [get_ports $clk_port_name] - -convert_time_value clk_period - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/ibex/constraint_pos_slack.sdc b/flow/designs/rapidus2hp/ibex/constraint_pos_slack.sdc deleted file mode 100644 index 6226d2121c..0000000000 --- a/flow/designs/rapidus2hp/ibex/constraint_pos_slack.sdc +++ /dev/null @@ -1,19 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name core_clock -set clk_port_name clk_i -set clk_period 1468 -set clk_io_pct 0.2 - -convert_time_value clk_period - -set clk_port [get_ports $clk_port_name] - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/ibex/constraint_t0.5_8T.sdc b/flow/designs/rapidus2hp/ibex/constraint_t0.5_8T.sdc deleted file mode 100644 index 82df59ea52..0000000000 --- a/flow/designs/rapidus2hp/ibex/constraint_t0.5_8T.sdc +++ /dev/null @@ -1,19 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -set clk_name core_clock -set clk_port_name clk_i -set clk_period 580 -set clk_io_pct 0.2 - -set clk_port [get_ports $clk_port_name] - -convert_time_value clk_period - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/ibex/rapidus2hp_ibex_tune.yaml b/flow/designs/rapidus2hp/ibex/rapidus2hp_ibex_tune.yaml deleted file mode 100644 index 5aa53b55c7..0000000000 --- a/flow/designs/rapidus2hp/ibex/rapidus2hp_ibex_tune.yaml +++ /dev/null @@ -1,13 +0,0 @@ -run_config: - design: ibex - experiment: basic - flow_home: /OpenROAD-flow-scripts/flow - jobs: 2 - mode: tune - samples: 5 - platform: rapidus2hp - ray_outputs_dir: /work - orfs_outputs_dir: /work - stop_stage: globalroute -search_space: - file: designs/rapidus2hp/ibex/autotuner.json diff --git a/flow/designs/rapidus2hp/ibex/rules-base.json b/flow/designs/rapidus2hp/ibex/rules-base.json deleted file mode 100644 index 5bd45aed39..0000000000 --- a/flow/designs/rapidus2hp/ibex/rules-base.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 1010.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 1216, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 20942, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 1708, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 1708, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.0225, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -0.09, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.0225, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.09, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.064, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -21.6, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.0225, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.09, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.064, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -21.6, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.0225, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.09, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 1266, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/ibex/rules-verific.json b/flow/designs/rapidus2hp/ibex/rules-verific.json deleted file mode 100644 index 5198ee66e7..0000000000 --- a/flow/designs/rapidus2hp/ibex/rules-verific.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 1020.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 1221, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 21890, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 1760, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 1760, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.0225, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -0.09, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.0225, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.09, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.0689, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -21.8, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.0225, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.09, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.0689, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -21.8, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.0225, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.09, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 1274, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/ibex/test/test_params.py b/flow/designs/rapidus2hp/ibex/test/test_params.py deleted file mode 100755 index a1fd1ce5dc..0000000000 --- a/flow/designs/rapidus2hp/ibex/test/test_params.py +++ /dev/null @@ -1,265 +0,0 @@ -#!/usr/bin/env python3 - -import os -import sys -import unittest - -if __name__ == "__main__": - util_dir = os.path.join( - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), - "utils", - ) - sys.path.insert(0, util_dir) -from param_test_base import ParamTestBase - - -class TestParams(ParamTestBase): - """Unit test for checking correct Makefile settings""" - - def setUp(self): - """Sets up test variables""" - - ParamTestBase.setUp(self, "ibex") - - def get_exp_util(self, place_site, pdk_version): - """Returns the expected utilization""" - - if pdk_version == "0.15": - if place_site == "ra02h138_DST_45CPP": - return 52 - return 65 - if pdk_version == "0.3s": - if place_site == "ra02h138_DST_45CPP": - return 60 - return 65 - if pdk_version in ["", "0.3"]: - if place_site == "ra02h138_DST_45CPP": - return 55 - return 60 - if pdk_version == "t0.5" and place_site == "SC5T": - return 65 - return 70 - - def get_exp_sdc(self, place_site, pdk_version): - """Returns the expected SDC file path""" - - if pdk_version == "0.2a": - if place_site == "ra02h138_DST_45CPP": - return os.path.join( - self._design_full_dir, f"constraint_{pdk_version}_6T.sdc" - ) - return os.path.join( - self._design_full_dir, f"constraint_{pdk_version}_8T.sdc" - ) - if pdk_version == "0.15": - return os.path.join(self._design_full_dir, f"constraint_{pdk_version}.sdc") - if pdk_version == "0.3s": - if place_site == "ra02h138_DST_45CPP": - return os.path.join( - self._design_full_dir, f"constraint_{pdk_version}_6T.sdc" - ) - return os.path.join( - self._design_full_dir, f"constraint_{pdk_version}_8T.sdc" - ) - - if pdk_version in ["", "0.3"]: - if place_site in ["", "ra02h184_HST_45CPP"]: - if pdk_version == "": - pdk_version = "0.3" - return os.path.join( - self._design_full_dir, f"constraint_{pdk_version}_8T.sdc" - ) - if pdk_version == "t0.5" and place_site in ["", "SC8T"]: - return os.path.join( - self._design_full_dir, f"constraint_{pdk_version}_8T.sdc" - ) - return os.path.join(self._design_full_dir, "constraint.sdc") - - def test_pdk_0p3_default(self): - """ - Tests PDK 0.3 utilization - """ - - pdk_version = "" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - exp_sdc = self.get_exp_sdc(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2(self): - """ - Tests PDK 0.2 utilization - """ - - pdk_version = "0.2" - for front_end in self._front_end_list: - for place_site in self._ibm_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - exp_sdc = self.get_exp_sdc(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2a(self): - """ - Tests PDK 0.2a utilization - """ - - pdk_version = "0.2a" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - exp_sdc = self.get_exp_sdc(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p15(self): - """ - Tests PDK 0.15 utilization - """ - - pdk_version = "0.15" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - exp_sdc = self.get_exp_sdc(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3s(self): - """ - Tests PDK 0.3s utilization - """ - - pdk_version = "0.3s" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - exp_sdc = self.get_exp_sdc(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3(self): - """ - Tests PDK 0.3 utilization - """ - - pdk_version = "0.3" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - exp_sdc = self.get_exp_sdc(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_t0p5(self): - """ - Tests Titan PDK 0.5 utilization - """ - - pdk_version = "t0.5" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version) - exp_sdc = self.get_exp_sdc(place_site, pdk_version) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_flow_variant(self): - """Tests that setting the flow variant uses the right frontend""" - - test_tag = "flow_variant default" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND") - self.execute_cmd_int(cmd, test_tag, "slang") - test_tag = "flow_variant verific" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND", flow_variant="verific") - self.execute_cmd_int(cmd, test_tag, "verific") - - -if __name__ == "__main__": - unittest.main() diff --git a/flow/designs/rapidus2hp/jpeg/config.mk b/flow/designs/rapidus2hp/jpeg/config.mk deleted file mode 100644 index 009649d7c5..0000000000 --- a/flow/designs/rapidus2hp/jpeg/config.mk +++ /dev/null @@ -1,61 +0,0 @@ -export PLATFORM = rapidus2hp - -export DESIGN_NAME = jpeg_encoder -export DESIGN_NICKNAME = jpeg - -ifeq ($(FLOW_VARIANT), verific) - export SYNTH_HDL_FRONTEND = verific -endif - -# Don't set default frontend as slang, since slang doesn't like the JPEG RTL -#export SYNTH_HDL_FRONTEND ?= slang - -export VERILOG_FILES = $(sort $(wildcard $(DESIGN_HOME)/src/$(DESIGN_NICKNAME)/*.v)) -export VERILOG_INCLUDE_DIRS = $(DESIGN_HOME)/src/$(DESIGN_NICKNAME)/include - -.DEFAULT_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/jpeg_encoder15_7nm.sdc -._0P2A_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/jpeg_encoder15_0.2a_8T.sdc -._0P15_6T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/jpeg_encoder15_0.15_6T.sdc -._0P15_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/jpeg_encoder15_0.15_8T.sdc -._0P3S_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/jpeg_encoder15_0.3s.sdc -._0P3_6T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/jpeg_encoder15_0.3_6T.sdc -._0P3_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/jpeg_encoder15_0.3_8T.sdc -.T0P5_8T_SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/jpeg_encoder15_t0.5_8T.sdc - -# Use $(if) to defer conditional eval until all makefiles are read -export SDC_FILE = $(strip \ - $(if $(and $(filter 0.2a,$(RAPIDUS_PDK_VERSION)),$(filter ra02h184_HST_45CPP,$(PLACE_SITE))), \ - $(._0P2A_8T_SDC_FILE), \ - $(if $(filter 0.15,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - $(._0P15_6T_SDC_FILE), \ - $(._0P15_8T_SDC_FILE) \ - ), \ - $(if $(filter 0.3s,$(RAPIDUS_PDK_VERSION)), \ - $(._0P3S_SDC_FILE), \ - $(if $(filter 0.3,$(RAPIDUS_PDK_VERSION)), \ - $(if $(filter ra02h138_DST_45CPP,$(PLACE_SITE)), \ - $(._0P3_6T_SDC_FILE), \ - $(._0P3_8T_SDC_FILE) \ - ), \ - $(if $(and $(filter t0.5,$(RAPIDUS_PDK_VERSION)),$(filter SC8T,$(PLACE_SITE))), \ - $(.T0P5_8T_SDC_FILE), \ - $(.DEFAULT_SDC_FILE) \ - ) \ - ) \ - ) \ - ) \ - )) - -export ABC_AREA = 1 - -export CORE_UTILIZATION = $(strip \ - $(if $(filter 0.3,$(RAPIDUS_PDK_VERSION)), \ - 61, \ - 60 \ - )) - -export CORE_ASPECT_RATIO = 1 -export CORE_MARGIN = 0.75 - -export TNS_END_PERCENT = 100 diff --git a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.15.sdc b/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.15.sdc deleted file mode 100644 index 9687665247..0000000000 --- a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.15.sdc +++ /dev/null @@ -1,21 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -current_design jpeg_encoder - -set clk_name clk -set clk_port_name clk -set clk_period 300 -set clk_io_pct 0.2 - -convert_time_value clk_period - -set clk_port [get_ports $clk_port_name] - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.15_6T.sdc b/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.15_6T.sdc deleted file mode 100644 index 3263c5e01a..0000000000 --- a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.15_6T.sdc +++ /dev/null @@ -1,21 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -current_design jpeg_encoder - -set clk_name clk -set clk_port_name clk -set clk_period 150 -set clk_io_pct 0.2 - -convert_time_value clk_period - -set clk_port [get_ports $clk_port_name] - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.15_8T.sdc b/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.15_8T.sdc deleted file mode 100644 index b8396d16eb..0000000000 --- a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.15_8T.sdc +++ /dev/null @@ -1,21 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -current_design jpeg_encoder - -set clk_name clk -set clk_port_name clk -set clk_period 250 -set clk_io_pct 0.2 - -convert_time_value clk_period - -set clk_port [get_ports $clk_port_name] - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.2a_8T.sdc b/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.2a_8T.sdc deleted file mode 100644 index ea07db329e..0000000000 --- a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.2a_8T.sdc +++ /dev/null @@ -1,21 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -current_design jpeg_encoder - -set clk_name clk -set clk_port_name clk -set clk_period 265 -set clk_io_pct 0.2 - -convert_time_value clk_period - -set clk_port [get_ports $clk_port_name] - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.3_6T.sdc b/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.3_6T.sdc deleted file mode 100644 index 48533567a1..0000000000 --- a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.3_6T.sdc +++ /dev/null @@ -1,21 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -current_design jpeg_encoder - -set clk_name clk -set clk_port_name clk -set clk_period 290 -set clk_io_pct 0.2 - -convert_time_value clk_period - -set clk_port [get_ports $clk_port_name] - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.3_8T.sdc b/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.3_8T.sdc deleted file mode 100644 index 4f489bb009..0000000000 --- a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.3_8T.sdc +++ /dev/null @@ -1,21 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -current_design jpeg_encoder - -set clk_name clk -set clk_port_name clk -set clk_period 225 -set clk_io_pct 0.2 - -convert_time_value clk_period - -set clk_port [get_ports $clk_port_name] - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.3s.sdc b/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.3s.sdc deleted file mode 100644 index 3263c5e01a..0000000000 --- a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_0.3s.sdc +++ /dev/null @@ -1,21 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -current_design jpeg_encoder - -set clk_name clk -set clk_port_name clk -set clk_period 150 -set clk_io_pct 0.2 - -convert_time_value clk_period - -set clk_port [get_ports $clk_port_name] - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_7nm.sdc b/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_7nm.sdc deleted file mode 100644 index 43391b7424..0000000000 --- a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_7nm.sdc +++ /dev/null @@ -1,21 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -current_design jpeg_encoder - -set clk_name clk -set clk_port_name clk -set clk_period 425 -set clk_io_pct 0.2 - -convert_time_value clk_period - -set clk_port [get_ports $clk_port_name] - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_t0.5_8T.sdc b/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_t0.5_8T.sdc deleted file mode 100644 index 4277fb6839..0000000000 --- a/flow/designs/rapidus2hp/jpeg/jpeg_encoder15_t0.5_8T.sdc +++ /dev/null @@ -1,21 +0,0 @@ -source $::env(PLATFORM_DIR)/util.tcl - -current_design jpeg_encoder - -set clk_name clk -set clk_port_name clk -set clk_period 325 -set clk_io_pct 0.2 - -convert_time_value clk_period - -set clk_port [get_ports $clk_port_name] - -create_clock -name $clk_name -period $clk_period $clk_port - -set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port] - -set_input_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - $non_clock_inputs -set_output_delay [expr { $clk_period * $clk_io_pct }] -clock $clk_name \ - [all_outputs] diff --git a/flow/designs/rapidus2hp/jpeg/rules-base.json b/flow/designs/rapidus2hp/jpeg/rules-base.json deleted file mode 100644 index 0b3dd754f3..0000000000 --- a/flow/designs/rapidus2hp/jpeg/rules-base.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 3197.7067, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 4582, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 109773, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 8482, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 8482, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.0366, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -13.4, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.0075, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.03, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.0931, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -64.2, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.0075, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.03, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.0931, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -64.2, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.0075, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.03, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 4687, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/jpeg/rules-verific.json b/flow/designs/rapidus2hp/jpeg/rules-verific.json deleted file mode 100644 index 4737bf1ef2..0000000000 --- a/flow/designs/rapidus2hp/jpeg/rules-verific.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "synth__design__instance__area__stdcell": { - "value": 3290.0, - "compare": "<=" - }, - "constraints__clocks__count": { - "value": 1, - "compare": "==" - }, - "placeopt__design__instance__area": { - "value": 4619, - "compare": "<=" - }, - "placeopt__design__instance__count__stdcell": { - "value": 115045, - "compare": "<=" - }, - "detailedplace__design__violations": { - "value": 0, - "compare": "==" - }, - "cts__design__instance__count__setup_buffer": { - "value": 8644, - "compare": "<=" - }, - "cts__design__instance__count__hold_buffer": { - "value": 8644, - "compare": "<=" - }, - "cts__timing__setup__ws": { - "value": -0.0412, - "compare": ">=" - }, - "cts__timing__setup__tns": { - "value": -20.2, - "compare": ">=" - }, - "cts__timing__hold__ws": { - "value": -0.0075, - "compare": ">=" - }, - "cts__timing__hold__tns": { - "value": -0.03, - "compare": ">=" - }, - "globalroute__antenna_diodes_count": { - "value": 100, - "compare": "<=" - }, - "globalroute__timing__setup__ws": { - "value": -0.0946, - "compare": ">=" - }, - "globalroute__timing__setup__tns": { - "value": -84.0, - "compare": ">=" - }, - "globalroute__timing__hold__ws": { - "value": -0.0075, - "compare": ">=" - }, - "globalroute__timing__hold__tns": { - "value": -0.03, - "compare": ">=" - }, - "finish__timing__setup__ws": { - "value": -0.0946, - "compare": ">=" - }, - "finish__timing__setup__tns": { - "value": -84.0, - "compare": ">=" - }, - "finish__timing__hold__ws": { - "value": -0.0075, - "compare": ">=" - }, - "finish__timing__hold__tns": { - "value": -0.03, - "compare": ">=" - }, - "finish__design__instance__area": { - "value": 4720, - "compare": "<=" - } -} \ No newline at end of file diff --git a/flow/designs/rapidus2hp/jpeg/test/test_params.py b/flow/designs/rapidus2hp/jpeg/test/test_params.py deleted file mode 100755 index 7a61f093e2..0000000000 --- a/flow/designs/rapidus2hp/jpeg/test/test_params.py +++ /dev/null @@ -1,250 +0,0 @@ -#!/usr/bin/env python3 - -import os -import sys -import unittest - -if __name__ == "__main__": - util_dir = os.path.join( - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), - "utils", - ) - sys.path.insert(0, util_dir) -from param_test_base import ParamTestBase - - -class TestParams(ParamTestBase): - """Unit test for checking correct Makefile settings""" - - def setUp(self): - """Sets up test variables""" - - ParamTestBase.setUp(self, "jpeg") - - def get_exp_util(self, place_site, pdk_version, front_end): - """Returns the expected utilization""" - if pdk_version in ["", "0.3"]: - return 61 - return 60 - - def get_exp_sdc(self, place_site, pdk_version, front_end): - """Returns the expected SDC file path""" - - if pdk_version == "0.2a": - if place_site in ["", "ra02h184_HST_45CPP"]: - return os.path.join( - self._design_full_dir, f"jpeg_encoder15_{pdk_version}_8T.sdc" - ) - if pdk_version in ["", "0.3", "0.15"]: - if pdk_version == "": - pdk_version = "0.3" - if place_site in ["", "ra02h184_HST_45CPP"]: - return os.path.join( - self._design_full_dir, f"jpeg_encoder15_{pdk_version}_8T.sdc" - ) - return os.path.join( - self._design_full_dir, f"jpeg_encoder15_{pdk_version}_6T.sdc" - ) - if pdk_version == "0.3s": - return os.path.join( - self._design_full_dir, f"jpeg_encoder15_{pdk_version}.sdc" - ) - if pdk_version == "t0.5" and place_site in ["", "SC8T"]: - return os.path.join( - self._design_full_dir, f"jpeg_encoder15_{pdk_version}_8T.sdc" - ) - return os.path.join(self._design_full_dir, "jpeg_encoder15_7nm.sdc") - - def test_pdk_0p3_default(self): - """ - Tests PDK 0.3 utilization - """ - - pdk_version = "" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2(self): - """ - Tests PDK 0.2 utilization - """ - - pdk_version = "0.2" - for front_end in self._front_end_list: - for place_site in self._ibm_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p2a(self): - """ - Tests PDK 0.2a utilization - """ - - pdk_version = "0.2a" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p15(self): - """ - Tests PDK 0.15 utilization - """ - - pdk_version = "0.15" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3s(self): - """ - Tests PDK 0.3s utilization - """ - - pdk_version = "0.3s" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_0p3(self): - """ - Tests PDK 0.3 utilization - """ - - pdk_version = "0.3" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_pdk_t0p5(self): - """ - Tests Titan PDK 0.5 utilization - """ - - pdk_version = "t0.5" - for front_end in self._front_end_list: - for place_site in self._synopsys_site_list: - exp_util = self.get_exp_util(place_site, pdk_version, front_end) - exp_sdc = self.get_exp_sdc(place_site, pdk_version, front_end) - self.execute_cmd( - "CORE_UTILIZATION", - exp_util, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - self.execute_cmd( - "SDC_FILE", - exp_sdc, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - ) - - def test_flow_variant(self): - """ - Tests that setting the flow variant uses the right frontend - - slang doesn't like the JPEG RTL, so the default is to use the yosys - Verilog frontend - """ - - test_tag = "flow_variant default" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND") - self.execute_cmd_int(cmd, test_tag, None) - test_tag = "flow_variant verific" - cmd = self.build_cmd("SYNTH_HDL_FRONTEND", flow_variant="verific") - self.execute_cmd_int(cmd, test_tag, "verific") - - -if __name__ == "__main__": - unittest.main() diff --git a/flow/designs/rapidus2hp/utils/param_test_base.py b/flow/designs/rapidus2hp/utils/param_test_base.py deleted file mode 100644 index 9354a313b3..0000000000 --- a/flow/designs/rapidus2hp/utils/param_test_base.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python3 - -import os -import re -import subprocess -import unittest - - -class ParamTestBase(unittest.TestCase): - """Base class for testing params""" - - def setUp(self, design_name): - """ - Sets up common member variables. - Assumes we're running in flow directory - """ - - self._platform = "rapidus2hp" - self._design = design_name - self._design_dir = os.path.join("designs", self._platform, self._design) - self._cmd_base = f"make DESIGN_CONFIG={self._design_dir}/config.mk" - self._design_full_dir = os.path.join(os.getcwd(), self._design_dir) - # Handle different make output - # param: value - # param = value - self._result_re = re.compile(r"\S+\s*(?:=|:)\s*(\S+)?") - self._front_end_list = ["", "slang", "verific"] - self._ibm_site_list = ["", "SC6T", "SC8T"] - self._synopsys_site_list = ["", "ra02h138_DST_45CPP", "ra02h184_HST_45CPP"] - self._layer_stack_list = ["", "14LM", "16LM", "18LM", "20LM"] - - def get_track_height(self, place_site): - """Returns the track height for the place site""" - - if place_site.startswith("SC"): - return place_site[2:] - if place_site == "ra02h138_DST_45CPP": - return "6T" - return "8T" - - def build_cmd( - self, - param_name, - place_site=None, - pdk_version=None, - front_end=None, - flow_variant=None, - layer_stack=None, - ): - """Builds the command to execute""" - - str_buf = [self._cmd_base] - if place_site and place_site != "": - str_buf.append(f"PLACE_SITE={place_site}") - if pdk_version and pdk_version != "": - str_buf.append(f"RAPIDUS_PDK_VERSION={pdk_version}") - if front_end and front_end == "verific": - str_buf.append(f"SYNTH_HDL_FRONTEND={front_end}") - if layer_stack and layer_stack != "": - str_buf.append(f"LAYER_STACK_OPTION={layer_stack}") - if flow_variant and flow_variant != "": - str_buf.append(f"FLOW_VARIANT={flow_variant}") - str_buf.append(f"print-{param_name}") - return " ".join(str_buf) - - def execute_cmd( - self, - param_name, - exp_result, - place_site=None, - pdk_version=None, - front_end=None, - layer_stack=None, - debug=False, - ): - """ - Executes command - """ - - test_tag = f"'{place_site}' '{pdk_version}' '{front_end}'" - cmd = self.build_cmd( - param_name, - place_site=place_site, - pdk_version=pdk_version, - front_end=front_end, - layer_stack=layer_stack, - ) - if debug: - print(cmd) - self.execute_cmd_int(cmd, test_tag, exp_result) - - def execute_cmd_int(self, cmd, test_tag, exp_result): - """ - Executes command - check if return code is 0 - check if value matches expected result - """ - - out = subprocess.run( - cmd, check=True, shell=True, capture_output=True, text=True - ) - self.assertEqual(out.returncode, 0, f"Return code for {test_tag} is non-zero") - stdout_str = out.stdout.rstrip() - result = self._result_re.match(stdout_str) - self.assertIsNotNone(result, f"RE result {test_tag} is None") - value = result.group(1) - if isinstance(exp_result, int): - value = int(value) - self.assertEqual(value, exp_result, f"Results for {test_tag} don't match") diff --git a/flow/designs/rapidus2hp/utils/run_tests.sh b/flow/designs/rapidus2hp/utils/run_tests.sh deleted file mode 100755 index f9e1207745..0000000000 --- a/flow/designs/rapidus2hp/utils/run_tests.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -err_ct=0 - -for design_name in cva6 ethmac gcd hercules_idecode hercules_is_int ibex jpeg; do - ./designs/rapidus2hp/$design_name/test/test_params.py - if [ $? -ne 0 ]; then - ((err_ct++)) - fi -done - -if [ $err_ct -ne 0 ]; then - echo "ERROR: $err_ct errors found" - exit 1 -fi - -exit 0 diff --git a/flow/designs/sky130hd/aes/BUILD b/flow/designs/sky130hd/aes/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/sky130hd/aes/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/sky130hd/aes/rules-base.json b/flow/designs/sky130hd/aes/rules-base.json index 339badafd6..9f088e5593 100644 --- a/flow/designs/sky130hd/aes/rules-base.json +++ b/flow/designs/sky130hd/aes/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "a4718ac6d5363014bbfcd51131428f805a5e0da2", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "601d0615a85a8ba0e970c03b26890ea73acc876d", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 87900.0, "compare": "<=" @@ -32,7 +42,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -0.828, + "value": -0.823, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -1.08, + "value": -1.3, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -14.4, + "value": -9.57, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -1.38, + "value": -1.17, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -9.15, + "value": -2.8, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/sky130hd/chameleon/BUILD b/flow/designs/sky130hd/chameleon/BUILD new file mode 100644 index 0000000000..414ad64d62 --- /dev/null +++ b/flow/designs/sky130hd/chameleon/BUILD @@ -0,0 +1,16 @@ +load("//flow/designs:design.bzl", "design") + +# FP_PDN_RAIL_{OFFSET,WIDTH} are read by chameleon's own pdn.cfg, not +# by ORFS itself — route them through user_arguments so the validator +# doesn't reject them as unknown ORFS variables. +# +# VERILOG_FILES_BLACKBOX is a config.mk-local helper: only used via +# $(VERILOG_FILES_BLACKBOX) expansion inside VERILOG_FILES. +design( + config = "config.mk", + user_arguments = [ + "FP_PDN_RAIL_OFFSET", + "FP_PDN_RAIL_WIDTH", + ], + local_arguments = ["VERILOG_FILES_BLACKBOX"], +) diff --git a/flow/designs/sky130hd/chameleon/gds/BUILD b/flow/designs/sky130hd/chameleon/gds/BUILD new file mode 100644 index 0000000000..ffe8da3a57 --- /dev/null +++ b/flow/designs/sky130hd/chameleon/gds/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("gds") diff --git a/flow/designs/sky130hd/chameleon/lef/BUILD b/flow/designs/sky130hd/chameleon/lef/BUILD new file mode 100644 index 0000000000..14238a10ec --- /dev/null +++ b/flow/designs/sky130hd/chameleon/lef/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("lef") diff --git a/flow/designs/sky130hd/chameleon/rules-base.json b/flow/designs/sky130hd/chameleon/rules-base.json index 90e39c67c3..c8d128ed5c 100644 --- a/flow/designs/sky130hd/chameleon/rules-base.json +++ b/flow/designs/sky130hd/chameleon/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "b6bf0909a62e102500620465b2a9efd9af557361", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "a71dbebf64948174d0130be63caf9e9734dfd859", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 27373.26, "compare": "<=" @@ -12,7 +22,7 @@ "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 59665, + "value": 59456, "compare": "<=" }, "detailedplace__design__violations": { @@ -28,11 +38,11 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -2.19, + "value": -0.962, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -34.8, + "value": -6.72, "compare": ">=" }, "cts__timing__hold__ws": { @@ -44,15 +54,15 @@ "compare": ">=" }, "globalroute__antenna_diodes_count": { - "value": 151, + "value": 196, "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -2.24, + "value": -0.944, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -10.2, + "value": -5.91, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -2.28, + "value": -0.881, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -9.59, + "value": -7.36, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/sky130hd/gcd/BUILD b/flow/designs/sky130hd/gcd/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/sky130hd/gcd/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/sky130hd/gcd/rules-base.json b/flow/designs/sky130hd/gcd/rules-base.json index 0b617790b3..876a7ee69c 100644 --- a/flow/designs/sky130hd/gcd/rules-base.json +++ b/flow/designs/sky130hd/gcd/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "e4439fe92250c7b2f47d6b47f39f13bd8a49c6ed", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "9fd6f5fdae5caa9e95f041ea3fd28a43beea3058", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 2760.0, + "value": 2660.0, "compare": "<=" }, "constraints__clocks__count": { @@ -28,11 +38,11 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -1.82, + "value": -1.62, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -77.3, + "value": -68.8, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -1.91, + "value": -1.9, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -85.4, + "value": -88.8, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -1.8, + "value": -1.86, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -80.8, + "value": -87.8, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/sky130hd/ibex/BUILD b/flow/designs/sky130hd/ibex/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/sky130hd/ibex/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/sky130hd/ibex/rules-base.json b/flow/designs/sky130hd/ibex/rules-base.json index 429672309c..22f6cd058a 100644 --- a/flow/designs/sky130hd/ibex/rules-base.json +++ b/flow/designs/sky130hd/ibex/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "34f678ad6ee91a3facb09f4176e4d9e3003c86a4", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "bb9473b3c4c02199f8863880e39ad81a25d809f0", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 148000.0, + "value": 147000.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,7 +18,7 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 167557, + "value": 166353, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 728653, + "value": 704140, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 179425, + "value": 178015, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/sky130hd/jpeg/BUILD b/flow/designs/sky130hd/jpeg/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/sky130hd/jpeg/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/sky130hd/jpeg/rules-base.json b/flow/designs/sky130hd/jpeg/rules-base.json index d5e3114bea..bbf97b08b7 100644 --- a/flow/designs/sky130hd/jpeg/rules-base.json +++ b/flow/designs/sky130hd/jpeg/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "f9c074c591d9381659586e4ea3eb3bd9fbdd8258", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "fe12e2c05d7f193743ce302f8d8454782d39bb3a", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 463000.0, + "value": 447000.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 496234, + "value": 494087, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 55309, + "value": 52580, "compare": "<=" }, "detailedplace__design__violations": { @@ -20,19 +30,19 @@ "compare": "==" }, "cts__design__instance__count__setup_buffer": { - "value": 4810, + "value": 4572, "compare": "<=" }, "cts__design__instance__count__hold_buffer": { - "value": 4810, + "value": 4572, "compare": "<=" }, "cts__timing__setup__ws": { - "value": -0.781, + "value": -0.669, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -170.0, + "value": -59.8, "compare": ">=" }, "cts__timing__hold__ws": { @@ -44,15 +54,15 @@ "compare": ">=" }, "globalroute__antenna_diodes_count": { - "value": 115, + "value": 100, "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -1.16, + "value": -0.764, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -268.0, + "value": -111.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -0.943, + "value": -0.592, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -146.0, + "value": -42.9, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/sky130hd/microwatt/BUILD b/flow/designs/sky130hd/microwatt/BUILD new file mode 100644 index 0000000000..a375309357 --- /dev/null +++ b/flow/designs/sky130hd/microwatt/BUILD @@ -0,0 +1,6 @@ +load("//flow/designs:design.bzl", "design") + +# VERILOG_FILES_BLACKBOX is a config.mk-local helper: only used via +# $(VERILOG_FILES_BLACKBOX) expansion inside VERILOG_FILES. Not read by +# ORFS or by any user .tcl/.mk — drop it so it never reaches orfs_flow. +design(config = "config.mk", local_arguments = ["VERILOG_FILES_BLACKBOX"]) diff --git a/flow/designs/sky130hd/microwatt/config.mk b/flow/designs/sky130hd/microwatt/config.mk index e6cc7dfe74..22cb13c023 100644 --- a/flow/designs/sky130hd/microwatt/config.mk +++ b/flow/designs/sky130hd/microwatt/config.mk @@ -49,3 +49,6 @@ endif export SWAP_ARITH_OPERATORS = 1 export OPENROAD_HIERARCHICAL = 1 + +# Temporary disabling +export LEC_CHECK = 0 diff --git a/flow/designs/sky130hd/microwatt/gds/BUILD b/flow/designs/sky130hd/microwatt/gds/BUILD new file mode 100644 index 0000000000..ffe8da3a57 --- /dev/null +++ b/flow/designs/sky130hd/microwatt/gds/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("gds") diff --git a/flow/designs/sky130hd/microwatt/lef/BUILD b/flow/designs/sky130hd/microwatt/lef/BUILD new file mode 100644 index 0000000000..14238a10ec --- /dev/null +++ b/flow/designs/sky130hd/microwatt/lef/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("lef") diff --git a/flow/designs/sky130hd/microwatt/lib/BUILD b/flow/designs/sky130hd/microwatt/lib/BUILD new file mode 100644 index 0000000000..c477f56c5e --- /dev/null +++ b/flow/designs/sky130hd/microwatt/lib/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("lib") diff --git a/flow/designs/sky130hd/microwatt/rules-base.json b/flow/designs/sky130hd/microwatt/rules-base.json index d2c9b2db9b..8fa2c38169 100644 --- a/flow/designs/sky130hd/microwatt/rules-base.json +++ b/flow/designs/sky130hd/microwatt/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "df740b6c0251ad7e1eabefda87b6d3e836dacfdc", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "8362e56e95b27af28a733f4ff1c72cff53c75fc1", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 689000.0, + "value": 686000.0, "compare": "<=" }, "constraints__clocks__count": { @@ -8,7 +18,7 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 5433922, + "value": 5431496, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { @@ -32,7 +42,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -371.0, + "value": -345.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -44,7 +54,7 @@ "compare": ">=" }, "globalroute__antenna_diodes_count": { - "value": 2635, + "value": 1426, "compare": "<=" }, "globalroute__timing__setup__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -288.0, + "value": -345.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -72,19 +82,19 @@ "compare": "<=" }, "detailedroute__antenna__violating__nets": { - "value": 3, + "value": 1, "compare": "<=" }, "detailedroute__antenna_diodes_count": { - "value": 1724, + "value": 1393, "compare": "<=" }, "finish__timing__setup__ws": { - "value": -1.34, + "value": -2.71, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -148.0, + "value": -360.0, "compare": ">=" }, "finish__timing__hold__ws": { @@ -92,11 +102,11 @@ "compare": ">=" }, "finish__timing__hold__tns": { - "value": -22.1, + "value": -15.3, "compare": ">=" }, "finish__design__instance__area": { - "value": 5578282, + "value": 5572106, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/sky130hd/riscv32i/BUILD b/flow/designs/sky130hd/riscv32i/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/sky130hd/riscv32i/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/sky130hd/riscv32i/rules-base.json b/flow/designs/sky130hd/riscv32i/rules-base.json index 1c2e684d68..7f5e4d4376 100644 --- a/flow/designs/sky130hd/riscv32i/rules-base.json +++ b/flow/designs/sky130hd/riscv32i/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "1091eeb4c950a6ac404b0856fcaffac8c2ea36ae", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "1166e7e0673959c4cb9320d475b77fd211a25229", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 70000.0, "compare": "<=" @@ -32,7 +42,7 @@ "compare": ">=" }, "cts__timing__setup__tns": { - "value": -94.0, + "value": -148.0, "compare": ">=" }, "cts__timing__hold__ws": { @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -203.0, + "value": -301.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -84,7 +94,7 @@ "compare": ">=" }, "finish__timing__setup__tns": { - "value": -88.2, + "value": -167.0, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/sky130hs/aes/BUILD b/flow/designs/sky130hs/aes/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/sky130hs/aes/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/sky130hs/aes/rules-base.json b/flow/designs/sky130hs/aes/rules-base.json index 3c79d79eef..4fa9a5190f 100644 --- a/flow/designs/sky130hs/aes/rules-base.json +++ b/flow/designs/sky130hs/aes/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "99d2cc38bbf65e6dcbb229c66ff97c9212eb1fea", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "87e89ea6e953310a2702b0881810f42a4378df42", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 118000.0, "compare": "<=" @@ -8,11 +18,11 @@ "compare": "==" }, "placeopt__design__instance__area": { - "value": 160499, + "value": 159595, "compare": "<=" }, "placeopt__design__instance__count__stdcell": { - "value": 19517, + "value": 19233, "compare": "<=" }, "detailedplace__design__violations": { @@ -96,7 +106,7 @@ "compare": ">=" }, "finish__design__instance__area": { - "value": 176489, + "value": 172963, "compare": "<=" } } \ No newline at end of file diff --git a/flow/designs/sky130hs/gcd/BUILD b/flow/designs/sky130hs/gcd/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/sky130hs/gcd/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/sky130hs/gcd/rules-base.json b/flow/designs/sky130hs/gcd/rules-base.json index 5fb40f5dfc..2bc273ccf5 100644 --- a/flow/designs/sky130hs/gcd/rules-base.json +++ b/flow/designs/sky130hs/gcd/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "f219014011bbd73d3823b4238005063417a6b640", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "9e4dff0ce964391fc3d16a22ce574f08d9a7fe38", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 4470.0, "compare": "<=" @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -0.553, + "value": -0.524, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -19.2, + "value": -17.6, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 14238, + "value": 13054, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -80,11 +90,11 @@ "compare": "<=" }, "finish__timing__setup__ws": { - "value": -0.483, + "value": -0.423, "compare": ">=" }, "finish__timing__setup__tns": { - "value": -15.8, + "value": -13.6, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/sky130hs/ibex/BUILD b/flow/designs/sky130hs/ibex/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/sky130hs/ibex/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/sky130hs/ibex/rules-base.json b/flow/designs/sky130hs/ibex/rules-base.json index 40be0a8a5f..415ef1ae27 100644 --- a/flow/designs/sky130hs/ibex/rules-base.json +++ b/flow/designs/sky130hs/ibex/rules-base.json @@ -1,6 +1,16 @@ { + "synth__canonical_netlist__hash": { + "value": "2a35c3855c1b46841a0d5f5f66f2eae9b45817d2", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "ee6dbfde50b99fa81e4b42227f2665805eea3433", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { - "value": 214000.0, + "value": 213000.0, "compare": "<=" }, "constraints__clocks__count": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -0.546, + "value": -0.525, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -114.0, + "value": -33.7, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -84,7 +94,7 @@ "compare": ">=" }, "finish__timing__setup__tns": { - "value": -19.8, + "value": -1.4, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/sky130hs/jpeg/BUILD b/flow/designs/sky130hs/jpeg/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/sky130hs/jpeg/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/sky130hs/jpeg/rules-base.json b/flow/designs/sky130hs/jpeg/rules-base.json index 0a86075ecb..111d79f8f3 100644 --- a/flow/designs/sky130hs/jpeg/rules-base.json +++ b/flow/designs/sky130hs/jpeg/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "40b3cb7ad1e2fe9ce2529dc0589875050f8c84bd", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "880351ea3088e4c7b144dd9fc8e137578c51f692", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 653350.08, "compare": "<=" @@ -52,7 +62,7 @@ "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -1.92, + "value": -0.908, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -76,7 +86,7 @@ "compare": "<=" }, "detailedroute__antenna_diodes_count": { - "value": 102, + "value": 100, "compare": "<=" }, "finish__timing__setup__ws": { diff --git a/flow/designs/sky130hs/riscv32i/BUILD b/flow/designs/sky130hs/riscv32i/BUILD new file mode 100644 index 0000000000..527d6542e1 --- /dev/null +++ b/flow/designs/sky130hs/riscv32i/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "design") + +design(config = "config.mk") diff --git a/flow/designs/sky130hs/riscv32i/rules-base.json b/flow/designs/sky130hs/riscv32i/rules-base.json index e7141d363c..b3ed8d9bf2 100644 --- a/flow/designs/sky130hs/riscv32i/rules-base.json +++ b/flow/designs/sky130hs/riscv32i/rules-base.json @@ -1,4 +1,14 @@ { + "synth__canonical_netlist__hash": { + "value": "273662d104096310ba4afc2a191b4373ab7eb904", + "compare": "==", + "level": "warning" + }, + "synth__netlist__hash": { + "value": "89554444c1f246278248d514be446059b8dad49c", + "compare": "==", + "level": "warning" + }, "synth__design__instance__area__stdcell": { "value": 97352.63, "compare": "<=" @@ -28,11 +38,11 @@ "compare": "<=" }, "cts__timing__setup__ws": { - "value": -0.786, + "value": -0.736, "compare": ">=" }, "cts__timing__setup__tns": { - "value": -183.0, + "value": -29.1, "compare": ">=" }, "cts__timing__hold__ws": { @@ -48,11 +58,11 @@ "compare": "<=" }, "globalroute__timing__setup__ws": { - "value": -1.15, + "value": -1.1, "compare": ">=" }, "globalroute__timing__setup__tns": { - "value": -406.0, + "value": -195.0, "compare": ">=" }, "globalroute__timing__hold__ws": { @@ -64,7 +74,7 @@ "compare": ">=" }, "detailedroute__route__wirelength": { - "value": 351774, + "value": 346876, "compare": "<=" }, "detailedroute__route__drc_errors": { @@ -84,7 +94,7 @@ "compare": ">=" }, "finish__timing__setup__tns": { - "value": -207.0, + "value": -65.9, "compare": ">=" }, "finish__timing__hold__ws": { diff --git a/flow/designs/src/aes/BUILD b/flow/designs/src/aes/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/aes/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/ariane/BUILD b/flow/designs/src/ariane/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/ariane/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/ariane133/BUILD b/flow/designs/src/ariane133/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/ariane133/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/ariane136/BUILD b/flow/designs/src/ariane136/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/ariane136/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/black_parrot/BUILD b/flow/designs/src/black_parrot/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/black_parrot/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/bp_be_top/BUILD b/flow/designs/src/bp_be_top/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/bp_be_top/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/bp_fe_top/BUILD b/flow/designs/src/bp_fe_top/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/bp_fe_top/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/bp_multi_top/BUILD b/flow/designs/src/bp_multi_top/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/bp_multi_top/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/bp_quad/BUILD b/flow/designs/src/bp_quad/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/bp_quad/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/chameleon/AHB_sys_0/APB_sys_0/BUILD b/flow/designs/src/chameleon/AHB_sys_0/APB_sys_0/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/chameleon/AHB_sys_0/APB_sys_0/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/chameleon/AHB_sys_0/BUILD b/flow/designs/src/chameleon/AHB_sys_0/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/chameleon/AHB_sys_0/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/chameleon/BUILD b/flow/designs/src/chameleon/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/chameleon/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/chameleon/IPs/BUILD b/flow/designs/src/chameleon/IPs/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/chameleon/IPs/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/chameleon/IPs/WDT32.v b/flow/designs/src/chameleon/IPs/WDT32.v index 3eeea1eeab..dbc00fa56f 100644 --- a/flow/designs/src/chameleon/IPs/WDT32.v +++ b/flow/designs/src/chameleon/IPs/WDT32.v @@ -40,8 +40,9 @@ module WDT32 ( end reg wden_p; - always @(posedge clk) - wden_p <= WDEN; + always @(posedge clk or posedge rst) + if (rst) wden_p <= 1'b0; + else wden_p <= WDEN; always @(posedge clk or posedge rst) begin diff --git a/flow/designs/src/chameleon/IPs/apb2i2c/BUILD b/flow/designs/src/chameleon/IPs/apb2i2c/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/chameleon/IPs/apb2i2c/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/chameleon/acc/BUILD b/flow/designs/src/chameleon/acc/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/chameleon/acc/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/chameleon/ibex/BUILD b/flow/designs/src/chameleon/ibex/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/chameleon/ibex/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/chameleon/ibex/models/BUILD b/flow/designs/src/chameleon/ibex/models/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/chameleon/ibex/models/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/chameleon_hier/rtl/IPs/WDT32.v b/flow/designs/src/chameleon_hier/rtl/IPs/WDT32.v index 3eeea1eeab..a61d732842 100644 --- a/flow/designs/src/chameleon_hier/rtl/IPs/WDT32.v +++ b/flow/designs/src/chameleon_hier/rtl/IPs/WDT32.v @@ -40,8 +40,9 @@ module WDT32 ( end reg wden_p; - always @(posedge clk) - wden_p <= WDEN; + always @(posedge clk or posedge rst) + if (rst) wden_p <= 1'b0; + else wden_p <= WDEN; always @(posedge clk or posedge rst) begin diff --git a/flow/designs/src/coyote/BUILD b/flow/designs/src/coyote/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/coyote/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/BUILD b/flow/designs/src/cva6/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/common/BUILD b/flow/designs/src/cva6/common/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/common/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/common/local/BUILD b/flow/designs/src/cva6/common/local/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/common/local/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/common/local/util/BUILD b/flow/designs/src/cva6/common/local/util/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/common/local/util/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/BUILD b/flow/designs/src/cva6/core/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cache_subsystem/BUILD b/flow/designs/src/cva6/core/cache_subsystem/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cache_subsystem/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cache_subsystem/hpdcache/BUILD b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/BUILD b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/include/BUILD b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/include/BUILD new file mode 100644 index 0000000000..d8101aa421 --- /dev/null +++ b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/include/BUILD @@ -0,0 +1,11 @@ +filegroup( + name = "include", + srcs = glob(["*.v", "*.sv", "*.svh"], allow_empty = True), + visibility = ["//visibility:public"], +) + +filegroup( + name = "verilog", + srcs = glob(["*.v", "*.sv"], allow_empty = True), + visibility = ["//visibility:public"], +) diff --git a/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/BUILD b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/common/BUILD b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/common/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/common/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/common/macros/BUILD b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/common/macros/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/common/macros/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/common/macros/blackbox/BUILD b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/common/macros/blackbox/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/common/macros/blackbox/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/hwpf_stride/BUILD b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/hwpf_stride/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/hwpf_stride/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/utils/BUILD b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/utils/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cache_subsystem/hpdcache/rtl/src/utils/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cva6_mmu/BUILD b/flow/designs/src/cva6/core/cva6_mmu/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cva6_mmu/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cvfpu/BUILD b/flow/designs/src/cva6/core/cvfpu/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cvfpu/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cvfpu/src/BUILD b/flow/designs/src/cva6/core/cvfpu/src/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cvfpu/src/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cvfpu/src/common_cells/BUILD b/flow/designs/src/cva6/core/cvfpu/src/common_cells/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cvfpu/src/common_cells/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cvfpu/src/common_cells/include/BUILD b/flow/designs/src/cva6/core/cvfpu/src/common_cells/include/BUILD new file mode 100644 index 0000000000..f5d11977e0 --- /dev/null +++ b/flow/designs/src/cva6/core/cvfpu/src/common_cells/include/BUILD @@ -0,0 +1,5 @@ +filegroup( + name = "include", + srcs = glob(["**/*.v", "**/*.sv", "**/*.svh"], allow_empty = True), + visibility = ["//visibility:public"], +) diff --git a/flow/designs/src/cva6/core/cvfpu/src/fpu_div_sqrt_mvp/BUILD b/flow/designs/src/cva6/core/cvfpu/src/fpu_div_sqrt_mvp/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cvfpu/src/fpu_div_sqrt_mvp/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/BUILD b/flow/designs/src/cva6/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cvfpu/src/fpu_div_sqrt_mvp/hdl/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cvxif_example/BUILD b/flow/designs/src/cva6/core/cvxif_example/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cvxif_example/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/cvxif_example/include/BUILD b/flow/designs/src/cva6/core/cvxif_example/include/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/cvxif_example/include/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/frontend/BUILD b/flow/designs/src/cva6/core/frontend/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/frontend/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/include/BUILD b/flow/designs/src/cva6/core/include/BUILD new file mode 100644 index 0000000000..8c42c4d39f --- /dev/null +++ b/flow/designs/src/cva6/core/include/BUILD @@ -0,0 +1,39 @@ +filegroup( + name = "include", + srcs = glob( + [ + "*.v", + "*.sv", + "*.svh", + ], + allow_empty = True, + ), + visibility = ["//visibility:public"], +) + +filegroup( + name = "verilog", + srcs = glob( + [ + "*.v", + "*.sv", + ], + allow_empty = True, + ), + visibility = ["//visibility:public"], +) + +# bazel-orfs may translate $(DESIGN_HOME)/src/cva6/core/include/ +# references in a config.mk into per-file labels. Export individual +# files so cross-package label references resolve. +exports_files( + glob( + [ + "*.v", + "*.sv", + "*.svh", + ], + allow_empty = True, + ), + visibility = ["//visibility:public"], +) diff --git a/flow/designs/src/cva6/core/pmp/BUILD b/flow/designs/src/cva6/core/pmp/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/pmp/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/core/pmp/src/BUILD b/flow/designs/src/cva6/core/pmp/src/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/core/pmp/src/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/vendor/BUILD b/flow/designs/src/cva6/vendor/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/vendor/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/vendor/pulp-platform/BUILD b/flow/designs/src/cva6/vendor/pulp-platform/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/vendor/pulp-platform/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/vendor/pulp-platform/axi/BUILD b/flow/designs/src/cva6/vendor/pulp-platform/axi/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/vendor/pulp-platform/axi/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/vendor/pulp-platform/axi/src/BUILD b/flow/designs/src/cva6/vendor/pulp-platform/axi/src/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/vendor/pulp-platform/axi/src/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/vendor/pulp-platform/common_cells/BUILD b/flow/designs/src/cva6/vendor/pulp-platform/common_cells/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/vendor/pulp-platform/common_cells/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/vendor/pulp-platform/common_cells/src/BUILD b/flow/designs/src/cva6/vendor/pulp-platform/common_cells/src/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/vendor/pulp-platform/common_cells/src/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/vendor/pulp-platform/tech_cells_generic/BUILD b/flow/designs/src/cva6/vendor/pulp-platform/tech_cells_generic/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/vendor/pulp-platform/tech_cells_generic/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/vendor/pulp-platform/tech_cells_generic/src/BUILD b/flow/designs/src/cva6/vendor/pulp-platform/tech_cells_generic/src/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/vendor/pulp-platform/tech_cells_generic/src/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/cva6/vendor/pulp-platform/tech_cells_generic/src/rtl/BUILD b/flow/designs/src/cva6/vendor/pulp-platform/tech_cells_generic/src/rtl/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/cva6/vendor/pulp-platform/tech_cells_generic/src/rtl/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/dynamic_node/BUILD b/flow/designs/src/dynamic_node/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/dynamic_node/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/ethmac/BUILD b/flow/designs/src/ethmac/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/ethmac/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/fifo/BUILD b/flow/designs/src/fifo/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/fifo/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/fifo/fifo1.v b/flow/designs/src/fifo/fifo1.v index 593dbcc3f6..686359dfef 100644 --- a/flow/designs/src/fifo/fifo1.v +++ b/flow/designs/src/fifo/fifo1.v @@ -1,3 +1,11 @@ +// (* keep_hierarchy *) preserves the fifo1 instance boundary (fifo_in, +// fifo_out in mock_cpu) through Yosys flattening so the SDC can +// reference fifo_in/ and fifo_out/ directly. SYNTH_KEEP_MODULES +// doesn't work here because hierarchy elaboration specializes fifo1 into +// $paramod$\fifo1 variants before the flow's SYNTH_KEEP_MODULES +// loop runs. An RTL attribute rides through elaboration onto each +// specialized clone. +(* keep_hierarchy *) module fifo1 #( parameter DSIZE = 8, parameter ASIZE = 4 diff --git a/flow/designs/src/gcd/BUILD b/flow/designs/src/gcd/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/gcd/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/ibex_sv/BUILD b/flow/designs/src/ibex_sv/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/ibex_sv/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/ibex_sv/syn/BUILD b/flow/designs/src/ibex_sv/syn/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/flow/designs/src/ibex_sv/syn/rtl/BUILD b/flow/designs/src/ibex_sv/syn/rtl/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/ibex_sv/syn/rtl/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/ibex_sv/vendor/BUILD b/flow/designs/src/ibex_sv/vendor/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/flow/designs/src/ibex_sv/vendor/lowrisc_ip/BUILD b/flow/designs/src/ibex_sv/vendor/lowrisc_ip/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/flow/designs/src/ibex_sv/vendor/lowrisc_ip/prim/BUILD b/flow/designs/src/ibex_sv/vendor/lowrisc_ip/prim/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/flow/designs/src/ibex_sv/vendor/lowrisc_ip/prim/rtl/BUILD b/flow/designs/src/ibex_sv/vendor/lowrisc_ip/prim/rtl/BUILD new file mode 100644 index 0000000000..ce5093bdba --- /dev/null +++ b/flow/designs/src/ibex_sv/vendor/lowrisc_ip/prim/rtl/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("include") diff --git a/flow/designs/src/jpeg/BUILD b/flow/designs/src/jpeg/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/jpeg/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/jpeg/include/BUILD b/flow/designs/src/jpeg/include/BUILD new file mode 100644 index 0000000000..8d02def028 --- /dev/null +++ b/flow/designs/src/jpeg/include/BUILD @@ -0,0 +1,5 @@ +filegroup( + name = "include", + srcs = glob(["*.v", "*.sv"], allow_empty = True), + visibility = ["//visibility:public"], +) diff --git a/flow/designs/src/mempool_group/BUILD b/flow/designs/src/mempool_group/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/BUILD b/flow/designs/src/mempool_group/rtl/BUILD new file mode 100644 index 0000000000..c9161cd38e --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/BUILD @@ -0,0 +1,11 @@ +filegroup( + name = "include", + srcs = glob(["*.v", "*.sv", "*.svh"], allow_empty = True) + [ + "//flow/designs/src/mempool_group/rtl/axi:assign.svh", + "//flow/designs/src/mempool_group/rtl/axi:typedef.svh", + "//flow/designs/src/mempool_group/rtl/common_cells:assertions.svh", + "//flow/designs/src/mempool_group/rtl/common_cells:registers.svh", + "//flow/designs/src/mempool_group/rtl/mempool:mempool.svh", + ], + visibility = ["//visibility:public"], +) diff --git a/flow/designs/src/mempool_group/rtl/axi/BUILD b/flow/designs/src/mempool_group/rtl/axi/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/axi/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/axi/src/BUILD b/flow/designs/src/mempool_group/rtl/axi/src/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/axi/src/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/cluster_interconnect/BUILD b/flow/designs/src/mempool_group/rtl/cluster_interconnect/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/flow/designs/src/mempool_group/rtl/cluster_interconnect/rtl/BUILD b/flow/designs/src/mempool_group/rtl/cluster_interconnect/rtl/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/flow/designs/src/mempool_group/rtl/cluster_interconnect/rtl/tcdm_interconnect/BUILD b/flow/designs/src/mempool_group/rtl/cluster_interconnect/rtl/tcdm_interconnect/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/cluster_interconnect/rtl/tcdm_interconnect/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/cluster_interconnect/rtl/variable_latency_interconnect/BUILD b/flow/designs/src/mempool_group/rtl/cluster_interconnect/rtl/variable_latency_interconnect/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/cluster_interconnect/rtl/variable_latency_interconnect/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/common_cells/BUILD b/flow/designs/src/mempool_group/rtl/common_cells/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/common_cells/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/common_cells/src/BUILD b/flow/designs/src/mempool_group/rtl/common_cells/src/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/common_cells/src/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/common_cells/src/deprecated/BUILD b/flow/designs/src/mempool_group/rtl/common_cells/src/deprecated/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/common_cells/src/deprecated/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/mempool/BUILD b/flow/designs/src/mempool_group/rtl/mempool/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/mempool/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/register_interface/BUILD b/flow/designs/src/mempool_group/rtl/register_interface/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/flow/designs/src/mempool_group/rtl/register_interface/include/BUILD b/flow/designs/src/mempool_group/rtl/register_interface/include/BUILD new file mode 100644 index 0000000000..4199700eac --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/register_interface/include/BUILD @@ -0,0 +1,8 @@ +filegroup( + name = "include", + srcs = glob(["*.v", "*.sv", "*.svh"], allow_empty = True) + [ + "//flow/designs/src/mempool_group/rtl/register_interface/include/register_interface:assign.svh", + "//flow/designs/src/mempool_group/rtl/register_interface/include/register_interface:typedef.svh", + ], + visibility = ["//visibility:public"], +) diff --git a/flow/designs/src/mempool_group/rtl/register_interface/include/register_interface/BUILD b/flow/designs/src/mempool_group/rtl/register_interface/include/register_interface/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/register_interface/include/register_interface/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/snitch/BUILD b/flow/designs/src/mempool_group/rtl/snitch/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/flow/designs/src/mempool_group/rtl/snitch/src/BUILD b/flow/designs/src/mempool_group/rtl/snitch/src/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/snitch/src/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/snitch/src/snitch_icache/BUILD b/flow/designs/src/mempool_group/rtl/snitch/src/snitch_icache/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/snitch/src/snitch_icache/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mempool_group/rtl/tech_cells_generic/BUILD b/flow/designs/src/mempool_group/rtl/tech_cells_generic/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/flow/designs/src/mempool_group/rtl/tech_cells_generic/src/BUILD b/flow/designs/src/mempool_group/rtl/tech_cells_generic/src/BUILD new file mode 100644 index 0000000000..e69de29bb2 diff --git a/flow/designs/src/mempool_group/rtl/tech_cells_generic/src/rtl/BUILD b/flow/designs/src/mempool_group/rtl/tech_cells_generic/src/rtl/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mempool_group/rtl/tech_cells_generic/src/rtl/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/microwatt/BUILD b/flow/designs/src/microwatt/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/microwatt/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/microwatt/IPs/BUILD b/flow/designs/src/microwatt/IPs/BUILD new file mode 100644 index 0000000000..6a2b3ec4f1 --- /dev/null +++ b/flow/designs/src/microwatt/IPs/BUILD @@ -0,0 +1,11 @@ +filegroup( + name = "IPs", + srcs = glob(["*"]), + visibility = ["//visibility:public"], +) + +filegroup( + name = "verilog", + srcs = glob(["*.v", "*.sv"], allow_empty = True), + visibility = ["//visibility:public"], +) diff --git a/flow/designs/src/mock-alu/BUILD b/flow/designs/src/mock-alu/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mock-alu/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/mock-array/BUILD b/flow/designs/src/mock-array/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/mock-array/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/riscv32i/BUILD b/flow/designs/src/riscv32i/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/riscv32i/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/spi/BUILD b/flow/designs/src/spi/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/spi/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/swerv/BUILD b/flow/designs/src/swerv/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/swerv/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/tinyRocket/BUILD b/flow/designs/src/tinyRocket/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/tinyRocket/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/uart-no-param/BUILD b/flow/designs/src/uart-no-param/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/uart-no-param/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/designs/src/uart/BUILD b/flow/designs/src/uart/BUILD new file mode 100644 index 0000000000..115cf67d8f --- /dev/null +++ b/flow/designs/src/uart/BUILD @@ -0,0 +1,3 @@ +load("//flow/designs:design.bzl", "files") + +files("verilog") diff --git a/flow/platforms/asap7/config.mk b/flow/platforms/asap7/config.mk index 19d42a4f3a..b42d87842c 100644 --- a/flow/platforms/asap7/config.mk +++ b/flow/platforms/asap7/config.mk @@ -66,6 +66,7 @@ export SET_RC_TCL = $(PLATFORM_DIR)/setRC.tcl export MIN_ROUTING_LAYER ?= M2 export MIN_CLK_ROUTING_LAYER ?= M4 export MAX_ROUTING_LAYER ?= M7 +export ENABLE_RESISTANCE_AWARE ?= 1 # Define fastRoute tcl export FASTROUTE_TCL ?= $(PLATFORM_DIR)/fastroute.tcl diff --git a/flow/platforms/asap7/setRC.tcl b/flow/platforms/asap7/setRC.tcl index d1d988b362..6442190b35 100644 --- a/flow/platforms/asap7/setRC.tcl +++ b/flow/platforms/asap7/setRC.tcl @@ -1,12 +1,11 @@ -# correlation result (aes, cva6, ibex, riscv32i) -# M1 capacitance fixed up from -4.8e-02 to 1e-10 as a minuscule positive value set_layer_rc -layer M1 -resistance 7.04175E-02 -capacitance 1e-10 -set_layer_rc -layer M2 -resistance 4.62311E-02 -capacitance 1.84542E-01 -set_layer_rc -layer M3 -resistance 3.63251E-02 -capacitance 1.53955E-01 -set_layer_rc -layer M4 -resistance 2.03083E-02 -capacitance 1.89434E-01 -set_layer_rc -layer M5 -resistance 1.93005E-02 -capacitance 1.71593E-01 -set_layer_rc -layer M6 -resistance 1.18619E-02 -capacitance 1.76146E-01 -set_layer_rc -layer M7 -resistance 1.25311E-02 -capacitance 1.47030E-01 +set_layer_rc -layer M2 -resistance 2.97126E-02 -capacitance 1.84542E-01 +set_layer_rc -layer M3 -resistance 3.12872E-02 -capacitance 1.53955E-01 +set_layer_rc -layer M4 -resistance 1.80365E-02 -capacitance 1.89434E-01 +set_layer_rc -layer M5 -resistance 1.89936E-02 -capacitance 1.71593E-01 +set_layer_rc -layer M6 -resistance 1.18797E-02 -capacitance 1.76146E-01 +set_layer_rc -layer M7 -resistance 1.25097E-02 -capacitance 1.47030E-01 + set_wire_rc -signal -resistance 3.23151E-02 -capacitance 1.73323E-01 set_wire_rc -clock -resistance 5.13971E-02 -capacitance 1.44549E-01 diff --git a/flow/platforms/gf180/openROAD/tapcell.tcl b/flow/platforms/gf180/openROAD/tapcell.tcl index 24ebce5587..9620fa39d8 100644 --- a/flow/platforms/gf180/openROAD/tapcell.tcl +++ b/flow/platforms/gf180/openROAD/tapcell.tcl @@ -1,5 +1,4 @@ tapcell \ - -endcap_cpp "12" \ -distance 100 \ -tapcell_master $::env(TIE_CELL) \ -endcap_master $::env(ENDCAP_CELL) diff --git a/flow/platforms/gf180/setRC.tcl b/flow/platforms/gf180/setRC.tcl index 33ae86856a..84e9702b62 100644 --- a/flow/platforms/gf180/setRC.tcl +++ b/flow/platforms/gf180/setRC.tcl @@ -1,18 +1,7 @@ -# OpenRCX - RC file for OpenROAD FS -# Platform - GF180 gf180mcu-pdk -# -# NOTE: LEF contains RC values per layer - -# Tech LEF has the same unit RC for all layers -# CAPACITANCE CPERSQDIST 0.0000394 ; -# RESISTANCE RPERSQ 0.090000 - -# These values are from five gf180 designs: ibex, jpeg, aes-hybrid, riscv32i, aes -set_layer_rc -layer Metal2 -resistance 3.85861E-04 -capacitance 1.35357E-04 -set_layer_rc -layer Metal3 -resistance 2.06673E-04 -capacitance 1.46141E-04 -set_layer_rc -layer Metal4 -resistance 1.68609E-04 -capacitance 1.50688E-04 -set_layer_rc -layer Metal5 -resistance 7.92778E-05 -capacitance 1.55595E-04 -#set_wire_rc -resistance 2.35501E-04 -capacitance 1.42149E-04 +set_layer_rc -layer Metal2 -resistance 2.25636E-04 -capacitance 1.35357E-04 +set_layer_rc -layer Metal3 -resistance 2.25636E-04 -capacitance 1.46141E-04 +set_layer_rc -layer Metal4 -resistance 2.25637E-04 -capacitance 1.50688E-04 +set_layer_rc -layer Metal5 -resistance 5.85545E-05 -capacitance 1.55595E-04 regexp {(\d+)} $::env(METAL_OPTION) metal diff --git a/flow/platforms/ihp-sg13g2/Readme.md b/flow/platforms/ihp-sg13g2/Readme.md index 34bb48a023..93e3d5537c 100644 --- a/flow/platforms/ihp-sg13g2/Readme.md +++ b/flow/platforms/ihp-sg13g2/Readme.md @@ -1,3 +1,142 @@ -# IHP SG13G2 official port for OpenROAD-flow-scripts +# IHP SG13G2 Platform for OpenROAD-flow-scripts -to be documented +## Overview + +The IHP SG13G2 is a **130 nm BiCMOS open PDK** developed by +[IHP – Innovations for High Performance Microelectronics](https://www.ihp-microelectronics.com/) +and released under the Apache 2.0 licence. It is one of the few fully open +silicon PDKs that includes not only standard CMOS logic cells but also +heterojunction bipolar transistors (HBTs), RF MOS devices, MIM capacitors, +spiral inductors, and ESD protection structures. + +Core supply voltage is **1.2 V**; the I/O ring operates at **3.3 V**. + +--- + +## Metal Stack + +The process provides **7 routing layers**: + +| Layer | Direction | Min. Width | Pitch | Notes | +|------------|------------|------------|---------|-------------------------------| +| Metal1 | Horizontal | 0.16 µm | 0.42 µm | Signal / PDN follow-pins | +| Metal2 | Vertical | 0.16 µm | 0.42 µm | Signal | +| Metal3 | Horizontal | 0.16 µm | – | Signal | +| Metal4 | Vertical | 0.16 µm | – | Signal | +| Metal5 | Horizontal | 0.16 µm | – | Signal (default MAX_ROUTING) | +| TopMetal1 | Vertical | thicker | – | PDN rings & stripes | +| TopMetal2 | Horizontal | thicker | – | PDN rings & stripes / bumps | + +The default routing range for digital designs is **Metal2 – Metal5**. +Designs that use a padframe (see below) typically extend routing up to +**TopMetal2** so the PDN ring can connect to the IO power pads. + +The manufacturing grid is **0.005 µm**. + +--- + +## Standard-Cell Library + +The `sg13g2_stdcell` library ships three timing corners. The IO library +(`sg13g2_io`) follows the same corner names with separate core/IO voltages: + +| Corner | Core VDD | IO VDD | Temp | +|---------|----------|--------|--------| +| Typical | 1.20 V | 3.3 V | 25 °C | +| Slow | 1.08 V | 3.0 V | 125 °C | +| Fast | 1.32 V | 3.6 V | −40 °C | + +Latch and clock-gate synthesis mappings are provided via `cells_latch.v` and +`cells_clkgate.v`. + +Fill / decap cells: `sg13g2_fill_1`, `sg13g2_fill_2`, `sg13g2_decap_4`, +`sg13g2_decap_8`. + +--- + +## SRAM Macros + +SRAM macros are available in the following configurations and are ready to use +as hard macros (single-port today; dual-port variants are forthcoming). Each +variant ships LEF, LIB (slow/typ/fast), and is covered by the +`GDS_ALLOW_EMPTY` pattern for the internal placeholder cells that appear +during GDS merge. + +| Macro name | Depth × Width | +|------------------------------------|---------------| +| RM_IHPSG13_1P_64x64_c2_bm_bist | 64 × 64 bit | +| RM_IHPSG13_1P_256x48_c2_bm_bist | 256 × 48 bit | +| RM_IHPSG13_1P_256x64_c2_bm_bist | 256 × 64 bit | +| RM_IHPSG13_1P_512x64_c2_bm_bist | 512 × 64 bit | +| RM_IHPSG13_1P_1024x8_c2_bm_bist | 1024 × 8 bit | +| RM_IHPSG13_1P_1024x16_c2_bm_bist | 1024 × 16 bit | +| RM_IHPSG13_1P_1024x64_c2_bm_bist | 1024 × 64 bit | +| RM_IHPSG13_1P_2048x64_c2_bm_bist | 2048 × 64 bit | +| RM_IHPSG13_1P_4096x8_c3_bm_bist | 4096 × 8 bit | +| RM_IHPSG13_1P_4096x16_c3_bm_bist | 4096 × 16 bit | + +To include a macro in your design, add the corresponding LEF to +`ADDITIONAL_LEFS` and the three `.lib` files to the respective +`ADDITIONAL_SLOW_LIBS` / `ADDITIONAL_TYP_LIBS` / `ADDITIONAL_FAST_LIBS` +variables in your design's `config.mk`. + +--- + +## Padframe + +The SG13G2 IO library (`sg13g2_io`) provides mixed-signal GPIO pads that +operate at 3.3 V on the outside and 1.2 V on the core side. Wire-bond +designs use `bondpad_70x70` (70 × 70 µm) pads placed immediately outside +the IO ring. + +### How it works + +The platform's `pad.tcl` script drives the entire padframe flow when +`FOOTPRINT_TCL` is set in the design's `config.mk`. Setting that variable +also causes `config.mk` to automatically add the IO LEF, LIB, and GDS files. + +`pad.tcl` performs the following steps in order: + +1. Computes the IO offset from `IO_BONDPAD_SIZE` (default 70 µm) and + `IO_SEALRING_OFFSET` (default 70 µm). +2. Creates fake IO sites (`IOLibSite` 1 × 180 µm, `IOLibCSite` 180 × 180 µm). +3. Instantiates IO rows on all four sides with `make_io_sites`. +4. Places the IO pads listed in `IO_{NORTH,EAST,SOUTH,WEST}_PINS` with + `place_pads`. +5. Places corner cells (`sg13g2_Corner`) and fills the remaining gaps with + the `sg13g2_Filler*` series. +6. Calls `connect_by_abutment` to wire the power rails that run through the + IO ring. +7. Places bondpads at offset `(5.0, −70)` relative to each `sg13g2_IOPad*` + instance. +8. Removes the temporary IO rows. + +### Design config.mk snippet + +```makefile +# Point to the platform pad script to enable the padframe flow +export FOOTPRINT_TCL = $(PLATFORM_DIR)/pad.tcl + +# Ordered pad instance names, one entry per side +export IO_NORTH_PINS = sg13g2_IOPad_foo sg13g2_IOPad_bar +export IO_EAST_PINS = sg13g2_IOPadVdd_inst sg13g2_IOPadVss_inst \ + sg13g2_IOPad_baz +export IO_SOUTH_PINS = sg13g2_IOPad_clk sg13g2_IOPad_rst +export IO_WEST_PINS = sg13g2_IOPad_gpio_0 sg13g2_IOPadIOVss_inst \ + sg13g2_IOPadIOVdd_inst + +# Die area must be large enough to accommodate the padframe +# IO ring = 180 µm deep; sealring offset = 70 µm; bondpad = 70 µm +# -> minimum margin from die edge to core edge ≈ 320 µm per side +export DIE_AREA = 0.0 0.0 1050.24 1050.84 +export CORE_AREA = 351.36 351.54 699.84 699.3 + +# Extend routing to TopMetal2 so the PDN ring reaches the IO power pads +export MAX_ROUTING_LAYER = TopMetal2 + +# Optional sealring GDS (merged in the final step) +export SEAL_GDS = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/sealring.gds.gz +``` + +The sealring GDS can be generated with the IHP SG13G2 sealring Pcell in +KLayout, sized to match `DIE_AREA`. diff --git a/flow/platforms/ihp-sg13g2/lef/sg13g2_tech.lef b/flow/platforms/ihp-sg13g2/lef/sg13g2_tech.lef index ed737fa20f..81557b539e 100644 --- a/flow/platforms/ihp-sg13g2/lef/sg13g2_tech.lef +++ b/flow/platforms/ihp-sg13g2/lef/sg13g2_tech.lef @@ -70,8 +70,8 @@ END Cont LAYER Metal1 TYPE ROUTING ; DIRECTION HORIZONTAL ; - PITCH 0.42 ; - OFFSET 0.0 ; + PITCH 0.48 0.42 ; + OFFSET 0.0 0.0 ; WIDTH 0.16 ; MAXWIDTH 30 ; AREA 0.09 ; @@ -113,8 +113,8 @@ END Via1 LAYER Metal2 TYPE ROUTING ; DIRECTION VERTICAL ; - PITCH 0.48 ; - OFFSET 0.0 ; + PITCH 0.48 0.42 ; + OFFSET 0.0 0.0 ; WIDTH 0.20 ; MAXWIDTH 30 ; MINIMUMDENSITY 35.0 ; @@ -133,7 +133,6 @@ LAYER Metal2 THICKNESS 0.450 ; ANTENNACUMAREARATIO 200 ; ANTENNACUMDIFFAREARATIO PWL ( ( 0 200 ) ( 0.159 200 ) ( 0.16 3200 ) ( 100 2000000 ) ) ; - WIREEXTENSION 0.10 ; RESISTANCE RPERSQ 0.103 ; CAPACITANCE CPERSQDIST 1.81E-05 ; EDGECAPACITANCE 4.47E-05 ; @@ -156,8 +155,8 @@ END Via2 LAYER Metal3 TYPE ROUTING ; DIRECTION HORIZONTAL ; - PITCH 0.42 ; - OFFSET 0.0 ; + PITCH 0.48 0.42 ; + OFFSET 0.0 0.0 ; WIDTH 0.20 ; MINIMUMDENSITY 35.0 ; MAXIMUMDENSITY 60.0 ; @@ -198,8 +197,8 @@ END Via3 LAYER Metal4 TYPE ROUTING ; DIRECTION VERTICAL ; - PITCH 0.48 ; - OFFSET 0.0 ; + PITCH 0.48 0.42 ; + OFFSET 0.0 0.0 ; WIDTH 0.20 ; MINIMUMDENSITY 35.0 ; MAXIMUMDENSITY 60.0 ; @@ -239,8 +238,8 @@ END Via4 LAYER Metal5 TYPE ROUTING ; DIRECTION HORIZONTAL ; - PITCH 0.42 ; - OFFSET 0.0 ; + PITCH 0.48 0.42 ; + OFFSET 0.0 0.0 ; WIDTH 0.20 ; MINIMUMDENSITY 35.0 ; MAXIMUMDENSITY 60.0 ; @@ -279,8 +278,8 @@ END TopVia1 LAYER TopMetal1 TYPE ROUTING ; DIRECTION VERTICAL ; - PITCH 2.28 ; - OFFSET 1.64 ; + PITCH 3.28 3.28 ; + OFFSET 1.64 1.64 ; WIDTH 1.64 ; MINIMUMDENSITY 25.0 ; MAXIMUMDENSITY 70.0 ; @@ -313,14 +312,18 @@ END TopVia2 LAYER TopMetal2 TYPE ROUTING ; DIRECTION HORIZONTAL ; - PITCH 4 ; - OFFSET 2 ; + PITCH 4 4 ; + OFFSET 2 2 ; WIDTH 2 ; MINIMUMDENSITY 25.0 ; MAXIMUMDENSITY 70.0 ; DENSITYCHECKSTEP 100 ; DENSITYCHECKWINDOW 200 200 ; SPACING 2 ; + SPACINGTABLE + PARALLELRUNLENGTH 0.00 50.00 + WIDTH 0.00 2.0 2.0 + WIDTH 5.00 2.0 5.0 ; HEIGHT 11.160 ; # CURRENTDEN 0 ; THICKNESS 3.0 ; @@ -425,7 +428,7 @@ Via Via1_s DEFAULT RECT -0.19 -0.19 0.19 0.19 ; END Via1_s -####### Definitions of Via1 duoble cut ######## +####### Definitions of Via1 double cut ######## Via Via1_DC1B DEFAULT RESISTANCE 20.0 ; @@ -616,7 +619,7 @@ Via Via2_s DEFAULT RECT -0.19 -0.19 0.19 0.19 ; END Via2_s -####### Definitions of Via2 duoble cut ############## +####### Definitions of Via2 double cut ############## Via Via2_DC1B DEFAULT RESISTANCE 20.0 ; @@ -807,7 +810,7 @@ Via Via3_s DEFAULT RECT -0.19 -0.19 0.19 0.19 ; END Via3_s -####### Definitions of Via3 duoble cut ############## +####### Definitions of Via3 double cut ############## Via Via3_DC1B DEFAULT RESISTANCE 20.0 ; @@ -998,7 +1001,7 @@ Via Via4_s DEFAULT RECT -0.19 -0.19 0.19 0.19 ; END Via4_s -####### Definitions of Via4 duoble cut ############## +####### Definitions of Via4 double cut ############## Via Via4_DC1B DEFAULT RESISTANCE 20.0 ; @@ -1172,26 +1175,26 @@ ViaRULE via4Array GENERATE RESISTANCE 20.0 ; END via4Array ########################################### -ViaRULE viagen56 GENERATE +ViaRULE viaTop1Array GENERATE LAYER Metal5 ; - ENCLOSURE 0 0 ; + ENCLOSURE 0.1 0.1 ; LAYER TopMetal1 ; - ENCLOSURE 0.61 0.61 ; + ENCLOSURE 0.42 0.42 ; LAYER TopVia1 ; RECT -0.21 -0.21 0.21 0.21 ; SPACING 0.84 BY 0.84 ; RESISTANCE 4.0 ; -END viagen56 +END viaTop1Array -ViaRULE viagen67 GENERATE +ViaRULE viaTop2Array GENERATE LAYER TopMetal1 ; ENCLOSURE 0.5 0.5 ; LAYER TopMetal2 ; - ENCLOSURE 0.55 0.55 ; + ENCLOSURE 0.5 0.5 ; LAYER TopVia2 ; RECT -0.45 -0.45 0.45 0.45 ; SPACING 1.96 BY 1.96 ; RESISTANCE 2.2 ; -END viagen67 +END viaTop2Array END LIBRARY diff --git a/flow/platforms/ihp-sg13g2/make_tracks.tcl b/flow/platforms/ihp-sg13g2/make_tracks.tcl index b3380eb7ef..538de65622 100644 --- a/flow/platforms/ihp-sg13g2/make_tracks.tcl +++ b/flow/platforms/ihp-sg13g2/make_tracks.tcl @@ -1,7 +1,7 @@ -make_tracks Metal1 -x_offset 0.0 -x_pitch 0.48 -y_offset 0.0 -y_pitch 0.48 -make_tracks Metal2 -x_offset 0.0 -x_pitch 0.42 -y_offset 0.0 -y_pitch 0.42 -make_tracks Metal3 -x_offset 0.0 -x_pitch 0.48 -y_offset 0.0 -y_pitch 0.48 -make_tracks Metal4 -x_offset 0.0 -x_pitch 0.42 -y_offset 0.0 -y_pitch 0.42 -make_tracks Metal5 -x_offset 0.0 -x_pitch 3.48 -y_offset 0.0 -y_pitch 0.48 -make_tracks TopMetal1 -x_offset 1.46 -x_pitch 2.28 -y_offset 1.46 -y_pitch 2.28 +make_tracks Metal1 -x_offset 0.0 -x_pitch 0.48 -y_offset 0.0 -y_pitch 0.42 +make_tracks Metal2 -x_offset 0.0 -x_pitch 0.48 -y_offset 0.0 -y_pitch 0.42 +make_tracks Metal3 -x_offset 0.0 -x_pitch 0.48 -y_offset 0.0 -y_pitch 0.42 +make_tracks Metal4 -x_offset 0.0 -x_pitch 0.48 -y_offset 0.0 -y_pitch 0.42 +make_tracks Metal5 -x_offset 0.0 -x_pitch 0.48 -y_offset 0.0 -y_pitch 0.42 +make_tracks TopMetal1 -x_offset 1.64 -x_pitch 3.28 -y_offset 1.64 -y_pitch 3.28 make_tracks TopMetal2 -x_offset 2.0 -x_pitch 4.0 -y_offset 2.0 -y_pitch 4.0 diff --git a/flow/platforms/ihp-sg13g2/setRC.tcl b/flow/platforms/ihp-sg13g2/setRC.tcl index 35bfff7693..980bdcf866 100644 --- a/flow/platforms/ihp-sg13g2/setRC.tcl +++ b/flow/platforms/ihp-sg13g2/setRC.tcl @@ -1,10 +1,9 @@ -# correlation result (aes, gcd, ibex, riscv32i, spi) -# Metal1 capacitance fixed up from -1.1e-05 to 1e-10 as a minuscule positive value set_layer_rc -layer Metal1 -resistance 8.54576E-03 -capacitance 1e-10 -set_layer_rc -layer Metal2 -resistance 2.53519E-03 -capacitance 1.69121E-04 -set_layer_rc -layer Metal3 -resistance 1.54329E-03 -capacitance 1.82832E-04 -set_layer_rc -layer Metal4 -resistance 6.31424E-04 -capacitance 1.66454E-04 -set_layer_rc -layer Metal5 -resistance 6.84051E-04 -capacitance 8.57431E-05 +set_layer_rc -layer Metal2 -resistance 4.40000E-04 -capacitance 1.69121E-04 +set_layer_rc -layer Metal3 -resistance 4.40000E-04 -capacitance 1.82832E-04 +set_layer_rc -layer Metal4 -resistance 4.39998E-04 -capacitance 1.66454E-04 +set_layer_rc -layer Metal5 -resistance 4.40004E-04 -capacitance 8.57431E-05 + set_wire_rc -signal -resistance 2.07259E-03 -capacitance 1.73072E-04 set_wire_rc -clock -resistance 2.48603E-03 -capacitance 1.44812E-04 diff --git a/flow/platforms/nangate45/setRC.tcl b/flow/platforms/nangate45/setRC.tcl index bcddfc72f3..5df1dbaea2 100644 --- a/flow/platforms/nangate45/setRC.tcl +++ b/flow/platforms/nangate45/setRC.tcl @@ -1,14 +1,13 @@ -# Liberty units are fF,kOhm set_layer_rc -layer metal1 -resistance 5.4286e-03 -capacitance 7.41819E-02 -set_layer_rc -layer metal2 -resistance 3.70635E-03 -capacitance 8.33611E-02 -set_layer_rc -layer metal3 -resistance 3.57728E-03 -capacitance 1.03981E-01 -set_layer_rc -layer metal4 -resistance 1.47397E-03 -capacitance 1.19150E-01 -set_layer_rc -layer metal5 -resistance 1.49065E-03 -capacitance 1.09256E-01 -set_layer_rc -layer metal6 -resistance 1.50265E-03 -capacitance 1.14168E-01 -set_layer_rc -layer metal7 -resistance 2.64082E-04 -capacitance 1.17491E-01 -set_layer_rc -layer metal8 -resistance 1.89296E-04 -capacitance 9.45346E-02 -set_layer_rc -layer metal9 -resistance 3.42860E-05 -capacitance 1.06091E-01 -set_layer_rc -layer metal10 -resistance 3.86540E-05 -capacitance 7.37095E-01 +set_layer_rc -layer metal2 -resistance 3.57167E-03 -capacitance 8.33611E-02 +set_layer_rc -layer metal3 -resistance 3.57147E-03 -capacitance 1.03981E-01 +set_layer_rc -layer metal4 -resistance 1.50001E-03 -capacitance 1.19150E-01 +set_layer_rc -layer metal5 -resistance 1.50000E-03 -capacitance 1.09256E-01 +set_layer_rc -layer metal6 -resistance 1.50000E-03 -capacitance 1.14168E-01 +set_layer_rc -layer metal7 -resistance 1.87501E-04 -capacitance 1.17491E-01 +set_layer_rc -layer metal8 -resistance 1.87501E-04 -capacitance 9.45346E-02 +set_layer_rc -layer metal9 -resistance 3.74996E-05 -capacitance 1.06091E-01 +set_layer_rc -layer metal10 -resistance 3.75000E-05 -capacitance 7.37095E-01 set_wire_rc -signal -layer metal3 set_wire_rc -clock -layer metal5 diff --git a/flow/platforms/sky130hs/setRC.tcl b/flow/platforms/sky130hs/setRC.tcl index 1e0473b18c..af872dab9a 100644 --- a/flow/platforms/sky130hs/setRC.tcl +++ b/flow/platforms/sky130hs/setRC.tcl @@ -1,12 +1,9 @@ -# correlateRC.py gcd,ibex,aes,jpeg,chameleon,riscv32i,chameleon_hier -# cap units pf/um -set_layer_rc -layer li1 -capacitance 1.499e-04 -resistance 7.176e-02 -set_layer_rc -layer met1 -capacitance 1.72375E-04 -resistance 8.929e-04 -set_layer_rc -layer met2 -capacitance 1.36233E-04 -resistance 8.929e-04 -set_layer_rc -layer met3 -capacitance 2.14962E-04 -resistance 1.567e-04 -set_layer_rc -layer met4 -capacitance 1.48128E-04 -resistance 1.567e-04 -set_layer_rc -layer met5 -capacitance 1.54087E-04 -resistance 1.781e-05 -# end correlate +set_layer_rc -layer li1 -capacitance 1.499e-04 -resistance 6.81778E-02 +set_layer_rc -layer met1 -capacitance 1.72375E-04 -resistance 1.20566E-03 +set_layer_rc -layer met2 -capacitance 1.36233E-04 -resistance 1.22133E-03 +set_layer_rc -layer met3 -capacitance 2.14962E-04 -resistance 1.66286E-04 +set_layer_rc -layer met4 -capacitance 1.48128E-04 -resistance 1.68095E-04 +set_layer_rc -layer met5 -capacitance 1.54087E-04 -resistance 1.83574E-05 set_layer_rc -via mcon -resistance 9.249146E-3 set_layer_rc -via via -resistance 4.5E-3 diff --git a/flow/scripts/cts.tcl b/flow/scripts/cts.tcl index fd544a332e..1378c9e7b9 100644 --- a/flow/scripts/cts.tcl +++ b/flow/scripts/cts.tcl @@ -46,7 +46,9 @@ set_placement_padding -global \ -left $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) \ -right $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) -set result [catch { log_cmd detailed_placement } msg] +set dpl_args {} +append_env_var dpl_args USE_NEGOTIATION -use_negotiation 0 +set result [catch { log_cmd detailed_placement {*}$dpl_args } msg] if { $result != 0 } { save_progress 4_1_error error "Detailed placement failed in CTS: $msg" @@ -59,18 +61,19 @@ if { $::env(CTS_SNAPSHOTS) } { } if { !$::env(SKIP_CTS_REPAIR_TIMING) } { - if { $::env(LEC_CHECK) } { + set lec_enabled [lec_check_enabled] + if { $lec_enabled } { write_lec_verilog 4_before_rsz_lec.v } repair_timing_helper - if { $::env(LEC_CHECK) } { + if { $lec_enabled } { write_lec_verilog 4_after_rsz_lec.v run_lec_test 4_rsz 4_before_rsz_lec.v 4_after_rsz_lec.v } - set result [catch { log_cmd detailed_placement } msg] + set result [catch { log_cmd detailed_placement {*}$dpl_args } msg] if { $result != 0 } { save_progress 4_1_error error "Detailed placement failed in CTS: $msg" diff --git a/flow/scripts/detail_place.tcl b/flow/scripts/detail_place.tcl index 17c4285ea8..0e7c3b9794 100644 --- a/flow/scripts/detail_place.tcl +++ b/flow/scripts/detail_place.tcl @@ -15,16 +15,18 @@ proc do_dpl { } { set_placement_padding -global \ -left $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) \ -right $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) - log_cmd detailed_placement {*}[env_var_or_empty DETAIL_PLACEMENT_ARGS] + set dpl_args [env_var_or_empty DETAIL_PLACEMENT_ARGS] + append_env_var dpl_args USE_NEGOTIATION -use_negotiation 0 + log_cmd detailed_placement {*}$dpl_args if { $::env(ENABLE_DPO) } { if { [env_var_exists_and_non_empty DPO_MAX_DISPLACEMENT] } { - improve_placement -max_displacement $::env(DPO_MAX_DISPLACEMENT) + log_cmd improve_placement -max_displacement $::env(DPO_MAX_DISPLACEMENT) } else { - improve_placement + log_cmd improve_placement } } - optimize_mirroring + log_cmd optimize_mirroring utl::info FLW 12 "Placement violations [check_placement -verbose]." diff --git a/flow/scripts/floorplan.tcl b/flow/scripts/floorplan.tcl index 3cb381904c..74eb397fad 100644 --- a/flow/scripts/floorplan.tcl +++ b/flow/scripts/floorplan.tcl @@ -32,10 +32,6 @@ proc report_unused_masters { } { report_unused_masters -# Eliminate dead logic -eliminate_dead_logic - - #Run check_setup puts "\n==========================================================================" puts "Floorplan check_setup" @@ -116,6 +112,22 @@ if { [env_var_exists_and_non_empty FASTROUTE_TCL] } { source_env_var_if_exists FOOTPRINT_TCL +# The transforms below (repair_tie_fanout, replace_arith_modules, +# remove_buffers, repair_timing_helper) look like synthesis-stage +# operations: they all act on the netlist and don't touch placement. +# But they DO depend on having a floorplan in place — initialize_floorplan +# above placed the bterms on the die boundary and set_routing_layers +# configured the layer stack used for parasitic estimation. Without that +# context, top-level ports look like they're at (0,0) and timing analysis +# misjudges paths into/out of I/O. +# +# PR #4187 tried moving this block to synth_odb.tcl. It regressed setup +# TNS by 1.7-46x on I/O-heavy designs (asap7/aes-block 2.5x, asap7/jpeg_lvt +# 37x, asap7/swerv_wrapper 46x finish-hold-TNS, nangate45/ariane133 1.7x) +# while leaving internal-logic-dominated designs like asap7/ibex +# unchanged. The move was reverted; only eliminate_dead_logic stayed in +# synth_odb.tcl because it is a pure netlist transform that doesn't +# depend on placement or routing-layer context. if { !$::env(SKIP_REPAIR_TIE_FANOUT) } { # This needs to come before any call to remove_buffers. You could have one # tie driving multiple buffers that drive multiple outputs. diff --git a/flow/scripts/global_route.tcl b/flow/scripts/global_route.tcl index 5be588d088..3534fde65f 100644 --- a/flow/scripts/global_route.tcl +++ b/flow/scripts/global_route.tcl @@ -61,8 +61,10 @@ proc global_route_helper { } { # Running DPL to fix overlapped instances # Run to get modified net by DPL + set dpl_args {} + append_env_var dpl_args USE_NEGOTIATION -use_negotiation 0 log_cmd global_route -start_incremental - log_cmd detailed_placement + log_cmd detailed_placement {*}$dpl_args # Route only the modified net by DPL log_cmd global_route -end_incremental {*}$res_aware \ -congestion_report_file $::env(REPORTS_DIR)/congestion_post_repair_design.rpt @@ -80,7 +82,7 @@ proc global_route_helper { } { # Running DPL to fix overlapped instances # Run to get modified net by DPL log_cmd global_route -start_incremental - log_cmd detailed_placement + log_cmd detailed_placement {*}$dpl_args check_placement -verbose # Route only the modified net by DPL log_cmd global_route -end_incremental {*}$res_aware \ diff --git a/flow/scripts/lec_check.tcl b/flow/scripts/lec_check.tcl index 8e1d35919a..3b3384c055 100644 --- a/flow/scripts/lec_check.tcl +++ b/flow/scripts/lec_check.tcl @@ -1,3 +1,11 @@ +proc lec_check_enabled { } { + return [expr { + [env_var_equals LEC_CHECK 1] + && [info exists ::env(KEPLER_FORMAL_EXE)] + && [file executable $::env(KEPLER_FORMAL_EXE)] + }] +} + proc write_lec_verilog { filename } { set remove_cells [find_physical_only_masters] if { [env_var_exists_and_non_empty REMOVE_CELLS_FOR_LEC] } { diff --git a/flow/scripts/load.tcl b/flow/scripts/load.tcl index 159e92a89f..6d946198d9 100644 --- a/flow/scripts/load.tcl +++ b/flow/scripts/load.tcl @@ -46,6 +46,6 @@ proc load_design { design_file sdc_file } { if { [env_var_equals LIB_MODEL CCS] } { puts "Using CCS delay calculation" - set_delay_calculator prima + log_cmd set_delay_calculator prima } } diff --git a/flow/scripts/open.tcl b/flow/scripts/open.tcl index 72606f24a4..c9241ca506 100644 --- a/flow/scripts/open.tcl +++ b/flow/scripts/open.tcl @@ -78,6 +78,11 @@ if { [ord::openroad_gui_compiled] } { "OpenROAD - $::env(PLATFORM)/$::env(DESIGN_NICKNAME)/$::env(FLOW_VARIANT) - ${db_basename}" } +if { [env_var_equals LIB_MODEL CCS] } { + puts "Using CCS delay calculation" + log_cmd set_delay_calculator prima +} + if { $::env(GUI_TIMING) } { puts "GUI_TIMING=1 reading timing, takes a little while for large designs..." read_timing $input_file diff --git a/flow/scripts/run_command.py b/flow/scripts/run_command.py index fdc7315881..39e9780abe 100644 --- a/flow/scripts/run_command.py +++ b/flow/scripts/run_command.py @@ -18,6 +18,7 @@ """ import argparse +import os import resource import subprocess import sys @@ -85,7 +86,12 @@ def run(argv: list[str] | None = None) -> int: log_file = open(args.log, "a" if args.append else "w") wall_start = time.monotonic() - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + env = os.environ.copy() + for var in ("RUNFILES_DIR", "RUNFILES_MANIFEST_FILE", "RUNFILES_MANIFEST_ONLY"): + env.pop(var, None) + proc = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env + ) try: for line in iter(proc.stdout.readline, b""): diff --git a/flow/scripts/synth.sh b/flow/scripts/synth.sh index 7c4fba29c6..37bde9baf1 100755 --- a/flow/scripts/synth.sh +++ b/flow/scripts/synth.sh @@ -5,3 +5,16 @@ touch $2 $YOSYS_EXE -V > $(realpath $2) $PYTHON_EXE "$SCRIPTS_DIR/run_command.py" --log "$(realpath $2)" --append --tee -- \ $YOSYS_EXE $YOSYS_FLAGS -c $1 + +# Log result hash, mirroring flow.sh's epilogue for OpenROAD stages. +# genElapsedTime.py understands .odb/.rtlil/.v so it hashes the yosys +# output (1_2_yosys.v, 1_1_yosys_canonicalize.rtlil) automatically. +# Informational; sandbox edge-cases (no matching log, result not declared +# as a bazel action output) must not fail the synth action — but route +# stderr into the log rather than silently dropping it, so a real bug +# in the helper is still discoverable after the fact. +stage=$(basename "$2" .log) +log_file=$(realpath "$2") +"$PYTHON_EXE" "$UTILS_DIR/genElapsedTime.py" --match "$stage" -d "$LOG_DIR" \ + 2>>"$log_file" \ + | tee -a "$log_file" || true diff --git a/flow/scripts/synth.tcl b/flow/scripts/synth.tcl index f75772b6c1..fa79829904 100644 --- a/flow/scripts/synth.tcl +++ b/flow/scripts/synth.tcl @@ -32,7 +32,37 @@ proc get_dfflegalize_args { file_path } { } source $::env(SCRIPTS_DIR)/synth_preamble.tcl -read_checkpoint $::env(RESULTS_DIR)/1_1_yosys_canonicalize.rtlil +if { [env_var_exists_and_non_empty SYNTH_CHECKPOINT] } { + read_checkpoint $::env(SYNTH_CHECKPOINT) +} else { + read_checkpoint $::env(RESULTS_DIR)/1_1_yosys_canonicalize.rtlil +} + +# When this synthesis run is one partition of a parallel split (driven by +# an external orchestrator), `SYNTH_BLACKBOXES` lists modules outside this +# partition. Blackboxing them before the hierarchy check lets each +# partition load the same canonical RTLIL checkpoint while only synthesising +# its own subhierarchy. Names not present in the loaded design are skipped +# silently so the same list can be passed to every partition. +# +# This deliberately differs from the SYNTH_BLACKBOXES handling in +# synth_preamble.tcl's `read_design_sources`, and the difference is correct +# in both places — do not "harmonise" the two: +# * Order: here the design is already elaborated (read from RTLIL), so +# `blackbox` operates on resolved modules and must run before the +# hierarchy check. In synth_preamble.tcl the verilog frontend uses +# `read_verilog -defer`, so `hierarchy -check -top` must run first to +# elaborate from the top before `blackbox` sees a populated module table. +# * Catch: here a missing name is expected because the same list is +# reused across partitions, and only this partition's portion exists in +# the checkpoint. In synth_preamble.tcl a single design is being +# synthesised, so an unknown name is almost certainly a user typo and +# should fail loudly — `blackbox $m` without `catch` is intentional. +if { [env_var_exists_and_non_empty SYNTH_BLACKBOXES] } { + foreach m $::env(SYNTH_BLACKBOXES) { + catch { blackbox $m } + } +} hierarchy -check -top $::env(DESIGN_NAME) @@ -44,7 +74,20 @@ if { $::env(SYNTH_GUT) } { if { [env_var_exists_and_non_empty SYNTH_KEEP_MODULES] } { foreach module $::env(SYNTH_KEEP_MODULES) { - select -module $module + # Two patterns so both frontends work: + # - `$module` matches the bare name produced by verilog. + # - `$module\$*` matches the `$`-suffixed canonical names the + # slang frontend generates for parameterized instances + # (e.g. `\foo$1`); yosys's match_ids retries the pattern with + # the id's leading `\` stripped, so no `\`-prefix is needed + # here -- see tools/yosys/passes/cmds/select.cc match_ids(). + # Multiple patterns on one `select` are unioned at the end of the + # command (select.cc: `while (work_stack.size() > 1) union`), so + # when a pattern matches nothing it degrades to a warning and the + # other pattern still applies -- no regression for non-slang. + # `-module ` would error if the module doesn't exist, which + # is why we use bare patterns instead. + select "$module" "$module\\\$*" setattr -mod -set keep_hierarchy 1 select -clear } @@ -65,7 +108,19 @@ if { [env_var_exists_and_non_empty SYNTH_OPT_HIER] } { set synth_full_args [concat $synth_full_args -hieropt] } -if { !$::env(SYNTH_HIERARCHICAL) } { +if { + [env_var_exists_and_non_empty SYNTH_CHECKPOINT] && + $::env(SYNTH_SKIP_KEEP) +} { + # Partition mode where the checkpoint is still canonical RTLIL (the keep + # decision for this partition is driven externally). Run the full + # coarse+fine synthesis, flattened. + synth -flatten -run :fine {*}$synth_full_args +} elseif { [env_var_exists_and_non_empty SYNTH_CHECKPOINT] } { + # Partition mode where the checkpoint already holds coarse synth + + # keep_hierarchy output. Just flatten and continue from coarse. + synth -flatten -run coarse:fine {*}$synth_full_args +} elseif { !$::env(SYNTH_HIERARCHICAL) } { # Perform standard coarse-level synthesis script, flatten right away synth -flatten -run :fine {*}$synth_full_args } else { @@ -122,7 +177,7 @@ exec -- $::env(PYTHON_EXE) $::env(SCRIPTS_DIR)/mem_dump.py \ --max-bits $::env(SYNTH_MEMORY_MAX_BITS) $::env(RESULTS_DIR)/mem.json if { [env_var_exists_and_non_empty SYNTH_RETIME_MODULES] } { - select $::env(SYNTH_RETIME_MODULES) + select {*}$::env(SYNTH_RETIME_MODULES) opt -fast -full memory_map opt -full diff --git a/flow/scripts/synth_odb.tcl b/flow/scripts/synth_odb.tcl index 1ec969cafb..d6f53cda3e 100644 --- a/flow/scripts/synth_odb.tcl +++ b/flow/scripts/synth_odb.tcl @@ -4,6 +4,26 @@ erase_non_stage_variables synth load_design 1_2_yosys.v 1_2_yosys.sdc source_step_tcl PRE SYNTH +# Eliminate dead logic before writing the synthesis odb so that +# 1_synth.odb already reflects the live design. +# +# This matters for parallel synthesis flows (e.g., MegaBoom) where yosys +# only sees a slice of the design at a time and cannot prune logic that +# is dead only when looking at the whole design. In those flows this +# step can eliminate vast quantities of debug logic — for MegaBoom it +# has historically removed ~50% of the design. +# +# eliminate_dead_logic is a pure netlist transform: it does not need a +# die area, bterm placement or routing layers, so it is safe to run +# here. Other synthesis-looking transforms in floorplan.tcl +# (repair_tie_fanout, replace_arith_modules, remove_buffers, +# repair_timing_helper) DO depend on floorplan-stage context (bterm +# locations from initialize_floorplan, routing-layer setup) and must +# stay in floorplan.tcl — moving them here was tried in PR #4187 and +# regressed setup TNS by 1.7-46x on I/O-heavy designs (asap7/aes-block, +# asap7/jpeg_lvt, asap7/swerv_wrapper, nangate45/ariane133). +log_cmd eliminate_dead_logic + source_step_tcl POST SYNTH orfs_write_db $::env(RESULTS_DIR)/1_synth.odb # Canonicalize 1_synth.sdc. The original SDC_FILE provided by diff --git a/flow/scripts/util.tcl b/flow/scripts/util.tcl index e5e0bb32e0..ab445ebd9b 100644 --- a/flow/scripts/util.tcl +++ b/flow/scripts/util.tcl @@ -7,13 +7,22 @@ proc log_cmd { cmd args } { # log the command, escape arguments with spaces set log_cmd "$cmd[join [lmap arg $args { format " %s" [expr { [string match {* *} $arg] ? "\"$arg\"" : "$arg" }] }] ""]" ;# tclint-disable-line line-length puts $log_cmd - set start [clock seconds] + # Tcl's `clock` lives in clock.tcl, auto-loaded from TCL_LIBRARY. Hermetic + # build environments (e.g. Bazel linking yosys against @tcl_lang) don't + # always ship the Tcl library in runfiles, so `clock` may be undefined. + # The timing log is cosmetic — skip it when `clock` isn't available. + set has_clock [expr { [info commands clock] ne "" }] + if { $has_clock } { + set start [clock seconds] + } set result [uplevel 1 [list $cmd {*}$args]] - set time [expr { [clock seconds] - $start }] - if { $time >= 5 } { - # Ideally we'd use a single line, but the command can output text - # and we don't want to mix it with the log, so output the time it took afterwards. - puts "Took $time seconds: $log_cmd" + if { $has_clock } { + set time [expr { [clock seconds] - $start }] + if { $time >= 5 } { + # Ideally we'd use a single line, but the command can output text + # and we don't want to mix it with the log, so output the time it took afterwards. + puts "Took $time seconds: $log_cmd" + } } return $result } diff --git a/flow/scripts/variables.json b/flow/scripts/variables.json index 5d28243d6b..369ed53179 100644 --- a/flow/scripts/variables.json +++ b/flow/scripts/variables.json @@ -483,6 +483,10 @@ "LIB_FILES": { "description": "A Liberty file of the standard cell library with PVT characterization, input and output characteristics, timing and power definitions for each cell.\n" }, + "LIB_MODEL": { + "default": "NLDM", + "description": "Selects between NLDM and CCS timing models for the ASAP7 platform. Valid values: NLDM (default), CCS. Used in flow/platforms/asap7/config.mk to pick the LIB_DIR subdirectory and accumulate the corresponding $(CORNER)_$(LIB_MODEL)_LIB_FILES list, and in flow/scripts/load.tcl to gate CCS-specific Tcl branches.\n" + }, "MACRO_BLOCKAGE_HALO": { "description": "Distance beyond the edges of a macro that will also be covered by the blockage generated for that macro. Note that the default macro blockage halo comes from the largest of the specified MACRO_PLACE_HALO x or y values. This variable overrides that calculation.\n", "stages": [ @@ -586,6 +590,9 @@ "synth" ] }, + "MIN_CLK_ROUTING_LAYER": { + "description": "The lowest metal layer name to be used for clock-net routing in global routing. Used in flow/platforms/*/fastroute.tcl as the lower bound of `set_routing_layers -clock`. Typically higher than MIN_ROUTING_LAYER so clock nets prefer the upper, lower-RC layers. No `stages:` list because floorplan.tcl also `source`s the platform fastroute.tcl.\n" + }, "MIN_PLACE_STEP_COEF": { "default": 0.95, "description": "Sets the minimum phi coefficient (pcof_min / \u00b5_k Lower Bound) for global placement optimization. This parameter controls the step size lower bound in the RePlAce Nesterov optimization algorithm. Lower values may improve convergence but can increase runtime. Valid range: 0.95-1.05\n", @@ -1240,6 +1247,12 @@ "synth" ] }, + "SYNTH_CHECKPOINT": { + "description": "Path to a Yosys RTLIL checkpoint to read in place of the default canonicalization checkpoint at the start of synth.tcl. Intended for parallel synthesis flows that reuse a checkpoint taken after coarse synthesis and `keep_hierarchy` have already been decided, so each partition skips that common prefix. Leave unset for the normal flow.\n", + "stages": [ + "synth" + ] + }, "SYNTH_GUT": { "default": 0, "description": "Load design and remove all internal logic before doing synthesis. This is useful when creating a mock .lef abstract that has a smaller area than the amount of logic would allow. bazel-orfs uses this to mock SRAMs, for instance.\n", @@ -1339,6 +1352,13 @@ "synth" ] }, + "SYNTH_SKIP_KEEP": { + "default": 0, + "description": "Only meaningful together with SYNTH_CHECKPOINT. When set, signals that the supplied checkpoint is still canonical RTLIL (coarse synth and `keep_hierarchy` have not been run yet), so synth.tcl runs the full coarse+fine synthesis flattened. When unset and SYNTH_CHECKPOINT is used, synth.tcl assumes the checkpoint already has coarse synth + `keep_hierarchy` done and resumes from `coarse:fine`.\n", + "stages": [ + "synth" + ] + }, "SYNTH_SLANG_ARGS": { "default": "", "description": "Additional arguments passed to the slang frontend during synthesis.\n", @@ -1417,6 +1437,10 @@ "default": 0, "description": "Whether to perform metal density filling.\n" }, + "USE_NEGOTIATION": { + "default": 0, + "description": "Enable using negotiation legalizer for detailed placement.\n" + }, "VERILOG_DEFINES": { "description": "Preprocessor defines passed to the language frontend. Example: `-D HPDCACHE_ASSERT_OFF`\n", "stages": [ diff --git a/flow/scripts/variables.mk b/flow/scripts/variables.mk index 35b4457729..9d8c77585f 100644 --- a/flow/scripts/variables.mk +++ b/flow/scripts/variables.mk @@ -70,8 +70,18 @@ export NUM_CORES #------------------------------------------------------------------------------- # setup all commands used within this flow +# +# HERE BE DRAGONS: use bare `export VAR`, never `export VAR := $(VAR)`. +# +# `export VAR := $(VAR)` rebinds the variable to origin "file", which makes +# get_variables (below) include it in UNSET_VARIABLES_NAMES. UNSET_AND_MAKE +# then unsets it before the sub-make runs, so any `?=` fallback here fires +# with the wrong value in the sub-make (e.g. the in-tree tools/install path +# that does not exist in a Bazel sandbox). A bare `export` preserves the +# original origin (environment when bazel-orfs supplies it, file when the +# local default fills in), so the value survives UNSET_VARS. PYTHON_EXE ?= $(shell command -v python3) -export PYTHON_EXE := $(PYTHON_EXE) +export PYTHON_EXE export RUN_CMD = $(PYTHON_EXE) $(FLOW_HOME)/scripts/run_command.py @@ -92,8 +102,9 @@ else OPENSTA_EXE ?= $(abspath $(FLOW_HOME)/../tools/install/OpenROAD/bin/sta) endif -export OPENROAD_EXE := $(OPENROAD_EXE) -export OPENSTA_EXE := $(OPENSTA_EXE) +# See dragons comment near PYTHON_EXE: bare `export`, not `export VAR := $(VAR)`. +export OPENROAD_EXE +export OPENSTA_EXE OPENROAD_IS_VALID := $(if $(OPENROAD_EXE),$(shell test -x $(OPENROAD_EXE) && echo "true"),) @@ -101,6 +112,7 @@ export OPENROAD_ARGS = -no_init -threads $(NUM_CORES) $(OR_ARGS) export OPENROAD_CMD = $(OPENROAD_EXE) -exit $(OPENROAD_ARGS) export OPENROAD_NO_EXIT_CMD = $(OPENROAD_EXE) $(OPENROAD_ARGS) export OPENROAD_GUI_CMD = $(OPENROAD_EXE) -gui $(OR_ARGS) +export OPENROAD_WEB_CMD = $(OPENROAD_EXE) -web $(OR_ARGS) ifneq (${IN_NIX_SHELL},) YOSYS_EXE ?= $(shell command -v yosys) @@ -108,7 +120,8 @@ else YOSYS_EXE ?= $(abspath $(FLOW_HOME)/../tools/install/yosys/bin/yosys) endif -export YOSYS_EXE := $(YOSYS_EXE) +# See dragons comment near PYTHON_EXE: bare `export`, not `export VAR := $(VAR)`. +export YOSYS_EXE YOSYS_IS_VALID := $(if $(YOSYS_EXE),$(shell test -x $(YOSYS_EXE) && echo "true"),) @@ -188,7 +201,7 @@ export RESULTS_V = $(notdir $(sort $(wildcard $(RESULTS_DIR)/*.v))) export GDS_MERGED_FILE = $(RESULTS_DIR)/6_1_merged.$(STREAM_SYSTEM_EXT) define get_variables -$(foreach V, $(.VARIABLES),$(if $(filter-out $(1), $(origin $V)), $(if $(filter-out .% %QT_QPA_PLATFORM% KLAYOUT% GENERATE_ABSTRACT_RULE% do-step% do-copy% OPEN_GUI% OPEN_GUI_SHORTCUT% SUB_MAKE% UNSET_VARS% export%, $(V)), $V$ ))) +$(foreach V, $(.VARIABLES),$(if $(filter-out $(1), $(origin $V)), $(if $(filter-out .% %QT_QPA_PLATFORM% KLAYOUT% OPENROAD_EXE OPENROAD_ARGS OPENROAD_CMD OPENROAD_NO_EXIT_CMD OPENROAD_GUI_CMD OPENROAD_WEB_CMD OPENROAD_IS_VALID OPENSTA% PYTHON% YOSYS% GENERATE_ABSTRACT_RULE% do-step% do-copy% OPEN_GUI% OPEN_GUI_SHORTCUT% SUB_MAKE% UNSET_VARS% export%, $(V)), $V$ ))) endef export UNSET_VARIABLES_NAMES := $(call get_variables,command% line environment% default automatic) diff --git a/flow/scripts/variables.yaml b/flow/scripts/variables.yaml index a7e9234448..6eee57b4c2 100644 --- a/flow/scripts/variables.yaml +++ b/flow/scripts/variables.yaml @@ -151,6 +151,14 @@ LIB_FILES: A Liberty file of the standard cell library with PVT characterization, input and output characteristics, timing and power definitions for each cell. +LIB_MODEL: + description: > + Selects between NLDM and CCS timing models for the ASAP7 platform. + Valid values: NLDM (default), CCS. Used in + flow/platforms/asap7/config.mk to pick the LIB_DIR subdirectory and + accumulate the corresponding $(CORNER)_$(LIB_MODEL)_LIB_FILES list, + and in flow/scripts/load.tcl to gate CCS-specific Tcl branches. + default: NLDM PLATFORM_TCL: description: | Specifies a Tcl script with commands to run before loading design. @@ -256,6 +264,28 @@ SYNTH_BLACKBOXES: statically, even if modules come and go dynamically. stages: - synth +SYNTH_CHECKPOINT: + description: > + Path to a Yosys RTLIL checkpoint to read in place of the default + canonicalization checkpoint at the start of synth.tcl. + Intended for parallel synthesis flows that reuse a checkpoint taken after + coarse synthesis and `keep_hierarchy` have already been decided, so each + partition skips that common prefix. + Leave unset for the normal flow. + stages: + - synth +SYNTH_SKIP_KEEP: + description: > + Only meaningful together with SYNTH_CHECKPOINT. When set, signals that + the supplied checkpoint is still canonical RTLIL (coarse synth and + `keep_hierarchy` have not been run yet), so synth.tcl runs the full + coarse+fine synthesis flattened. + When unset and SYNTH_CHECKPOINT is used, synth.tcl assumes the + checkpoint already has coarse synth + `keep_hierarchy` done and + resumes from `coarse:fine`. + stages: + - synth + default: 0 SYNTH_NETLIST_FILES: description: > Skips synthesis and uses the supplied netlist files. If the netlist files @@ -600,6 +630,10 @@ DPO_MAX_DISPLACEMENT: description: | Specifies how far an instance can be moved when optimizing. default: 5 1 +USE_NEGOTIATION: + description: | + Enable using negotiation legalizer for detailed placement. + default: 0 GPL_TIMING_DRIVEN: description: | Specifies whether the placer should use timing driven placement. @@ -806,6 +840,13 @@ MAX_ROUTING_LAYER: - grt - route - final +MIN_CLK_ROUTING_LAYER: + description: > + The lowest metal layer name to be used for clock-net routing in global + routing. Used in flow/platforms/*/fastroute.tcl as the lower bound of + `set_routing_layers -clock`. Typically higher than MIN_ROUTING_LAYER so + clock nets prefer the upper, lower-RC layers. No `stages:` list because + floorplan.tcl also `source`s the platform fastroute.tcl. VIA_IN_PIN_MIN_LAYER: description: > Passed as -via_in_pin_bottom_layer to pin_access and detailed_route. diff --git a/flow/test/test_genElapsedTime.py b/flow/test/test_genElapsedTime.py index 36da00209e..33a06dbd64 100755 --- a/flow/test/test_genElapsedTime.py +++ b/flow/test/test_genElapsedTime.py @@ -79,6 +79,36 @@ def test_no_elapsed_time(self, fake_err_output): genElapsedTime.scan_logs(["--logDir", str(self.tmp_dir.name), "--noHeader"]) self.assertIn("No elapsed time found in", fake_err_output.getvalue()) + @patch("sys.stdout", new_callable=StringIO) + def test_emits_one_row_per_result_extension(self, mock_stdout): + # logs/.../1_2_yosys.log accompanied by both .v and .sdc result + # files should produce two rows: .v with the elapsed/peak, + # .sdc with empty elapsed/peak (the row sharing the stage). + log_dir = os.path.join(self.tmp_dir.name, "logs", "p", "d", "base") + res_dir = os.path.join(self.tmp_dir.name, "results", "p", "d", "base") + os.makedirs(log_dir) + os.makedirs(res_dir) + log_path = os.path.join(log_dir, "1_2_yosys.log") + with open(log_path, "w") as f: + f.write("Elapsed time: 00:00:10[h:]min:sec. Peak memory: 51200KB.\n") + with open(os.path.join(res_dir, "1_2_yosys.v"), "w") as f: + f.write("module foo\nendmodule\n") + with open(os.path.join(res_dir, "1_2_yosys.sdc"), "w") as f: + f.write("create_clock -period 10\n") + genElapsedTime.scan_logs(["--logDir", log_dir, "--noHeader"]) + out = mock_stdout.getvalue() + lines = [l for l in out.splitlines() if "1_2_yosys" in l] + self.assertEqual(len(lines), 2, out) + self.assertIn(".v", lines[0]) + self.assertIn(".sdc", lines[1]) + # elapsed (10) and peak (50) show only on the .v row + self.assertIn("10", lines[0]) + self.assertIn("50", lines[0]) + # the .sdc row repeats neither the elapsed (10) nor peak (50) + # but does include its own hash; check absence of those tokens + self.assertNotIn(" 10 ", " " + lines[1] + " ") + self.assertNotIn(" 50 ", " " + lines[1] + " ") + def tearDown(self): self.tmp_dir.cleanup() diff --git a/flow/test/test_generate_klayout_tech.py b/flow/test/test_generate_klayout_tech.py index 22c6642127..92e884cfc6 100644 --- a/flow/test/test_generate_klayout_tech.py +++ b/flow/test/test_generate_klayout_tech.py @@ -120,9 +120,7 @@ def test_basic_generation(self): template_lyt=self.template, output_lyt=self.output, lef_files=[lef_path], - reference_dir=self.results_dir, map_files=[], - use_relative_paths=True, ) with open(self.output) as f: @@ -130,12 +128,13 @@ def test_basic_generation(self): self.assertIn("", content) self.assertNotIn("original.lef", content) - # Path should be relative to results_dir - expected_rel = os.path.relpath( - os.path.realpath(lef_path), - os.path.realpath(self.results_dir), - ) - self.assertIn(expected_rel, content) + # LEF paths are written as plain abspath (not relpath, not realpath): + # klayout's Layout.read resolves relative entries + # against the realpath of the DEF being merged, which under a + # Bazel sandbox is the bare execroot -- the in-flight sibling + # files only exist in the per-action sandbox. Absolute paths + # bypass the relative-resolution dance. + self.assertIn(os.path.abspath(lef_path), content) def test_with_map_files(self): with open(self.template, "w") as f: @@ -151,15 +150,16 @@ def test_with_map_files(self): template_lyt=self.template, output_lyt=self.output, lef_files=[lef_path], - reference_dir=self.results_dir, map_files=[map_path], - use_relative_paths=False, ) with open(self.output) as f: content = f.read() - self.assertIn(os.path.realpath(map_path), content) + # Same abspath semantics as LEFs: map files are also written as + # plain absolute paths so klayout doesn't resolve them relative + # to the bare-execroot realpath of the input DEF. + self.assertIn(os.path.abspath(map_path), content) self.assertNotIn("original.map", content) def test_multiple_lef_files(self): @@ -177,9 +177,7 @@ def test_multiple_lef_files(self): template_lyt=self.template, output_lyt=self.output, lef_files=lef_files, - reference_dir=self.results_dir, map_files=[], - use_relative_paths=True, ) with open(self.output) as f: diff --git a/flow/test/test_helper.sh b/flow/test/test_helper.sh index dcd5081631..aa961d703d 100755 --- a/flow/test/test_helper.sh +++ b/flow/test/test_helper.sh @@ -4,33 +4,93 @@ set -eoux pipefail cd "$(dirname "$(readlink -f "$0")")/../" -# Setting args (and setting default values for testing) -DESIGN_NAME=${1:-gcd} -PLATFORM=${2:-nangate45} -CONFIG_MK=${3:-config.mk} -if [ $# -ge 4 ]; then - FLOW_VARIANT=$4 -fi -TARGET=${5:-'finish metadata'} -DESIGN_CONFIG=./designs/$PLATFORM/$DESIGN_NAME/$CONFIG_MK -if [ -z "${WORK_HOME+x}" ]; then - WORK_HOME=. +usage() { + cat <<'EOF' +Usage: + test_helper.sh [options] + test_helper.sh [config_mk] [variant] [target] (legacy positional) + +Options: + --design NAME Design name (default: gcd) + --platform NAME Platform (default: nangate45) + --config FILE Design config file name (default: config.mk) + --design-path DIR Root path containing 'designs/' (default: ./) + --variant NAME Flow variant (default: unset) + --target STR Make target(s), space-separated (default: 'finish metadata') + --work-home DIR Work home (default: .) + --private-dir DIR Private tool scripts dir (default: ../../private_tool_scripts) + --save-to-db Save metrics to DB (requires private.mk) + --run-calibre Run Calibre DRC (requires utils.mk) + --check-drc-db Check DRC DB (use with --run-calibre + --save-to-db) + --make-issue Run final_report_issue at end + -h, --help Show this help + +Environment variables override defaults; flags override env. Flags also accept +values via the corresponding env var (e.g., DESIGN_NAME, PLATFORM, CONFIG_MK, +FLOW_VARIANT, TARGET, WORK_HOME, PRIVATE_DIR, DESIGN_PATH, SAVE_TO_DB, +RUN_CALIBRE, CHECK_DRC_DB, MAKE_ISSUE). +EOF +} + +DESIGN_NAME="${DESIGN_NAME:-gcd}" +PLATFORM="${PLATFORM:-nangate45}" +CONFIG_MK="${CONFIG_MK:-config.mk}" +TARGET="${TARGET:-finish metadata}" +WORK_HOME="${WORK_HOME:-.}" +PRIVATE_DIR="${PRIVATE_DIR:-../../private_tool_scripts}" +DESIGN_PATH="${DESIGN_PATH:-./}" + +if [ $# -gt 0 ]; then + if [ "${1#-}" = "$1" ]; then + # Legacy positional: [config_mk] [variant] [target] + DESIGN_NAME=${1:-$DESIGN_NAME} + PLATFORM=${2:-$PLATFORM} + CONFIG_MK=${3:-$CONFIG_MK} + if [ $# -ge 4 ] && [ -n "$4" ]; then + FLOW_VARIANT=$4 + fi + if [ $# -ge 5 ] && [ -n "$5" ]; then + TARGET=$5 + fi + else + while [ $# -gt 0 ]; do + case "$1" in + --design) DESIGN_NAME=$2; shift 2 ;; + --platform) PLATFORM=$2; shift 2 ;; + --config) CONFIG_MK=$2; shift 2 ;; + --design-path) DESIGN_PATH=$2; shift 2 ;; + --variant) FLOW_VARIANT=$2; shift 2 ;; + --target) TARGET=$2; shift 2 ;; + --work-home) WORK_HOME=$2; shift 2 ;; + --private-dir) PRIVATE_DIR=$2; shift 2 ;; + --save-to-db) SAVE_TO_DB=1; shift ;; + --run-calibre) RUN_CALIBRE=1; shift ;; + --check-drc-db) CHECK_DRC_DB=1; shift ;; + --make-issue) MAKE_ISSUE=1; shift ;; + -h|--help) usage; exit 0 ;; + *) echo "Unknown option: $1" >&2; usage >&2; exit 2 ;; + esac + done + fi fi + +DESIGN_CONFIG=${DESIGN_PATH%/}/designs/$PLATFORM/$DESIGN_NAME/$CONFIG_MK LOG_FILE=${WORK_HOME}/logs/$PLATFORM/$DESIGN_NAME.log mkdir -p "${WORK_HOME}/logs/$PLATFORM" -__make="make DESIGN_CONFIG=$DESIGN_CONFIG" +__make=(make "DESIGN_CONFIG=$DESIGN_CONFIG") if [ -n "${FLOW_VARIANT+x}" ]; then - __make+=" FLOW_VARIANT=$FLOW_VARIANT" + __make+=("FLOW_VARIANT=$FLOW_VARIANT") fi mkdir -p "$(dirname "$LOG_FILE")" -$__make clean_all clean_metadata 2>&1 | tee "$LOG_FILE" +"${__make[@]}" clean_all clean_metadata 2>&1 | tee "$LOG_FILE" # turn off abort on error so we can always capture the result set +e -eval $__make "${TARGET}" 2>&1 | tee -a "$LOG_FILE" +read -r -a TARGET_ARR <<< "$TARGET" +"${__make[@]}" "${TARGET_ARR[@]}" 2>&1 | tee -a "$LOG_FILE" # Save the return code to return as the overall status after we package # the results @@ -40,26 +100,22 @@ if [ "${TARGET}" != "finish metadata" ]; then exit $ret fi -if [ -z "${PRIVATE_DIR+x}" ]; then - PRIVATE_DIR="../../private_tool_scripts" -fi - if [ -f "$PRIVATE_DIR/openRoad/private.mk" ] && [ -n "${SAVE_TO_DB+x}" ]; then - $__make save_to_metrics_db + "${__make[@]}" save_to_metrics_db ret=$(( ret + $? )) fi if [ -f "$PRIVATE_DIR/util/utils.mk" ] && [ -n "${RUN_CALIBRE+x}" ]; then - $__make calibre_drc + "${__make[@]}" calibre_drc ret=$(( ret + $? )) - $__make convert_calibre + "${__make[@]}" convert_calibre ret=$(( ret + $? )) if [ -n "${SAVE_TO_DB+x}" ]; then - $__make save_to_drc_db + "${__make[@]}" save_to_drc_db ret=$(( ret + $? )) fi if [ -n "${CHECK_DRC_DB+x}" ]; then - $__make check_drc_db + "${__make[@]}" check_drc_db ret=$(( ret + $? )) fi fi @@ -68,20 +124,20 @@ fi set -e if [ -n "${MAKE_ISSUE+x}" ]; then - $__make final_report_issue 2>&1 | tee -a "$LOG_FILE" + "${__make[@]}" final_report_issue 2>&1 | tee -a "$LOG_FILE" fi # Find make targets set +x # These rules are noisy -TARGETS=$($__make -np | grep -e '^[^ ]*:') -if [ $ret -eq 0 ] && grep -q 'simulate:' <(echo $TARGETS); then +TARGETS=$("${__make[@]}" -np | grep -e '^[^ ]*:') +if [ $ret -eq 0 ] && grep -q 'simulate:' <(echo "$TARGETS"); then echo "Start simulate" - $__make simulate 2>&1 | tee -a "$LOG_FILE" + "${__make[@]}" simulate 2>&1 | tee -a "$LOG_FILE" ret=$(( ret + $? )) fi -if [ $ret -eq 0 ] && grep -q 'power:' <(echo $TARGETS); then +if [ $ret -eq 0 ] && grep -q 'power:' <(echo "$TARGETS"); then echo "Start power" - $__make power 2>&1 | tee -a "$LOG_FILE" + "${__make[@]}" power 2>&1 | tee -a "$LOG_FILE" ret=$(( ret + $? )) fi set -x diff --git a/flow/util/BUILD.bazel b/flow/util/BUILD similarity index 56% rename from flow/util/BUILD.bazel rename to flow/util/BUILD index d48b5fd5e8..cc21b559c6 100644 --- a/flow/util/BUILD.bazel +++ b/flow/util/BUILD @@ -1,3 +1,4 @@ +load("@rules_python//python:defs.bzl", "py_library", "py_test") load("@rules_python//python:pip.bzl", "compile_pip_requirements") exports_files(["open_plots.sh"]) @@ -15,10 +16,13 @@ MAKEFILE_SHARED = [ # for scripts/flow.sh steps filegroup( name = "makefile", - srcs = glob(MAKEFILE_SHARED + [ - "*.py", - "*.sh", - ]), + srcs = glob( + MAKEFILE_SHARED + [ + "*.py", + "*.sh", + ], + exclude = ["*_test.py"], + ), visibility = ["//visibility:public"], ) @@ -28,3 +32,15 @@ filegroup( srcs = glob(MAKEFILE_SHARED), visibility = ["//visibility:public"], ) + +py_library( + name = "genMetrics_lib", + srcs = ["genMetrics.py"], + imports = ["."], +) + +py_test( + name = "genMetrics_test", + srcs = ["genMetrics_test.py"], + deps = [":genMetrics_lib"], +) diff --git a/flow/util/checkMetadata.py b/flow/util/checkMetadata.py index 84173158b6..1a525d88a8 100755 --- a/flow/util/checkMetadata.py +++ b/flow/util/checkMetadata.py @@ -106,8 +106,15 @@ def try_number(string): PRE = "[INFO]" CHECK = "pass" elif rule.get("level") == "warning": + # Warning-level rules never fail the build, but the prior + # message ("[WARN] field pass test: a == b") was misleading + # when a != b -- the build_value clearly differed from the + # rule_value yet "pass" implied a match. Say "differs" + # instead so the diagnostic reads naturally for fields like + # the netlist hash where the user wants visibility without + # an error. PRE = "[WARN]" - CHECK = "pass" + CHECK = "differs" WARNS += 1 else: PRE = "[ERROR]" diff --git a/flow/util/correlateRC.py b/flow/util/correlateRC.py index 65702ee102..b8d75922ac 100755 --- a/flow/util/correlateRC.py +++ b/flow/util/correlateRC.py @@ -18,6 +18,23 @@ LAYER_HEADER_RE = re.compile("^([^\\(]+)\\(([^\\)]+)\\)$") +# Helper functions +# ============================================================================= + + +# sklearn's default baseline model for scoring the fit i.e., measuring R² is +# "predict the mean" which is not the proper model for our regressions since +# both R and C are through-origin fits - the R² computation doesn't behave +# well for var(y) ≈ 0 - so we compute R² manually with a "predict zero" +# baseline model. +def compute_through_origin_fit_score(model, inputs, observed): + sum_squared_observed = (observed**2).sum() + if sum_squared_observed == 0: + return "No data" + score = 1.0 - ((observed - model.predict(inputs)) ** 2).sum() / sum_squared_observed + return f"{score:.4f}" + + # Parse and validate arguments # ============================================================================= @@ -410,9 +427,9 @@ def generic_rc_fit(type_sieve): resistances, capacitances_ff, ) in layer_models.items(): - r_sq_res = res_model.score(lengths, resistances) - r_sq_cap = cap_model.score(lengths, capacitances_ff) - print("{:<12s} | {:>8.4f} | {:>8.4f}".format(layer_name, r_sq_res, r_sq_cap)) + r_sq_res = compute_through_origin_fit_score(res_model, lengths, resistances) + r_sq_cap = compute_through_origin_fit_score(cap_model, lengths, capacitances_ff) + print("{:<12s} | {:>8s} | {:>8s}".format(layer_name, r_sq_res, r_sq_cap)) print("-" * 34) print("") diff --git a/flow/util/genElapsedTime.py b/flow/util/genElapsedTime.py index 3ae10f1d1b..209404c394 100755 --- a/flow/util/genElapsedTime.py +++ b/flow/util/genElapsedTime.py @@ -14,24 +14,42 @@ # ============================================================================== -def get_hash(f): - # content hash for the result file alongside .log file is useful to - # debug divergent results under what should be identical - # builds(such as local and CI builds) - for ext in [".odb", ".rtlil", ".v"]: +# Primary data artifacts first, then derived/exported artifacts and +# the SDC constraint file: yosys emits .v / .rtlil; OpenROAD stages +# emit .odb (and often .def / .sdc); routing emits .spef; finish +# emits .gds. +RESULT_EXTS = [".v", ".rtlil", ".odb", ".def", ".spef", ".gds", ".sdc"] + + +def get_hashes(f): + """Return [(ext, sha1), ...] for every result file alongside log + `f` whose extension is in RESULT_EXTS. A yosys stage typically + produces both `.v` and `.sdc`; a floorplan/route stage produces + `.odb` (and often `.sdc`); the canonicalize stage produces + `.rtlil`. Hashing each separately makes "the netlist changed" + distinguishable from "the SDC changed" in the elapsed-time table + used to triage divergent local vs CI builds. + + Falls back to a single ("", "N/A") entry when no result file + exists so the caller always emits at least one row per stage. + """ + results = [] + for ext in RESULT_EXTS: result_file = pathlib.Path( str(f).replace("logs/", "results/").replace(".log", ext) ) if result_file.exists(): hasher = hashlib.sha1() - with open(result_file, "rb") as odb_f: + with open(result_file, "rb") as rf: while True: - chunk = odb_f.read(16 * 1024 * 1024) + chunk = rf.read(16 * 1024 * 1024) if not chunk: break hasher.update(chunk) - return hasher.hexdigest() - return "N/A" + results.append((ext, hasher.hexdigest())) + if not results: + results.append(("", "N/A")) + return results def print_log_dir_times(logdir, args): @@ -87,37 +105,49 @@ def print_log_dir_times(logdir, args): ) break - odb_hash = get_hash(f) + hashes = get_hashes(f) if not found: print("No elapsed time found in", str(f), file=sys.stderr) continue - # Print the name of the step and the corresponding elapsed time - format_str = "%-25s %10s %14s %20s" + # Print the name of the step and the corresponding elapsed time. + # One row per (stage, result-file-ext); only the first row of a + # stage shows elapsed/peak. + format_str = "%-25s %-6s %10s %14s %20s" if elapsedTime is not None and peak_memory is not None: if first and not args.noHeader: print( format_str - % ("Log", "Elapsed/s", "Peak Memory/MB", "sha1sum .odb [0:20)") + % ( + "Log", + "Ext", + "Elapsed/s", + "Peak Memory/MB", + "sha1sum result [0:20)", + ) ) first = False - print( - format_str - % ( - stem, - elapsedTime, - peak_memory, - odb_hash[0:20], + stage_first = True + for ext, h in hashes: + print( + format_str + % ( + stem, + ext, + elapsedTime if stage_first else "", + peak_memory if stage_first else "", + h[0:20], + ) ) - ) + stage_first = False if elapsedTime is not None: totalElapsed += elapsedTime if peak_memory is not None: total_max_memory = max(total_max_memory, int(peak_memory)) if totalElapsed != 0 and not args.match: - print(format_str % ("Total", totalElapsed, total_max_memory, "")) + print(format_str % ("Total", "", totalElapsed, total_max_memory, "")) def scan_logs(args): diff --git a/flow/util/genMetrics.py b/flow/util/genMetrics.py index 937b2fb0f7..6424712e27 100755 --- a/flow/util/genMetrics.py +++ b/flow/util/genMetrics.py @@ -5,7 +5,9 @@ # information in specific files using regular expressions # ----------------------------------------------------------------------------- +import hashlib import os +import shutil from datetime import datetime, timedelta from collections import defaultdict from uuid import uuid4 as uuid @@ -170,13 +172,35 @@ def read_sdc(file_name): # ============================================================================= -def is_git_repo(folder=None): - cmd = ["git", "branch"] +def git_head_commit(git_exe, folder): + """Resolve the HEAD commit SHA of `folder`'s git working tree, or + return a descriptive fallback string. Accepts a pre-resolved + `git_exe` path so callers don't pay a `shutil.which` lookup per + invocation. Prints a [WARN] for the not-a-git-repo case (the + git-missing case is expected to be warned about by the caller).""" + if git_exe is None: + return "git not on PATH" + if not os.path.isdir(folder): + return "N/A" with open(os.devnull, "w") as devnull: - if folder is not None: - return call(cmd, stderr=STDOUT, stdout=devnull, cwd=folder) == 0 - else: - return call(cmd, stderr=STDOUT, stdout=devnull) == 0 + if call([git_exe, "branch"], stderr=STDOUT, stdout=devnull, cwd=folder) != 0: + print("[WARN] not a git repo:", folder) + return "not a git repo" + return ( + check_output([git_exe, "rev-parse", "HEAD"], cwd=folder).decode("utf-8").strip() + ) + + +def file_sha1(path): + """SHA-1 of `path`, or "N/A" if absent. Read in chunks so large + netlists don't blow the heap.""" + if not os.path.isfile(path): + return "N/A" + hasher = hashlib.sha1() + with open(path, "rb") as f: + for chunk in iter(lambda: f.read(16 * 1024 * 1024), b""): + hasher.update(chunk) + return hasher.hexdigest() def merge_jsons(root_path, output, files): @@ -193,7 +217,7 @@ def extract_metrics( baseRegEx = "^{}\n^-*\n^{}" metrics_dict = defaultdict(dict) - metrics_dict["run__flow__generate_date"] = now.strftime("%Y-%m-%d %H:%M") + metrics_dict["run__flow__generate_date"] = datetime.now().strftime("%Y-%m-%d %H:%M") metrics_dict["run__flow__metrics_version"] = "Metrics_2.1.2" cmdOutput = check_output([os.environ.get("OPENROAD_EXE", "openroad"), "-version"]) cmdFields = [x.decode("utf-8") for x in cmdOutput.split()] @@ -202,27 +226,21 @@ def extract_metrics( metrics_dict["run__flow__openroad_commit"] = str(cmdFields[1]) else: metrics_dict["run__flow__openroad_commit"] = "N/A" - if is_git_repo(): - cmdOutput = check_output(["git", "rev-parse", "HEAD"]) - cmdOutput = cmdOutput.decode("utf-8").strip() - else: - cmdOutput = "not a git repo" - print("[WARN]", cmdOutput) - metrics_dict["run__flow__scripts_commit"] = cmdOutput + git_exe = shutil.which("git") + if git_exe is None: + print("[WARN] git not on PATH; commit metadata will be N/A") + metrics_dict["run__flow__scripts_commit"] = git_head_commit(git_exe, cwd) metrics_dict["run__flow__uuid"] = str(uuid()) metrics_dict["run__flow__design"] = design metrics_dict["run__flow__platform"] = platform platformDir = os.environ.get("PLATFORM_DIR") if platformDir is None: print("[INFO]", "PLATFORM_DIR env variable not set") - cmdOutput = "N/A" - elif is_git_repo(folder=platformDir): - cmdOutput = check_output(["git", "rev-parse", "HEAD"], cwd=platformDir) - cmdOutput = cmdOutput.decode("utf-8").strip() + metrics_dict["run__flow__platform_commit"] = "N/A" else: - print("[WARN]", "not a git repo") - cmdOutput = "N/A" - metrics_dict["run__flow__platform_commit"] = cmdOutput + metrics_dict["run__flow__platform_commit"] = git_head_commit( + git_exe, platformDir + ) metrics_dict["run__flow__variant"] = flow_variant # Synthesis @@ -244,6 +262,15 @@ def extract_metrics( rptPath + "/synth_stat.txt", ) + # Netlist hashes: fingerprints of the canonical RTLIL (pre-ABC) and + # the final post-synthesis Verilog so the rules-base.json check + # (level=warning) flags when bazel-built vs make-built yosys + # disagree for the same RTL. + metrics_dict["synth__canonical_netlist__hash"] = file_sha1( + resultPath + "/1_1_yosys_canonicalize.rtlil" + ) + metrics_dict["synth__netlist__hash"] = file_sha1(resultPath + "/1_2_yosys.v") + # Clocks # ========================================================================= clk_list = read_sdc(resultPath + "/2_floorplan.sdc") @@ -370,17 +397,17 @@ def extract_metrics( json.dump(metrics_dict, resultSpecfile, indent=2, sort_keys=True) -args = parse_args() -now = datetime.now() - -extract_metrics( - os.path.join(os.path.dirname(os.path.realpath(__file__)), "../"), - args.platform, - args.design, - args.flowVariant, - args.output, - args.hier, - args.logs, - args.reports, - args.results, -) +if __name__ == "__main__": + args = parse_args() + + extract_metrics( + os.path.join(os.path.dirname(os.path.realpath(__file__)), "../"), + args.platform, + args.design, + args.flowVariant, + args.output, + args.hier, + args.logs, + args.reports, + args.results, + ) diff --git a/flow/util/genMetrics_test.py b/flow/util/genMetrics_test.py new file mode 100644 index 0000000000..fb84391e2f --- /dev/null +++ b/flow/util/genMetrics_test.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 + +import os +import shutil +import subprocess +import sys +import unittest + +sys.path.insert(0, os.path.dirname(os.path.realpath(__file__))) + +import genMetrics + + +class GitHeadCommitTests(unittest.TestCase): + """Tests git_head_commit()'s fallback behavior so commit metadata + extraction degrades gracefully instead of raising.""" + + def test_returns_descriptive_string_when_git_not_on_path(self): + """Nix builds and hermetic Bazel sandboxes can lack git; the + helper must report that distinctly rather than masquerading as + 'not a git repo'.""" + self.assertEqual(genMetrics.git_head_commit(None, "/tmp"), "git not on PATH") + + def test_returns_na_when_folder_is_not_a_directory(self): + """An unset/misconfigured PLATFORM_DIR must not let subprocess + raise FileNotFoundError on cwd.""" + self.assertEqual( + genMetrics.git_head_commit("/usr/bin/git", "/no/such/directory/orfs-test"), + "N/A", + ) + + +class ShutilWhichGitConsistencyTests(unittest.TestCase): + """Cross-checks shutil.which("git") against actually invoking git, so + we catch any environment (e.g. a stripped Nix sandbox) where the two + disagree and the PATH probe would give the wrong answer.""" + + def test_which_matches_git_version(self): + which_result = shutil.which("git") + try: + output = subprocess.check_output( + ["git", "--version"], stderr=subprocess.STDOUT, text=True + ) + except FileNotFoundError: + self.assertIsNone( + which_result, + "shutil.which found git but invoking it raised FileNotFoundError", + ) + return + + self.assertIsNotNone( + which_result, + "git --version succeeded but shutil.which returned None", + ) + self.assertTrue(output.startswith("git version "), output) + + +class ShutilWhichMissingCommandTests(unittest.TestCase): + """Validates shutil.which() returns None for a non-existent command. + This is the primitive git_head_commit() relies on at the call site; + if it ever returned a bogus path (in Nix, in a Bazel sandbox, + anywhere) the missing-git branch would never fire.""" + + BOGUS_CMD = "orfs-genmetrics-no-such-command-xyzzy" + + def test_which_returns_none_for_missing_command(self): + self.assertIsNone(shutil.which(self.BOGUS_CMD)) + + def test_invoking_missing_command_raises_file_not_found(self): + with self.assertRaises(FileNotFoundError): + subprocess.check_call([self.BOGUS_CMD]) + + +if __name__ == "__main__": + unittest.main() diff --git a/flow/util/genRuleFile.py b/flow/util/genRuleFile.py index 2edecdff0f..358d59231e 100755 --- a/flow/util/genRuleFile.py +++ b/flow/util/genRuleFile.py @@ -46,8 +46,11 @@ def gen_rule_file( # dict format # 'metric_name': { - # 'mode': , one of ['direct', 'sum_fixed', 'period', 'padding', - # 'period_padding', 'abs_padding', 'metric'] + # 'mode': , one of ['direct', 'literal', 'sum_fixed', 'period', + # 'padding', 'period_padding', 'abs_padding', + # 'metric']. 'literal' propagates the metric + # value verbatim (e.g. a hash string) and + # skips all numeric padding/rounding. # 'padding': , percentage of padding to use # 'fixed': , sum this number instead of using % padding # 'round_value': , use the rounded value for the rule @@ -71,6 +74,21 @@ def gen_rule_file( "level": "warning", }, # synth + # Yosys netlist hash fingerprints. `mode: literal` propagates + # the string value verbatim; `level: warning` means a mismatch + # surfaces as a [WARN] diagnostic in checkMetadata.py without + # failing the build, matching how rules-base.json already + # treats warning counts. + "synth__canonical_netlist__hash": { + "mode": "literal", + "compare": "==", + "level": "warning", + }, + "synth__netlist__hash": { + "mode": "literal", + "compare": "==", + "level": "warning", + }, "synth__design__instance__area__stdcell": { "mode": "padding", "padding": 15, @@ -256,7 +274,7 @@ def gen_rule_file( "[WARNING] 'constraints__clocks__details' not found or is empty in metrics. Clock-related rules might be affected." ) - format_str = "| {:45} | {:8} | {:8} | {:8} |\n" + format_str = "| {:45} | {:10} | {:10} | {:8} |\n" change_str = "" processed_fields = set() @@ -279,7 +297,7 @@ def gen_rule_file( if ":" in field: field = field.replace(":", "__") processed_fields.add(field) - if isinstance(metrics[field], str): + if isinstance(metrics[field], str) and option["mode"] != "literal": print(f"[WARNING] Skipping string field {field} = {metrics[field]}") continue @@ -291,6 +309,9 @@ def gen_rule_file( if option["mode"] == "direct": rule_value = metrics[field] + elif option["mode"] == "literal": + rule_value = metrics[field] + elif option["mode"] == "sum_fixed": rule_value = metrics[field] + option["padding"] @@ -342,10 +363,11 @@ def gen_rule_file( print(f"[ERROR] Metric {field} has invalid mode {option['mode']}.") sys.exit(1) - if option["round_value"] and not isinf(rule_value): - rule_value = int(round(rule_value)) - else: - rule_value = float(f"{rule_value:.3g}") + if option["mode"] != "literal": + if option["round_value"] and not isinf(rule_value): + rule_value = int(round(rule_value)) + else: + rule_value = float(f"{rule_value:.3g}") preserve_old_rule = ( True diff --git a/flow/util/generate_klayout_tech.py b/flow/util/generate_klayout_tech.py index c054945f71..b23a1e0aba 100644 --- a/flow/util/generate_klayout_tech.py +++ b/flow/util/generate_klayout_tech.py @@ -30,37 +30,32 @@ def replace_map_files(content, map_files): return content -def generate_klayout_tech( - template_lyt, - output_lyt, - lef_files, - reference_dir, - map_files, - use_relative_paths, -): +def generate_klayout_tech(template_lyt, output_lyt, lef_files, map_files=None): """Generate a klayout .lyt file from a platform template. Args: template_lyt: Path to the platform .lyt template file. output_lyt: Path to write the generated .lyt file. lef_files: List of LEF file paths to include. - reference_dir: Directory to compute relative paths from. map_files: List of map file paths. - use_relative_paths: If True, compute paths relative to reference_dir. """ with open(template_lyt, "r") as f: content = f.read() - # Both modes use relative paths from reference_dir, matching the - # original sed-based behavior which always uses realpath --relative-to. - resolved_lefs = [ - os.path.relpath(os.path.realpath(f), os.path.realpath(reference_dir)) - for f in lef_files - ] + # Write absolute (not relative, not realpath'd) LEF paths into the LYT. + # Klayout's Layout.read(def, layout_options) follows the symlinked input + # DEF to its realpath at the bare execroot and resolves relative + # entries from there. Sibling intermediates like + # objects/klayout_tech.lef don't exist at the bare execroot during + # action execution -- they're only at the per-action sandbox -- so + # resolution fails with errno=2. Plain abspath (NOT realpath, which + # would chase Bazel input-file symlinks back out to the bare execroot) + # keeps klayout pointed at the in-sandbox file. + resolved_lefs = [os.path.abspath(f) for f in lef_files] content = replace_lef_files(content, resolved_lefs) - resolved_maps = [os.path.realpath(f) for f in map_files] + resolved_maps = [os.path.abspath(f) for f in (map_files or [])] content = replace_map_files(content, resolved_maps) with open(output_lyt, "w") as f: @@ -78,28 +73,16 @@ def main(): parser.add_argument( "--lef-files", nargs="*", default=[], help="LEF files to include" ) - parser.add_argument( - "--reference-dir", - required=True, - help="Directory for computing relative paths", - ) parser.add_argument( "--map-files", nargs="*", default=[], help="Map files to include" ) - parser.add_argument( - "--use-relative-paths", - action="store_true", - help="Use paths relative to reference-dir", - ) args = parser.parse_args() generate_klayout_tech( template_lyt=args.template, output_lyt=args.output, lef_files=args.lef_files, - reference_dir=args.reference_dir, map_files=args.map_files, - use_relative_paths=args.use_relative_paths, ) diff --git a/flow/util/uploadMetadata.py b/flow/util/uploadMetadata.py index 9f8dc63fc3..dbd4ab2e2c 100755 --- a/flow/util/uploadMetadata.py +++ b/flow/util/uploadMetadata.py @@ -2,7 +2,6 @@ import json import argparse -import re import os from datetime import datetime, timezone @@ -38,6 +37,13 @@ parser.add_argument("--variant", type=str, default="base") # --- PUBSUB args --- +parser.add_argument( + "--jenkinsEnv", + type=str, + default="unknown", + choices=["public", "secure", "unknown"], + help="Jenkins environment (public or secure)", +) parser.add_argument("--pubsubProjectID", type=str, help="GCP project ID for Pub/Sub") parser.add_argument( "--pubsubTopicID", @@ -81,7 +87,7 @@ def upload_data(db, dataFile, platform, design, variant, args, rules): excludes = ["run", "commit", "total_time", "constraints"] gen_date = datetime.now() for k, v in data.items(): - new_key = re.sub(":", "__", k) # replace ':' with '__' + new_key = k.replace(":", "__") # replace ':' with '__' new_data[new_key] = v stage_name = k.split("__")[0] if stage_name not in excludes: @@ -194,34 +200,103 @@ def upload_data(db, dataFile, platform, design, variant, args, rules): # --- PUBSUB --- -def publish_to_pubsub( - publisher, topic_path, dataFile, platform, design, variant, args, rules -): - """Publish a single design's metrics to Pub/Sub as a JSON message.""" +# Pub/Sub hard cap is 10 MB. Stay under with safety margin to leave room for +# attribute overhead and future payload growth. +MAX_PUBSUB_BYTES = 8 * 1024 * 1024 + + +def build_design_record(dataFile, platform, design, variant, rules): + """Return a dict for one design to be included in the pipeline-level payload.""" with open(dataFile) as f: data = json.load(f) + metrics = {k.replace(":", "__"): v for k, v in data.items()} + return { + "platform": platform, + "design": design, + "variant": variant, + "rules": rules, + "metrics": metrics, + } - # Build the payload: CLI args + metrics with ':' replaced by '__' - payload = { + +def build_pipeline_payload(design_records, args): + """Return the v2 pipeline-level payload dict.""" + return { + "payload_schema_version": 2, + "jenkins_env": args.jenkinsEnv, "build_id": args.buildID, "branch_name": args.branchName, "pipeline_id": args.pipelineID, "change_branch": args.changeBranch, "commit_sha": args.commitSHA, "jenkins_url": args.jenkinsURL, - "rules": rules, + "designs": design_records, } - for k, v in data.items(): - new_key = re.sub(":", "__", k) - payload[new_key] = v - message_data = json.dumps(payload).encode("utf-8") - future = publisher.publish(topic_path, data=message_data) - message_id = future.result() +def publish_pipeline_report(publisher, topic_path, message_data, design_count, args): + """Publish a pre-encoded v2 pipeline message.""" + size_kb = len(message_data) / 1024 print( - f"[INFO] Published to Pub/Sub (message ID: {message_id}) for {platform} {design} {variant}." + f"[INFO] Publishing pipeline report ({design_count} designs, {size_kb:.1f} KB) to Pub/Sub." + ) + future = publisher.publish( + topic_path, + data=message_data, + payload_schema_version="2", + jenkins_env=args.jenkinsEnv, ) + message_id = future.result() + print(f"[INFO] Published pipeline report to Pub/Sub (message ID: {message_id}).") + + +def publish_v1_per_design(publisher, topic_path, design_records, args): + """Fallback path used when the v2 pipeline payload exceeds MAX_PUBSUB_BYTES. + + Emits one v1-format message per design (no payload_schema_version, metrics + flattened at the root), matching the legacy schema the ingestion service + still supports. + """ + futures = [] + for d in design_records: + payload = { + "build_id": args.buildID, + "branch_name": args.branchName, + "pipeline_id": args.pipelineID, + "change_branch": args.changeBranch, + "commit_sha": args.commitSHA, + "jenkins_url": args.jenkinsURL, + "jenkins_env": args.jenkinsEnv, + "rules": d["rules"], + } + payload.update(d["metrics"]) + + message_data = json.dumps(payload, default=str).encode("utf-8") + try: + future = publisher.publish( + topic_path, + data=message_data, + jenkins_env=args.jenkinsEnv, + ) + futures.append((d, future)) + except Exception as e: + print( + f"[WARN] Pub/Sub v1 fallback publish failed for " + f"{d['platform']} {d['design']} {d['variant']}: {e}" + ) + + for d, future in futures: + try: + message_id = future.result() + print( + f"[INFO] Published v1 fallback message (ID: {message_id}) for " + f"{d['platform']} {d['design']} {d['variant']}." + ) + except Exception as e: + print( + f"[WARN] Pub/Sub v1 fallback publish failed for " + f"{d['platform']} {d['design']} {d['variant']}: {e}" + ) # --- END PUBSUB --- @@ -264,6 +339,10 @@ def get_rules(dataFile): RUN_FILENAME = "metadata.json" +# --- PUBSUB --- +design_records = [] +# --- END PUBSUB --- + for reportDir, dirs, files in sorted(os.walk("reports", topdown=False)): dirList = reportDir.split(os.sep) if len(dirList) != 4: @@ -293,12 +372,30 @@ def get_rules(dataFile): # --- PUBSUB --- if publisher: + design_records.append( + build_design_record(dataFile, platform, design, variant, rules) + ) + # --- END PUBSUB --- + +# --- PUBSUB --- +if publisher and design_records: + payload = build_pipeline_payload(design_records, args) + message_data = json.dumps(payload, default=str).encode("utf-8") + + if len(message_data) > MAX_PUBSUB_BYTES: + print( + f"[WARN] v2 payload size {len(message_data) / 1024:.1f} KB exceeds " + f"{MAX_PUBSUB_BYTES // 1024} KB cap. Falling back to v1 per-design publish " + f"({len(design_records)} messages)." + ) + publish_v1_per_design(publisher, topic_path, design_records, args) + else: try: - publish_to_pubsub( - publisher, topic_path, dataFile, platform, design, variant, args, rules + publish_pipeline_report( + publisher, topic_path, message_data, len(design_records), args ) except Exception as e: - print( - f"[WARN] Pub/Sub publish failed for {platform} {design} {variant}: {e}" - ) - # --- END PUBSUB --- + print(f"[WARN] Pub/Sub publish failed for pipeline report: {e}") +elif publisher and not design_records: + print("[WARN] Pub/Sub publisher initialized but no design records were collected.") +# --- END PUBSUB --- diff --git a/flow/util/utils.mk b/flow/util/utils.mk index 8e6136d981..0dbeb1ea6e 100644 --- a/flow/util/utils.mk +++ b/flow/util/utils.mk @@ -164,10 +164,14 @@ gallery: check-klayout $(RESULTS_DIR)/6_final_no_power.def $(RESULTS_DIR)/6_fina -rd tech_file=$(OBJECTS_DIR)/klayout.lyt \ -rm $(UTILS_DIR)/createGallery.py -.PHONY: view_cells +.PHONY: view_cells view_cells_web view_cells: $(OPENROAD_GUI_CMD) $(SCRIPTS_DIR)/view_cells.tcl +.PHONY: view_cells_web +view_cells_web: + $(OPENROAD_WEB_CMD) $(SCRIPTS_DIR)/view_cells.tcl + ## Quick access to command line .PHONY: command command: diff --git a/tools/OpenROAD b/tools/OpenROAD index 0d9d73ffba..04cbde6e14 160000 --- a/tools/OpenROAD +++ b/tools/OpenROAD @@ -1 +1 @@ -Subproject commit 0d9d73ffba0228f1a7263953fb9b41de800ba301 +Subproject commit 04cbde6e14ad4f94ab65f0fef83d3923a44d269b diff --git a/tools/kepler-formal b/tools/kepler-formal index 8aff6307f4..b596df4121 160000 --- a/tools/kepler-formal +++ b/tools/kepler-formal @@ -1 +1 @@ -Subproject commit 8aff6307f464f2a3020710e0a6cd0e4a0dd6a132 +Subproject commit b596df4121f2b13ac1b6fd03920a3b2053ae80f5 diff --git a/tools/yosys b/tools/yosys index 8449dd4700..9ed031ddd5 160000 --- a/tools/yosys +++ b/tools/yosys @@ -1 +1 @@ -Subproject commit 8449dd4700821ea021b241a6addaaf8ccd171dfc +Subproject commit 9ed031ddd588442f22be13ce608547a5809b62f0