librelane 2.4.0.dev5__tar.gz → 2.4.0.dev7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of librelane might be problematic. Click here for more details.

Files changed (168) hide show
  1. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/PKG-INFO +4 -5
  2. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/Readme.md +2 -2
  3. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/generic_dict.py +1 -1
  4. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/gui.tcl +3 -1
  5. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/openroad.py +36 -16
  6. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/pyproject.toml +7 -4
  7. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/__init__.py +0 -0
  8. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/__main__.py +0 -0
  9. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/__version__.py +0 -0
  10. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/__init__.py +0 -0
  11. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/cli.py +0 -0
  12. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/drc.py +0 -0
  13. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/metrics/__init__.py +0 -0
  14. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/metrics/__main__.py +0 -0
  15. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/metrics/library.py +0 -0
  16. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/metrics/metric.py +0 -0
  17. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/metrics/util.py +0 -0
  18. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/misc.py +0 -0
  19. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/ring_buffer.py +0 -0
  20. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/tcl.py +0 -0
  21. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/toolbox.py +0 -0
  22. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/tpe.py +0 -0
  23. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/common/types.py +0 -0
  24. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/config/__init__.py +0 -0
  25. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/config/__main__.py +0 -0
  26. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/config/config.py +0 -0
  27. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/config/flow.py +0 -0
  28. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/config/pdk_compat.py +0 -0
  29. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/config/preprocessor.py +0 -0
  30. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/config/removals.py +0 -0
  31. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/config/variable.py +0 -0
  32. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/container.py +0 -0
  33. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/env_info.py +0 -0
  34. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm/config.yaml +0 -0
  35. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm/pin_order.cfg +0 -0
  36. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm/src/impl.sdc +0 -0
  37. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm/src/signoff.sdc +0 -0
  38. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm/src/spm.v +0 -0
  39. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm/verify/spm_tb.v +0 -0
  40. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm-user_project_wrapper/SPM_example.v +0 -0
  41. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc +0 -0
  42. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm-user_project_wrapper/config-tut.json +0 -0
  43. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm-user_project_wrapper/config.json +0 -0
  44. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm-user_project_wrapper/defines.v +0 -0
  45. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm-user_project_wrapper/template.def +0 -0
  46. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/examples/spm-user_project_wrapper/user_project_wrapper.v +0 -0
  47. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/flows/__init__.py +0 -0
  48. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/flows/builtins.py +0 -0
  49. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/flows/classic.py +0 -0
  50. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/flows/cli.py +0 -0
  51. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/flows/flow.py +0 -0
  52. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/flows/misc.py +0 -0
  53. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/flows/optimizing.py +0 -0
  54. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/flows/sequential.py +0 -0
  55. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/flows/synth_explore.py +0 -0
  56. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/logging/__init__.py +0 -0
  57. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/logging/logger.py +0 -0
  58. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/open_pdks_rev +0 -0
  59. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/plugins.py +0 -0
  60. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/py.typed +0 -0
  61. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/base.sdc +0 -0
  62. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/klayout/Readme.md +0 -0
  63. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/klayout/open_design.py +0 -0
  64. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/klayout/render.py +0 -0
  65. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/klayout/stream_out.py +0 -0
  66. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/klayout/xml_drc_report_to_json.py +0 -0
  67. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/klayout/xor.drc +0 -0
  68. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/Readme.md +0 -0
  69. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/common/read.tcl +0 -0
  70. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/def/antenna_check.tcl +0 -0
  71. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/def/mag.tcl +0 -0
  72. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/def/mag_gds.tcl +0 -0
  73. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/drc.tcl +0 -0
  74. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/extract_spice.tcl +0 -0
  75. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/gds/drc_batch.tcl +0 -0
  76. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/gds/erase_box.tcl +0 -0
  77. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/gds/extras_mag.tcl +0 -0
  78. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -0
  79. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/get_bbox.tcl +0 -0
  80. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/lef/extras_maglef.tcl +0 -0
  81. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/lef/maglef.tcl +0 -0
  82. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/lef.tcl +0 -0
  83. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/open.tcl +0 -0
  84. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/magic/wrapper.tcl +0 -0
  85. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/netgen/setup.tcl +0 -0
  86. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/apply_def_template.py +0 -0
  87. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/cell_frequency.py +0 -0
  88. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/check_antenna_properties.py +0 -0
  89. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/contextualize.py +0 -0
  90. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/defutil.py +0 -0
  91. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/diodes.py +0 -0
  92. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/disconnected_pins.py +0 -0
  93. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/eco_buffer.py +0 -0
  94. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/eco_diode.py +0 -0
  95. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/filter_unannotated.py +0 -0
  96. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/io_place.py +0 -0
  97. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/ioplace_parser/__init__.py +0 -0
  98. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/ioplace_parser/parse.py +0 -0
  99. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/label_macro_pins.py +0 -0
  100. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/lefutil.py +0 -0
  101. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/placers.py +0 -0
  102. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/power_utils.py +0 -0
  103. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/random_place.py +0 -0
  104. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/reader.py +0 -0
  105. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/remove_buffers.py +0 -0
  106. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/snap_to_grid.py +0 -0
  107. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/odbpy/wire_lengths.py +0 -0
  108. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/antenna_check.tcl +0 -0
  109. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/antenna_repair.tcl +0 -0
  110. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/basic_mp.tcl +0 -0
  111. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/buffer_list.tcl +0 -0
  112. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/common/dpl.tcl +0 -0
  113. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/common/dpl_cell_pad.tcl +0 -0
  114. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/common/grt.tcl +0 -0
  115. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/common/io.tcl +0 -0
  116. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/common/pdn_cfg.tcl +0 -0
  117. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/common/resizer.tcl +0 -0
  118. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/common/set_global_connections.tcl +0 -0
  119. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/common/set_layer_adjustments.tcl +0 -0
  120. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/common/set_power_nets.tcl +0 -0
  121. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/common/set_rc.tcl +0 -0
  122. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/common/set_routing_layers.tcl +0 -0
  123. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/cts.tcl +0 -0
  124. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/cut_rows.tcl +0 -0
  125. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/dpl.tcl +0 -0
  126. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/drt.tcl +0 -0
  127. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/fill.tcl +0 -0
  128. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/floorplan.tcl +0 -0
  129. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/gpl.tcl +0 -0
  130. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/grt.tcl +0 -0
  131. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/insert_buffer.tcl +0 -0
  132. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/ioplacer.tcl +0 -0
  133. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/irdrop.tcl +0 -0
  134. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/pdn.tcl +0 -0
  135. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/rcx.tcl +0 -0
  136. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/repair_design.tcl +0 -0
  137. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/repair_design_postgrt.tcl +0 -0
  138. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/rsz_timing_postcts.tcl +0 -0
  139. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/rsz_timing_postgrt.tcl +0 -0
  140. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/sta/check_macro_instances.tcl +0 -0
  141. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/sta/corner.tcl +0 -0
  142. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/tapcell.tcl +0 -0
  143. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/openroad/write_views.tcl +0 -0
  144. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/pyosys/construct_abc_script.py +0 -0
  145. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/pyosys/json_header.py +0 -0
  146. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/pyosys/synthesize.py +0 -0
  147. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/pyosys/ys_common.py +0 -0
  148. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/scripts/tclsh/hello.tcl +0 -0
  149. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/state/__init__.py +0 -0
  150. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/state/__main__.py +0 -0
  151. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/state/design_format.py +0 -0
  152. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/state/state.py +0 -0
  153. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/__init__.py +0 -0
  154. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/__main__.py +0 -0
  155. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/checker.py +0 -0
  156. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/common_variables.py +0 -0
  157. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/cvc_rv.py +0 -0
  158. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/klayout.py +0 -0
  159. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/magic.py +0 -0
  160. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/misc.py +0 -0
  161. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/netgen.py +0 -0
  162. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/odb.py +0 -0
  163. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/openroad_alerts.py +0 -0
  164. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/pyosys.py +0 -0
  165. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/step.py +0 -0
  166. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/tclstep.py +0 -0
  167. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/verilator.py +0 -0
  168. {librelane-2.4.0.dev5 → librelane-2.4.0.dev7}/librelane/steps/yosys.py +0 -0
