librelane 3.0.0.dev33__tar.gz → 3.0.0.dev35__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.
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/PKG-INFO +1 -1
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/flows/cli.py +79 -5
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/extract_spice.tcl +4 -2
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/magic.py +9 -6
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/pyproject.toml +1 -1
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/Readme.md +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/__init__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/__main__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/__version__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/__init__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/cli.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/drc.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/generic_dict.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/metrics/__init__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/metrics/__main__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/metrics/library.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/metrics/metric.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/metrics/util.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/misc.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/ring_buffer.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/tcl.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/toolbox.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/tpe.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/common/types.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/config/__init__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/config/__main__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/config/config.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/config/flow.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/config/pdk_compat.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/config/preprocessor.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/config/removals.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/config/variable.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/container.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/env_info.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm/config.yaml +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm/pin_order.cfg +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm/src/impl.sdc +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm/src/signoff.sdc +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm/src/spm.v +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm/verify/spm_tb.v +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm-user_project_wrapper/SPM_example.v +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm-user_project_wrapper/config-tut.json +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm-user_project_wrapper/config.json +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm-user_project_wrapper/defines.v +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm-user_project_wrapper/template.def +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/examples/spm-user_project_wrapper/user_project_wrapper.v +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/flows/__init__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/flows/builtins.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/flows/classic.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/flows/flow.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/flows/misc.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/flows/optimizing.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/flows/sequential.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/flows/synth_explore.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/help/__main__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/logging/__init__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/logging/logger.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/pdk_hashes.yaml +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/plugins.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/py.typed +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/base.sdc +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/klayout/Readme.md +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/klayout/open_design.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/klayout/render.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/klayout/stream_out.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/klayout/xml_drc_report_to_json.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/klayout/xor.drc +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/Readme.md +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/common/read.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/def/antenna_check.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/def/mag.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/def/mag_gds.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/drc.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/gds/drc_batch.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/gds/erase_box.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/gds/extras_mag.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/get_bbox.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/lef/extras_maglef.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/lef/maglef.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/lef.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/open.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/wrapper.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/netgen/setup.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/apply_def_template.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/cell_frequency.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/check_antenna_properties.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/contextualize.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/defutil.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/diodes.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/disconnected_pins.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/eco_buffer.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/eco_diode.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/filter_unannotated.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/io_place.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/ioplace_parser/__init__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/ioplace_parser/parse.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/label_macro_pins.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/lefutil.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/placers.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/power_utils.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/random_place.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/reader.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/remove_buffers.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/snap_to_grid.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/wire_lengths.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/antenna_check.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/antenna_repair.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/basic_mp.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/buffer_list.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/dpl.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/dpl_cell_pad.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/grt.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/io.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/pdn_cfg.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/resizer.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/set_global_connections.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/set_layer_adjustments.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/set_power_nets.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/set_rc.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/set_routing_layers.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/cts.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/cut_rows.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/dpl.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/drt.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/dump_rc.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/fill.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/floorplan.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/gpl.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/grt.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/gui.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/insert_buffer.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/ioplacer.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/irdrop.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/pdn.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/rcx.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/repair_design.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/repair_design_postgrt.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/rsz_timing_postcts.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/rsz_timing_postgrt.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/sta/check_macro_instances.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/sta/corner.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/tapcell.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/ungpl.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/write_cdl.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/write_views.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/pyosys/construct_abc_script.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/pyosys/json_header.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/pyosys/synthesize.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/pyosys/ys_common.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/tclsh/hello.tcl +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/state/__init__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/state/__main__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/state/design_format.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/state/state.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/__init__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/__main__.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/checker.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/common_variables.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/cvc_rv.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/klayout.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/misc.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/netgen.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/odb.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/openroad.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/openroad_alerts.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/pyosys.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/step.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/tclstep.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/verilator.py +0 -0
- {librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/steps/yosys.py +0 -0
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# Copyright 2025 LibreLane Contributors
|
|
2
|
+
#
|
|
3
|
+
# Adapted from OpenLane 2
|
|
4
|
+
#
|
|
1
5
|
# Copyright 2023 Efabless Corporation
|
|
2
6
|
#
|
|
3
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -12,6 +16,7 @@
|
|
|
12
16
|
# See the License for the specific language governing permissions and
|
|
13
17
|
# limitations under the License.
|
|
14
18
|
import os
|
|
19
|
+
import sys
|
|
15
20
|
from functools import partial, wraps
|
|
16
21
|
from concurrent.futures import ThreadPoolExecutor
|
|
17
22
|
from typing import Optional, Union
|
|
@@ -21,12 +26,15 @@ from click import (
|
|
|
21
26
|
Parameter,
|
|
22
27
|
echo,
|
|
23
28
|
)
|
|
29
|
+
from click.formatting import join_options
|
|
24
30
|
from cloup import (
|
|
25
31
|
option,
|
|
26
32
|
argument,
|
|
27
33
|
option_group,
|
|
28
34
|
Choice,
|
|
29
|
-
|
|
35
|
+
Argument,
|
|
36
|
+
Option as CloupOption,
|
|
37
|
+
Path as CloupPath,
|
|
30
38
|
)
|
|
31
39
|
from cloup.constraints import (
|
|
32
40
|
mutually_exclusive,
|
|
@@ -39,6 +47,70 @@ from ..logging import set_log_level, verbose, err, options, LogLevels
|
|
|
39
47
|
from ..state import State, InvalidState
|
|
40
48
|
|
|
41
49
|
|
|
50
|
+
class Option(CloupOption):
|
|
51
|
+
"""
|
|
52
|
+
A slight modification of cloup.Option that consumes the environment
|
|
53
|
+
variable(s) in envvar upon use.
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
def resolve_envvar_value(self, ctx: Context) -> Optional[str]:
|
|
57
|
+
if self.envvar is None:
|
|
58
|
+
return None
|
|
59
|
+
evs = self.envvar
|
|
60
|
+
if isinstance(evs, str):
|
|
61
|
+
evs = [evs]
|
|
62
|
+
for envvar in self.envvar:
|
|
63
|
+
rv = os.environ.pop(envvar, None)
|
|
64
|
+
if rv:
|
|
65
|
+
return rv
|
|
66
|
+
return None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class Path(CloupPath):
|
|
70
|
+
"""
|
|
71
|
+
A modification of cloup.Path that rejects paths starting with a tilde (~)
|
|
72
|
+
as too ambiguous. This is because of user confusion.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
def convert(
|
|
76
|
+
self,
|
|
77
|
+
value: Union[str, os.PathLike],
|
|
78
|
+
param: Optional[Parameter],
|
|
79
|
+
ctx: Optional[Context],
|
|
80
|
+
):
|
|
81
|
+
value = str(value)
|
|
82
|
+
assert param is not None
|
|
83
|
+
assert ctx is not None
|
|
84
|
+
|
|
85
|
+
is_cmd = False
|
|
86
|
+
if sys.platform == "win32":
|
|
87
|
+
import psutil
|
|
88
|
+
|
|
89
|
+
is_cmd = psutil.Process(os.getppid()).name().lower().endswith("cmd.exe")
|
|
90
|
+
if not is_cmd and value.startswith("~"):
|
|
91
|
+
usage, _ = join_options(param.opts)
|
|
92
|
+
if isinstance(param, Argument):
|
|
93
|
+
usage = ""
|
|
94
|
+
buffer = f"'{value}' starts with a tilde, which is ambiguous.\n"
|
|
95
|
+
buffer += " * If you meant your home directory, make sure your POSIX shell is able to expand the tilde:\n"
|
|
96
|
+
buffer += f" * GOOD: {ctx.command_path} {usage} {value} …\n"
|
|
97
|
+
if usage != "":
|
|
98
|
+
buffer += f" * BAD: {ctx.command_path} {usage}={value} …\n"
|
|
99
|
+
buffer += f' * BAD: {ctx.command_path} {usage} "{value}" …\n'
|
|
100
|
+
env_vars = []
|
|
101
|
+
if param.envvar is not None:
|
|
102
|
+
if isinstance(param.envvar, str):
|
|
103
|
+
env_vars = [param.envvar]
|
|
104
|
+
else:
|
|
105
|
+
env_vars = list(param.envvar)
|
|
106
|
+
for var in env_vars:
|
|
107
|
+
buffer += f" * GOOD: {var}={value} {ctx.command_path} …\n"
|
|
108
|
+
buffer += f' * BAD: {var}="{value}" {ctx.command_path} …\n'
|
|
109
|
+
buffer += ' * If you want a relative file or directory that starts with a literal "~", use an absolute path.\n'
|
|
110
|
+
self.fail(buffer, param, ctx)
|
|
111
|
+
return super().convert(value, param, ctx)
|
|
112
|
+
|
|
113
|
+
|
|
42
114
|
def set_log_level_cb(
|
|
43
115
|
ctx: Context,
|
|
44
116
|
param: Parameter,
|
|
@@ -181,7 +253,7 @@ def cloup_flow_opts(
|
|
|
181
253
|
Ciel is used by default for this CLI or not.
|
|
182
254
|
:returns: The wrapper
|
|
183
255
|
"""
|
|
184
|
-
o = partial(option, show_default=True)
|
|
256
|
+
o = partial(option, cls=CloupOption, show_default=True)
|
|
185
257
|
|
|
186
258
|
def decorate(f):
|
|
187
259
|
if config_options:
|
|
@@ -355,21 +427,23 @@ def cloup_flow_opts(
|
|
|
355
427
|
dir_okay=True,
|
|
356
428
|
),
|
|
357
429
|
is_eager=True,
|
|
358
|
-
|
|
430
|
+
envvar=["PDK_ROOT"],
|
|
359
431
|
help="Override Ciel PDK root folder. Required if Ciel is not installed, but a default value can also be set via the environment variable PDK_ROOT.",
|
|
360
432
|
),
|
|
361
433
|
o(
|
|
362
434
|
"-p",
|
|
363
435
|
"--pdk",
|
|
364
436
|
type=str,
|
|
365
|
-
|
|
437
|
+
envvar=["PDK"],
|
|
438
|
+
default="sky130A",
|
|
366
439
|
help="The process design kit to use.",
|
|
367
440
|
),
|
|
368
441
|
o(
|
|
369
442
|
"-s",
|
|
370
443
|
"--scl",
|
|
371
444
|
type=str,
|
|
372
|
-
|
|
445
|
+
envvar=["STD_CELL_LIBRARY"],
|
|
446
|
+
# no default, default is obtained dynamically from PDK
|
|
373
447
|
help="The standard cell library to use. If None, the PDK's default standard cell library is used.",
|
|
374
448
|
),
|
|
375
449
|
)(f)
|
|
@@ -79,9 +79,11 @@ extract no capacitance
|
|
|
79
79
|
extract no coupling
|
|
80
80
|
extract no resistance
|
|
81
81
|
extract no adjust
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
|
|
83
|
+
if { $::env(MAGIC_EXT_UNIQUE) != "none" } {
|
|
84
|
+
extract unique $::env(MAGIC_EXT_UNIQUE)
|
|
84
85
|
}
|
|
86
|
+
|
|
85
87
|
# extract warn all
|
|
86
88
|
extract
|
|
87
89
|
|
|
@@ -458,15 +458,18 @@ class SpiceExtraction(MagicStep):
|
|
|
458
458
|
Variable(
|
|
459
459
|
"MAGIC_EXT_ABSTRACT_CELLS",
|
|
460
460
|
Optional[List[str]],
|
|
461
|
-
"A list of regular
|
|
461
|
+
"A list of regular expressions which are matched against the cells of a "
|
|
462
462
|
+ "the design. Matches are abstracted (black-boxed) during SPICE extraction.",
|
|
463
463
|
),
|
|
464
464
|
Variable(
|
|
465
|
-
"
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
default=
|
|
469
|
-
deprecated_names=[
|
|
465
|
+
"MAGIC_EXT_UNIQUE",
|
|
466
|
+
Literal["all", "notopports", "noports", "none"],
|
|
467
|
+
'Runs `extract unique` with the specified option. The default is "all", and "none" disables `extract unique`, allowing connections between separate nets by label in LVS.',
|
|
468
|
+
default="all",
|
|
469
|
+
deprecated_names=[
|
|
470
|
+
("MAGIC_NO_EXT_UNIQUE", lambda o: "none" if o else "all"),
|
|
471
|
+
("LVS_CONNECT_BY_LABEL", lambda o: "none" if o else "all"),
|
|
472
|
+
],
|
|
470
473
|
),
|
|
471
474
|
Variable(
|
|
472
475
|
"MAGIC_EXT_SHORT_RESISTOR",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "librelane"
|
|
3
|
-
version = "3.0.0.
|
|
3
|
+
version = "3.0.0.dev35"
|
|
4
4
|
description = "An infrastructure for implementing chip design flows"
|
|
5
5
|
# Technically, maintainer. We cannot use the maintainers field until
|
|
6
6
|
# poetry-core>=2.0.0 which requires Python version 3.9+. This field does
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/klayout/xml_drc_report_to_json.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/def/antenna_check.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/gds/mag_with_pointers.tcl
RENAMED
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/magic/lef/extras_maglef.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/apply_def_template.py
RENAMED
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/check_antenna_properties.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/disconnected_pins.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/filter_unannotated.py
RENAMED
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/ioplace_parser/__init__.py
RENAMED
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/odbpy/ioplace_parser/parse.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/antenna_check.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/antenna_repair.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/dpl_cell_pad.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/pdn_cfg.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/resizer.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/set_power_nets.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/common/set_rc.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/insert_buffer.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/repair_design.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/repair_design_postgrt.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/rsz_timing_postcts.tcl
RENAMED
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/openroad/rsz_timing_postgrt.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-3.0.0.dev33 → librelane-3.0.0.dev35}/librelane/scripts/pyosys/construct_abc_script.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|