origen 0.2.6 → 0.3.0

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 (158) hide show
  1. checksums.yaml +4 -4
  2. data/bin/origen +3 -1
  3. data/config/boot.rb +1 -7
  4. data/config/commands.rb +0 -1
  5. data/config/version.rb +2 -2
  6. data/lib/c99/{j750_interface.rb → ate_interface.rb} +3 -11
  7. data/lib/c99/doc_interface.rb +1 -1
  8. data/lib/origen.rb +9 -30
  9. data/lib/origen/application.rb +10 -8
  10. data/lib/origen/application/configuration.rb +13 -26
  11. data/lib/origen/application/plugins.rb +122 -0
  12. data/lib/origen/application/plugins_manager.rb +16 -254
  13. data/lib/origen/application/release.rb +2 -2
  14. data/lib/origen/application/runner.rb +2 -4
  15. data/lib/origen/chips.rb +0 -0
  16. data/lib/origen/chips/chip.rb +0 -0
  17. data/lib/origen/chips/design_entry.rb +0 -0
  18. data/lib/origen/chips/doc_entry.rb +0 -0
  19. data/lib/origen/chips/note.rb +0 -0
  20. data/lib/origen/commands.rb +4 -44
  21. data/lib/origen/commands/compile.rb +1 -2
  22. data/lib/origen/commands/generate.rb +1 -1
  23. data/lib/origen/commands/interactive.rb +1 -2
  24. data/lib/origen/commands/plugin.rb +49 -56
  25. data/lib/origen/commands/program.rb +1 -1
  26. data/lib/origen/commands/rc.rb +2 -2
  27. data/lib/origen/commands/version.rb +2 -17
  28. data/lib/origen/commands_global.rb +3 -0
  29. data/lib/origen/file_handler.rb +10 -10
  30. data/lib/origen/generator.rb +1 -1
  31. data/lib/origen/generator/job.rb +1 -1
  32. data/lib/origen/generator/pattern.rb +2 -2
  33. data/lib/origen/generator/pattern_finder.rb +10 -9
  34. data/lib/origen/pins/pin.rb +0 -0
  35. data/lib/origen/regression_manager.rb +0 -0
  36. data/lib/origen/remote_manager.rb +2 -8
  37. data/lib/origen/revision_control/design_sync.rb +0 -0
  38. data/lib/origen/revision_control/git.rb +0 -0
  39. data/lib/origen/specs.rb +0 -0
  40. data/lib/origen/specs/checkers.rb +0 -0
  41. data/lib/origen/specs/creation_info.rb +0 -0
  42. data/lib/origen/specs/exhibit.rb +0 -0
  43. data/lib/origen/specs/spec.rb +0 -0
  44. data/lib/origen/utility.rb +0 -1
  45. data/lib/origen/utility/diff.rb +0 -0
  46. metadata +42 -119
  47. data/lib/origen/import_manager.rb +0 -596
  48. data/lib/origen/nvm.rb +0 -6
  49. data/lib/origen/nvm/block_array.rb +0 -72
  50. data/lib/origen/tester.rb +0 -56
  51. data/lib/origen/tester/api.rb +0 -277
  52. data/lib/origen/tester/bdm/bdm.rb +0 -25
  53. data/lib/origen/tester/doc/doc.rb +0 -226
  54. data/lib/origen/tester/doc/generator.rb +0 -126
  55. data/lib/origen/tester/doc/generator/flow.rb +0 -71
  56. data/lib/origen/tester/doc/generator/flow_line.rb +0 -203
  57. data/lib/origen/tester/doc/generator/test.rb +0 -68
  58. data/lib/origen/tester/doc/generator/test_group.rb +0 -66
  59. data/lib/origen/tester/doc/generator/tests.rb +0 -47
  60. data/lib/origen/tester/doc/model.rb +0 -162
  61. data/lib/origen/tester/generator.rb +0 -271
  62. data/lib/origen/tester/generator/flow_control_api.rb +0 -606
  63. data/lib/origen/tester/generator/identity_map.rb +0 -25
  64. data/lib/origen/tester/generator/placeholder.rb +0 -13
  65. data/lib/origen/tester/generator/test_numberer.rb +0 -25
  66. data/lib/origen/tester/interface.rb +0 -154
  67. data/lib/origen/tester/j750/files.rb +0 -45
  68. data/lib/origen/tester/j750/generator.rb +0 -203
  69. data/lib/origen/tester/j750/generator/flow.rb +0 -123
  70. data/lib/origen/tester/j750/generator/flow_line.rb +0 -288
  71. data/lib/origen/tester/j750/generator/patgroup.rb +0 -111
  72. data/lib/origen/tester/j750/generator/patgroups.rb +0 -41
  73. data/lib/origen/tester/j750/generator/patset.rb +0 -111
  74. data/lib/origen/tester/j750/generator/patsets.rb +0 -41
  75. data/lib/origen/tester/j750/generator/templates/flow.txt.erb +0 -9
  76. data/lib/origen/tester/j750/generator/templates/instances.txt.erb +0 -16
  77. data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +0 -8
  78. data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +0 -10
  79. data/lib/origen/tester/j750/generator/test_instance.rb +0 -846
  80. data/lib/origen/tester/j750/generator/test_instance_group.rb +0 -60
  81. data/lib/origen/tester/j750/generator/test_instances.rb +0 -182
  82. data/lib/origen/tester/j750/j750.rb +0 -845
  83. data/lib/origen/tester/j750/j750_hpt.rb +0 -35
  84. data/lib/origen/tester/j750/parser.rb +0 -104
  85. data/lib/origen/tester/j750/parser/ac_spec.rb +0 -11
  86. data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
  87. data/lib/origen/tester/j750/parser/dc_spec.rb +0 -36
  88. data/lib/origen/tester/j750/parser/dc_specs.rb +0 -50
  89. data/lib/origen/tester/j750/parser/descriptions.rb +0 -340
  90. data/lib/origen/tester/j750/parser/flow.rb +0 -111
  91. data/lib/origen/tester/j750/parser/flow_line.rb +0 -207
  92. data/lib/origen/tester/j750/parser/flows.rb +0 -23
  93. data/lib/origen/tester/j750/parser/pattern_set.rb +0 -94
  94. data/lib/origen/tester/j750/parser/pattern_sets.rb +0 -33
  95. data/lib/origen/tester/j750/parser/test_instance.rb +0 -322
  96. data/lib/origen/tester/j750/parser/test_instances.rb +0 -26
  97. data/lib/origen/tester/j750/parser/timeset.rb +0 -15
  98. data/lib/origen/tester/j750/parser/timesets.rb +0 -0
  99. data/lib/origen/tester/jlink/jlink.rb +0 -33
  100. data/lib/origen/tester/parser.rb +0 -24
  101. data/lib/origen/tester/parser/description_lookup.rb +0 -64
  102. data/lib/origen/tester/parser/searchable_array.rb +0 -32
  103. data/lib/origen/tester/parser/searchable_hash.rb +0 -32
  104. data/lib/origen/tester/time.rb +0 -338
  105. data/lib/origen/tester/timing.rb +0 -253
  106. data/lib/origen/tester/ultraflex/files.rb +0 -45
  107. data/lib/origen/tester/ultraflex/generator.rb +0 -200
  108. data/lib/origen/tester/ultraflex/generator/flow.rb +0 -119
  109. data/lib/origen/tester/ultraflex/generator/flow_line.rb +0 -269
  110. data/lib/origen/tester/ultraflex/generator/patgroup.rb +0 -111
  111. data/lib/origen/tester/ultraflex/generator/patgroups.rb +0 -41
  112. data/lib/origen/tester/ultraflex/generator/patset.rb +0 -111
  113. data/lib/origen/tester/ultraflex/generator/patsets.rb +0 -41
  114. data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +0 -9
  115. data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +0 -16
  116. data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +0 -8
  117. data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +0 -10
  118. data/lib/origen/tester/ultraflex/generator/test_instance.rb +0 -622
  119. data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +0 -60
  120. data/lib/origen/tester/ultraflex/generator/test_instances.rb +0 -174
  121. data/lib/origen/tester/ultraflex/parser.rb +0 -104
  122. data/lib/origen/tester/ultraflex/parser/ac_spec.rb +0 -11
  123. data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
  124. data/lib/origen/tester/ultraflex/parser/dc_spec.rb +0 -36
  125. data/lib/origen/tester/ultraflex/parser/dc_specs.rb +0 -50
  126. data/lib/origen/tester/ultraflex/parser/descriptions.rb +0 -342
  127. data/lib/origen/tester/ultraflex/parser/flow.rb +0 -111
  128. data/lib/origen/tester/ultraflex/parser/flow_line.rb +0 -207
  129. data/lib/origen/tester/ultraflex/parser/flows.rb +0 -23
  130. data/lib/origen/tester/ultraflex/parser/pattern_set.rb +0 -94
  131. data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +0 -33
  132. data/lib/origen/tester/ultraflex/parser/test_instance.rb +0 -262
  133. data/lib/origen/tester/ultraflex/parser/test_instances.rb +0 -26
  134. data/lib/origen/tester/ultraflex/parser/timeset.rb +0 -15
  135. data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
  136. data/lib/origen/tester/ultraflex/ultraflex.rb +0 -759
  137. data/lib/origen/tester/v93k/generator.rb +0 -80
  138. data/lib/origen/tester/v93k/generator/flow.rb +0 -63
  139. data/lib/origen/tester/v93k/generator/flow_node.rb +0 -17
  140. data/lib/origen/tester/v93k/generator/flow_node/print.rb +0 -10
  141. data/lib/origen/tester/v93k/generator/pattern.rb +0 -16
  142. data/lib/origen/tester/v93k/generator/pattern_master.rb +0 -54
  143. data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +0 -6
  144. data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +0 -11
  145. data/lib/origen/tester/v93k/generator/templates/template.flow.erb +0 -121
  146. data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +0 -9
  147. data/lib/origen/tester/v93k/generator/test_function.rb +0 -103
  148. data/lib/origen/tester/v93k/generator/test_functions.rb +0 -79
  149. data/lib/origen/tester/v93k/generator/test_method.rb +0 -46
  150. data/lib/origen/tester/v93k/generator/test_methods.rb +0 -75
  151. data/lib/origen/tester/v93k/generator/test_suite.rb +0 -54
  152. data/lib/origen/tester/v93k/generator/test_suites.rb +0 -65
  153. data/lib/origen/tester/v93k/v93k.rb +0 -420
  154. data/lib/origen/tester/vector.rb +0 -86
  155. data/lib/origen/tester/vector_generator.rb +0 -637
  156. data/lib/origen/tester/vector_pipeline.rb +0 -150
  157. data/lib/origen/utility/design_sync.rb +0 -494
  158. data/lib/origen/version_checker.rb +0 -117