@@ -1,15 +1,14 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: librelane
3
- Version: 2.4.0.dev5
3
+ Version: 2.4.0.dev7
4
4
  Summary: An infrastructure for implementing chip design flows
5
5
  Home-page: https://github.com/librelane/librelane
6
6
  License: Apache-2.0
7
7
  Author: Mohamed Gaber
8
8
  Author-email: me@donn.website
9
- Requires-Python: >=3.8,<4
9
+ Requires-Python: >=3.8.1,<4
10
10
  Classifier: License :: OSI Approved :: Apache Software License
11
11
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.8
13
12
  Classifier: Programming Language :: Python :: 3.9
14
13
  Classifier: Programming Language :: Python :: 3.10
15
14
  Classifier: Programming Language :: Python :: 3.11
@@ -36,7 +35,7 @@ Description-Content-Type: text/markdown
36
35
  <h1 align="center">LibreLane</h1>
37
36
  <p align="center">
38
37
  <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License: Apache 2.0"/></a>
39
- <a href="https://www.python.org"><img src="https://img.shields.io/badge/Python-3.8-3776AB.svg?style=flat&logo=python&logoColor=white" alt="Python 3.8 or higher" /></a>
38
+ <a href="https://www.python.org"><img src="https://img.shields.io/badge/Python-3.8-3776AB.svg?style=flat&logo=python&logoColor=white" alt="Python 3.8.1 or higher" /></a>
40
39
  <a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code Style: black"/></a>
