From fb0d06602e8bee50f2387eb6fd60b8560998abde Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 12 Jan 2020 23:41:03 +0100 Subject: [PATCH 1/2] Attempt to fix the issue In additon, some actions like display of the netlist browser are suppressed until "final" is true for "_finish". TODO: Layout#get_info should never segfault. --- src/drc/drc/built-in-macros/_drc_engine.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/drc/drc/built-in-macros/_drc_engine.rb b/src/drc/drc/built-in-macros/_drc_engine.rb index 7b89a65eb..33dfbc243 100644 --- a/src/drc/drc/built-in-macros/_drc_engine.rb +++ b/src/drc/drc/built-in-macros/_drc_engine.rb @@ -1507,7 +1507,7 @@ CODE view = RBA::LayoutView::current # save the report database if requested - if @output_rdb_file + if @output_rdb_file && final rdb_file = _make_path(@output_rdb_file) info("Writing report database: #{rdb_file} ..") @output_rdb.save(rdb_file) @@ -1570,7 +1570,7 @@ CODE end # save the netlist if required - if @target_netlist_file && @netter && @netter._l2n_data + if final && @target_netlist_file && @netter && @netter._l2n_data writer = @target_netlist_format || RBA::NetlistSpiceWriter::new @@ -1581,7 +1581,7 @@ CODE end # save the netlist database if requested - if @output_l2ndb_file && @netter && @netter._l2n_data + if final && @output_l2ndb_file && @netter && @netter._l2n_data l2ndb_file = _make_path(@output_l2ndb_file) info("Writing netlist database: #{l2ndb_file} ..") @@ -1589,11 +1589,11 @@ CODE end - # give derived classes to perform actions + # give derived classes a change to perform their actions _before_cleanup # show the data in the browser - if view && @show_l2ndb && @netter && @netter._l2n_data + if final && view && @show_l2ndb && @netter && @netter._l2n_data # NOTE: to prevent the netter destroying the database, we need to take it l2ndb = _take_data @@ -1608,6 +1608,7 @@ CODE ensure + @output_layers = [] @output_layout = nil @output_layout_file = nil @output_cell = nil From eeadfcea7b83d305fce7c0cf42f69643cb8fb9fd Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 23 Jan 2020 17:55:59 +0100 Subject: [PATCH 2/2] Fixed #476 --- src/drc/unit_tests/drcSimpleTests.cc | 55 +++++++++++++++++++++++ testdata/drc/drcSimpleTests_14.drc | 60 +++++++++++++++++++++++++ testdata/drc/drcSimpleTests_14.gds | Bin 0 -> 634 bytes testdata/drc/drcSimpleTests_au14.gds | Bin 0 -> 426 bytes testdata/drc/drcSimpleTests_au14_2.gds | Bin 0 -> 346 bytes 5 files changed, 115 insertions(+) create mode 100644 testdata/drc/drcSimpleTests_14.drc create mode 100644 testdata/drc/drcSimpleTests_14.gds create mode 100644 testdata/drc/drcSimpleTests_au14.gds create mode 100644 testdata/drc/drcSimpleTests_au14_2.gds diff --git a/src/drc/unit_tests/drcSimpleTests.cc b/src/drc/unit_tests/drcSimpleTests.cc index 07e4362ad..b0e38fe9f 100644 --- a/src/drc/unit_tests/drcSimpleTests.cc +++ b/src/drc/unit_tests/drcSimpleTests.cc @@ -619,3 +619,58 @@ TEST(13b_KissingCornersDeep) CHECKPOINT (); db::compare_layouts (_this, layout, au, db::NoNormalization); } + +TEST(14_SwitchingTargets) +{ + std::string rs = tl::testsrc (); + rs += "/testdata/drc/drcSimpleTests_14.drc"; + + std::string input = tl::testsrc (); + input += "/testdata/drc/drcSimpleTests_14.gds"; + + std::string au = tl::testsrc (); + au += "/testdata/drc/drcSimpleTests_au14.gds"; + + std::string au2 = tl::testsrc (); + au2 += "/testdata/drc/drcSimpleTests_au14_2.gds"; + + std::string output = this->tmp_file ("tmp.gds"); + std::string output2 = this->tmp_file ("tmp2.gds"); + + { + // Set some variables + lym::Macro config; + config.set_text (tl::sprintf ( + "$drc_test_source = '%s'\n" + "$drc_test_target = '%s'\n" + "$drc_test_target2 = '%s'\n" + , input, output, output2) + ); + config.set_interpreter (lym::Macro::Ruby); + EXPECT_EQ (config.run (), 0); + } + + lym::Macro drc; + drc.load_from (rs); + EXPECT_EQ (drc.run (), 0); + + db::Layout layout; + + { + tl::InputStream stream (output); + db::Reader reader (stream); + reader.read (layout); + } + + db::compare_layouts (_this, layout, au, db::NoNormalization); + + db::Layout layout2; + + { + tl::InputStream stream (output2); + db::Reader reader (stream); + reader.read (layout2); + } + + db::compare_layouts (_this, layout2, au2, db::NoNormalization); +} diff --git a/testdata/drc/drcSimpleTests_14.drc b/testdata/drc/drcSimpleTests_14.drc new file mode 100644 index 000000000..6a00d2003 --- /dev/null +++ b/testdata/drc/drcSimpleTests_14.drc @@ -0,0 +1,60 @@ + +source($drc_test_source, "TOP") + +ly = RBA::Layout::new +ly.create_cell("TOP") + +ly2 = RBA::Layout::new +ly2.create_cell("TOP") + +lr1 = input(10,0) +lr2 = input(61,0) +cut = lr1&lr2 +target(ly) +new = (lr1-cut) +new.output(10,0) + +lr1 = input(11,0) +lr2 = input(61,0) +cut = lr1&lr2 +new = lr1-cut +target(ly2) +new.output(11,0) + +lr1 = input(12,0) +lr2 = input(61,0) +cut = lr1&lr2 +new = lr1-cut +target(ly) +new.output(12,0) + +# 2. Boolean Operation (Difference CutOutLayer vs GreylinesLayer) +lr1 = input(120,0) +lr2 = layout($drc_test_source, "TOP").input(15,0) +target(ly2) +diff = lr2-lr1 +diff.output(150,0) + +# 3. Boolean Operation (Union Layer15(@1) und Layer15(@2) +lr1 = input(150,0) +lr2 = layout($drc_test_source2, "TOP").input(15,0) +target(ly) +align = lr1.or(lr2) +align.output(15,0) + +# 4. Size shapes with 1µm as parameter +lr1 = input(120,0) +lr2 = input(121,0) +lr3 = input(122,0) +lr4 = input(123,0) + +target(ly) +lr1.size(1.um).output(120,0) +lr2.size(1.um).output(121,0) +target(ly2) +lr3.size(1.um).output(122,0) +target(ly2) +lr4.size(1.um).output(123,0) + +ly.write($drc_test_target) +ly2.write($drc_test_target2) diff --git a/testdata/drc/drcSimpleTests_14.gds b/testdata/drc/drcSimpleTests_14.gds new file mode 100644 index 0000000000000000000000000000000000000000..40d588e8d522bb7aa8e0b57b02425ab2a25e8bf8 GIT binary patch literal 634 zcmaKpu}T9$5Qe|pC3i6~dIuo^37THPMi3zi$`y)&DN=})k6GJmD?QkV}SiHX6@6agx<9S|Zw+;Cscol~d-jo9@1g?l&>4HKPd{dNC^O)qr%wNrX zaGN5dlbBGvfYMN@c|zMSXTHeKp~zP|CYbkA*;HyCbFBZQ?SJ=8@2*J9iG$QvYVLN& z{G-f=uqX1-iwWfp%$gab)I6bm|7qI~25IkLVBWn1GiOT86Wac{?bjla&sV5L=I(dU qd{Szj(Dsl2{8r$m^MAQd`Q9?UMNG$RN%j$Y9K1iOgo;U}E#}bYfr-VP>^+>@@d2w)}&o%MSeo zv!g;7WLWX&V`B^P4`5(m;b353<7HytVqoKAVqjp<5n%rR|Nk5qW?*0yVPIfZfYC5< z5Y50Mh|tdi)$aq+|91sYPYZT@(`M12E=?A4bumdM>d}y zVLk(cn9KkFzurJ-kX-_2Aa)6yVPN1e0f{4M-Zcyi3KxKG0MiJ4K>f((S0MZkQv3h^ c7od8O9)24J2E{)x8YT{=!TQ;OVZg!w0L)`$ng9R* literal 0 HcmV?d00001 diff --git a/testdata/drc/drcSimpleTests_au14_2.gds b/testdata/drc/drcSimpleTests_au14_2.gds new file mode 100644 index 0000000000000000000000000000000000000000..556b8258a0ee1338cdf3ac5628cc5115360a3b85 GIT binary patch literal 346 zcmZQzV_;&6V31*CVt>NG$RN%j$Y9K1iOgo;U}E#}bYfr-VP>^+>@@d2w)}&o%MSeo zv!g;7WLWX&V`B^P4`5(m;b353<7HytW?c1=l_2g4O9301jIe;KsT{4 F008c{XFdP` literal 0 HcmV?d00001