Origen-SDK / origen

The Origen Semiconductor Developer's Kit core platform
http://origen-sdk.org
MIT License
20 stars 24 forks source link

Model initialization bug #312

Open pderouen opened 5 years ago

pderouen commented 5 years ago

@coreyeng I'm getting errors when this code block executes (running "origen test" command within the origen_jtag gem, with the Gemfile updated to point to a local version of origen)

https://github.com/Origen-SDK/origen/blob/38a216defb94ee84c8a6f514bab0cd56d59776fd/lib/origen/model_initializer.rb#L25

When I comment out that block the tests run and pass. Here is the error:

origen/users/pderouen/origen_jtag> origen test

COMPLETE CALL STACK
-------------------
cannot load such file -- origen_jtag/dut
/home/origen/users/pderouen/origen/lib/origen/model_initializer.rb:29:in `require'
/home/origen/users/pderouen/origen/lib/origen/model_initializer.rb:29:in `const_get'
/home/origen/users/pderouen/origen/lib/origen/model_initializer.rb:29:in `block (2 levels) in new'
/home/origen/users/pderouen/origen/lib/origen/model_initializer.rb:27:in `each'
/home/origen/users/pderouen/origen/lib/origen/model_initializer.rb:27:in `block in new'
/home/origen/users/pderouen/origen/lib/origen/model_initializer.rb:25:in `each'
/home/origen/users/pderouen/origen/lib/origen/model_initializer.rb:25:in `new'
/home/origen/users/pderouen/origen_jtag/target/RH1.rb:1:in `<top (required)>'
/home/origen/users/pderouen/origen/lib/origen/application.rb:791:in `load'
/home/origen/users/pderouen/origen/lib/origen/application.rb:791:in `block in load_target!'
/home/origen/users/pderouen/origen/lib/origen/application.rb:895:in `load_event'
/home/origen/users/pderouen/origen/lib/origen/application.rb:781:in `load_target!'
/home/origen/users/pderouen/origen/lib/origen/commands/generate.rb:58:in `block in <top (required)>'
/home/origen/users/pderouen/origen/lib/origen/commands/generate.rb:41:in `_with_doc_tester'
/home/origen/users/pderouen/origen/lib/origen/commands/generate.rb:54:in `<top (required)>'
/home/origen/users/pderouen/origen_jtag/config/commands.rb:31:in `load'
/home/origen/users/pderouen/origen_jtag/config/commands.rb:31:in `<top (required)>'
/home/origen/users/pderouen/origen/lib/origen/commands.rb:185:in `require'
/home/origen/users/pderouen/origen/lib/origen/commands.rb:185:in `<top (required)>'
/home/origen/users/pderouen/origen/bin/origen:189:in `require'
/home/origen/users/pderouen/origen/bin/origen:189:in `<top (required)>'
./lbin/origen:29:in `load'
./lbin/origen:29:in `<main>'

APPLICATION CALL STACK
----------------------
cannot load such file -- origen_jtag/dut
/home/origen/users/pderouen/origen_jtag/target/RH1.rb:1:in `<top (required)>'
/home/origen/users/pderouen/origen_jtag/config/commands.rb:31:in `load'
/home/origen/users/pderouen/origen_jtag/config/commands.rb:31:in `<top (required)>'
coreyeng commented 5 years ago

Hi @pderouen. I think what's happening is the model initializer is going through all the constants to see if it needs to initialize anything and it eventually hits a OrigenJTAG::DUT constant, which is defined in development.rb. When the const_get gets run, Ruby tries to resolve the constant but origen_jtag/dut doesn't exists. I think either because its happening dynamically or because its an autoload, the error is very unhelpful.

I'll make some time and see if I can build in a better error handler here. At the very least knowing what constant it failed at would've been nice.

coreyeng commented 5 years ago

I think just get rid of that autoload statement and it will be fine. Or autoload the existing DUTs.