41
40
  <a href="https://mypy-lang.org/"><img src="https://www.mypy-lang.org/static/mypy_badge.svg" alt="Checked with mypy"/></a>
42
41
  <a href="https://nixos.org/"><img src="https://img.shields.io/static/v1?logo=nixos&logoColor=white&label=&message=Built%20with%20Nix&color=41439a" alt="Built with Nix"/></a>
@@ -73,7 +72,7 @@ Colaboratory by following
73
72
 
74
73
  You'll need the following:
75
74
 
76
- * Python **3.8** or higher with PIP, Venv and Tkinter
75
+ * Python **3.8.1** or higher with PIP, Venv and Tkinter
77
76
 
78
77
  ### Nix (Recommended)
79
78
 
@@ -1,7 +1,7 @@
1
1
  <h1 align="center">LibreLane</h1>
2
2
  <p align="center">
3
3
  <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License: Apache 2.0"/></a>
4
- <a href="https://www.python.org"><img src="https://img.shields.io/badge/Python-3.8-3776AB.svg?style=flat&logo=python&logoColor=white" alt="Python 3.8 or higher" /></a>
4
+ <a href="https://www.python.org"><img src="https://img.shields.io/badge/Python-3.8-3776AB.svg?style=flat&logo=python&logoColor=white" alt="Python 3.8.1 or higher" /></a>
5
5
  <a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code Style: black"/></a>
6
6
  <a href="https://mypy-lang.org/"><img src="https://www.mypy-lang.org/static/mypy_badge.svg" alt="Checked with mypy"/></a>
7
7
  <a href="https://nixos.org/"><img src="https://img.shields.io/static/v1?logo=nixos&logoColor=white&label=&message=Built%20with%20Nix&color=41439a" alt="Built with Nix"/></a>
@@ -38,7 +38,7 @@ Colaboratory by following
38
38
 
39
39
  You'll need the following:
40
40
 
41
- * Python **3.8** or higher with PIP, Venv and Tkinter
41
+ * Python **3.8.1** or higher with PIP, Venv and Tkinter
42
42
 
43
43
  ### Nix (Recommended)
44
44
 
@@ -69,7 +69,7 @@ VT = TypeVar("VT")
69
69
 
70
70
  class GenericDict(Mapping[KT, VT]):
71
71
  """
72
- A dictionary with generic keys and values that is compatible with Python 3.8.
72
+ A dictionary with generic keys and values that is compatible with Python 3.8.1.
73
73
 
74
74
  :param copying: A base Mapping object to copy values from.
75
75
  :param overrides: Another mapping object to override the value from `copying`
@@ -12,4 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  source $::env(SCRIPTS_DIR)/openroad/common/io.tcl
15
- read_current_odb
15
+
16
+ read_current_odb
17
+ read_spefs
@@ -1,3 +1,7 @@
1
+ # Copyright 2025 LibreLane Contributors
2
+ #
3
+ # Adapted from OpenLane
4
+ #
1
5
  # Copyright 2023 Efabless Corporation
2
6
  #
3
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,7 +19,6 @@ import io
15
19
  import os
16
20
  import re
17
21
  import json
18
- import tempfile
19
22
  import functools
20
23
  import subprocess
21
24
  from enum import Enum
@@ -2414,30 +2417,47 @@ class DEFtoODB(OpenROADStep):
2414
2417
 
2415
2418
 
2416
2419
  @Step.factory.register()
2417
- class OpenGUI(Step):
2420
+ class OpenGUI(OpenSTAStep):
2418
2421
  """
