origen 0.0.1 → 0.0.2

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.
Files changed (336) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ctags +0 -0
  3. data/bin/origen +165 -1
  4. data/bin/rgen +2 -0
  5. data/config/application.rb +141 -0
  6. data/config/commands.rb +72 -0
  7. data/config/development.rb +7 -0
  8. data/config/environment.rb +0 -0
  9. data/config/rgen.policy +7 -0
  10. data/config/rubocop/easy.yml +620 -0
  11. data/config/rubocop/easy_disabled.yml +271 -0
  12. data/config/rubocop/easy_enabled.yml +731 -0
  13. data/config/rubocop/strict.yml +620 -0
  14. data/config/rubocop/strict_disabled.yml +247 -0
  15. data/config/rubocop/strict_enabled.yml +755 -0
  16. data/config/users.rb +20 -0
  17. data/config/version.rb +1 -1
  18. data/helpers/url.rb +68 -0
  19. data/lib/c99/doc_interface.rb +56 -0
  20. data/lib/c99/j750_interface.rb +85 -0
  21. data/lib/c99/nvm.rb +89 -0
  22. data/lib/c99/target/mock2.rb +1 -0
  23. data/lib/c99/target/subdir/mock3.rb +1 -0
  24. data/lib/option_parser/optparse.rb +12 -0
  25. data/lib/origen/acronyms.rb +60 -0
  26. data/lib/origen/application/command_dispatcher.rb +12 -0
  27. data/lib/origen/application/configuration.rb +206 -0
  28. data/lib/origen/application/configuration_manager.rb +78 -0
  29. data/lib/origen/application/deployer.rb +367 -0
  30. data/lib/origen/application/environment.rb +186 -0
  31. data/lib/origen/application/lsf.rb +145 -0
  32. data/lib/origen/application/lsf_manager.rb +657 -0
  33. data/lib/origen/application/plugins_manager.rb +280 -0
  34. data/lib/origen/application/release.rb +359 -0
  35. data/lib/origen/application/runner.rb +246 -0
  36. data/lib/origen/application/statistics.rb +191 -0
  37. data/lib/origen/application/target.rb +374 -0
  38. data/lib/origen/application/version_tracker.rb +59 -0
  39. data/lib/origen/application/workspace_manager.rb +151 -0
  40. data/lib/origen/application.rb +746 -0
  41. data/lib/origen/bugs/bug.rb +36 -0
  42. data/lib/origen/bugs.rb +45 -0
  43. data/lib/origen/callbacks.rb +35 -0
  44. data/lib/origen/chip_mode.rb +118 -0
  45. data/lib/origen/chip_package.rb +461 -0
  46. data/lib/origen/client.rb +87 -0
  47. data/lib/origen/code_generators/actions.rb +258 -0
  48. data/lib/origen/code_generators/base.rb +57 -0
  49. data/lib/origen/code_generators/bundler.rb +17 -0
  50. data/lib/origen/code_generators/gem_setup.rb +49 -0
  51. data/lib/origen/code_generators/rake.rb +13 -0
  52. data/lib/origen/code_generators/rspec.rb +12 -0
  53. data/lib/origen/code_generators/semver.rb +39 -0
  54. data/lib/origen/code_generators/timever.rb +37 -0
  55. data/lib/origen/code_generators.rb +111 -0
  56. data/lib/origen/commands/add.rb +12 -0
  57. data/lib/origen/commands/compile.rb +62 -0
  58. data/lib/origen/commands/ctags.rb +9 -0
  59. data/lib/origen/commands/dispatch.rb +22 -0
  60. data/lib/origen/commands/environment.rb +11 -0
  61. data/lib/origen/commands/fetch.rb +63 -0
  62. data/lib/origen/commands/generate.rb +130 -0
  63. data/lib/origen/commands/interactive.rb +73 -0
  64. data/lib/origen/commands/lint.rb +82 -0
  65. data/lib/origen/commands/lsf.rb +93 -0
  66. data/lib/origen/commands/merge.rb +55 -0
  67. data/lib/origen/commands/modifications.rb +12 -0
  68. data/lib/origen/commands/new.rb +113 -0
  69. data/lib/origen/commands/plugin.rb +105 -0
  70. data/lib/origen/commands/program.rb +70 -0
  71. data/lib/origen/commands/rc.rb +442 -0
  72. data/lib/origen/commands/save.rb +56 -0
  73. data/lib/origen/commands/target.rb +27 -0
  74. data/lib/origen/commands/time.rb +127 -0
  75. data/lib/origen/commands/version.rb +17 -0
  76. data/lib/origen/commands/web.rb +221 -0
  77. data/lib/origen/commands.rb +272 -0
  78. data/lib/origen/commands_global.rb +76 -0
  79. data/lib/origen/controller.rb +94 -0
  80. data/lib/origen/core_ext/array.rb +23 -0
  81. data/lib/origen/core_ext/bignum.rb +36 -0
  82. data/lib/origen/core_ext/enumerable.rb +76 -0
  83. data/lib/origen/core_ext/fixnum.rb +46 -0
  84. data/lib/origen/core_ext/hash.rb +52 -0
  85. data/lib/origen/core_ext/module.rb +14 -0
  86. data/lib/origen/core_ext/numeric.rb +126 -0
  87. data/lib/origen/core_ext/object.rb +13 -0
  88. data/lib/origen/core_ext/range.rb +7 -0
  89. data/lib/origen/core_ext/string.rb +124 -0
  90. data/lib/origen/core_ext.rb +10 -0
  91. data/lib/origen/database/key_value_store.rb +111 -0
  92. data/lib/origen/database/key_value_stores.rb +108 -0
  93. data/lib/origen/database.rb +6 -0
  94. data/lib/origen/encodings.rb +102 -0
  95. data/lib/origen/features/feature.rb +22 -0
  96. data/lib/origen/features.rb +104 -0
  97. data/lib/origen/file_handler.rb +429 -0
  98. data/lib/origen/generator/comparator.rb +56 -0
  99. data/lib/origen/generator/compiler.rb +277 -0
  100. data/lib/origen/generator/flow.rb +49 -0
  101. data/lib/origen/generator/job.rb +131 -0
  102. data/lib/origen/generator/pattern.rb +356 -0
  103. data/lib/origen/generator/pattern_finder.rb +155 -0
  104. data/lib/origen/generator/pattern_iterator.rb +55 -0
  105. data/lib/origen/generator/renderer.rb +113 -0
  106. data/lib/origen/generator/resources.rb +40 -0
  107. data/lib/origen/generator/stage.rb +89 -0
  108. data/lib/origen/generator.rb +85 -0
  109. data/lib/origen/global_methods.rb +205 -0
  110. data/lib/origen/import_manager.rb +596 -0
  111. data/lib/origen/location/base.rb +116 -0
  112. data/lib/origen/location/map.rb +83 -0
  113. data/lib/origen/location.rb +6 -0
  114. data/lib/origen/log.rb +217 -0
  115. data/lib/origen/logger_methods.rb +56 -0
  116. data/lib/origen/mode.rb +61 -0
  117. data/lib/origen/model.rb +267 -0
  118. data/lib/origen/model_initializer.rb +45 -0
  119. data/lib/origen/nvm/block_array.rb +72 -0
  120. data/lib/origen/nvm.rb +6 -0
  121. data/lib/origen/parameters/live.rb +22 -0
  122. data/lib/origen/parameters/missing.rb +28 -0
  123. data/lib/origen/parameters/set.rb +144 -0
  124. data/lib/origen/parameters.rb +107 -0
  125. data/lib/origen/pdm.rb +218 -0
  126. data/lib/origen/pins/function_proxy.rb +36 -0
  127. data/lib/origen/pins/ground_pin.rb +6 -0
  128. data/lib/origen/pins/pin.rb +860 -0
  129. data/lib/origen/pins/pin_bank.rb +349 -0
  130. data/lib/origen/pins/pin_clock.rb +124 -0
  131. data/lib/origen/pins/pin_collection.rb +492 -0
  132. data/lib/origen/pins/pin_common.rb +206 -0
  133. data/lib/origen/pins/port.rb +268 -0
  134. data/lib/origen/pins/power_pin.rb +30 -0
  135. data/lib/origen/pins.rb +696 -0
  136. data/lib/origen/registers/bit.rb +562 -0
  137. data/lib/origen/registers/bit_collection.rb +787 -0
  138. data/lib/origen/registers/container.rb +288 -0
  139. data/lib/origen/registers/domain.rb +16 -0
  140. data/lib/origen/registers/reg.rb +1406 -0
  141. data/lib/origen/registers/reg_collection.rb +24 -0
  142. data/lib/origen/registers.rb +652 -0
  143. data/lib/origen/regression_manager.rb +251 -0
  144. data/lib/origen/remote_manager.rb +340 -0
  145. data/lib/origen/revision_control/base.rb +257 -0
  146. data/lib/origen/revision_control/design_sync.rb +276 -0
  147. data/lib/origen/revision_control/git.rb +243 -0
  148. data/lib/origen/revision_control/subversion.rb +6 -0
  149. data/lib/origen/revision_control.rb +44 -0
  150. data/lib/origen/ruby_version_check.rb +131 -0
  151. data/lib/origen/site_config.rb +61 -0
  152. data/lib/origen/specs/checkers.rb +103 -0
  153. data/lib/origen/specs/creation_info.rb +17 -0
  154. data/lib/origen/specs/doc_resource.rb +91 -0
  155. data/lib/origen/specs/exhibit.rb +17 -0
  156. data/lib/origen/specs/mode_select.rb +16 -0
  157. data/lib/origen/specs/note.rb +17 -0
  158. data/lib/origen/specs/override.rb +21 -0
  159. data/lib/origen/specs/power_supply.rb +13 -0
  160. data/lib/origen/specs/spec.rb +226 -0
  161. data/lib/origen/specs/version_history.rb +14 -0
  162. data/lib/origen/specs.rb +552 -0
  163. data/lib/origen/sub_blocks.rb +298 -0
  164. data/lib/origen/tester/api.rb +277 -0
  165. data/lib/origen/tester/bdm/bdm.rb +25 -0
  166. data/lib/origen/tester/command_based_tester.rb +46 -0
  167. data/lib/origen/tester/doc/doc.rb +226 -0
  168. data/lib/origen/tester/doc/generator/flow.rb +71 -0
  169. data/lib/origen/tester/doc/generator/flow_line.rb +203 -0
  170. data/lib/origen/tester/doc/generator/test.rb +68 -0
  171. data/lib/origen/tester/doc/generator/test_group.rb +66 -0
  172. data/lib/origen/tester/doc/generator/tests.rb +47 -0
  173. data/lib/origen/tester/doc/generator.rb +126 -0
  174. data/lib/origen/tester/doc/model.rb +162 -0
  175. data/lib/origen/tester/generator/flow_control_api.rb +606 -0
  176. data/lib/origen/tester/generator/identity_map.rb +25 -0
  177. data/lib/origen/tester/generator/placeholder.rb +13 -0
  178. data/lib/origen/tester/generator/test_numberer.rb +25 -0
  179. data/lib/origen/tester/generator.rb +271 -0
  180. data/lib/origen/tester/interface.rb +154 -0
  181. data/lib/origen/tester/j750/files.rb +45 -0
  182. data/lib/origen/tester/j750/generator/flow.rb +123 -0
  183. data/lib/origen/tester/j750/generator/flow_line.rb +288 -0
  184. data/lib/origen/tester/j750/generator/patgroup.rb +111 -0
  185. data/lib/origen/tester/j750/generator/patgroups.rb +41 -0
  186. data/lib/origen/tester/j750/generator/patset.rb +111 -0
  187. data/lib/origen/tester/j750/generator/patsets.rb +41 -0
  188. data/lib/origen/tester/j750/generator/templates/flow.txt.erb +9 -0
  189. data/lib/origen/tester/j750/generator/templates/instances.txt.erb +16 -0
  190. data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +8 -0
  191. data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +10 -0
  192. data/lib/origen/tester/j750/generator/test_instance.rb +846 -0
  193. data/lib/origen/tester/j750/generator/test_instance_group.rb +60 -0
  194. data/lib/origen/tester/j750/generator/test_instances.rb +182 -0
  195. data/lib/origen/tester/j750/generator.rb +203 -0
  196. data/lib/origen/tester/j750/j750.rb +845 -0
  197. data/lib/origen/tester/j750/j750_hpt.rb +35 -0
  198. data/lib/origen/tester/j750/parser/ac_spec.rb +11 -0
  199. data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
  200. data/lib/origen/tester/j750/parser/dc_spec.rb +36 -0
  201. data/lib/origen/tester/j750/parser/dc_specs.rb +50 -0
  202. data/lib/origen/tester/j750/parser/descriptions.rb +340 -0
  203. data/lib/origen/tester/j750/parser/flow.rb +111 -0
  204. data/lib/origen/tester/j750/parser/flow_line.rb +207 -0
  205. data/lib/origen/tester/j750/parser/flows.rb +23 -0
  206. data/lib/origen/tester/j750/parser/pattern_set.rb +94 -0
  207. data/lib/origen/tester/j750/parser/pattern_sets.rb +33 -0
  208. data/lib/origen/tester/j750/parser/test_instance.rb +322 -0
  209. data/lib/origen/tester/j750/parser/test_instances.rb +26 -0
  210. data/lib/origen/tester/j750/parser/timeset.rb +15 -0
  211. data/lib/origen/tester/j750/parser/timesets.rb +0 -0
  212. data/lib/origen/tester/j750/parser.rb +104 -0
  213. data/lib/origen/tester/jlink/jlink.rb +33 -0
  214. data/lib/origen/tester/parser/description_lookup.rb +64 -0
  215. data/lib/origen/tester/parser/searchable_array.rb +32 -0
  216. data/lib/origen/tester/parser/searchable_hash.rb +32 -0
  217. data/lib/origen/tester/parser.rb +24 -0
  218. data/lib/origen/tester/time.rb +338 -0
  219. data/lib/origen/tester/timing.rb +253 -0
  220. data/lib/origen/tester/ultraflex/files.rb +45 -0
  221. data/lib/origen/tester/ultraflex/generator/flow.rb +119 -0
  222. data/lib/origen/tester/ultraflex/generator/flow_line.rb +269 -0
  223. data/lib/origen/tester/ultraflex/generator/patgroup.rb +111 -0
  224. data/lib/origen/tester/ultraflex/generator/patgroups.rb +41 -0
  225. data/lib/origen/tester/ultraflex/generator/patset.rb +111 -0
  226. data/lib/origen/tester/ultraflex/generator/patsets.rb +41 -0
  227. data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +9 -0
  228. data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +16 -0
  229. data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +8 -0
  230. data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +10 -0
  231. data/lib/origen/tester/ultraflex/generator/test_instance.rb +622 -0
  232. data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +60 -0
  233. data/lib/origen/tester/ultraflex/generator/test_instances.rb +174 -0
  234. data/lib/origen/tester/ultraflex/generator.rb +200 -0
  235. data/lib/origen/tester/ultraflex/parser/ac_spec.rb +11 -0
  236. data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
  237. data/lib/origen/tester/ultraflex/parser/dc_spec.rb +36 -0
  238. data/lib/origen/tester/ultraflex/parser/dc_specs.rb +50 -0
  239. data/lib/origen/tester/ultraflex/parser/descriptions.rb +342 -0
  240. data/lib/origen/tester/ultraflex/parser/flow.rb +111 -0
  241. data/lib/origen/tester/ultraflex/parser/flow_line.rb +207 -0
  242. data/lib/origen/tester/ultraflex/parser/flows.rb +23 -0
  243. data/lib/origen/tester/ultraflex/parser/pattern_set.rb +94 -0
  244. data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +33 -0
  245. data/lib/origen/tester/ultraflex/parser/test_instance.rb +262 -0
  246. data/lib/origen/tester/ultraflex/parser/test_instances.rb +26 -0
  247. data/lib/origen/tester/ultraflex/parser/timeset.rb +15 -0
  248. data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
  249. data/lib/origen/tester/ultraflex/parser.rb +104 -0
  250. data/lib/origen/tester/ultraflex/ultraflex.rb +759 -0
  251. data/lib/origen/tester/v93k/generator/flow.rb +63 -0
  252. data/lib/origen/tester/v93k/generator/flow_node/print.rb +10 -0
  253. data/lib/origen/tester/v93k/generator/flow_node.rb +17 -0
  254. data/lib/origen/tester/v93k/generator/pattern.rb +16 -0
  255. data/lib/origen/tester/v93k/generator/pattern_master.rb +54 -0
  256. data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +6 -0
  257. data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +11 -0
  258. data/lib/origen/tester/v93k/generator/templates/template.flow.erb +121 -0
  259. data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +9 -0
  260. data/lib/origen/tester/v93k/generator/test_function.rb +103 -0
  261. data/lib/origen/tester/v93k/generator/test_functions.rb +79 -0
  262. data/lib/origen/tester/v93k/generator/test_method.rb +46 -0
  263. data/lib/origen/tester/v93k/generator/test_methods.rb +75 -0
  264. data/lib/origen/tester/v93k/generator/test_suite.rb +54 -0
  265. data/lib/origen/tester/v93k/generator/test_suites.rb +65 -0
  266. data/lib/origen/tester/v93k/generator.rb +80 -0
  267. data/lib/origen/tester/v93k/v93k.rb +420 -0
  268. data/lib/origen/tester/vector.rb +86 -0
  269. data/lib/origen/tester/vector_generator.rb +633 -0
  270. data/lib/origen/tester/vector_pipeline.rb +150 -0
  271. data/lib/origen/tester.rb +56 -0
  272. data/lib/origen/top_level.rb +134 -0
  273. data/lib/origen/users/ldap.rb +65 -0
  274. data/lib/origen/users/user.rb +149 -0
  275. data/lib/origen/users.rb +30 -0
  276. data/lib/origen/utility/block_args.rb +93 -0
  277. data/lib/origen/utility/csv_data.rb +110 -0
  278. data/lib/origen/utility/design_sync.rb +494 -0
  279. data/lib/origen/utility/diff.rb +158 -0
  280. data/lib/origen/utility/input_capture.rb +121 -0
  281. data/lib/origen/utility/mailer.rb +143 -0
  282. data/lib/origen/utility/s_record.rb +205 -0
  283. data/lib/origen/utility/time_and_date.rb +30 -0
  284. data/lib/origen/utility.rb +12 -0
  285. data/lib/origen/version_checker.rb +117 -0
  286. data/lib/origen/version_string.rb +356 -0
  287. data/lib/origen.rb +648 -0
  288. data/lib/tasks/gem.rake +27 -22
  289. data/origen_site_config.yml +36 -0
  290. data/source_setup +17 -0
  291. data/spec/format/rgen_formatter.rb +14 -0
  292. data/templates/api_doc/README.txt.erb +24 -0
  293. data/templates/code_generators/gemfile_app.rb +4 -0
  294. data/templates/code_generators/gemfile_plugin.rb +6 -0
  295. data/templates/code_generators/gemspec.rb +33 -0
  296. data/templates/code_generators/rakefile.rb +10 -0
  297. data/templates/code_generators/spec_helper.rb +49 -0
  298. data/templates/code_generators/version.rb +8 -0
  299. data/templates/code_generators/version_time.rb +3 -0
  300. data/templates/git/gitignore.erb +33 -0
  301. data/templates/j750/_vt_flow.txt.erb +8 -0
  302. data/templates/j750/_vt_instances.txt.erb +4 -0
  303. data/templates/j750/program_sheet.txt.erb +9 -0
  304. data/templates/nanoc/Rules +74 -0
  305. data/templates/nanoc/config.yaml +77 -0
  306. data/templates/nanoc/content/favicon.ico +0 -0
  307. data/templates/nanoc/layouts/bootstrap.html.erb +63 -0
  308. data/templates/nanoc/layouts/bootstrap3.html.erb +71 -0
  309. data/templates/nanoc/layouts/freescale.html.erb +79 -0
  310. data/templates/nanoc/lib/bootstrap_filter.rb +49 -0
  311. data/templates/nanoc/lib/codeblocks_filter.rb +41 -0
  312. data/templates/nanoc/lib/default.rb +2 -0
  313. data/templates/nanoc/lib/gzip_filter.rb +16 -0
  314. data/templates/nanoc/lib/haml_code_filter.rb +41 -0
  315. data/templates/nanoc/lib/helpers.rb +1 -0
  316. data/templates/nanoc/lib/search_filter.rb +62 -0
  317. data/templates/nanoc_dynamic/content/search.js.erb +92 -0
  318. data/templates/shared/web/_logo.html +10 -0
  319. data/templates/test/_inline_sub.txt.erb +2 -0
  320. data/templates/test/environment.txt.erb +1 -0
  321. data/templates/test/inline.txt.erb +11 -0
  322. data/templates/test/inspections.txt.erb +19 -0
  323. data/templates/test/set1/_sub1.txt.erb +12 -0
  324. data/templates/test/set1/_sub4.txt.erb +1 -0
  325. data/templates/test/set1/_sub5.txt.erb +1 -0
  326. data/templates/test/set1/main.txt.erb +53 -0
  327. data/templates/test/set1/sub_dir/_sub2.txt.erb +20 -0
  328. data/templates/test/set1/sub_dir/_sub3.txt.erb +12 -0
  329. data/templates/test/set1/sub_dir/main2.txt.erb +4 -0
  330. data/templates/test/set2/template_with_no_erb_1.txt +9 -0
  331. data/templates/test/set2/template_with_no_erb_2.txt +9 -0
  332. data/templates/test/set3/_layout.html.erb +4 -0
  333. data/templates/test/set3/content.html.erb +6 -0
  334. data/templates/time/filter.rb.erb +15 -0
  335. data/templates/time/rules.rb.erb +45 -0
  336. metadata +639 -5
