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,246 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
module Origen
|
|
3
|
+
class Application
|
|
4
|
+
autoload :Statistics, 'origen/application/statistics'
|
|
5
|
+
|
|
6
|
+
# The Runner is responsible for co-ordinating all compile and generate
|
|
7
|
+
# requests from the command line
|
|
8
|
+
class Runner
|
|
9
|
+
attr_accessor :options
|
|
10
|
+
|
|
11
|
+
# Launch Origen, any command which generates an output file should launch from here
|
|
12
|
+
# as it gives a common point for listeners to hook in and to establish output
|
|
13
|
+
# directories and so on.
|
|
14
|
+
#
|
|
15
|
+
# Originally this method was called generate but that is now deprecated in favour
|
|
16
|
+
# of the more generic 'launch' as the Origen feature set has expanded.
|
|
17
|
+
def launch(options = {})
|
|
18
|
+
# Clean up the input from legacy code
|
|
19
|
+
options[:action] = extract_action(options)
|
|
20
|
+
options[:files] = extract_files(options)
|
|
21
|
+
@options = options
|
|
22
|
+
prepare_and_validate_workspace(options)
|
|
23
|
+
if options[:lsf]
|
|
24
|
+
record_invocation(options) do
|
|
25
|
+
prepare_for_lsf
|
|
26
|
+
Origen.app.listeners_for(:before_lsf_submission).each(&:before_lsf_submission)
|
|
27
|
+
expand_lists_and_directories(options[:files], options).each do |file|
|
|
28
|
+
Origen.app.lsf_manager.submit_origen_job(file, options)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
Origen.log.info ''
|
|
32
|
+
Origen.log.info 'Monitor status of remote jobs via:'
|
|
33
|
+
Origen.log.info ' origen l'
|
|
34
|
+
else
|
|
35
|
+
Origen.log.info '*' * 70 unless options[:quiet]
|
|
36
|
+
Origen.app.listeners_for(:before_generate).each do |listener|
|
|
37
|
+
if listener.class.instance_method(:before_generate).arity == 0
|
|
38
|
+
listener.before_generate
|
|
39
|
+
else
|
|
40
|
+
listener.before_generate(options)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
if Origen.running_remotely?
|
|
44
|
+
Origen.app.listeners_for(:before_generate_remote).each do |listener|
|
|
45
|
+
if listener.class.instance_method(:before_generate_remote).arity == 0
|
|
46
|
+
listener.before_generate_remote
|
|
47
|
+
else
|
|
48
|
+
listener.before_generate_remote(options)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
else
|
|
52
|
+
Origen.app.listeners_for(:before_generate_local).each do |listener|
|
|
53
|
+
if listener.class.instance_method(:before_generate_local).arity == 0
|
|
54
|
+
listener.before_generate_local
|
|
55
|
+
else
|
|
56
|
+
listener.before_generate_local(options)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
record_invocation(options) do
|
|
62
|
+
case options[:action]
|
|
63
|
+
when :forecast_test_time
|
|
64
|
+
Origen.time.forecast_test_time(options)
|
|
65
|
+
else
|
|
66
|
+
if options[:action] == :program
|
|
67
|
+
Origen.generator.generate_program(expand_lists_and_directories(options[:files], options), options)
|
|
68
|
+
else
|
|
69
|
+
temporary_plugin_from_options = options[:current_plugin]
|
|
70
|
+
expand_lists_and_directories(options[:files], options).each do |file|
|
|
71
|
+
if temporary_plugin_from_options
|
|
72
|
+
Origen.current_plugin.temporary = temporary_plugin_from_options
|
|
73
|
+
end
|
|
74
|
+
case options[:action]
|
|
75
|
+
when :compile
|
|
76
|
+
Origen.generator.compile_file_or_directory(file, options)
|
|
77
|
+
when :merge
|
|
78
|
+
Origen.generator.merge_file_or_directory(file, options)
|
|
79
|
+
when :import_test_time
|
|
80
|
+
Origen.time.import_test_time(file, options)
|
|
81
|
+
when :import_test_flow
|
|
82
|
+
Origen.time.import_test_flow(file, options)
|
|
83
|
+
else
|
|
84
|
+
Origen.generator.generate_pattern(file, options)
|
|
85
|
+
end
|
|
86
|
+
if temporary_plugin_from_options
|
|
87
|
+
Origen.current_plugin.default
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
unless options[:quiet]
|
|
95
|
+
Origen.log.info '*' * 70
|
|
96
|
+
stats.print_summary unless options[:action] == :merge
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
alias_method :generate, :launch
|
|
101
|
+
|
|
102
|
+
def prepare_and_validate_workspace(options = {})
|
|
103
|
+
confirm_production_ready(options)
|
|
104
|
+
prepare_directories(options)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Post an invocation to the Origen server for usage statistics tracking.
|
|
108
|
+
#
|
|
109
|
+
# Posting an invocation was found to add ~0.5s to all command times,
|
|
110
|
+
# so here we run it in a separate thread to try and hide it behind
|
|
111
|
+
# the user's command.
|
|
112
|
+
#
|
|
113
|
+
# @api private
|
|
114
|
+
def record_invocation(options)
|
|
115
|
+
record_invocation = false
|
|
116
|
+
begin
|
|
117
|
+
# Only record user invocations at this time, also bypass windows since it seems
|
|
118
|
+
# that threads can't be trusted not to block
|
|
119
|
+
unless Origen.running_remotely? # || Origen.running_on_windows?
|
|
120
|
+
record_invocation = Thread.new do
|
|
121
|
+
Origen.client.record_invocation(options[:action]) if options[:action]
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
rescue
|
|
125
|
+
# Don't allow this to kill an origen command
|
|
126
|
+
end
|
|
127
|
+
yield
|
|
128
|
+
begin
|
|
129
|
+
unless Origen.running_remotely?
|
|
130
|
+
# Wait for a server response, ideally would like to not wait here, but it seems if not
|
|
131
|
+
# then invocation postings can be dropped, especially on windows
|
|
132
|
+
Origen.profile 'waiting for recording invocation' do
|
|
133
|
+
record_invocation.value
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
rescue
|
|
137
|
+
# Don't allow this to kill an origen command
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# The action to take should be set by the action option, but legacy code will pass
|
|
142
|
+
# things like :compile => true, the extract_action method handles the old code
|
|
143
|
+
def extract_action(options)
|
|
144
|
+
return options[:action] if options[:action]
|
|
145
|
+
if options[:compile]
|
|
146
|
+
:compile
|
|
147
|
+
elsif options[:program]
|
|
148
|
+
:program
|
|
149
|
+
elsif options[:job_type] == :merge
|
|
150
|
+
:merge
|
|
151
|
+
else
|
|
152
|
+
:pattern
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Legacy file references can be input via :pattern, :patterns, etc. this
|
|
157
|
+
# cleans it up and forces them all to be in an array assigned to options[:files]
|
|
158
|
+
def extract_files(options)
|
|
159
|
+
files = [options[:pattern]] + [options[:patterns]] + [options[:file]] + [options[:files]]
|
|
160
|
+
files.flatten!
|
|
161
|
+
files.compact!
|
|
162
|
+
files
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def shutdown
|
|
166
|
+
if Origen.app.stats.failed_files > 0 ||
|
|
167
|
+
Origen.app.stats.failed_patterns > 0
|
|
168
|
+
exit 1
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Expands any list references in the supplied pattern array and
|
|
173
|
+
# returns an array of pattern names. No guarantee is made to
|
|
174
|
+
# whether the pattern names are valid at this stage.
|
|
175
|
+
# Any duplicates will be removed.
|
|
176
|
+
def expand_lists_and_directories(files, options = {})
|
|
177
|
+
Origen.file_handler.expand_list(files, options)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def statistics
|
|
181
|
+
@statistics ||= Statistics.new(options)
|
|
182
|
+
end
|
|
183
|
+
alias_method :stats, :statistics
|
|
184
|
+
|
|
185
|
+
def prepare_for_lsf
|
|
186
|
+
if options[:lsf]
|
|
187
|
+
# Build an options string for saving with the LSF job that represents this runtime environment
|
|
188
|
+
str = "-t #{Origen.target.file.basename}"
|
|
189
|
+
if Origen.environment.file
|
|
190
|
+
str += " --environment #{Origen.environment.file.basename}"
|
|
191
|
+
end
|
|
192
|
+
if options[:output]
|
|
193
|
+
str += " -o #{options[:output]}"
|
|
194
|
+
end
|
|
195
|
+
if options[:reference]
|
|
196
|
+
str += " -r #{options[:reference]}"
|
|
197
|
+
end
|
|
198
|
+
options[:lsf_option_string] = str
|
|
199
|
+
# Clear the LSF manager job list if specifically requested or if that is the default action and
|
|
200
|
+
# no specific action has been requested
|
|
201
|
+
if options[:lsf_action]
|
|
202
|
+
if options[:lsf_action] == :clear
|
|
203
|
+
Origen.app.lsf_manager.clear_all
|
|
204
|
+
end
|
|
205
|
+
elsif Origen.config.default_lsf_action == :clear
|
|
206
|
+
Origen.app.lsf_manager.clear_all
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def prepare_directories(options = {})
|
|
212
|
+
# When running remotely on the LSF never create directories to
|
|
213
|
+
# prevent race conditions as multiple processes run concurrently,
|
|
214
|
+
# instead assume they were already created by the runner who
|
|
215
|
+
# submitted the job.
|
|
216
|
+
Origen.file_handler.set_output_directory(options.merge(create: Origen.running_locally?))
|
|
217
|
+
Origen.file_handler.set_reference_directory(options.merge(create: Origen.running_locally?))
|
|
218
|
+
tmp = "#{Origen.root}/tmp"
|
|
219
|
+
FileUtils.mkdir(tmp) unless File.exist?(tmp)
|
|
220
|
+
if Origen.running_locally?
|
|
221
|
+
mkdir Origen::Log.log_file_directory
|
|
222
|
+
mkdir "#{Origen.root}/.lsf"
|
|
223
|
+
end
|
|
224
|
+
if options[:lsf]
|
|
225
|
+
mkdir Origen.app.lsf_manager.log_file_directory
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# Make the given directory if it doesn't exist, must be a full path
|
|
230
|
+
def mkdir(dir)
|
|
231
|
+
unless File.exist?(dir)
|
|
232
|
+
FileUtils.mkdir_p(dir)
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def confirm_production_ready(_options = {})
|
|
237
|
+
# The caller would have already verified the status before submission
|
|
238
|
+
if Origen.running_locally?
|
|
239
|
+
if Origen.mode.production?
|
|
240
|
+
Origen.app.cm.ensure_workspace_unmodified!
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
module Origen
|
|
2
|
+
class Application
|
|
3
|
+
# Responsible for keeping track of all stats collected during a run
|
|
4
|
+
class Statistics
|
|
5
|
+
attr_accessor :completed_files, :failed_files, :missing_files,
|
|
6
|
+
:new_files, :changed_files
|
|
7
|
+
attr_accessor :completed_patterns, :failed_patterns, :missing_patterns,
|
|
8
|
+
:new_patterns, :changed_patterns
|
|
9
|
+
attr_accessor :total_vectors, :total_cycles, :total_duration, :errors
|
|
10
|
+
|
|
11
|
+
class Pattern
|
|
12
|
+
attr_accessor :vectors, :cycles, :duration
|
|
13
|
+
def initialize
|
|
14
|
+
@vectors = 0
|
|
15
|
+
@cycles = 0
|
|
16
|
+
@duration = 0
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def initialize(options)
|
|
21
|
+
@options = options
|
|
22
|
+
@patterns = {}
|
|
23
|
+
reset_global_stats
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def reset_global_stats
|
|
27
|
+
@completed_files = 0
|
|
28
|
+
@failed_files = 0
|
|
29
|
+
@missing_files = 0
|
|
30
|
+
@new_files = 0
|
|
31
|
+
@changed_files = 0
|
|
32
|
+
|
|
33
|
+
@completed_patterns = 0
|
|
34
|
+
@failed_patterns = 0
|
|
35
|
+
@missing_patterns = 0
|
|
36
|
+
@new_patterns = 0
|
|
37
|
+
@changed_patterns = 0
|
|
38
|
+
|
|
39
|
+
@total_vectors = 0
|
|
40
|
+
@total_cycles = 0
|
|
41
|
+
@total_duration = 0
|
|
42
|
+
|
|
43
|
+
@errors = 0
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def reset_pattern_stats
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def print_summary
|
|
50
|
+
method = clean_run? ? :success : :info
|
|
51
|
+
if @completed_patterns > 0 || @failed_patterns > 0
|
|
52
|
+
Origen.log.send method, "Total patterns: #{@completed_patterns}"
|
|
53
|
+
Origen.log.send method, "Total vectors: #{@total_vectors}"
|
|
54
|
+
Origen.log.send method, 'Total duration: %.6f' % @total_duration
|
|
55
|
+
Origen.log.send method, "New patterns: #{@new_patterns}"
|
|
56
|
+
if @changed_patterns > 0
|
|
57
|
+
Origen.log.warn "Changed patterns: #{@changed_patterns}"
|
|
58
|
+
else
|
|
59
|
+
Origen.log.send method, "Changed patterns: #{@changed_patterns}"
|
|
60
|
+
end
|
|
61
|
+
Origen.log.error "FAILED patterns: #{@failed_patterns}" if @failed_patterns > 0
|
|
62
|
+
Origen.log.info
|
|
63
|
+
end
|
|
64
|
+
if @completed_files > 0 || @failed_files > 0
|
|
65
|
+
Origen.log.send method, "Total files: #{@completed_files}"
|
|
66
|
+
Origen.log.send method, "New files: #{@new_files}"
|
|
67
|
+
Origen.log.send method, "Changed files: #{@changed_files}"
|
|
68
|
+
Origen.log.error "FAILED files: #{@failed_files}" if @failed_files > 0
|
|
69
|
+
Origen.log.info
|
|
70
|
+
end
|
|
71
|
+
if @errors > 0
|
|
72
|
+
Origen.log.error "ERRORS: #{@errors}"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
if @changed_files > 0 || @changed_patterns > 0
|
|
76
|
+
changes = true
|
|
77
|
+
Origen.log.info 'To accept all of these changes run:'
|
|
78
|
+
Origen.log.info ' origen save changed'
|
|
79
|
+
end
|
|
80
|
+
if @new_files > 0 || @new_patterns > 0
|
|
81
|
+
news = true
|
|
82
|
+
Origen.log.info 'To save all of these new files as the reference version run:'
|
|
83
|
+
Origen.log.info ' origen save new'
|
|
84
|
+
end
|
|
85
|
+
if changes && news
|
|
86
|
+
Origen.log.info 'To save both new and changed files run:'
|
|
87
|
+
Origen.log.info ' origen save all'
|
|
88
|
+
end
|
|
89
|
+
Origen.log.info '**********************************************************************'
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def summary_text
|
|
93
|
+
<<-END
|
|
94
|
+
Total patterns: #{@completed_patterns}
|
|
95
|
+
New patterns: #{@new_patterns}
|
|
96
|
+
Changed patterns: #{@changed_patterns}
|
|
97
|
+
FAILED patterns: #{@failed_patterns}
|
|
98
|
+
|
|
99
|
+
Total files: #{@completed_files}
|
|
100
|
+
New files: #{@new_files}
|
|
101
|
+
Changed files: #{@changed_files}
|
|
102
|
+
FAILED files: #{@failed_files}
|
|
103
|
+
|
|
104
|
+
ERRORS: #{@errors}
|
|
105
|
+
END
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def clean_run?
|
|
109
|
+
@changed_files == 0 && @changed_patterns == 0 &&
|
|
110
|
+
@new_files == 0 && @new_patterns == 0 &&
|
|
111
|
+
@failed_files == 0 && @failed_patterns == 0 &&
|
|
112
|
+
@errors == 0
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def record_failed_pattern
|
|
116
|
+
@failed_patterns += 1
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def record_missing_pattern
|
|
120
|
+
@missing_patterns += 1
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def add_vector(x = 1)
|
|
124
|
+
current_pattern.vectors += x
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def add_cycle(x = 1)
|
|
128
|
+
current_pattern.cycles += x
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def add_time_in_ns(x)
|
|
132
|
+
current_pattern.duration += x
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def collect_for_pattern(key)
|
|
136
|
+
@pattern_key = key
|
|
137
|
+
yield
|
|
138
|
+
@pattern_key = nil
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def current_pattern
|
|
142
|
+
pattern(@pattern_key)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def pattern(key)
|
|
146
|
+
@patterns[key] ||= Pattern.new
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def number_of_vectors_for(key)
|
|
150
|
+
pattern(key).vectors
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def number_of_cycles_for(key)
|
|
154
|
+
pattern(key).vectors
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def execution_time_for(key)
|
|
158
|
+
pattern(key).duration.to_f / 1_000_000_000
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def record_pattern_completion(key)
|
|
162
|
+
@completed_patterns += 1
|
|
163
|
+
@total_vectors += number_of_vectors_for(key)
|
|
164
|
+
@total_cycles += number_of_cycles_for(key)
|
|
165
|
+
@total_duration += execution_time_for(key)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def report_pass
|
|
169
|
+
Origen.log.success ''
|
|
170
|
+
Origen.log.success ' PPPPP AA SSSS SSSS'
|
|
171
|
+
Origen.log.success ' PP PP AAAA SS SS SS SS'
|
|
172
|
+
Origen.log.success ' PPPPP AA AA SS SS'
|
|
173
|
+
Origen.log.success ' PP AAAAAAAA SS SS'
|
|
174
|
+
Origen.log.success ' PP AA AA SS SS SS SS'
|
|
175
|
+
Origen.log.success ' PP AA AA SSSS SSSS'
|
|
176
|
+
Origen.log.success ''
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def report_fail
|
|
180
|
+
Origen.log.error ''
|
|
181
|
+
Origen.log.error ' FFFFFF AA II LL'
|
|
182
|
+
Origen.log.error ' FF AAAA II LL'
|
|
183
|
+
Origen.log.error ' FFFFF AA AA II LL'
|
|
184
|
+
Origen.log.error ' FF AAAAAAAA II LL'
|
|
185
|
+
Origen.log.error ' FF AA AA II LL'
|
|
186
|
+
Origen.log.error ' FF AA AA II LLLLLL'
|
|
187
|
+
Origen.log.error ''
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
end
|