@@ -1,35 +0,0 @@
1
- module Origen
2
- module Tester
3
- # rubocop:disable ClassAndModuleCamelCase
4
-
5
- # Tester model to generate .atp patterns for the Teradyne J750 in HPT mode
6
- #
7
- # == Basic Usage
8
- # $tester = J750_HPT.new
9
- # $tester.cycle # Generate a vector
10
- #
11
- # Many more methods exist to generate J750 specific micro-code, see J750
12
- # parent class definition for details.
13
- #
14
- # *Also note that this class inherits from the base Tester class and so all methods
15
- # described there are also available*
16
- class J750_HPT < J750
17
- def initialize
18
- super
19
- @@hpt_mode = true
20
- @drive_hi_state = '.1'
21
- @drive_lo_state = '.0'
22
- @expect_hi_state = '.H'
23
- @expect_lo_state = '.L'
24
- @dont_care_state = '.X'
25
- @overlay_state = '.V'
26
- @drive_very_hi_state = '.2'
27
- @drive_mem_state = '.D'
28
- @expect_mem_state = '.E'
29
- @name = 'j750_hpt'
30
- end
31
- end
32
-
33
- # rubocop:enable ClassAndModuleCamelCase
34
- end
35
- end
@@ -1,104 +0,0 @@
1
- module Origen
2
- module Tester
3
- class J750
4
- class Parser
5
- autoload :Flows, 'origen/tester/j750/parser/flows'
6
- autoload :Flow, 'origen/tester/j750/parser/flow'
7
- autoload :FlowLine, 'origen/tester/j750/parser/flow_line'
8
- autoload :TestInstances, 'origen/tester/j750/parser/test_instances'
9
- autoload :TestInstance, 'origen/tester/j750/parser/test_instance'
10
- autoload :PatternSets, 'origen/tester/j750/parser/pattern_sets'
11
- autoload :PatternSet, 'origen/tester/j750/parser/pattern_set'
12
- autoload :DCSpecs, 'origen/tester/j750/parser/dc_specs'
13
- autoload :DCSpec, 'origen/tester/j750/parser/dc_spec'
14
- autoload :ACSpecs, 'origen/tester/j750/parser/ac_specs'
15
- autoload :ACSpec, 'origen/tester/j750/parser/ac_spec'
16
- autoload :Descriptions, 'origen/tester/j750/parser/descriptions'
17
-
18
- def reset
19
- @flows = nil
20
- @test_instances = nil
21
- @pattern_sets = nil
22
- @dc_specs = nil
23
- @ac_specs = nil
24
- end
25
-
26
- def descriptions
27
- @descriptions ||= Descriptions.new(parser: self)
28
- end
29
-
30
- # Returns an array of test flows
31
- def flows
32
- @flows ||= Flows.new(parser: self)
33
- end
34
-
35
- def test_instances
36
- @test_instances ||= TestInstances.new(parser: self)
37
- end
38
- alias_method :instances, :test_instances
39
-
40
- def pattern_sets
41
- @pattern_sets ||= PatternSets.new(parser: self)
42
- end
43
- alias_method :patsets, :pattern_sets
44
- alias_method :pat_sets, :pattern_sets
45
-
46
- def dc_specs
47
- @dc_specs ||= DCSpecs.new(parser: self)
48
- end
49
-
50
- def ac_specs
51
- @ac_specs ||= ACSpecs.new(parser: self)
52
- end
53
-
54
- def inspect
55
- "<Parsed Program: Flows: #{flows.size}>"
56
- end
57
-
58
- # Parse a file, array of files, or a directory.
59
- #
60
- # This can be called multiple times to add new files to the
61
- # program model.
62
- def parse(file)
63
- Origen.log.info ''
64
- Origen.log.info "Parsing J750 test program from: #{file}"
65
- Origen.log.info ''
66
- reset
67
- # Note use of local file handler here, this should be how it is
68
- # done globally, otherwise we can run into hard to debug problems
69
- # due to state/reference dir changes in the single Origen.file_handler
70
- Origen::FileHandler.new.resolve_files(file) do |f|
71
- parse_file(f)
72
- end
73
- Origen.log.info ''
74
- self
75
- end
76
-
77
- def parse_file(file)
78
- line = File.readlines(file).first
79
- begin
80
- if line =~ /Flow Table/
81
- flows.import(file)
82
- elsif line =~ /Instances/
83
- test_instances.import(file)
84
- elsif line =~ /Pattern Sets/
85
- patsets.import(file)
86
- elsif line =~ /DC Spec/
87
- dc_specs.import(file)
88
- else
89
- puts "Skipped (un-supported file type): #{file}"
90
- end
91
- rescue Exception => e
92
- if e.is_a?(ArgumentError) && e.message =~ /invalid byte sequence/
93
- puts "Skipped (not ASCII): #{file}"
94
- else
95
- puts e.message
96
- puts e.backtrace
97
- exit 1
98
- end
99
- end
100
- end
101
- end
102
- end
103
- end
104
- end
@@ -1,11 +0,0 @@
1
- module Origen
2
- module Tester
3
- class J750
4
- class Parser
5
- class ACSpec
6
- attr_accessor :collection
7
- end
8
- end
9
- end
10
- end
11
- end
File without changes
@@ -1,36 +0,0 @@
1
- module Origen
2
- module Tester
3
- class J750
4
- class Parser
5
- class DCSpec
6
- attr_accessor :parser
7
- attr_accessor :name, :categories
8
- alias_method :symbol, :name
9
-
10
- def initialize(name, categories, options = {})
11
- @parser = options[:parser]
12
- @name = name
13
- @categories = categories
14
- @values = {}
15
- end
16
-
17
- def add_values(components)
18
- @categories.each_with_index do |category, i|
19
- @values[category] ||= {}
20
- @values[category]['Typ'] ||= components[5 + (i * 3) + 0]
21
- @values[category]['Min'] ||= components[5 + (i * 3) + 1]
22
- @values[category]['Max'] ||= components[5 + (i * 3) + 2]
23
- end
24
- end
25
-
26
- def lookup(category, selector)
27
- v = @values[category]
28
- if v
29
- v[selector]
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,50 +0,0 @@
1
- module Origen
2
- module Tester
3
- class J750
4
- class Parser
5
- class DCSpecs < Origen::Tester::Parser::SearchableHash
6
- attr_accessor :parser
7
-
8
- def initialize(options = {})
9
- @parser = options[:parser]
10
- end
11
-
12
- def import(file)
13
- @categories = []
14
- File.readlines(file).each do |line|
15
- unless line.strip.empty?
16
- components = line.split("\t")
17
- if components[3] == 'Selector'
18
- extract_categories(components)
19
- else
20
- unless components[1] == 'DC Specs' || components[1] == 'Symbol'
21
- extract_spec(components)
22
- end
23
- end
24
- end
25
- end
26
- end
27
-
28
- def inspect
29
- "<DCSpecs: #{size}>"
30
- end
31
-
32
- def extract_categories(components)
33
- components.each_with_index do |val, i|
34
- if i > 4
35
- @categories << val unless val.strip.empty?
36
- end
37
- end
38
- @categories.uniq!
39
- end
40
-
41
- def extract_spec(components)
42
- name = components[1]
43
- self[name] ||= DCSpec.new(name, @categories, parser: parser)
44
- self[name].add_values(components)
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,340 +0,0 @@
1
- module Origen
2
- module Tester
3
- class J750
4
- class Parser
5
- # Extracts embedded test and flow descriptions (comments) from test
6
- # program source files
7
- class Descriptions
8
- attr_accessor :source_directories, :template_directories, :parser
9
-
10
- SCRATCH_DIR = "#{Origen.root}/.j750_scratch"
11
-
12
- # All descriptions are stored in this lookup table
13
- def lookup
14
- return @lookup if @lookup
15
- # Use the one from the interface if present, program generation will
16
- # automatically push descriptions in here
17
- if Origen.interface_present?
18
- @lookup = Origen.interface.descriptions
19
- else
20
- @lookup = Origen::Tester::Parser::DescriptionLookup.new
21
- end
22
- end
23
-
24
- def initialize(options = {})
25
- @parser = options[:parser]
26
- FileUtils.rm_rf(SCRATCH_DIR) if File.exist?(SCRATCH_DIR)
27
- parse_program
28
- true
29
- end
30
-
31
- # Returns the description for the given flow
32
- def flow_summary(options = {})
33
- lookup.for_flow(options[:file])
34
- end
35
-
36
- # Returns the description of the given test from the test
37
- # instance sheet declaration
38
- def test_instance(options = {})
39
- lookup.for_test_definition(options[:name])
40
- end
41
-
42
- # Returns the description of the given test from the test
43
- # flow
44
- def flow_line(options = {})
45
- lookup.for_test_usage(options[:name], options[:flow])
46
- end
47
-
48
- def parse_program
49
- Origen.file_handler.preserve_state do
50
- generate_program_files
51
- # Comments must be extracted manually for any compiled files, for
52
- # generated files the comments will already be in the lookup
53
- extract_flow_summaries
54
- extract_test_instance_descriptions
55
- extract_flow_line_descriptions
56
- end
57
- end
58
-
59
- def source_directories
60
- [@source_directories, Origen.config.test_program_source_directory].compact.flatten
61
- end
62
-
63
- def template_directories
64
- [@template_directories, Origen.config.test_program_template_directory].compact.flatten
65
- end
66
-
67
- def extract_flow_summaries
68
- Origen.file_handler.resolve_files(compiled_dir) do |file|
69
- if flow_file?(file)
70
- lookup.add_for_flow(file, parse_flow_summary(file))
71
- end
72
- end
73
- end
74
-
75
- # Parses a compiled template for marked up comments
76
- def extract_test_instance_descriptions
77
- Origen.file_handler.resolve_files(compiled_dir) do |file|
78
- if instance_file?(file)
79
- comments = []
80
- File.readlines(file).each do |line|
81
- if line =~ /^<comment>(.*)/
82
- comments << Regexp.last_match[1].gsub("\r", '')
83
- else
84
- fields = line.split("\t")
85
- unless ['Test Instances', '', 'Test Name'].include? fields[1]
86
- lookup.add_for_test_definition(fields[1], comments)
87
- end
88
- comments = []
89
- end
90
- end
91
- end
92
- end
93
- end
94
-
95
- def extract_flow_line_descriptions
96
- Origen.file_handler.resolve_files(compiled_dir) do |file|
97
- if flow_file?(file)
98
- f = file.basename('.txt').to_s
99
- comments = []
100
- header_line = true
101
- File.readlines(file).each do |line|
102
- if header_line
103
- header_line = false if line =~ /^\s*Label/
104
- else
105
- if line =~ /^<comment>(.*)/
106
- comments << Regexp.last_match[1].gsub("\r", '')
107
- else
108
- t = FlowLine.extract_test(line)
109
- if t
110
- lookup.add_for_test_usage(t, file, comments)
111
- end
112
- comments = []
113
- end
114
- end
115
- end
116
- end
117
- end
118
- end
119
-
120
- def generate_program_files
121
- a = generate_program
122
- b = compile_program
123
- unless a || b
124
- fail 'No source or template files declared from which to parse descriptions!'
125
- end
126
- end
127
-
128
- # Parses the given flow file for summary text and returns it, summary
129
- # text must be the very first thing in the file.
130
- # Returns an array of strings each representing a line of text.
131
- def parse_flow_summary(file)
132
- desc = []
133
- File.readlines(file).each do |line|
134
- if line =~ /%?\s*<comment>(.*)/
135
- desc << Regexp.last_match[1].gsub("\r", '')
136
- else
137
- break
138
- end
139
- end
140
- desc
141
- end
142
-
143
- # Generate a scratch version of the program for parsing
144
- def generate_program
145
- if source_directories.size > 0
146
- unless @program_generated
147
- Origen.log.info ''
148
- Origen.log.info 'Extracting embedded comments:'
149
- Origen.log.info ''
150
- copy_source_files_to_scratch
151
- markup_source_file_comments
152
- # Compile the flow file, with Ruby comments now preserved and marked up
153
- desc = Origen.app.runner.generate(program: true, patterns: ungenerated_dir, output: generated_dir,
154
- check_for_changes: false, collect_stats: false, quiet: true,
155
- collect_descriptions: true)
156
- Origen.log.info ''
157
- end
158
- @program_generated = true
159
- else
160
- false
161
- end
162
- end
163
-
164
- # Compile a scratch version of the program for parsing
165
- def compile_program
166
- if template_directories.size > 0
167
- unless @program_compiled
168
- Origen.log.info ''
169
- Origen.log.info 'Extracting embedded comments:'
170
- Origen.log.info ''
171
- copy_templates_to_scratch
172
- markup_template_comments
173
- # Compile the flow file, with Ruby comments now preserved and marked up
174
- Origen.app.runner.generate(compile: true, patterns: uncompiled_dir, output: compiled_dir,
175
- check_for_changes: false, collect_stats: false, quiet: true)
176
- Origen.log.info ''
177
- end
178
- @program_compiled = true
179
- else
180
- false
181
- end
182
- end
183
-
184
- # Copy all flow and instance template files to the scratch dir
185
- def copy_templates_to_scratch
186
- uncompiled_dir(true)
187
- template_directories.each do |dir|
188
- Origen.file_handler.resolve_files(dir) do |file|
189
- subdir = file.relative_path_from(Pathname.new(dir)).dirname.to_s
190
- cpydir = "#{uncompiled_dir}/#{subdir}"
191
- FileUtils.mkdir_p(cpydir) unless File.exist?(cpydir)
192
- FileUtils.copy(file, cpydir) if flow_or_instance_file?(file)
193
- end
194
- end
195
- `chmod -R 777 #{uncompiled_dir}/*` unless Dir["#{uncompiled_dir}/*"].empty?
196
- end
197
-
198
- # Copy all flow and instance source files to the scratch dir
199
- def copy_source_files_to_scratch
200
- source_directories.each do |dir|
201
- Origen.file_handler.resolve_files(dir) do |file|
202
- subdir = file.relative_path_from(Pathname.new(dir)).dirname.to_s
203
- cpydir = "#{ungenerated_dir}/#{subdir}"
204
- FileUtils.mkdir_p(cpydir) unless File.exist?(cpydir)
205
- FileUtils.copy(file, cpydir)
206
- end
207
- end
208
- end
209
-
210
- def uncompiled_dir(force_make = false)
211
- @uncompiled_dir ||= "#{SCRATCH_DIR}/uncompiled"
212
- if force_make
213
- FileUtils.rm_rf(@uncompiled_dir) if File.exist?(@uncompiled_dir)
214
- @uncompiled_dir_created = false
215
- end
216
- unless @uncompiled_dir_created
217
- FileUtils.mkdir_p(@uncompiled_dir) unless File.exist?(@uncompiled_dir)
218
- @uncompiled_dir_created = true
219
- end
220
- @uncompiled_dir
221
- end
222
-
223
- def ungenerated_dir
224
- @ungenerated_dir ||= "#{SCRATCH_DIR}/ungenerated"
225
- unless @ungenerated_dir_created
226
- FileUtils.mkdir_p(@ungenerated_dir) unless File.exist?(@ungenerated_dir)
227
- @ungenerated_dir_created = true
228
- end
229
- @ungenerated_dir
230
- end
231
-
232
- def compiled_dir
233
- @compiled_dir ||= "#{SCRATCH_DIR}/compiled"
234
- unless @compiled_dir_created
235
- FileUtils.mkdir_p(@compiled_dir) unless File.exist?(@compiled_dir)
236
- @compiled_dir_created = true
237
- end
238
- @compiled_dir
239
- end
240
-
241
- def generated_dir
242
- @generated_dir ||= "#{SCRATCH_DIR}/generated"
243
- unless @generated_dir_created
244
- FileUtils.mkdir_p(@generated_dir) unless File.exist?(@generated_dir)
245
- @generated_dir_created = true
246
- end
247
- @generated_dir
248
- end
249
-
250
- # Returns true if the given file looks like a J750 flow file, works for
251
- # templates to
252
- def flow_or_instance_file?(file, options = {})
253
- options = { flow: true,
254
- instance: true
255
- }.merge(options)
256
- if options[:flow] && options[:instance]
257
- match = 'Flow|Instances'
258
- elsif options[:flow]
259
- match = 'Flow'
260
- else
261
- match = 'Instances'
262
- end
263
- # Not sure the best way to determine the file type of a partial, just
264
- # return true for now to play it safe
265
- return true if file.basename.to_s =~ /^_/
266
- File.readlines(file).each do |line|
267
- begin
268
- unless line =~ /^%/ || line =~ /^\s*<comment>/
269
- return !!(line =~ /#{match}/)
270
- end
271
- rescue Exception => e
272
- if e.is_a?(ArgumentError) && e.message =~ /invalid byte sequence/
273
- return false
274
- else
275
- puts e.message
276
- puts e.backtrace
277
- exit 1
278
- end
279
- end
280
- end
281
- end
282
-
283
- def flow_file?(file)
284
- flow_or_instance_file?(file, instance: false)
285
- end
286
-
287
- def instance_file?(file)
288
- flow_or_instance_file?(file, flow: false)
289
- end
290
-
291
- # Substitute Ruby line comments so they are preserved by compilation
292
- def markup_template_comments
293
- Origen.file_handler.resolve_files(uncompiled_dir) do |file|
294
- lines = File.readlines(file)
295
- File.open(file, 'w') do |f|
296
- lines.each do |line|
297
- if line =~ /^%\s*#\s?(.*)/ # Remove single leading whitespace from comment if it exists
298
- comment = Regexp.last_match[1]
299
- # If comment starts with a '#-' it should be removed by compilation
300
- if line =~ /^%\s*#-.*/
301
- f.write line
302
- # Otherwise preserve it
303
- else
304
- f.write "<comment>#{comment}\n"
305
- end
306
- else
307
- f.write line
308
- end
309
- end
310
- end
311
- end
312
- end
313
-
314
- # Substitute Ruby line comments so they are preserved by generation
315
- def markup_source_file_comments
316
- Origen.file_handler.resolve_files(ungenerated_dir) do |file|
317
- lines = File.readlines(file)
318
- File.open(file, 'w') do |f|
319
- lines.each do |line|
320
- if line =~ /^\s*#\s?(.*)/ # Remove single leading whitespace from comment if it exists
321
- comment = Regexp.last_match[1]
322
- # If comment starts with a '#-' it should be removed by generation
323
- if line =~ /^\s*#-.*/
324
- f.write line
325
- # Otherwise preserve it
326
- else
327
- f.write "Origen.interface.comment '#{comment}'\n"
328
- end
329
- else
330
- f.write line
331
- end
332
- end
333
- end
334
- end
335
- end
336
- end
337
- end
338
- end
339
- end
340
- end