@@ -0,0 +1,40 @@
1
+ module Origen
2
+ class Generator
3
+ class Resources
4
+ attr_accessor :top_level
5
+
6
+ def create(options = {}, &block)
7
+ # Refresh the target to start all settings from scratch each time
8
+ # This is an easy way to reset all registered values
9
+ Origen.app.reload_target!
10
+ Origen.tester.generating = :program
11
+ sub_flow = @top_level
12
+ @top_level = true unless @top_level
13
+ job.output_file_body = options.delete(:name).to_s if options[:name]
14
+ if sub_flow
15
+ interface = Origen.interface
16
+ interface.resources_mode do
17
+ opts = Origen.generator.option_pipeline.pop || {}
18
+ interface.instance_exec(opts, &block)
19
+ end
20
+ interface.close(sub_resource: true)
21
+ else
22
+ Origen.log.info "Generating... #{Origen.file_handler.current_file.basename}"
23
+ interface = Origen.reset_interface(options)
24
+ interface.resources_mode do
25
+ interface.instance_eval(&block)
26
+ end
27
+ interface.close
28
+ end
29
+ end
30
+
31
+ def reset
32
+ @top_level = false
33
+ end
34
+
35
+ def job
36
+ Origen.app.current_job
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,89 @@
1
+ module Origen
2
+ class Generator
3
+ # The stage provides a way to store objects in named banks for later retrieval.
4
+ # This is typically used during pattern generation to generate header, body and
5
+ # footer elements of a pattern in non-sequential order, allowing them to be
6
+ # combined at the end into the logical order.
7
+ class Stage
8
+ def initialize
9
+ @vault = {}
10
+ end
11
+
12
+ def reset!
13
+ @vault = {}
14
+ end
15
+
16
+ # Returns vectors from the end of the bank
17
+ def last_vector(offset = 0)
18
+ offset = offset.abs
19
+ i = current_bank.size - 1
20
+ while offset >= 0
21
+ return nil if i < 0
22
+ unless current_bank[i].is_a?(String)
23
+ return current_bank[i] if offset == 0
24
+ offset -= 1
25
+ end
26
+ i -= 1
27
+ end
28
+ end
29
+
30
+ # Same as last_vector except it returns the last objects of any
31
+ # type, not just vectors
32
+ def last_object(offset = 0)
33
+ i = current_bank.size - 1 - offset
34
+ current_bank[i]
35
+ end
36
+
37
+ # Store a new value in the current bank
38
+ def store(obj)
39
+ current_bank.push(obj)
40
+ end
41
+
42
+ # Insert a new object into the current bank X places from the end
43
+ def insert_from_end(obj, x)
44
+ # Ruby insert is a bit un-intuative in that insert(1) will insert something 1 place in from the
45
+ # start, whereas insert(-1) will insert it at the end (0 places in from the end).
46
+ # So the subtraction of 1 here aligns the behavior when inserting from the start or the end.
47
+ current_bank.insert((x * -1) - 1, obj)
48
+ end
49
+
50
+ # Insert a new object into the current bank X places from the start
51
+ def insert_from_start(obj, x)
52
+ current_bank.insert(x, obj)
53
+ end
54
+
55
+ # Pull the last item added to the current bank
56
+ def newest
57
+ current_bank.pop
58
+ end
59
+
60
+ # Pull the oldest item added to the current bank
61
+ def oldest
62
+ current_bank.shift
63
+ end
64
+
65
+ # Set the current bank
66
+ def bank=(name)
67
+ @bank = name
68
+ end
69
+
70
+ # Returns the entire bank, an array
71
+ def bank(name = @bank)
72
+ @vault[name] || []
73
+ end
74
+
75
+ def current_bank
76
+ return @vault[@bank] if @vault[@bank]
77
+ @vault[@bank] = []
78
+ end
79
+
80
+ # Temporarily switches to the given bank
81
+ def with_bank(bank)
82
+ orig_bank = @bank
83
+ @bank = bank
84
+ yield
85
+ @bank = orig_bank
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,85 @@
1
+ module Origen
2
+ class Generator
3
+ autoload :Pattern, 'origen/generator/pattern'
4
+ autoload :Flow, 'origen/generator/flow'
5
+ autoload :Resources, 'origen/generator/resources'
6
+ autoload :Job, 'origen/generator/job'
7
+ autoload :PatternFinder, 'origen/generator/pattern_finder'
8
+ autoload :PatternIterator, 'origen/generator/pattern_iterator'
9
+ autoload :Stage, 'origen/generator/stage'
10
+ autoload :Compiler, 'origen/generator/compiler'
11
+ autoload :Comparator, 'origen/generator/comparator'
12
+ autoload :Renderer, 'origen/generator/renderer'
13
+
14
+ def pattern
15
+ @pattern ||= Pattern.new
16
+ end
17
+
18
+ def flow
19
+ @flow ||= Flow.new
20
+ end
21
+
22
+ def resources
23
+ @resources ||= Resources.new
24
+ end
25
+
26
+ def stage
27
+ @stage ||= Stage.new
28
+ end
29
+
30
+ def generate_pattern(file, options)
31
+ Job.new(file, options).run
32
+ end
33
+
34
+ def generate_program(file, options)
35
+ Origen.file_handler.resolve_files(file, ignore_with_prefix: '_', default_dir: "#{Origen.root}/program") do |path|
36
+ Origen.file_handler.current_file = path
37
+ j = Job.new(path, options)
38
+ j.pattern = path
39
+ j.run
40
+ end
41
+ Origen.interface.write_files(options)
42
+ unless options[:quiet] || Origen.tester.is_a?(Origen::Tester::Doc)
43
+ if options[:referenced_pattern_list]
44
+ file = "#{Origen.root}/list/#{options[:referenced_pattern_list]}"
45
+ else
46
+ file = Origen.config.referenced_pattern_list
47
+ end
48
+ puts "Referenced pattern list written to: #{Pathname.new(file).relative_path_from(Pathname.pwd)}"
49
+ dir = Pathname.new(file).dirname
50
+ FileUtils.mkdir_p(dir) unless dir.exist?
51
+ File.open(file, 'w') do |f|
52
+ Origen.interface.referenced_patterns.uniq.sort.each do |pat|
53
+ f.puts pat
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ def compile_file_or_directory(file, options)
60
+ Job.new(file, { compile: true, default_dir: "#{Origen.root}/templates" }.merge(options)).run
61
+ end
62
+
63
+ def merge_file_or_directory(file, options)
64
+ Job.new(file, options).run
65
+ end
66
+
67
+ def compiler
68
+ @compiler ||= Compiler.new
69
+ end
70
+
71
+ def pattern_finder
72
+ @pattern_finder ||= PatternFinder.new
73
+ end
74
+
75
+ def create_iterator
76
+ iterator = PatternIterator.new
77
+ Origen.app.pattern_iterators << iterator
78
+ iterator
79
+ end
80
+
81
+ def option_pipeline
82
+ @option_pipeline ||= []
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,205 @@
1
+ module Origen
2
+ module GlobalMethods
3
+ require_relative 'encodings'
4
+ # If a new gem (i.e. not part of the existing Ruby installation) is required by Origen or an
5
+ # application then it should be required via this method.
6
+ # On Windows this can be installed automatically and this method will take care of doing
7
+ # that.
8
+ #
9
+ # However due to the restricted user permissions available on Linux this cannot be done
10
+ # automatically and you must ensure that you arrange to have the required gem installed
11
+ # on Linux - contact Stephen McGinty to get this done.
12
+ #
13
+ # A given user will then have to update their local toolset to pick this up and this method
14
+ # will give them the necessary instructions.
15
+ #
16
+ # @example
17
+ #
18
+ # require_gem "rest-client"
19
+ # require_gem "net/ldap", :name => "net-ldap"
20
+ def require_gem(name, options = {})
21
+ Origen.deprecate <<-END
22
+ require_gem will be removed in Origen V3, Bundler should be used to manage gem dependencies
23
+ END
24
+ options = {
25
+ name: name
26
+ }.merge(options)
27
+ name = name.to_s
28
+ options[:name] = options[:name].to_s
29
+ if options[:version] && options[:version] =~ /^v(.*)/
30
+ options[:version] = Regexp.last_match[1]
31
+ end
32
+ # This gem was not included in the initial Origen v2.x.x gemset, so need to handle instalations
33
+ # without it
34
+ begin
35
+ if options[:version]
36
+ gem options[:name], options[:version]
37
+ end
38
+ require name
39
+ rescue LoadError
40
+ if Origen.running_on_windows?
41
+ puts "Installing #{options[:name]}"
42
+ command = "gem install #{options[:name]} --no-rdoc --no-ri"
43
+ command += " --version #{options[:version]}" if options[:version]
44
+ if !system(command)
45
+ puts 'It looks like a problem occurred, ensure you have installed Ruby exactly per the Origen guide'
46
+ else
47
+ puts 'A missing gem has just been installed to your system, please re-run the previous command'
48
+ end
49
+ else
50
+ puts "Installing #{options[:name]}"
51
+ command = "gem install --user-install #{options[:name]} --no-rdoc --no-ri"
52
+ command += " --version #{options[:version]}" if options[:version]
53
+ if !system(command)
54
+ puts 'It looks like there was a problem installing that gem, run the following commands to ensure you have an up to date'
55
+ puts 'environment, then try again:'
56
+ puts ''
57
+ puts " cd #{Origen.top}"
58
+ puts ' source source_setup update'
59
+ puts " cd #{FileUtils.pwd}"
60
+ else
61
+ puts 'A missing gem has just been installed to your system, please re-run the previous command'
62
+ end
63
+ # puts "The current application has required a gem called #{options[:name]}, however that is not available in your current toolset."
64
+ # puts 'This may be solved by following the instructions below, otherwise contact the application owner.'
65
+ # puts ''
66
+ # puts_require_latest_ruby
67
+ end
68
+ exit 1
69
+ end
70
+ end
71
+
72
+ def annotate(msg, options = {})
73
+ Origen.app.tester.annotate(msg, options)
74
+ end
75
+
76
+ def c1(msg, options = {})
77
+ Origen.app.tester.c1(msg, options)
78
+ end
79
+ alias_method :cc, :c1
80
+
81
+ def c2(msg, options = {})
82
+ Origen.app.tester.c2(msg, options)
83
+ end
84
+
85
+ def ss(*args, &block)
86
+ Origen.app.tester.ss(*args, &block)
87
+ end
88
+ alias_method :step_comment, :ss
89
+
90
+ def pp(*args, &block)
91
+ Origen.app.tester.pattern_section(*args, &block)
92
+ end
93
+ alias_method :pattern_section, :pp
94
+ alias_method :ps, :pp
95
+
96
+ def snip(*args, &block)
97
+ Origen.app.tester.snip(*args, &block)
98
+ end
99
+
100
+ # Render an ERB template
101
+ def render(*args, &block)
102
+ Origen.generator.compiler.render(*args, &block)
103
+ end
104
+
105
+ # The options passed to an ERB template. Having it
106
+ # global like this is ugly, but it does allow a hash of options
107
+ # to always be available in templates even if the template
108
+ # is being rendered using a custom binding.
109
+ #
110
+ # @api private
111
+ def options
112
+ $_target_options ||
113
+ Origen.generator.compiler.options
114
+ end
115
+
116
+ def global_binding
117
+ binding
118
+ end
119
+
120
+ def debug(*lines)
121
+ Origen.deprecate 'debug method is deprecated, use Origen.log.debug instead'
122
+ if Origen.debug?
123
+ Origen.log.info ''
124
+ c = caller[0]
125
+ c =~ /(.*):(\d+):.*/
126
+ $_last_log_time ||= Time.now
127
+ delta = Time.now - $_last_log_time
128
+ $_last_log_time = Time.now
129
+ begin
130
+ Origen.log.info "*** Debug *** %.6f #{Regexp.last_match[1]}:#{Regexp.last_match[2]}" % delta
131
+ rescue
132
+ # For this to fail it means the deprecated method was called by IRB or similar
133
+ # and in that case there is no point advising who called anyway
134
+ end
135
+ options = lines.last.is_a?(Hash) ? lines.pop : {}
136
+ lines.flatten.each do |line|
137
+ line.split(/\n/).each do |line|
138
+ Origen.log.info line, options
139
+ end
140
+ end
141
+ end
142
+ end
143
+
144
+ Pattern = Origen.pattern unless defined?(Pattern)
145
+ Flow = Origen.flow unless defined?(Flow)
146
+ Resources = Origen.resources unless defined?(Resources)
147
+ User = Origen::Users::User unless defined?(User)
148
+
149
+ # Returns an Excel column based on an Integer argument
150
+ def get_excel_column(n)
151
+ excel_columns = {}
152
+ @column = 'A'
153
+ (1..75).to_a.each do |i|
154
+ excel_columns[i] = @column
155
+ @column = @column.succ
156
+ end
157
+ excel_columns[n]
158
+ end
159
+
160
+ # Returns the full class hierarchy of an object
161
+ def get_full_class(obj)
162
+ klass_str = ''
163
+ until obj.nil?
164
+ if obj == Origen.top_level
165
+ klass_str.prepend obj.class.to_s
166
+ else
167
+ # If the class method produces "SubBlock" then use the object name instead
168
+ if obj.class.to_s.split('::').last == 'SubBlock'
169
+ klass_str.prepend "::#{obj.name.upcase}"
170
+ else
171
+ klass_str.prepend "::#{obj.class.to_s.split('::').last}"
172
+ end
173
+ end
174
+ obj = obj.parent
175
+ end
176
+ klass_str
177
+ end
178
+
179
+ # Returns Rgen supported encoding formats
180
+ def encodings(format = nil)
181
+ if format.nil?
182
+ Origen::ENCODINGS.keys
183
+ else
184
+ Origen::ENCODINGS[format].keys
185
+ end
186
+ end
187
+
188
+ # Returns the encoded symbol as a String if one match is found.
189
+ # Returns a hash for multiple results and nil for no match
190
+ def encoding_search(symbol, options = {})
191
+ options = {
192
+ format: :utf8
193
+ }.update(options)
194
+ fail "The encoding format '#{options[:format]}' is not supported, please choose from #{encodings}" unless encodings.include? options[:format]
195
+ results = Origen::ENCODINGS[options[:format]].filter(symbol)
196
+ if results.size == 1
197
+ results.values.first
198
+ elsif results.size > 1
199
+ results
200
+ else
201
+ return nil
202
+ end
203
+ end
204
+ end
205
+ end