2419
2422
  Opens the ODB view in the OpenROAD GUI. Useful to inspect some parameters,
2420
- such as routing density and whatnot.
2423
+ such as routing density, timing paths, clock tree and whatnot.
2424
+ The LIBs are loaded by default and the SPEFs if available.
2421
2425
  """
2422
2426
 
2423
2427
  id = "OpenROAD.OpenGUI"
2424
2428
  name = "Open In GUI"
2425
2429
 
2426
- inputs = [DesignFormat.ODB]
2430
+ inputs = [
2431
+ DesignFormat.ODB,
2432
+ DesignFormat.SPEF.mkOptional(),
2433
+ ]
2427
2434
  outputs = []
2428
2435
 
2436
+ def get_script_path(self) -> str:
2437
+ return os.path.join(get_script_dir(), "openroad", "gui.tcl")
2438
+
2439
+ def get_command(self) -> List[str]:
2440
+ return [
2441
+ "openroad",
2442
+ "-no_splash",
2443
+ "-gui",
2444
+ self.get_script_path(),
2445
+ ]
2446
+
2429
2447
  def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
2430
- with tempfile.NamedTemporaryFile("a+", suffix=".tcl") as f:
2431
- f.write(f"read_db \"{state_in['odb']}\"")
2432
- f.flush()
2433
-
2434
- subprocess.check_call(
2435
- [
2436
- "openroad",
2437
- "-no_splash",
2438
- "-gui",
2439
- f.name,
2440
- ]
2441
- )
2448
+ kwargs, env = self.extract_env(kwargs)
2449
+
2450
+ corner_name, file_list = self._get_corner_files(prioritize_nl=True)
2451
+ file_list.set_env(env)
2452
+ env["_CURRENT_CORNER_NAME"] = corner_name
2453
+
2454
+ env = self.prepare_env(env, state_in)
2455
+
2456
+ command = self.get_command()
2457
+ self.run_subprocess(
2458
+ command,
2459
+ env=env,
2460
+ **kwargs,
2461
+ )
2442
2462
 
2443
2463
  return {}, {}
@@ -1,8 +1,11 @@
1
1
  [tool.poetry]
2
2
  name = "librelane"
3
- version = "2.4.0.dev5"
3
+ version = "2.4.0.dev7"
4
4
  description = "An infrastructure for implementing chip design flows"
5
- authors = ["Mohamed Gaber <me@donn.website>", "Efabless Corporation"]
5
+ # Technically, maintainer. We cannot use the maintainers field until
6
+ # poetry-core>=2.0.0 which requires Python version 3.9+. This field does
7
+ # not imply primary authorship for the purposes of copyright.
8
+ authors = ["Mohamed Gaber <me@donn.website>"]
6
9
  readme = "Readme.md"
7
10
  license = "Apache-2.0"
8
11
  repository = "https://github.com/librelane/librelane"
@@ -10,7 +13,7 @@ documentation = "https://librelane.readthedocs.io"
10
13
 
11
14
 
12
15
  [tool.poetry.dependencies]
13
- python = ">=3.8,<4"
16
+ python = ">=3.8.1,<4"
14
17
  click = ">=8,<8.2"
15
18
  cloup = ">=3.0.5,<4"
16
19
  pyyaml = ">=5,<7"
@@ -31,7 +34,7 @@ semver = "^3.0.2"
31
34
  wheel = "*"
32
35
  black = ">=24.4.0,<25"
33
36
 
34
- flake8 = { version = ">=7", markers = "python_version >= \"3.8.1\"" }
37
+ flake8 = ">=7"
35
38
  flake8-pytest-style = "*"
36
39
 
37
40
  mypy = ">=1.9.0,<1.10.0"