The-OpenROAD-Project / OpenLane

OpenLane is an automated RTL to GDSII flow based on several components including OpenROAD, Yosys, Magic, Netgen and custom methodology scripts for design exploration and optimization.
https://openlane.readthedocs.io/
Apache License 2.0
1.31k stars 369 forks source link

Report for PR #1775 #1777

Closed dlmiles closed 1 year ago

dlmiles commented 1 year ago

Description

First tag it started breaking: 2023.03.28 Last tag it worked as expected: 2023.03.24

Command line given: /bin/bash -c "./flow.tcl -overwrite -design /work/src -run_path /work/runs -tag wokwi

$ find -name "*.tcl" ./runs/wokwi/config.tcl ./runs/wokwi/config_in.tcl ./runs/wokwi/reports/signoff/drc.tcl ./src/config.tcl ./src/user_config.tcl

It started to try and lookup the path: /work/src/runs/wokwi/config.tcl

But that does not exist.

$ grep config.tcl ./src/user_config.tcl $ grep config.tcl ./src/config.tcl source $::env(DESIGN_DIR)/user_config.tcl $ grep config.tcl runs/wokwi/config.tcl set ::env(DESIGN_CONFIG) {/work/src/config.tcl} set ::env(GLB_CFG_FILE) {/work/runs/wokwi/config.tcl} set ::env(DESIGN_CONFIG) {/work/src/config.tcl} set ::env(GLB_CFG_FILE) {/work/runs/wokwi/config.tcl}

./runs/wokwi/config.tcl:154:set ::env(LOGS_DIR) {/work/runs/wokwi/logs} ./runs/wokwi/config.tcl:235:set ::env(REPORTS_DIR) {/work/runs/wokwi/reports} ./runs/wokwi/config.tcl:236:set ::env(RESULTS_DIR) {/work/runs/wokwi/results} ./runs/wokwi/config.tcl:247:set ::env(RUN_DIR) {/work/runs/wokwi} ./runs/wokwi/config.tcl:302:set ::env(TMP_DIR) {/work/runs/wokwi/tmp} ./runs/wokwi/config.tcl:385:set ::env(CURRENT_DIR) {/work/runs/wokwi/tmp/routing} ./runs/wokwi/config.tcl:403:set ::env(DESIGN_DIR) {/work/src} ./runs/wokwi/config.tcl:537:set ::env(LOGS_DIR) {/work/runs/wokwi/logs} ./runs/wokwi/config.tcl:641:set ::env(REPORTS_DIR) {/work/runs/wokwi/reports} ./runs/wokwi/config.tcl:642:set ::env(RESULTS_DIR) {/work/runs/wokwi/results} ./runs/wokwi/config.tcl:655:set ::env(RUN_DIR) {/work/runs/wokwi} ./runs/wokwi/config.tcl:670:set ::env(SCRIPTS_DIR) {/openlane/scripts} ./runs/wokwi/config.tcl:717:set ::env(TMP_DIR) {/work/runs/wokwi/tmp}

This line here has not been changed recently, but appears to be looking up the DESIGN_CONFIG path ?

    self.design_path = design_path
    self.design_name = design_name
    self.tag = tag
    self.current_directory = os.path.dirname(__file__)
    if run_path is None:
        run_path = get_run_path(design=design_path, tag=tag)
    self.run_path = run_path
    self.configuration = params.values()
    self.configuration_full = ConfigHandler.get_config_for_run(
            None, design_path, tag, full=True
    )

https://github.com/The-OpenROAD-Project/OpenLane/blob/master/scripts/report/report.py#L119

This section here is where the file open fails:

/// The parameter full=False was added during the tag that the report generation stopped working
def get_config_for_run(Self, run_path, design, tag, full=False) -> Dict[str, str]:
    if run_path is None:
        run_path = get_run_path(design=design, tag=tag)
    config_path = os.path.join(os.getcwd(), run_path, "config.tcl")
    config = read_tcl_env(config_path)

https://github.com/The-OpenROAD-Project/OpenLane/blob/master/scripts/config/config.py#L93

Expected Behavior

For the error in log not to occur and metrics.csv to be generated.

Environment report

Docker image:

OPENLANE_TAG: 2023.03.28
OPENLANE_IMAGE_NAME: efabless/openlane:2023.03.28

Reproduction material

Simply make your -design and -run_path 2 different directories and provide them as options to specify to the flow.tcl.

Relevant log output

[STEP 34]
[INFO]: Running OpenROAD Antenna Rule Checker (log: ../work/runs/wokwi/logs/signoff/34-antenna.log)...
[STEP 35]
[INFO]: Running Circuit Validity Checker ERC (log: ../work/runs/wokwi/logs/signoff/35-erc_screen.log)...
[INFO]: Saving current set of views in '../work/runs/wokwi/results/final'...
[INFO]: Saving runtime environment...
[INFO]: Generating final set of reports...
Error: : Failed to create manufacturability and metric reports:
Error: : Traceback (most recent call last):
  File "/openlane/scripts/generate_reports.py", line 184, in <module>
    cli()
  File "/usr/local/lib/python3.6/site-packages/click/core.py", line 1128, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/click/core.py", line 1053, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.6/site-packages/click/core.py", line 1395, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.6/site-packages/click/core.py", line 754, in invoke
    return __callback(*args, **kwargs)
  File "/openlane/scripts/generate_reports.py", line 51, in cli
    report = Report(design, tag, design_name, params, run_path).get_report()
  File "/openlane/scripts/report/report.py", line 141, in __init__
    None, design_path, tag, full=True
  File "/openlane/scripts/config/config.py", line 94, in get_config_for_run
    config = read_tcl_env(config_path)
  File "/openlane/scripts/config/tcl.py", line 339, in read_tcl_env
    string_data = open(config_path).read()
FileNotFoundError: [Errno 2] No such file or directory: '/work/src/runs/wokwi/config.tcl'
[SUCCESS]: Flow complete.
[INFO]: Note that the following warnings have been generated:
kareefardi commented 1 year ago

Solved by #1775