origen 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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