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.
- checksums.yaml +4 -4
- data/bin/ctags +0 -0
- data/bin/origen +165 -1
- data/bin/rgen +2 -0
- data/config/application.rb +141 -0
- data/config/commands.rb +72 -0
- data/config/development.rb +7 -0
- data/config/environment.rb +0 -0
- data/config/rgen.policy +7 -0
- data/config/rubocop/easy.yml +620 -0
- data/config/rubocop/easy_disabled.yml +271 -0
- data/config/rubocop/easy_enabled.yml +731 -0
- data/config/rubocop/strict.yml +620 -0
- data/config/rubocop/strict_disabled.yml +247 -0
- data/config/rubocop/strict_enabled.yml +755 -0
- data/config/users.rb +20 -0
- data/config/version.rb +1 -1
- data/helpers/url.rb +68 -0
- data/lib/c99/doc_interface.rb +56 -0
- data/lib/c99/j750_interface.rb +85 -0
- data/lib/c99/nvm.rb +89 -0
- data/lib/c99/target/mock2.rb +1 -0
- data/lib/c99/target/subdir/mock3.rb +1 -0
- data/lib/option_parser/optparse.rb +12 -0
- data/lib/origen/acronyms.rb +60 -0
- data/lib/origen/application/command_dispatcher.rb +12 -0
- data/lib/origen/application/configuration.rb +206 -0
- data/lib/origen/application/configuration_manager.rb +78 -0
- data/lib/origen/application/deployer.rb +367 -0
- data/lib/origen/application/environment.rb +186 -0
- data/lib/origen/application/lsf.rb +145 -0
- data/lib/origen/application/lsf_manager.rb +657 -0
- data/lib/origen/application/plugins_manager.rb +280 -0
- data/lib/origen/application/release.rb +359 -0
- data/lib/origen/application/runner.rb +246 -0
- data/lib/origen/application/statistics.rb +191 -0
- data/lib/origen/application/target.rb +374 -0
- data/lib/origen/application/version_tracker.rb +59 -0
- data/lib/origen/application/workspace_manager.rb +151 -0
- data/lib/origen/application.rb +746 -0
- data/lib/origen/bugs/bug.rb +36 -0
- data/lib/origen/bugs.rb +45 -0
- data/lib/origen/callbacks.rb +35 -0
- data/lib/origen/chip_mode.rb +118 -0
- data/lib/origen/chip_package.rb +461 -0
- data/lib/origen/client.rb +87 -0
- data/lib/origen/code_generators/actions.rb +258 -0
- data/lib/origen/code_generators/base.rb +57 -0
- data/lib/origen/code_generators/bundler.rb +17 -0
- data/lib/origen/code_generators/gem_setup.rb +49 -0
- data/lib/origen/code_generators/rake.rb +13 -0
- data/lib/origen/code_generators/rspec.rb +12 -0
- data/lib/origen/code_generators/semver.rb +39 -0
- data/lib/origen/code_generators/timever.rb +37 -0
- data/lib/origen/code_generators.rb +111 -0
- data/lib/origen/commands/add.rb +12 -0
- data/lib/origen/commands/compile.rb +62 -0
- data/lib/origen/commands/ctags.rb +9 -0
- data/lib/origen/commands/dispatch.rb +22 -0
- data/lib/origen/commands/environment.rb +11 -0
- data/lib/origen/commands/fetch.rb +63 -0
- data/lib/origen/commands/generate.rb +130 -0
- data/lib/origen/commands/interactive.rb +73 -0
- data/lib/origen/commands/lint.rb +82 -0
- data/lib/origen/commands/lsf.rb +93 -0
- data/lib/origen/commands/merge.rb +55 -0
- data/lib/origen/commands/modifications.rb +12 -0
- data/lib/origen/commands/new.rb +113 -0
- data/lib/origen/commands/plugin.rb +105 -0
- data/lib/origen/commands/program.rb +70 -0
- data/lib/origen/commands/rc.rb +442 -0
- data/lib/origen/commands/save.rb +56 -0
- data/lib/origen/commands/target.rb +27 -0
- data/lib/origen/commands/time.rb +127 -0
- data/lib/origen/commands/version.rb +17 -0
- data/lib/origen/commands/web.rb +221 -0
- data/lib/origen/commands.rb +272 -0
- data/lib/origen/commands_global.rb +76 -0
- data/lib/origen/controller.rb +94 -0
- data/lib/origen/core_ext/array.rb +23 -0
- data/lib/origen/core_ext/bignum.rb +36 -0
- data/lib/origen/core_ext/enumerable.rb +76 -0
- data/lib/origen/core_ext/fixnum.rb +46 -0
- data/lib/origen/core_ext/hash.rb +52 -0
- data/lib/origen/core_ext/module.rb +14 -0
- data/lib/origen/core_ext/numeric.rb +126 -0
- data/lib/origen/core_ext/object.rb +13 -0
- data/lib/origen/core_ext/range.rb +7 -0
- data/lib/origen/core_ext/string.rb +124 -0
- data/lib/origen/core_ext.rb +10 -0
- data/lib/origen/database/key_value_store.rb +111 -0
- data/lib/origen/database/key_value_stores.rb +108 -0
- data/lib/origen/database.rb +6 -0
- data/lib/origen/encodings.rb +102 -0
- data/lib/origen/features/feature.rb +22 -0
- data/lib/origen/features.rb +104 -0
- data/lib/origen/file_handler.rb +429 -0
- data/lib/origen/generator/comparator.rb +56 -0
- data/lib/origen/generator/compiler.rb +277 -0
- data/lib/origen/generator/flow.rb +49 -0
- data/lib/origen/generator/job.rb +131 -0
- data/lib/origen/generator/pattern.rb +356 -0
- data/lib/origen/generator/pattern_finder.rb +155 -0
- data/lib/origen/generator/pattern_iterator.rb +55 -0
- data/lib/origen/generator/renderer.rb +113 -0
- data/lib/origen/generator/resources.rb +40 -0
- data/lib/origen/generator/stage.rb +89 -0
- data/lib/origen/generator.rb +85 -0
- data/lib/origen/global_methods.rb +205 -0
- data/lib/origen/import_manager.rb +596 -0
- data/lib/origen/location/base.rb +116 -0
- data/lib/origen/location/map.rb +83 -0
- data/lib/origen/location.rb +6 -0
- data/lib/origen/log.rb +217 -0
- data/lib/origen/logger_methods.rb +56 -0
- data/lib/origen/mode.rb +61 -0
- data/lib/origen/model.rb +267 -0
- data/lib/origen/model_initializer.rb +45 -0
- data/lib/origen/nvm/block_array.rb +72 -0
- data/lib/origen/nvm.rb +6 -0
- data/lib/origen/parameters/live.rb +22 -0
- data/lib/origen/parameters/missing.rb +28 -0
- data/lib/origen/parameters/set.rb +144 -0
- data/lib/origen/parameters.rb +107 -0
- data/lib/origen/pdm.rb +218 -0
- data/lib/origen/pins/function_proxy.rb +36 -0
- data/lib/origen/pins/ground_pin.rb +6 -0
- data/lib/origen/pins/pin.rb +860 -0
- data/lib/origen/pins/pin_bank.rb +349 -0
- data/lib/origen/pins/pin_clock.rb +124 -0
- data/lib/origen/pins/pin_collection.rb +492 -0
- data/lib/origen/pins/pin_common.rb +206 -0
- data/lib/origen/pins/port.rb +268 -0
- data/lib/origen/pins/power_pin.rb +30 -0
- data/lib/origen/pins.rb +696 -0
- data/lib/origen/registers/bit.rb +562 -0
- data/lib/origen/registers/bit_collection.rb +787 -0
- data/lib/origen/registers/container.rb +288 -0
- data/lib/origen/registers/domain.rb +16 -0
- data/lib/origen/registers/reg.rb +1406 -0
- data/lib/origen/registers/reg_collection.rb +24 -0
- data/lib/origen/registers.rb +652 -0
- data/lib/origen/regression_manager.rb +251 -0
- data/lib/origen/remote_manager.rb +340 -0
- data/lib/origen/revision_control/base.rb +257 -0
- data/lib/origen/revision_control/design_sync.rb +276 -0
- data/lib/origen/revision_control/git.rb +243 -0
- data/lib/origen/revision_control/subversion.rb +6 -0
- data/lib/origen/revision_control.rb +44 -0
- data/lib/origen/ruby_version_check.rb +131 -0
- data/lib/origen/site_config.rb +61 -0
- data/lib/origen/specs/checkers.rb +103 -0
- data/lib/origen/specs/creation_info.rb +17 -0
- data/lib/origen/specs/doc_resource.rb +91 -0
- data/lib/origen/specs/exhibit.rb +17 -0
- data/lib/origen/specs/mode_select.rb +16 -0
- data/lib/origen/specs/note.rb +17 -0
- data/lib/origen/specs/override.rb +21 -0
- data/lib/origen/specs/power_supply.rb +13 -0
- data/lib/origen/specs/spec.rb +226 -0
- data/lib/origen/specs/version_history.rb +14 -0
- data/lib/origen/specs.rb +552 -0
- data/lib/origen/sub_blocks.rb +298 -0
- data/lib/origen/tester/api.rb +277 -0
- data/lib/origen/tester/bdm/bdm.rb +25 -0
- data/lib/origen/tester/command_based_tester.rb +46 -0
- data/lib/origen/tester/doc/doc.rb +226 -0
- data/lib/origen/tester/doc/generator/flow.rb +71 -0
- data/lib/origen/tester/doc/generator/flow_line.rb +203 -0
- data/lib/origen/tester/doc/generator/test.rb +68 -0
- data/lib/origen/tester/doc/generator/test_group.rb +66 -0
- data/lib/origen/tester/doc/generator/tests.rb +47 -0
- data/lib/origen/tester/doc/generator.rb +126 -0
- data/lib/origen/tester/doc/model.rb +162 -0
- data/lib/origen/tester/generator/flow_control_api.rb +606 -0
- data/lib/origen/tester/generator/identity_map.rb +25 -0
- data/lib/origen/tester/generator/placeholder.rb +13 -0
- data/lib/origen/tester/generator/test_numberer.rb +25 -0
- data/lib/origen/tester/generator.rb +271 -0
- data/lib/origen/tester/interface.rb +154 -0
- data/lib/origen/tester/j750/files.rb +45 -0
- data/lib/origen/tester/j750/generator/flow.rb +123 -0
- data/lib/origen/tester/j750/generator/flow_line.rb +288 -0
- data/lib/origen/tester/j750/generator/patgroup.rb +111 -0
- data/lib/origen/tester/j750/generator/patgroups.rb +41 -0
- data/lib/origen/tester/j750/generator/patset.rb +111 -0
- data/lib/origen/tester/j750/generator/patsets.rb +41 -0
- data/lib/origen/tester/j750/generator/templates/flow.txt.erb +9 -0
- data/lib/origen/tester/j750/generator/templates/instances.txt.erb +16 -0
- data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +8 -0
- data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +10 -0
- data/lib/origen/tester/j750/generator/test_instance.rb +846 -0
- data/lib/origen/tester/j750/generator/test_instance_group.rb +60 -0
- data/lib/origen/tester/j750/generator/test_instances.rb +182 -0
- data/lib/origen/tester/j750/generator.rb +203 -0
- data/lib/origen/tester/j750/j750.rb +845 -0
- data/lib/origen/tester/j750/j750_hpt.rb +35 -0
- data/lib/origen/tester/j750/parser/ac_spec.rb +11 -0
- data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
- data/lib/origen/tester/j750/parser/dc_spec.rb +36 -0
- data/lib/origen/tester/j750/parser/dc_specs.rb +50 -0
- data/lib/origen/tester/j750/parser/descriptions.rb +340 -0
- data/lib/origen/tester/j750/parser/flow.rb +111 -0
- data/lib/origen/tester/j750/parser/flow_line.rb +207 -0
- data/lib/origen/tester/j750/parser/flows.rb +23 -0
- data/lib/origen/tester/j750/parser/pattern_set.rb +94 -0
- data/lib/origen/tester/j750/parser/pattern_sets.rb +33 -0
- data/lib/origen/tester/j750/parser/test_instance.rb +322 -0
- data/lib/origen/tester/j750/parser/test_instances.rb +26 -0
- data/lib/origen/tester/j750/parser/timeset.rb +15 -0
- data/lib/origen/tester/j750/parser/timesets.rb +0 -0
- data/lib/origen/tester/j750/parser.rb +104 -0
- data/lib/origen/tester/jlink/jlink.rb +33 -0
- data/lib/origen/tester/parser/description_lookup.rb +64 -0
- data/lib/origen/tester/parser/searchable_array.rb +32 -0
- data/lib/origen/tester/parser/searchable_hash.rb +32 -0
- data/lib/origen/tester/parser.rb +24 -0
- data/lib/origen/tester/time.rb +338 -0
- data/lib/origen/tester/timing.rb +253 -0
- data/lib/origen/tester/ultraflex/files.rb +45 -0
- data/lib/origen/tester/ultraflex/generator/flow.rb +119 -0
- data/lib/origen/tester/ultraflex/generator/flow_line.rb +269 -0
- data/lib/origen/tester/ultraflex/generator/patgroup.rb +111 -0
- data/lib/origen/tester/ultraflex/generator/patgroups.rb +41 -0
- data/lib/origen/tester/ultraflex/generator/patset.rb +111 -0
- data/lib/origen/tester/ultraflex/generator/patsets.rb +41 -0
- data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +9 -0
- data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +16 -0
- data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +8 -0
- data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +10 -0
- data/lib/origen/tester/ultraflex/generator/test_instance.rb +622 -0
- data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +60 -0
- data/lib/origen/tester/ultraflex/generator/test_instances.rb +174 -0
- data/lib/origen/tester/ultraflex/generator.rb +200 -0
- data/lib/origen/tester/ultraflex/parser/ac_spec.rb +11 -0
- data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
- data/lib/origen/tester/ultraflex/parser/dc_spec.rb +36 -0
- data/lib/origen/tester/ultraflex/parser/dc_specs.rb +50 -0
- data/lib/origen/tester/ultraflex/parser/descriptions.rb +342 -0
- data/lib/origen/tester/ultraflex/parser/flow.rb +111 -0
- data/lib/origen/tester/ultraflex/parser/flow_line.rb +207 -0
- data/lib/origen/tester/ultraflex/parser/flows.rb +23 -0
- data/lib/origen/tester/ultraflex/parser/pattern_set.rb +94 -0
- data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +33 -0
- data/lib/origen/tester/ultraflex/parser/test_instance.rb +262 -0
- data/lib/origen/tester/ultraflex/parser/test_instances.rb +26 -0
- data/lib/origen/tester/ultraflex/parser/timeset.rb +15 -0
- data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
- data/lib/origen/tester/ultraflex/parser.rb +104 -0
- data/lib/origen/tester/ultraflex/ultraflex.rb +759 -0
- data/lib/origen/tester/v93k/generator/flow.rb +63 -0
- data/lib/origen/tester/v93k/generator/flow_node/print.rb +10 -0
- data/lib/origen/tester/v93k/generator/flow_node.rb +17 -0
- data/lib/origen/tester/v93k/generator/pattern.rb +16 -0
- data/lib/origen/tester/v93k/generator/pattern_master.rb +54 -0
- data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +6 -0
- data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +11 -0
- data/lib/origen/tester/v93k/generator/templates/template.flow.erb +121 -0
- data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +9 -0
- data/lib/origen/tester/v93k/generator/test_function.rb +103 -0
- data/lib/origen/tester/v93k/generator/test_functions.rb +79 -0
- data/lib/origen/tester/v93k/generator/test_method.rb +46 -0
- data/lib/origen/tester/v93k/generator/test_methods.rb +75 -0
- data/lib/origen/tester/v93k/generator/test_suite.rb +54 -0
- data/lib/origen/tester/v93k/generator/test_suites.rb +65 -0
- data/lib/origen/tester/v93k/generator.rb +80 -0
- data/lib/origen/tester/v93k/v93k.rb +420 -0
- data/lib/origen/tester/vector.rb +86 -0
- data/lib/origen/tester/vector_generator.rb +633 -0
- data/lib/origen/tester/vector_pipeline.rb +150 -0
- data/lib/origen/tester.rb +56 -0
- data/lib/origen/top_level.rb +134 -0
- data/lib/origen/users/ldap.rb +65 -0
- data/lib/origen/users/user.rb +149 -0
- data/lib/origen/users.rb +30 -0
- data/lib/origen/utility/block_args.rb +93 -0
- data/lib/origen/utility/csv_data.rb +110 -0
- data/lib/origen/utility/design_sync.rb +494 -0
- data/lib/origen/utility/diff.rb +158 -0
- data/lib/origen/utility/input_capture.rb +121 -0
- data/lib/origen/utility/mailer.rb +143 -0
- data/lib/origen/utility/s_record.rb +205 -0
- data/lib/origen/utility/time_and_date.rb +30 -0
- data/lib/origen/utility.rb +12 -0
- data/lib/origen/version_checker.rb +117 -0
- data/lib/origen/version_string.rb +356 -0
- data/lib/origen.rb +648 -0
- data/lib/tasks/gem.rake +27 -22
- data/origen_site_config.yml +36 -0
- data/source_setup +17 -0
- data/spec/format/rgen_formatter.rb +14 -0
- data/templates/api_doc/README.txt.erb +24 -0
- data/templates/code_generators/gemfile_app.rb +4 -0
- data/templates/code_generators/gemfile_plugin.rb +6 -0
- data/templates/code_generators/gemspec.rb +33 -0
- data/templates/code_generators/rakefile.rb +10 -0
- data/templates/code_generators/spec_helper.rb +49 -0
- data/templates/code_generators/version.rb +8 -0
- data/templates/code_generators/version_time.rb +3 -0
- data/templates/git/gitignore.erb +33 -0
- data/templates/j750/_vt_flow.txt.erb +8 -0
- data/templates/j750/_vt_instances.txt.erb +4 -0
- data/templates/j750/program_sheet.txt.erb +9 -0
- data/templates/nanoc/Rules +74 -0
- data/templates/nanoc/config.yaml +77 -0
- data/templates/nanoc/content/favicon.ico +0 -0
- data/templates/nanoc/layouts/bootstrap.html.erb +63 -0
- data/templates/nanoc/layouts/bootstrap3.html.erb +71 -0
- data/templates/nanoc/layouts/freescale.html.erb +79 -0
- data/templates/nanoc/lib/bootstrap_filter.rb +49 -0
- data/templates/nanoc/lib/codeblocks_filter.rb +41 -0
- data/templates/nanoc/lib/default.rb +2 -0
- data/templates/nanoc/lib/gzip_filter.rb +16 -0
- data/templates/nanoc/lib/haml_code_filter.rb +41 -0
- data/templates/nanoc/lib/helpers.rb +1 -0
- data/templates/nanoc/lib/search_filter.rb +62 -0
- data/templates/nanoc_dynamic/content/search.js.erb +92 -0
- data/templates/shared/web/_logo.html +10 -0
- data/templates/test/_inline_sub.txt.erb +2 -0
- data/templates/test/environment.txt.erb +1 -0
- data/templates/test/inline.txt.erb +11 -0
- data/templates/test/inspections.txt.erb +19 -0
- data/templates/test/set1/_sub1.txt.erb +12 -0
- data/templates/test/set1/_sub4.txt.erb +1 -0
- data/templates/test/set1/_sub5.txt.erb +1 -0
- data/templates/test/set1/main.txt.erb +53 -0
- data/templates/test/set1/sub_dir/_sub2.txt.erb +20 -0
- data/templates/test/set1/sub_dir/_sub3.txt.erb +12 -0
- data/templates/test/set1/sub_dir/main2.txt.erb +4 -0
- data/templates/test/set2/template_with_no_erb_1.txt +9 -0
- data/templates/test/set2/template_with_no_erb_2.txt +9 -0
- data/templates/test/set3/_layout.html.erb +4 -0
- data/templates/test/set3/content.html.erb +6 -0
- data/templates/time/filter.rb.erb +15 -0
- data/templates/time/rules.rb.erb +45 -0
- metadata +639 -5
|
@@ -0,0 +1,746 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
# In Origen v2 this class was introduced to formally co-ordinate application level
|
|
3
|
+
# configuration of Origen.
|
|
4
|
+
#
|
|
5
|
+
# == Configuration
|
|
6
|
+
#
|
|
7
|
+
# See Origen::Application::Configuration for the available options.
|
|
8
|
+
class Application
|
|
9
|
+
autoload :Configuration, 'origen/application/configuration'
|
|
10
|
+
autoload :Target, 'origen/application/target'
|
|
11
|
+
autoload :Environment, 'origen/application/environment'
|
|
12
|
+
autoload :PluginsManager, 'origen/application/plugins_manager'
|
|
13
|
+
autoload :LSF, 'origen/application/lsf'
|
|
14
|
+
autoload :Runner, 'origen/application/runner'
|
|
15
|
+
autoload :ConfigurationManager, 'origen/application/configuration_manager'
|
|
16
|
+
autoload :LSFManager, 'origen/application/lsf_manager'
|
|
17
|
+
autoload :Release, 'origen/application/release'
|
|
18
|
+
autoload :Deployer, 'origen/application/deployer'
|
|
19
|
+
autoload :VersionTracker, 'origen/application/version_tracker'
|
|
20
|
+
autoload :CommandDispatcher, 'origen/application/command_dispatcher'
|
|
21
|
+
autoload :WorkspaceManager, 'origen/application/workspace_manager'
|
|
22
|
+
|
|
23
|
+
require 'origen/users'
|
|
24
|
+
include Origen::Users
|
|
25
|
+
|
|
26
|
+
attr_accessor :current_job
|
|
27
|
+
attr_accessor :name
|
|
28
|
+
attr_accessor :namespace
|
|
29
|
+
|
|
30
|
+
class << self
|
|
31
|
+
def inherited(base)
|
|
32
|
+
# Somehow using the old import system and version file format we can get in here when
|
|
33
|
+
# loading the version, this can be removed in future when the imports API is retired
|
|
34
|
+
unless caller[0] =~ /version.rb.*/
|
|
35
|
+
root = Pathname.new(caller[0].sub(/(\\|\/)?config(\\|\/)application.rb.*/, '')).realpath
|
|
36
|
+
app = base.instance
|
|
37
|
+
app.root = root.to_s
|
|
38
|
+
Origen.register_application(app)
|
|
39
|
+
app.add_lib_to_load_path!
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def instance
|
|
44
|
+
@instance ||= new
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def respond_to?(*args)
|
|
48
|
+
super || instance.respond_to?(*args)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
protected
|
|
52
|
+
|
|
53
|
+
def method_missing(*args, &block)
|
|
54
|
+
instance.send(*args, &block)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# A simple class to load all rake tasks available to an application, a class is used here
|
|
59
|
+
# to avoid collision with the Rake namespace method
|
|
60
|
+
class RakeLoader
|
|
61
|
+
require 'rake'
|
|
62
|
+
include Rake::DSL
|
|
63
|
+
|
|
64
|
+
def load_tasks
|
|
65
|
+
$VERBOSE = nil # Don't care about world writable dir warnings and the like
|
|
66
|
+
require 'colored'
|
|
67
|
+
|
|
68
|
+
# Load all Origen tasks first
|
|
69
|
+
Dir.glob("#{Origen.top}/lib/tasks/*.rake").sort.each do |file|
|
|
70
|
+
load file
|
|
71
|
+
end
|
|
72
|
+
# Now the application's own tasks
|
|
73
|
+
if Origen.app.origen_core?
|
|
74
|
+
Dir.glob("#{Origen.root}/lib/tasks/private/*.rake").sort.each do |file|
|
|
75
|
+
load file
|
|
76
|
+
end
|
|
77
|
+
else
|
|
78
|
+
Dir.glob("#{Origen.root}/lib/tasks/*.rake").sort.each do |file|
|
|
79
|
+
load file
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
# Finally those that the plugin's have given us
|
|
83
|
+
([Origen.app] + Origen.plugins).each do |plugin|
|
|
84
|
+
namespace plugin.name do
|
|
85
|
+
Dir.glob("#{plugin.root}/lib/tasks/shared/*.rake").sort.each do |file|
|
|
86
|
+
load file
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Load all rake tasks defined in the application's lib/task directory
|
|
94
|
+
def load_tasks
|
|
95
|
+
RakeLoader.new.load_tasks
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Returns
|
|
99
|
+
def revision_controller
|
|
100
|
+
if current?
|
|
101
|
+
if config.rc_url
|
|
102
|
+
if config.rc_url =~ /^sync:/
|
|
103
|
+
@revision_controller ||= RevisionControl::DesignSync.new(
|
|
104
|
+
local: root,
|
|
105
|
+
remote: config.rc_url
|
|
106
|
+
)
|
|
107
|
+
elsif config.rc_url =~ /git/
|
|
108
|
+
@revision_controller ||= RevisionControl::Git.new(
|
|
109
|
+
local: root,
|
|
110
|
+
remote: config.rc_url
|
|
111
|
+
)
|
|
112
|
+
else
|
|
113
|
+
fail "The revision control type could not be worked out from the value config.rc_url: #{config.rc_url}"
|
|
114
|
+
end
|
|
115
|
+
else
|
|
116
|
+
@revision_controller ||= RevisionControl::DesignSync.new(
|
|
117
|
+
local: root,
|
|
118
|
+
remote: config.vault
|
|
119
|
+
)
|
|
120
|
+
end
|
|
121
|
+
else
|
|
122
|
+
fail "Only the top-level application has a revision controller! #{name} is a plugin"
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
alias_method :rc, :revision_controller
|
|
126
|
+
|
|
127
|
+
# This callback handler will fire once the main app and all of its plugins have been loaded
|
|
128
|
+
def on_loaded
|
|
129
|
+
config.log_deprecations
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Convenience method to check if the given application instance is Origen core
|
|
133
|
+
def origen_core?
|
|
134
|
+
name.to_s.symbolize == :origen_core
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def inspect
|
|
138
|
+
"<Origen app (#{name}):#{object_id}>"
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def root=(val)
|
|
142
|
+
@root = Pathname.new(val)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def require_environment!
|
|
146
|
+
Origen.deprecate 'Calling app.require_environment! is no longer required, the app environment is now automtically loaded when Origen.app is called'
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Returns a full path to the root directory of the given application
|
|
150
|
+
#
|
|
151
|
+
# If the application instance is a plugin then this will point to where
|
|
152
|
+
# the application is installed within the imports directory
|
|
153
|
+
def root
|
|
154
|
+
@root
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Returns the namespace used by the application as a string
|
|
158
|
+
def namespace
|
|
159
|
+
@namespace ||= self.class.to_s.split('::').first.gsub('_', '').sub('Application', '')
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Returns an array of users who have subscribed for production release
|
|
163
|
+
# notifications for the given application on the website
|
|
164
|
+
def subscribers_prod
|
|
165
|
+
if server_data
|
|
166
|
+
@subscribers_prod ||= server_data[:subscribers_prod].map { |u| User.new(u[:core_id]) }
|
|
167
|
+
else
|
|
168
|
+
[]
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Returns an array of users who have subscribed for development release
|
|
173
|
+
# notifications for the given application on the website
|
|
174
|
+
def subscribers_dev
|
|
175
|
+
if server_data
|
|
176
|
+
@subscribers_dev ||= server_data[:subscribers_dev].map { |u| User.new(u[:core_id]) }
|
|
177
|
+
else
|
|
178
|
+
[]
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Returns the server data packet available for the given application,
|
|
183
|
+
# returns nil if none is found
|
|
184
|
+
def server_data
|
|
185
|
+
if name == :origen
|
|
186
|
+
@server_data ||= Origen.client.origen
|
|
187
|
+
else
|
|
188
|
+
@server_data ||= Origen.client.plugins.find { |p| p[:origen_name].downcase == name.to_s.downcase }
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Returns true if the given application instance is the
|
|
193
|
+
# current top level application
|
|
194
|
+
def current?
|
|
195
|
+
Origen.app == self
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Returns true if the given application instance is
|
|
199
|
+
# the current plugin
|
|
200
|
+
def current_plugin?
|
|
201
|
+
if Origen.current_plugin.name
|
|
202
|
+
Origen.current_plugin.instance == self
|
|
203
|
+
else
|
|
204
|
+
false
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
# Returns the current top-level object (the DUT)
|
|
209
|
+
def top_level
|
|
210
|
+
toplevel_listeners.first
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def listeners_for(*args)
|
|
214
|
+
callback = args.shift
|
|
215
|
+
max = args.first.is_a?(Numeric) ? args.shift : nil
|
|
216
|
+
options = args.shift || {}
|
|
217
|
+
options = {
|
|
218
|
+
top_level: :first
|
|
219
|
+
}.merge(options)
|
|
220
|
+
listeners = callback_listeners
|
|
221
|
+
if Origen.top_level
|
|
222
|
+
listeners -= [Origen.top_level]
|
|
223
|
+
if options[:top_level]
|
|
224
|
+
if options[:top_level] == :last
|
|
225
|
+
listeners = listeners + [Origen.top_level]
|
|
226
|
+
else
|
|
227
|
+
listeners = [Origen.top_level] + listeners
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
listeners = listeners.select { |l| l.respond_to?(callback) }
|
|
232
|
+
if max && listeners.size > max
|
|
233
|
+
fail "You can only define a #{callback} callback #{max > 1 ? (max.to_s + 'times') : 'once'}, however you have declared it #{listeners.size} times for instances of: #{listeners.map(&:class)}"
|
|
234
|
+
end
|
|
235
|
+
listeners
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def version(options = {})
|
|
239
|
+
@version = nil if options[:refresh]
|
|
240
|
+
return @version if @version
|
|
241
|
+
load File.join(root, 'config', 'version.rb')
|
|
242
|
+
if defined? eval(namespace)::VERSION
|
|
243
|
+
@version = Origen::VersionString.new(eval(namespace)::VERSION)
|
|
244
|
+
else
|
|
245
|
+
# The eval of the class is required here as somehow when plugins are imported under the old
|
|
246
|
+
# imports system and with the old version file format we can end up with two copies of the
|
|
247
|
+
# same class constant. Don't understand it, but it is fixed with the move to gems and the
|
|
248
|
+
# namespace-based version file format.
|
|
249
|
+
@version = Origen::VersionString.new(eval(self.class.to_s)::VERSION)
|
|
250
|
+
end
|
|
251
|
+
@version
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# Returns the release note for the current or given application version
|
|
255
|
+
def release_note(version = Origen.app.version.prefixed)
|
|
256
|
+
version = VersionString.new(version)
|
|
257
|
+
version = version.prefixed if version.semantic?
|
|
258
|
+
capture = false
|
|
259
|
+
note_started = false
|
|
260
|
+
note = []
|
|
261
|
+
File.readlines("#{Origen.root}/doc/history").each do |line|
|
|
262
|
+
line = line.strip
|
|
263
|
+
if capture
|
|
264
|
+
if note_started
|
|
265
|
+
if line =~ /^<a class="anchor release_tag/ || line =~ /^#+ Tag/
|
|
266
|
+
note.pop while note.last && note.last.empty?
|
|
267
|
+
return note
|
|
268
|
+
end
|
|
269
|
+
if line.empty? && note.empty?
|
|
270
|
+
# Don't capture preceding blank lines
|
|
271
|
+
else
|
|
272
|
+
note << line
|
|
273
|
+
end
|
|
274
|
+
elsif line =~ /^#+ by/
|
|
275
|
+
note_started = true
|
|
276
|
+
end
|
|
277
|
+
else
|
|
278
|
+
if line =~ /Tag:/
|
|
279
|
+
line = line.gsub('\\', '')
|
|
280
|
+
if line =~ /^#+ Tag: #{version}$/ ||
|
|
281
|
+
line =~ />Tag: #{version}</
|
|
282
|
+
capture = true
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
note.pop while note.last && note.last.empty?
|
|
288
|
+
note
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
# Returns the release date for the current or given application version
|
|
292
|
+
def release_date(version = Origen.app.version.prefixed)
|
|
293
|
+
time = release_time(version)
|
|
294
|
+
time ? time.to_date : nil
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
# Returns the release time for the current or given application version
|
|
298
|
+
def release_time(version = Origen.app.version.prefixed)
|
|
299
|
+
version = VersionString.new(version)
|
|
300
|
+
version = version.prefixed if version.semantic?
|
|
301
|
+
capture = false
|
|
302
|
+
File.readlines("#{Origen.root}/doc/history").each do |line|
|
|
303
|
+
line = line.strip
|
|
304
|
+
if capture
|
|
305
|
+
if capture && line =~ /^#+ by .* on (.*(AM|PM))/
|
|
306
|
+
return Time.parse(Regexp.last_match(1))
|
|
307
|
+
end
|
|
308
|
+
else
|
|
309
|
+
if line =~ /Tag:/
|
|
310
|
+
line = line.gsub('\\', '')
|
|
311
|
+
if line =~ /^#+ Tag: #{version}$/ ||
|
|
312
|
+
line =~ />Tag: #{version}</
|
|
313
|
+
capture = true
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
nil
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
# Returns the author (committer) for the current or given application version
|
|
322
|
+
#
|
|
323
|
+
# If the user can be found in the directory then a user object will be returned,
|
|
324
|
+
# otherwise the name will be returned as a String
|
|
325
|
+
def author(version = Origen.app.version.prefixed)
|
|
326
|
+
version = VersionString.new(version)
|
|
327
|
+
version = version.prefixed if version.semantic?
|
|
328
|
+
capture = false
|
|
329
|
+
File.readlines("#{Origen.root}/doc/history").each do |line|
|
|
330
|
+
line = line.strip
|
|
331
|
+
if capture
|
|
332
|
+
if capture && line =~ /^#+ by (.*) on (.*(AM|PM))/
|
|
333
|
+
user = Origen.fsl.find_by_name(Regexp.last_match(1))
|
|
334
|
+
return user if user
|
|
335
|
+
return Regexp.last_match(1)
|
|
336
|
+
end
|
|
337
|
+
else
|
|
338
|
+
if line =~ /Tag:/
|
|
339
|
+
line = line.gsub('\\', '')
|
|
340
|
+
if line =~ /^#+ Tag: #{version}$/ ||
|
|
341
|
+
line =~ />Tag: #{version}</
|
|
342
|
+
capture = true
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
end
|
|
347
|
+
nil
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
# Returns the branch for the current or given application version
|
|
351
|
+
def branch(version = Origen.app.version.prefixed)
|
|
352
|
+
version = VersionString.new(version)
|
|
353
|
+
version = version.prefixed if version.semantic?
|
|
354
|
+
capture = false
|
|
355
|
+
File.readlines("#{Origen.root}/doc/history").each do |line|
|
|
356
|
+
line = line.strip
|
|
357
|
+
if capture
|
|
358
|
+
if capture && line =~ /^#+ .*(Selector|Branch): '(.*)'/
|
|
359
|
+
return Regexp.last_match(2).gsub('\\', '')
|
|
360
|
+
end
|
|
361
|
+
else
|
|
362
|
+
if line =~ /Tag:/
|
|
363
|
+
line = line.gsub('\\', '')
|
|
364
|
+
if line =~ /^#+ Tag: #{version}$/ ||
|
|
365
|
+
line =~ />Tag: #{version}</
|
|
366
|
+
capture = true
|
|
367
|
+
end
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
end
|
|
371
|
+
nil
|
|
372
|
+
end
|
|
373
|
+
alias_method :selector, :branch
|
|
374
|
+
|
|
375
|
+
def previous_versions
|
|
376
|
+
versions = []
|
|
377
|
+
File.readlines("#{Origen.root}/doc/history").each do |line|
|
|
378
|
+
line = line.strip
|
|
379
|
+
if line =~ /^#+ Tag: (.*)$/ ||
|
|
380
|
+
line =~ />Tag: ([^<]*)</
|
|
381
|
+
versions << Regexp.last_match(1).gsub('\\', '')
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
versions.uniq
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
def contributors
|
|
388
|
+
c = []
|
|
389
|
+
File.readlines("#{Origen.root}/doc/history").each do |line|
|
|
390
|
+
if line =~ /^#+ by (.*) on /
|
|
391
|
+
c << Regexp.last_match(1)
|
|
392
|
+
end
|
|
393
|
+
end
|
|
394
|
+
c.uniq
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
def config
|
|
398
|
+
@config ||= Configuration.new(self)
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
# Returns the name of the given application, this is the name that will
|
|
402
|
+
# be used to refer to the application when it is used as a plugin
|
|
403
|
+
def name
|
|
404
|
+
(@name ||= namespace).to_s.underscore.symbolize
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
def gem_name
|
|
408
|
+
(Origen.app.config.gem_name || name).symbolize
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
def plugins_manager
|
|
412
|
+
@plugins_manager ||= PluginsManager.new
|
|
413
|
+
end
|
|
414
|
+
alias_method :plugin_manager, :plugins_manager
|
|
415
|
+
alias_method :current_plugin, :plugins_manager
|
|
416
|
+
|
|
417
|
+
def target
|
|
418
|
+
@target ||= Target.new
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
def environment
|
|
422
|
+
@environment ||= Environment.new
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
def lsf
|
|
426
|
+
@lsf ||= LSF.new
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
def runner
|
|
430
|
+
@runner ||= Runner.new
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
def deployer
|
|
434
|
+
@deployer ||= Deployer.new
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
def lsf_manager
|
|
438
|
+
@lsf_manager ||= LSFManager.new
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
def version_tracker
|
|
442
|
+
@version_tracker ||= VersionTracker.new
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
def workspace_manager
|
|
446
|
+
@workspace_manager ||= WorkspaceManager.new
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
def mailer
|
|
450
|
+
@mailer ||= Utility::Mailer.new
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
def db
|
|
454
|
+
@db ||= Database::KeyValueStores.new(self)
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
def session
|
|
458
|
+
@session ||= Database::KeyValueStores.new(self, persist: false)
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
def pdm_component
|
|
462
|
+
return @pdm_component if @pdm_component
|
|
463
|
+
require "#{Origen.root}/config/pdm_component"
|
|
464
|
+
begin
|
|
465
|
+
@pdm_component = (eval "#{Origen.app.class}::PDMComponent").new
|
|
466
|
+
rescue
|
|
467
|
+
# Try legacy case where the namespace was just Application
|
|
468
|
+
@pdm_component = ::Application::PDMComponent.new
|
|
469
|
+
end
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
def versions
|
|
473
|
+
version_tracker.versions
|
|
474
|
+
end
|
|
475
|
+
|
|
476
|
+
def release(options)
|
|
477
|
+
@release ||= Release.new
|
|
478
|
+
@release.run(options)
|
|
479
|
+
end
|
|
480
|
+
|
|
481
|
+
def statistics
|
|
482
|
+
runner.statistics
|
|
483
|
+
end
|
|
484
|
+
alias_method :stats, :statistics
|
|
485
|
+
|
|
486
|
+
def configuration_manager
|
|
487
|
+
@cm ||= ConfigurationManager.new
|
|
488
|
+
end
|
|
489
|
+
alias_method :cm, :configuration_manager
|
|
490
|
+
|
|
491
|
+
def pattern_iterators
|
|
492
|
+
@pattern_iterators ||= []
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
def callback_listeners
|
|
496
|
+
current = Origen.current_plugin.instance
|
|
497
|
+
applications = [self]
|
|
498
|
+
applications << current if current
|
|
499
|
+
applications + instantiated_callback_listeners
|
|
500
|
+
end
|
|
501
|
+
|
|
502
|
+
def instantiated_callback_listeners
|
|
503
|
+
dynamic_resource(:callback_listeners, []) + (@persistant_callback_listeners || [])
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
def toplevel_listeners
|
|
507
|
+
dynamic_resource(:toplevel_listeners, [])
|
|
508
|
+
end
|
|
509
|
+
|
|
510
|
+
def add_callback_listener(obj)
|
|
511
|
+
dynamic_resource(:callback_listeners, [], adding: true) << obj
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
def add_persistant_callback_listener(obj)
|
|
515
|
+
@persistant_callback_listeners ||= []
|
|
516
|
+
@persistant_callback_listeners << obj
|
|
517
|
+
@persistant_callback_listeners.uniq!
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
def add_toplevel_listener(obj)
|
|
521
|
+
if Origen.top_level
|
|
522
|
+
puts "Attempt to set an instance of #{obj.class} as the top level when there is already an instance of #{Origen.top_level.class} defined as the top-level!"
|
|
523
|
+
fail 'Only one object that include the Origen::TopLevel module can be instantiated per target!'
|
|
524
|
+
end
|
|
525
|
+
$dut = obj
|
|
526
|
+
dynamic_resource(:toplevel_listeners, [], adding: true) << obj
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
# Any attempts to instantiate a test within the give block will be forced to instantiate
|
|
530
|
+
# an Origen::Tester::Doc instance
|
|
531
|
+
def with_doc_tester(options = {})
|
|
532
|
+
@with_doc_tester = true
|
|
533
|
+
if options[:html]
|
|
534
|
+
@with_html_doc_tester = true
|
|
535
|
+
end
|
|
536
|
+
yield
|
|
537
|
+
@with_doc_tester = false
|
|
538
|
+
@with_html_doc_tester = false
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
def with_doc_tester?
|
|
542
|
+
@with_doc_tester
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
def with_html_doc_tester?
|
|
546
|
+
@with_html_doc_tester
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
def tester
|
|
550
|
+
dynamic_resource(:tester, []).first
|
|
551
|
+
end
|
|
552
|
+
|
|
553
|
+
def tester=(obj)
|
|
554
|
+
# if tester && obj
|
|
555
|
+
# raise "You can only instantiate 1 tester, you have already created an instance of #{tester.class}}"
|
|
556
|
+
# end
|
|
557
|
+
set_dynamic_resource(:tester, [obj])
|
|
558
|
+
end
|
|
559
|
+
|
|
560
|
+
def pin_map
|
|
561
|
+
dynamic_resource(:pin_map, {})
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
def add_pin_to_pin_map(id, pin)
|
|
565
|
+
# If being added during target load...
|
|
566
|
+
if @load_event
|
|
567
|
+
pin_map[id] = pin
|
|
568
|
+
# Being added late in the process...
|
|
569
|
+
else
|
|
570
|
+
@transient_resources[:pin_map][id] = pin
|
|
571
|
+
end
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
def pingroup_map
|
|
575
|
+
dynamic_resource(:pingroup_map, {})
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
def add_pingroup_to_pingroup_map(id, pins)
|
|
579
|
+
# If being added during target load...
|
|
580
|
+
if @load_event
|
|
581
|
+
pingroup_map[id] = pins
|
|
582
|
+
# Being added late in the process...
|
|
583
|
+
else
|
|
584
|
+
@transient_resources[:pingroup_map][id] = pins
|
|
585
|
+
end
|
|
586
|
+
end
|
|
587
|
+
|
|
588
|
+
def pin_pattern_order
|
|
589
|
+
if @load_event
|
|
590
|
+
dynamic_resource(:pin_pattern_order, [])
|
|
591
|
+
else
|
|
592
|
+
@transient_resources[:pin_pattern_order] ||= []
|
|
593
|
+
end
|
|
594
|
+
end
|
|
595
|
+
|
|
596
|
+
def pin_pattern_exclude
|
|
597
|
+
if @load_event
|
|
598
|
+
dynamic_resource(:pin_pattern_exclude, [])
|
|
599
|
+
else
|
|
600
|
+
@transient_resources[:pin_pattern_exclude] ||= []
|
|
601
|
+
end
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
def pin_names
|
|
605
|
+
if @load_event
|
|
606
|
+
dynamic_resource(:pin_names, {})
|
|
607
|
+
else
|
|
608
|
+
@transient_resources[:pin_names] ||= {}
|
|
609
|
+
end
|
|
610
|
+
end
|
|
611
|
+
|
|
612
|
+
def load_console
|
|
613
|
+
load_target!
|
|
614
|
+
end
|
|
615
|
+
|
|
616
|
+
def load_target!(options = {})
|
|
617
|
+
options = {
|
|
618
|
+
force_debug: false
|
|
619
|
+
}.merge(options)
|
|
620
|
+
if options[:reload]
|
|
621
|
+
@target_load_count = 0
|
|
622
|
+
else
|
|
623
|
+
@target_load_count ||= 0
|
|
624
|
+
@target_load_count += 1
|
|
625
|
+
end
|
|
626
|
+
listeners_for(:before_load_target).each(&:before_load_target)
|
|
627
|
+
# Remember these if the target has to be reloaded
|
|
628
|
+
@target_load_options = options.merge({})
|
|
629
|
+
# Since this is a load it will re-instantiate any objects that the application
|
|
630
|
+
# declares here, the objects registered with origen should be refreshed accordingly
|
|
631
|
+
clear_dynamic_resources
|
|
632
|
+
load_event(:transient) do
|
|
633
|
+
Origen.config.mode = :production # Important since a production target may rely on the default
|
|
634
|
+
begin
|
|
635
|
+
$_target_options = @target_load_options
|
|
636
|
+
Origen.target.set_signature(@target_load_options)
|
|
637
|
+
$dut = nil
|
|
638
|
+
load environment.file if environment.file
|
|
639
|
+
load target.file!
|
|
640
|
+
ensure
|
|
641
|
+
$_target_options = nil
|
|
642
|
+
end
|
|
643
|
+
@target_instantiated = true
|
|
644
|
+
Origen.config.mode = :debug if options[:force_debug]
|
|
645
|
+
listeners_for(:on_create).each(&:on_create)
|
|
646
|
+
# Keep this within the load_event to ensure any objects that are further instantiated objects
|
|
647
|
+
# will be associated with (and cleared out upon reload of) the current target
|
|
648
|
+
listeners_for(:on_load_target).each(&:on_load_target)
|
|
649
|
+
end
|
|
650
|
+
listeners_for(:after_load_target).each(&:after_load_target)
|
|
651
|
+
Origen.import_manager.validate_production_status
|
|
652
|
+
# @target_instantiated = true
|
|
653
|
+
end
|
|
654
|
+
|
|
655
|
+
# Not a clean unload, but allows objects to be re-instantiated for testing
|
|
656
|
+
# @api private
|
|
657
|
+
def unload_target!
|
|
658
|
+
listeners_for(:before_load_target).each(&:before_load_target)
|
|
659
|
+
clear_dynamic_resources
|
|
660
|
+
clear_dynamic_resources(:static)
|
|
661
|
+
Origen::Pins.clear_pin_aliases
|
|
662
|
+
$dut = nil
|
|
663
|
+
end
|
|
664
|
+
|
|
665
|
+
# Equivalent to load_target! except that any options that were passed
|
|
666
|
+
# to load_target! the last time it was called will be re-applied when
|
|
667
|
+
# (re)loading the target.
|
|
668
|
+
def reload_target!(options = {})
|
|
669
|
+
old_options = @target_load_options || {}
|
|
670
|
+
options = (@target_load_options || {}).merge(options)
|
|
671
|
+
if options[:skip_first_time] && @target_load_count == 1
|
|
672
|
+
@target_load_count += 1
|
|
673
|
+
else
|
|
674
|
+
load_target!(options.merge(reload: true))
|
|
675
|
+
end
|
|
676
|
+
end
|
|
677
|
+
|
|
678
|
+
def set_dynamic_resource(name, value)
|
|
679
|
+
dynamic_resource(name, value, set: true)
|
|
680
|
+
end
|
|
681
|
+
|
|
682
|
+
# Enable for debugging to see what the currently tracked objects are
|
|
683
|
+
# def object_store
|
|
684
|
+
# [@load_event, @static_resources, @transient_resources]
|
|
685
|
+
# end
|
|
686
|
+
|
|
687
|
+
def dynamic_resource(name, default, options = {})
|
|
688
|
+
@static_resources ||= {}
|
|
689
|
+
@transient_resources ||= {}
|
|
690
|
+
if @load_event == :static ||
|
|
691
|
+
(!@load_event && options[:adding])
|
|
692
|
+
if options[:set]
|
|
693
|
+
@static_resources[name] = default
|
|
694
|
+
else
|
|
695
|
+
@static_resources[name] ||= default
|
|
696
|
+
end
|
|
697
|
+
elsif @load_event == :transient
|
|
698
|
+
if options[:set]
|
|
699
|
+
@transient_resources[name] = default
|
|
700
|
+
else
|
|
701
|
+
@transient_resources[name] ||= default
|
|
702
|
+
end
|
|
703
|
+
else
|
|
704
|
+
static = @static_resources[name] ||= default
|
|
705
|
+
transient = @transient_resources[name] ||= default
|
|
706
|
+
if static.respond_to?('+')
|
|
707
|
+
static + transient
|
|
708
|
+
else
|
|
709
|
+
static.merge(transient)
|
|
710
|
+
end
|
|
711
|
+
end
|
|
712
|
+
end
|
|
713
|
+
|
|
714
|
+
def clear_dynamic_resources(type = :transient)
|
|
715
|
+
if type == :transient
|
|
716
|
+
@transient_resources = nil
|
|
717
|
+
else
|
|
718
|
+
@static_resources = nil
|
|
719
|
+
end
|
|
720
|
+
end
|
|
721
|
+
|
|
722
|
+
def load_event(type)
|
|
723
|
+
@load_event = type
|
|
724
|
+
yield
|
|
725
|
+
@load_event = nil
|
|
726
|
+
end
|
|
727
|
+
|
|
728
|
+
def target_instantiated?
|
|
729
|
+
@target_instantiated
|
|
730
|
+
end
|
|
731
|
+
|
|
732
|
+
# This method is called just after an application inherits from Origen::Application,
|
|
733
|
+
# allowing the developer to load classes in lib and use them during application
|
|
734
|
+
# configuration.
|
|
735
|
+
#
|
|
736
|
+
# class MyApplication < Origen::Application
|
|
737
|
+
# require "my_backend" # in lib/my_backend
|
|
738
|
+
# config.i18n.backend = MyBackend
|
|
739
|
+
# end
|
|
740
|
+
def add_lib_to_load_path! #:nodoc:
|
|
741
|
+
[root.join('lib'), root.join('vendor', 'lib')].each do |path|
|
|
742
|
+
$LOAD_PATH.unshift(path.to_s) if File.exist?(path) && !$LOAD_PATH.include?(path.to_s)
|
|
743
|
+
end
|
|
744
|
+
end
|
|
745
|
+
end
|
|
746
|
+
end
|