origen 0.33.3 → 0.34.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.
- checksums.yaml +4 -4
- data/config/application.rb +12 -2
- data/config/commands.rb +73 -1
- data/config/version.rb +2 -2
- data/lib/origen.rb +7 -1
- data/lib/origen/application.rb +47 -0
- data/lib/origen/application/configuration.rb +9 -2
- data/lib/origen/commands/interactive.rb +2 -0
- data/lib/origen/commands/web.rb +5 -12
- data/lib/origen/generator/pattern.rb +95 -5
- data/lib/origen/pins/pin.rb +17 -3
- data/lib/origen/pins/pin_collection.rb +15 -3
- data/lib/origen/registers.rb +4 -4
- data/lib/origen/registers/reg.rb +14 -8
- data/lib/origen/revision_control/design_sync.rb +1 -0
- data/lib/origen/site_config.rb +13 -6
- data/lib/origen/utility/collector.rb +30 -1
- data/templates/nanoc/config.yaml +3 -0
- data/templates/nanoc/lib/search_filter.rb +2 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0607d958ddc8e398df2a7272ac4adf9655c6e78
|
4
|
+
data.tar.gz: dfe13eb62b19e431b6cd3de07afb48aa4fddf1af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0298c4113fc30bd3e4911710092853158bfe14a37f6a077312df8936f669ca5f1ed52e3b40c2d87388b628cd1a87eaa4fe78764f240da4e56f5f07c50020006d
|
7
|
+
data.tar.gz: e2bb350fc891d8fea28d82e72b47cf462c9f94468cdccb19e8c477cf09bdfcaf78e33644a03004a6e84c89dd96c9a1aa3d00c8b042b6e86c90874a95108e677f
|
data/config/application.rb
CHANGED
@@ -43,8 +43,8 @@ class OrigenCoreApplication < Origen::Application
|
|
43
43
|
|
44
44
|
config.pattern_prefix = "nvm"
|
45
45
|
|
46
|
-
config.
|
47
|
-
|
46
|
+
config.application_pattern_header do |options|
|
47
|
+
"This is a dummy pattern created by the Origen test environment"
|
48
48
|
end
|
49
49
|
|
50
50
|
# Add any directories or files not intended to be under change management control
|
@@ -109,6 +109,16 @@ class OrigenCoreApplication < Origen::Application
|
|
109
109
|
end
|
110
110
|
end
|
111
111
|
|
112
|
+
def after_web_compile(options)
|
113
|
+
Origen.app.plugins.each do |plugin|
|
114
|
+
if plugin.config.shared && plugin.config.shared[:origen_guides]
|
115
|
+
Origen.app.runner.launch action: :compile,
|
116
|
+
files: File.join(plugin.root, plugin.config.shared[:origen_guides]),
|
117
|
+
output: File.join('web', 'content', 'guides')
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
112
122
|
# Ensure that all tests pass before allowing a release to continue
|
113
123
|
def validate_release
|
114
124
|
if !system("origen specs") || !system("origen examples")
|
data/config/commands.rb
CHANGED
@@ -16,7 +16,79 @@ when "tags"
|
|
16
16
|
|
17
17
|
when "specs"
|
18
18
|
require "rspec"
|
19
|
-
|
19
|
+
|
20
|
+
options = {}
|
21
|
+
opt_parser = OptionParser.new do |opts|
|
22
|
+
opts.banner = [
|
23
|
+
'Run the specs unit tests',
|
24
|
+
'Usage: origen specs [filename_substrings...] [options]',
|
25
|
+
"Note: all files must reside in #{Origen.app.root}/specs for filename substrings",
|
26
|
+
"E.g.: origen specs site_config #=> runs only specs in filenames matching 'site_config'"
|
27
|
+
].join("\n")
|
28
|
+
opts.on('-h', '--help', 'Show this help message') do |h|
|
29
|
+
puts opt_parser
|
30
|
+
exit!
|
31
|
+
end
|
32
|
+
end
|
33
|
+
opt_parser.parse! ARGV
|
34
|
+
|
35
|
+
# Search for the filenames given.
|
36
|
+
spec_files = ARGV.map do |file|
|
37
|
+
f = Pathname.new(file)
|
38
|
+
dir = Origen.app.root.join('spec')
|
39
|
+
|
40
|
+
# Find any files that match the name. Include all these files.
|
41
|
+
# Note that this will map a string to an array, so we'll flatten the array later.
|
42
|
+
# Also, we'll only search for .rb files in spec. Append that to the glob if no file ext is provided.
|
43
|
+
if f.exist? && f.extname == '.rb'
|
44
|
+
# This is a hard-coded path. Don't glob this, just make sure its witin the spec directory.
|
45
|
+
File.expand_path(f)
|
46
|
+
elsif f.extname == '.rb'
|
47
|
+
# Search includes the extension, so don't add it.
|
48
|
+
# (limited to .rb files)
|
49
|
+
Dir.glob(dir.join("**/*#{f}"))
|
50
|
+
else
|
51
|
+
# Search for matching ruby files.
|
52
|
+
# (limited to .rb files)
|
53
|
+
Dir.glob(dir.join("**/*#{f}*.rb"))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
spec_files.flatten!
|
57
|
+
|
58
|
+
if ARGV.empty?
|
59
|
+
# No filename substrings given. Run all *_spec files in spec/ directory
|
60
|
+
spec_files = ['spec']
|
61
|
+
elsif spec_files.empty? && !ARGV.empty?
|
62
|
+
# The spec files to run is empty, but file substring were given.
|
63
|
+
# Report that no files were found and exit.
|
64
|
+
Origen.app!.fail!(message: "No matching spec files could be found at #{Origen.app.root}/spec for patterns: #{ARGV.join(', ')}")
|
65
|
+
else
|
66
|
+
# Filename substrings were given and matching files were found. List the files just for user awareness.
|
67
|
+
Origen.log.info "Found matching specs files for patterns: #{ARGV.join(', ')}"
|
68
|
+
spec_files.each { |f| Origen.log.info(f) }
|
69
|
+
end
|
70
|
+
|
71
|
+
current_mode = Origen.mode.instance_variable_get(:@current_mode)
|
72
|
+
Origen.mode = :debug
|
73
|
+
Origen.app.session.origen_core[:mode] = Origen.mode.to_s
|
74
|
+
begin
|
75
|
+
status = RSpec::Core::Runner.run(spec_files)
|
76
|
+
rescue SystemExit => e
|
77
|
+
Origen.log.error "Unexpected SystemExit reached. Reporting failure status..."
|
78
|
+
status = 1
|
79
|
+
end
|
80
|
+
Origen.mode = current_mode
|
81
|
+
Origen.app.session.origen_core[:mode] = Origen.mode.to_s
|
82
|
+
|
83
|
+
# One kind of confusing thing is that Specs can still print the 'pass'/'success' verbiage even when it actually failed.
|
84
|
+
# This is due to rspec itself catching the errors, so there's no exception to catch from outside Rspec.
|
85
|
+
# Most likely the user will see red and see that nothing was actually run, but print a reassuring message from Origen saying that the specs actually failed,
|
86
|
+
# despite what Rspec's verbiage says.
|
87
|
+
if status == 1
|
88
|
+
Origen.log.error "Some errors occurred outside of the examples: received exit status 1 (failure). Please review RSpec output for details."
|
89
|
+
end
|
90
|
+
|
91
|
+
exit(status)
|
20
92
|
|
21
93
|
when "examples", "test"
|
22
94
|
Origen.load_application
|
data/config/version.rb
CHANGED
data/lib/origen.rb
CHANGED
@@ -660,6 +660,12 @@ unless defined? RGen::ORIGENTRANSITION
|
|
660
660
|
@running_remotely = val
|
661
661
|
end
|
662
662
|
|
663
|
+
# Returns true if Origen is running interactively. That is, the command was 'origen i'
|
664
|
+
def running_interactively?
|
665
|
+
!!@running_interactively
|
666
|
+
end
|
667
|
+
alias_method :interactive?, :running_interactively?
|
668
|
+
|
663
669
|
# Returns true if Origen is running with the -d or --debug switches enabled
|
664
670
|
def debug?
|
665
671
|
@debug || false
|
@@ -671,7 +677,7 @@ unless defined? RGen::ORIGENTRANSITION
|
|
671
677
|
end
|
672
678
|
|
673
679
|
def debugger_enabled?
|
674
|
-
|
680
|
+
debug?
|
675
681
|
end
|
676
682
|
|
677
683
|
def development?
|
data/lib/origen/application.rb
CHANGED
@@ -900,6 +900,53 @@ END
|
|
900
900
|
@target_instantiated
|
901
901
|
end
|
902
902
|
|
903
|
+
# Prepends the application name to the fail message and throws a RuntimeError exception.
|
904
|
+
# Very similar to the plain <code>fail</code> method with the addition of prepending the application name.
|
905
|
+
# Prepended message: 'Fail in app.name: '
|
906
|
+
# If no message if provided, message is set to 'Fail in app.name'
|
907
|
+
# @param message [String] Message to print with the exception. If the message option is nil, a default message will be used instead.
|
908
|
+
# @param exception_class [Class] Custom Exception class to throw. May require the full namespace, e.g. <code>Origen::OrigenError</code> instead of just <code>OrigenError</code>.
|
909
|
+
# @raise [RuntimeError, exception_class] Option exception_class is raised, defaulting to <code>RuntimeError</code>.
|
910
|
+
def fail(message: nil, exception_class: RuntimeError)
|
911
|
+
message.nil? ? message = "Fail in #{name}" : message = "Fail in #{name}: #{message}"
|
912
|
+
e = exception_class.new(message)
|
913
|
+
|
914
|
+
# If the caller is Origen.app.fail!, remove this caller from the backtrace, leaving where Origen.app.fail! was called.
|
915
|
+
# As an aside, if there's an exception raised in Origen.app.fail!, then that would actually raise a Kernel.fail, so there's no concern with masking
|
916
|
+
# out a problem with Origen.app.fail! by doing this.
|
917
|
+
if caller[0] =~ (/lib\/origen\/application.rb:\d+:in `fail!'/)
|
918
|
+
e.set_backtrace(caller[1..-1])
|
919
|
+
else
|
920
|
+
e.set_backtrace(caller)
|
921
|
+
end
|
922
|
+
Kernel.fail(e)
|
923
|
+
end
|
924
|
+
|
925
|
+
# Similar to Origen.app.fail, but will instead print the message using Origen.log.error and exit the current process (using <code>exit 1</code>)
|
926
|
+
# UNLESS --debug is used. In those cases, <code>exit</code> will not be used and instead this will behave the same as {Origen::Application#fail}.
|
927
|
+
# Purpose here is to allow fail! for normal usage, but provide more details as to where fail! was used when running in debug.
|
928
|
+
# @param message [String] Message to print with the exception. If the message option is nil, a default message will be used instead.
|
929
|
+
# @param exception_class [Class] Custom Exception class to throw. May require the full namespace.
|
930
|
+
# @param exit_status [Integer] Exit status to use when exiting the application.
|
931
|
+
# @raise [RuntimeError, SystemExit, exception_class] When debug is disabled, <code>SystemExit</code> will be raised.
|
932
|
+
# When debug is enabled, exception_class will be raised, defaulting to <code>RuntimeError</code>.
|
933
|
+
def fail!(message: nil, exception_class: RuntimeError, exit_status: 1)
|
934
|
+
if Origen.debug?
|
935
|
+
# rubocop:disable Style/RedundantSelf
|
936
|
+
self.fail(message: message, exception_class: exception_class)
|
937
|
+
# rubocop:enable Style/RedundantSelf
|
938
|
+
else
|
939
|
+
begin
|
940
|
+
# rubocop:disable Style/RedundantSelf
|
941
|
+
self.fail(message: message, exception_class: exception_class)
|
942
|
+
# rubocop:enable Style/RedundantSelf
|
943
|
+
rescue exception_class => e
|
944
|
+
Origen.log.error(e.message)
|
945
|
+
exit exit_status
|
946
|
+
end
|
947
|
+
end
|
948
|
+
end
|
949
|
+
|
903
950
|
# This method is called just after an application inherits from Origen::Application,
|
904
951
|
# allowing the developer to load classes in lib and use them during application
|
905
952
|
# configuration.
|
@@ -29,7 +29,8 @@ module Origen
|
|
29
29
|
# below for more details on this.
|
30
30
|
ATTRS_THAT_DEPEND_ON_TARGET = [
|
31
31
|
:output_directory, :reference_directory, :pattern_postfix, :pattern_prefix,
|
32
|
-
:pattern_header, :
|
32
|
+
:pattern_header, :current_plugin_pattern_header, :application_pattern_header, :shared_pattern_header,
|
33
|
+
:release_directory, :pattern_name_translator, :pattern_directory, :pattern_output_directory,
|
33
34
|
:proceed_with_pattern, :test_program_output_directory, :test_program_source_directory,
|
34
35
|
:test_program_template_directory, :referenced_pattern_list, :program_prefix, :web_directory,
|
35
36
|
:web_domain
|
@@ -51,6 +52,10 @@ module Origen
|
|
51
52
|
:test_program_template_directory, :referenced_pattern_list
|
52
53
|
]
|
53
54
|
|
55
|
+
ATTRS_THAT_ARE_SET_TO_A_BLOCK = [
|
56
|
+
:current_plugin_pattern_header, :application_pattern_header, :shared_pattern_header, #:pattern_footer
|
57
|
+
]
|
58
|
+
|
54
59
|
def log_deprecations
|
55
60
|
# unless imports.empty?
|
56
61
|
# Origen.deprecate "App #{app.name} uses config.imports this will be removed in Origen V3 and a Gemfile/.gemspec should be used instead"
|
@@ -146,7 +151,9 @@ module Origen
|
|
146
151
|
fail "You have attempted to access Origen.config.#{name} before instantiating the target"
|
147
152
|
end
|
148
153
|
end
|
149
|
-
|
154
|
+
|
155
|
+
# Some config variables should be left as a block/proc object. If this is one of those, just return the var.
|
156
|
+
ATTRS_THAT_ARE_SET_TO_A_BLOCK.include?(name) ? var : var.call
|
150
157
|
else
|
151
158
|
var
|
152
159
|
end
|
@@ -52,6 +52,8 @@ Usage: origen i [options]
|
|
52
52
|
Origen.target.temporary = options[:target] if options[:target]
|
53
53
|
Origen.app.load_target!
|
54
54
|
Origen.app.runner.prepare_directories # Ensure tmp et all exist
|
55
|
+
|
56
|
+
Origen.instance_variable_set(:@running_interactively, true)
|
55
57
|
listeners_for(:interactive_startup).each(&:interactive_startup)
|
56
58
|
|
57
59
|
begin
|
data/lib/origen/commands/web.rb
CHANGED
@@ -50,6 +50,7 @@ The following options are available:
|
|
50
50
|
opts.on('-m', '--mode MODE', Origen::Mode::MODES, 'Force the Origen operating mode:', ' ' + Origen::Mode::MODES.join(', ')) { |_m| }
|
51
51
|
opts.on('--no-serve', "Don't serve the website after compiling without the remote option") { options[:no_serve] = true }
|
52
52
|
opts.on('-c', '--comment COMMENT', String, 'Supply a commit comment when deploying to Git') { |o| options[:comment] = o }
|
53
|
+
|
53
54
|
# Apply any application option extensions to the OptionParser
|
54
55
|
Origen::CommandHelpers.extend_options(opts, app_options, options)
|
55
56
|
opts.separator ''
|
@@ -73,14 +74,10 @@ The following options are available:
|
|
73
74
|
|
74
75
|
def self._start_server
|
75
76
|
# Get the current host
|
76
|
-
host = `hostname`.strip.downcase
|
77
|
-
if Origen.running_on_windows?
|
78
|
-
domain = 'fsl.freescale.net'
|
79
|
-
else
|
80
|
-
domain = `dnsdomainname`.strip
|
81
|
-
end
|
82
|
-
# Get a free port
|
83
77
|
require 'socket'
|
78
|
+
host = Socket.gethostbyname(Socket.gethostname).first.downcase
|
79
|
+
|
80
|
+
# Get a free port
|
84
81
|
port = 8000 # preferred port
|
85
82
|
begin
|
86
83
|
server = TCPServer.new('127.0.0.1', port)
|
@@ -92,11 +89,7 @@ The following options are available:
|
|
92
89
|
server.close
|
93
90
|
# Start the server
|
94
91
|
puts ''
|
95
|
-
|
96
|
-
puts "Point your browser to this address: http://#{host}:#{port}"
|
97
|
-
else
|
98
|
-
puts "Point your browser to this address: http://#{host}#{domain.empty? ? '' : '.' + domain}:#{port}"
|
99
|
-
end
|
92
|
+
puts "Point your browser to this address: http://#{host}:#{port}"
|
100
93
|
puts ''
|
101
94
|
puts 'To shut down the server use CTRL-C'
|
102
95
|
puts ''
|
@@ -201,21 +201,22 @@ module Origen
|
|
201
201
|
|
202
202
|
def header
|
203
203
|
Origen.tester.pre_header if Origen.tester.doc?
|
204
|
-
|
204
|
+
inject_separator
|
205
205
|
if $desc
|
206
206
|
c2 'DESCRIPTION:'
|
207
207
|
$desc.split(/\n/).each { |line| cc line }
|
208
|
-
|
208
|
+
inject_separator
|
209
209
|
end
|
210
210
|
c2 'GENERATED:'
|
211
211
|
c2 " Time: #{Origen.launch_time}"
|
212
212
|
c2 " By: #{Origen.current_user.name}"
|
213
|
+
c2 " Mode: #{Origen.mode}"
|
213
214
|
l = " Command: origen g #{job.requested_pattern} -t #{Origen.target.file.basename}"
|
214
215
|
if Origen.environment && Origen.environment.file
|
215
216
|
l += " -e #{Origen.environment.file.basename}"
|
216
217
|
end
|
217
218
|
c2(l)
|
218
|
-
|
219
|
+
inject_separator
|
219
220
|
c2 'ENVIRONMENT:'
|
220
221
|
c2 ' Application'
|
221
222
|
if Origen.app.rc
|
@@ -251,13 +252,102 @@ module Origen
|
|
251
252
|
c2 " #{plugin.name}:".ljust(30) + plugin.version
|
252
253
|
end
|
253
254
|
end
|
254
|
-
|
255
|
+
inject_separator
|
256
|
+
|
257
|
+
unless Origen.app.plugins.empty?
|
258
|
+
# Plugins can use config.shared_pattern_header to inject plugin-specific comments into the patterns header
|
259
|
+
header_printed = false
|
260
|
+
Origen.app.plugins.sort_by { |p| p.name.to_s }.each do |plugin|
|
261
|
+
unless plugin.config.shared_pattern_header.nil?
|
262
|
+
unless header_printed
|
263
|
+
c2 'Header Comments From Shared Plugins:'
|
264
|
+
header_printed = true
|
265
|
+
end
|
266
|
+
inject_pattern_header(
|
267
|
+
config_loc: plugin,
|
268
|
+
scope: :shared_pattern_header,
|
269
|
+
message: "Header Comments From Shared Plugin: #{plugin.name}:",
|
270
|
+
message_spacing: 2,
|
271
|
+
line_spacing: 4,
|
272
|
+
no_separator: true
|
273
|
+
)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
inject_separator if header_printed
|
277
|
+
end
|
278
|
+
|
279
|
+
if Origen.app.plugins.current && !Origen.app.plugins.current.config.send(:current_plugin_pattern_header).nil?
|
280
|
+
# The top level plugin (if one is set) can further inject plugin-specific comment into the header.
|
281
|
+
# These will only appear if the plugin is the top-level plugin though.
|
282
|
+
inject_pattern_header(
|
283
|
+
config_loc: Origen.app.plugins.current,
|
284
|
+
scope: :current_plugin_pattern_header,
|
285
|
+
message: "Header Comments From The Current Plugin: #{Origen.app.plugins.current.name}:"
|
286
|
+
)
|
287
|
+
end
|
288
|
+
|
289
|
+
unless Origen.app.config.send(:application_pattern_header).nil?
|
290
|
+
inject_pattern_header(
|
291
|
+
config_loc: Origen.app,
|
292
|
+
scope: :application_pattern_header,
|
293
|
+
message: "Header Comments From Application: #{Origen.app.name}:"
|
294
|
+
)
|
295
|
+
end
|
296
|
+
|
255
297
|
if Origen.config.pattern_header
|
256
|
-
|
298
|
+
Origen.log.deprecated 'Origen.config.pattern_header is deprecated.'
|
299
|
+
Origen.log.deprecated 'Please use config.shared_pattern_header, config.application_pattern_header, or config.current_plugin_pattern_header instead.'
|
300
|
+
inject_separator
|
257
301
|
end
|
258
302
|
Origen.tester.close_text_block if Origen.tester.doc?
|
259
303
|
end
|
260
304
|
|
305
|
+
def inject_separator(options = {})
|
306
|
+
separator_length = options[:size] || 75
|
307
|
+
c2('*' * separator_length)
|
308
|
+
end
|
309
|
+
|
310
|
+
def inject_pattern_header(config_loc:, scope:, message:, **options)
|
311
|
+
message_spacing = options[:message_spacing] || 0
|
312
|
+
line_spacing = options[:line_spacing] || 2
|
313
|
+
no_separator = options[:no_separator] || false
|
314
|
+
|
315
|
+
# Print a warning if any of the pattern header configs have an arity greater than 1.
|
316
|
+
# Anything over 1 won't be used and may cause confusion.
|
317
|
+
if config_loc.config.send(scope).arity > 1
|
318
|
+
Origen.log.warning "Configuration in #{config_loc.name} has attribute ##{scope} whose block has an arity > 1"
|
319
|
+
Origen.log.warning 'Calls to this attribute from Origen are only given an options hash parameter. Any other arguments are extraneous'
|
320
|
+
end
|
321
|
+
|
322
|
+
# Inject the header based on these guidelines:
|
323
|
+
# 1. if pattern_header is nil, ignore all. Don't print he message, don't do anything.
|
324
|
+
# 2. if pattern header is a block, print the message, then call the block. This allows the user to format everything themselves.
|
325
|
+
# i.e., use of cc, ss, etc. is allowed here, at the expense of the user being responsible for the formatting.
|
326
|
+
# 3. if a string, print the message and format the string as 'cc'
|
327
|
+
# 4. if an array, print the message and format the array as a subsequent 'cc' calls.
|
328
|
+
injection = config_loc.config.send(scope).call({})
|
329
|
+
if injection.nil?
|
330
|
+
# Do nothing. It is assumed in this acase that the pattern header has not comments to add at this scope.
|
331
|
+
return
|
332
|
+
elsif injection.is_a?(String)
|
333
|
+
c2(' ' * message_spacing + message)
|
334
|
+
c2(' ' * line_spacing + injection.to_s)
|
335
|
+
inject_separator(options) unless no_separator
|
336
|
+
elsif injection.is_a?(Array)
|
337
|
+
c2(' ' * message_spacing + message)
|
338
|
+
injection.each do |line|
|
339
|
+
c2(' ' * line_spacing + line.to_s)
|
340
|
+
end
|
341
|
+
inject_separator(options) unless no_separator
|
342
|
+
elsif injection.respond_to?(:call)
|
343
|
+
c2(' ' * message_spacing + message)
|
344
|
+
injection.call
|
345
|
+
inject_separator(options) unless no_separator
|
346
|
+
else
|
347
|
+
Origen.app.fail!(message: "Unexpected object class returned by config.pattern_header from #{config_loc.name}: #{injection.class}", exception_class: TypeError)
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
261
351
|
def pattern_open(options = {})
|
262
352
|
options = {
|
263
353
|
call_startup_callbacks: true
|
data/lib/origen/pins/pin.rb
CHANGED
@@ -8,9 +8,9 @@ module Origen
|
|
8
8
|
# it would cause a double cycle in the org file if also captured at the pin
|
9
9
|
ORG_FILE_INTERCEPTED_METHODS = [
|
10
10
|
:suspend, :resume, :repeat_previous=,
|
11
|
-
:drive_hi, :
|
12
|
-
:assert_hi, :expect_hi, :compare_hi, :assert_lo, :expect_lo, :compare_lo, :dont_care,
|
13
|
-
:drive, :assert, :compare, :expect, :assert_midband, :compare_midband, :expect_midband,
|
11
|
+
:drive_hi, :write_hi, :drive_very_hi, :drive_lo, :write_lo, :drive_mem, :expect_mem,
|
12
|
+
:assert_hi, :expect_hi, :compare_hi, :read_hi, :assert_lo, :expect_lo, :compare_lo, :read_lo, :dont_care,
|
13
|
+
:drive, :write, :assert, :compare, :expect, :read, :assert_midband, :compare_midband, :expect_midband, :read_midband,
|
14
14
|
:toggle, :capture, :store
|
15
15
|
]
|
16
16
|
|
@@ -698,11 +698,13 @@ module Origen
|
|
698
698
|
set_state(:drive)
|
699
699
|
set_value(1)
|
700
700
|
end
|
701
|
+
alias_method :write_hi, :drive_hi
|
701
702
|
|
702
703
|
def drive_hi!
|
703
704
|
drive_hi
|
704
705
|
cycle
|
705
706
|
end
|
707
|
+
alias_method :write_hi!, :drive_hi!
|
706
708
|
|
707
709
|
# Set the pin to drive a high voltage on future cycles (if the tester supports it).
|
708
710
|
# For example on a J750 high-voltage channel the pin state would be set to "2"
|
@@ -721,11 +723,13 @@ module Origen
|
|
721
723
|
set_state(:drive)
|
722
724
|
set_value(0)
|
723
725
|
end
|
726
|
+
alias_method :write_lo, :drive_lo
|
724
727
|
|
725
728
|
def drive_lo!
|
726
729
|
drive_lo
|
727
730
|
cycle
|
728
731
|
end
|
732
|
+
alias_method :write_lo!, :drive_lo!
|
729
733
|
|
730
734
|
def drive_mem
|
731
735
|
set_state(:drive_mem)
|
@@ -752,6 +756,7 @@ module Origen
|
|
752
756
|
end
|
753
757
|
alias_method :expect_hi, :assert_hi
|
754
758
|
alias_method :compare_hi, :assert_hi
|
759
|
+
alias_method :read_hi, :assert_hi
|
755
760
|
|
756
761
|
def assert_hi!
|
757
762
|
assert_hi
|
@@ -759,6 +764,7 @@ module Origen
|
|
759
764
|
end
|
760
765
|
alias_method :expect_hi!, :assert_hi!
|
761
766
|
alias_method :compare_hi!, :assert_hi!
|
767
|
+
alias_method :read_hi!, :assert_hi!
|
762
768
|
|
763
769
|
# Set the pin to expect a 0 on future cycles
|
764
770
|
def assert_lo(_options = {})
|
@@ -775,6 +781,7 @@ module Origen
|
|
775
781
|
end
|
776
782
|
alias_method :expect_lo, :assert_lo
|
777
783
|
alias_method :compare_lo, :assert_lo
|
784
|
+
alias_method :read_lo, :assert_lo
|
778
785
|
|
779
786
|
def assert_lo!
|
780
787
|
assert_lo
|
@@ -782,6 +789,7 @@ module Origen
|
|
782
789
|
end
|
783
790
|
alias_method :expect_lo!, :assert_lo!
|
784
791
|
alias_method :compare_lo!, :assert_lo!
|
792
|
+
alias_method :read_lo!, :assert_lo!
|
785
793
|
|
786
794
|
# Set the pin to X on future cycles
|
787
795
|
def dont_care
|
@@ -803,11 +811,13 @@ module Origen
|
|
803
811
|
set_state(:drive)
|
804
812
|
set_value(value)
|
805
813
|
end
|
814
|
+
alias_method :write, :drive
|
806
815
|
|
807
816
|
def drive!(value)
|
808
817
|
drive(value)
|
809
818
|
cycle
|
810
819
|
end
|
820
|
+
alias_method :write!, :drive!
|
811
821
|
|
812
822
|
# Pass in 0 or 1 to have the pin expect_lo or expect_hi respectively.
|
813
823
|
# This is useful when programatically setting the pin state.
|
@@ -821,6 +831,7 @@ module Origen
|
|
821
831
|
end
|
822
832
|
alias_method :compare, :assert
|
823
833
|
alias_method :expect, :assert
|
834
|
+
alias_method :read, :assert
|
824
835
|
|
825
836
|
def assert!(*args)
|
826
837
|
assert(*args)
|
@@ -828,12 +839,14 @@ module Origen
|
|
828
839
|
end
|
829
840
|
alias_method :compare!, :assert!
|
830
841
|
alias_method :expect!, :assert!
|
842
|
+
alias_method :read!, :assert!
|
831
843
|
|
832
844
|
def assert_midband
|
833
845
|
set_state(:compare_midband)
|
834
846
|
end
|
835
847
|
alias_method :compare_midband, :assert_midband
|
836
848
|
alias_method :expect_midband, :assert_midband
|
849
|
+
alias_method :read_midband, :assert_midband
|
837
850
|
|
838
851
|
def assert_midband!
|
839
852
|
assert_midband
|
@@ -841,6 +854,7 @@ module Origen
|
|
841
854
|
end
|
842
855
|
alias_method :compare_midband!, :assert_midband!
|
843
856
|
alias_method :expect_midband!, :assert_midband!
|
857
|
+
alias_method :read_midband!, :assert_midband!
|
844
858
|
|
845
859
|
# Returns the state of invert
|
846
860
|
def inverted?
|
@@ -8,9 +8,9 @@ module Origen
|
|
8
8
|
include OrgFile::Interceptable
|
9
9
|
|
10
10
|
ORG_FILE_INTERCEPTED_METHODS = [
|
11
|
-
:drive, :drive_hi, :drive_lo, :drive_very_hi, :drive_mem, :expect_mem, :toggle,
|
12
|
-
:repeat_previous=, :capture, :assert, :compare, :expect,
|
13
|
-
:assert_hi, :expect_hi, :compare_hi, :assert_lo, :expect_lo, :compare_lo,
|
11
|
+
:drive, :write, :drive_hi, :write_hi, :drive_lo, :write_lo, :drive_very_hi, :drive_mem, :expect_mem, :toggle,
|
12
|
+
:repeat_previous=, :capture, :assert, :read, :compare, :expect,
|
13
|
+
:assert_hi, :expect_hi, :compare_hi, :read_hi, :assert_lo, :expect_lo, :compare_lo, :read_lo,
|
14
14
|
:dont_care
|
15
15
|
]
|
16
16
|
|
@@ -234,33 +234,39 @@ module Origen
|
|
234
234
|
end
|
235
235
|
myself
|
236
236
|
end
|
237
|
+
alias_method :write, :drive
|
237
238
|
|
238
239
|
def drive!(val)
|
239
240
|
drive(val)
|
240
241
|
cycle
|
241
242
|
end
|
243
|
+
alias_method :write!, :drive!
|
242
244
|
|
243
245
|
# Set all pins in pin group to drive 1's on future cycles
|
244
246
|
def drive_hi
|
245
247
|
each(&:drive_hi)
|
246
248
|
myself
|
247
249
|
end
|
250
|
+
alias_method :write_hi, :drive_hi
|
248
251
|
|
249
252
|
def drive_hi!
|
250
253
|
drive_hi
|
251
254
|
cycle
|
252
255
|
end
|
256
|
+
alias_method :write_hi!, :drive_hi!
|
253
257
|
|
254
258
|
# Set all pins in pin group to drive 0's on future cycles
|
255
259
|
def drive_lo
|
256
260
|
each(&:drive_lo)
|
257
261
|
myself
|
258
262
|
end
|
263
|
+
alias_method :write_lo, :drive_lo
|
259
264
|
|
260
265
|
def drive_lo!
|
261
266
|
drive_lo
|
262
267
|
cycle
|
263
268
|
end
|
269
|
+
alias_method :write_lo!, :drive_lo!
|
264
270
|
|
265
271
|
# Set all pins in the pin group to drive a high voltage on future cycles (if the tester supports it).
|
266
272
|
# For example on a J750 high-voltage channel the pin state would be set to "2"
|
@@ -377,6 +383,7 @@ module Origen
|
|
377
383
|
end
|
378
384
|
alias_method :compare, :assert
|
379
385
|
alias_method :expect, :assert
|
386
|
+
alias_method :read, :assert
|
380
387
|
|
381
388
|
def assert!(*args)
|
382
389
|
assert(*args)
|
@@ -384,6 +391,7 @@ module Origen
|
|
384
391
|
end
|
385
392
|
alias_method :compare!, :assert!
|
386
393
|
alias_method :expect!, :assert!
|
394
|
+
alias_method :read!, :assert!
|
387
395
|
|
388
396
|
# Set all pins in the pin group to expect 1's on future cycles
|
389
397
|
def assert_hi(options = {})
|
@@ -392,6 +400,7 @@ module Origen
|
|
392
400
|
end
|
393
401
|
alias_method :expect_hi, :assert_hi
|
394
402
|
alias_method :compare_hi, :assert_hi
|
403
|
+
alias_method :read_hi, :assert_hi
|
395
404
|
|
396
405
|
def assert_hi!
|
397
406
|
assert_hi
|
@@ -399,6 +408,7 @@ module Origen
|
|
399
408
|
end
|
400
409
|
alias_method :expect_hi!, :assert_hi!
|
401
410
|
alias_method :compare_hi!, :assert_hi!
|
411
|
+
alias_method :read_hi!, :assert_hi!
|
402
412
|
|
403
413
|
# Set all pins in the pin group to expect 0's on future cycles
|
404
414
|
def assert_lo(options = {})
|
@@ -407,6 +417,7 @@ module Origen
|
|
407
417
|
end
|
408
418
|
alias_method :expect_lo, :assert_lo
|
409
419
|
alias_method :compare_lo, :assert_lo
|
420
|
+
alias_method :read_lo, :assert_lo
|
410
421
|
|
411
422
|
def assert_lo!
|
412
423
|
assert_lo
|
@@ -414,6 +425,7 @@ module Origen
|
|
414
425
|
end
|
415
426
|
alias_method :expect_lo!, :assert_lo!
|
416
427
|
alias_method :compare_lo!, :assert_lo!
|
428
|
+
alias_method :read_lo!, :assert_lo!
|
417
429
|
|
418
430
|
# Set all pins in the pin group to X on future cycles
|
419
431
|
def dont_care
|
data/lib/origen/registers.rb
CHANGED
@@ -139,7 +139,7 @@ module Origen
|
|
139
139
|
@owner = owner
|
140
140
|
@name = name
|
141
141
|
@attributes = attributes
|
142
|
-
@feature = attributes[:
|
142
|
+
@feature = attributes[:_feature] if attributes.key?(:_feature)
|
143
143
|
end
|
144
144
|
|
145
145
|
# Make this appear like a reg to any application code
|
@@ -313,12 +313,12 @@ module Origen
|
|
313
313
|
local_vars = {}
|
314
314
|
|
315
315
|
Reg::REG_LEVEL_ATTRIBUTES.each do |attribute, meta|
|
316
|
-
aliases = [attribute]
|
316
|
+
aliases = [attribute[1..-1].to_sym]
|
317
317
|
aliases += meta[:aliases] if meta[:aliases]
|
318
|
-
aliases.each { |_a| local_vars[attribute] = bit_info.delete(
|
318
|
+
aliases.each { |_a| local_vars[attribute] = bit_info.delete(_a) if bit_info.key?(_a) }
|
319
319
|
end
|
320
320
|
|
321
|
-
local_vars[:
|
321
|
+
local_vars[:_reset] ||= :memory if local_vars[:_memory]
|
322
322
|
@min_reg_address ||= address
|
323
323
|
@max_reg_address ||= address
|
324
324
|
# Must set an initial value, otherwise max_address_reg_size will be nil if a sub_block contains only
|
data/lib/origen/registers/reg.rb
CHANGED
@@ -14,13 +14,13 @@ module Origen
|
|
14
14
|
# to all of its contained bits unless a specific bit has its own definition of the same
|
15
15
|
# attribute
|
16
16
|
REG_LEVEL_ATTRIBUTES = {
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
_feature: {},
|
18
|
+
_reset: { aliases: [:res] },
|
19
|
+
_memory: {},
|
20
|
+
_path: { aliases: [:hdl_path] },
|
21
|
+
_abs_path: { aliases: [:absolute_path] },
|
22
|
+
_access: {},
|
23
|
+
_bit_order: {}
|
24
24
|
}
|
25
25
|
|
26
26
|
# Returns the object that own the register.
|
@@ -69,7 +69,13 @@ module Origen
|
|
69
69
|
@init_as_writable = options.delete(:init_as_writable)
|
70
70
|
@define_file = options.delete(:define_file)
|
71
71
|
REG_LEVEL_ATTRIBUTES.each do |attribute, _meta|
|
72
|
-
|
72
|
+
if options[attribute[1..-1].to_sym]
|
73
|
+
# If register creation is coming directly from Reg.new, instead of Placeholder,
|
74
|
+
# it may not have attributes with '_' prefix
|
75
|
+
instance_variable_set("@#{attribute[1..-1]}", options.delete(attribute[1..-1].to_sym))
|
76
|
+
else
|
77
|
+
instance_variable_set("@#{attribute[1..-1]}", options.delete(attribute))
|
78
|
+
end
|
73
79
|
end
|
74
80
|
@description_from_api = {}
|
75
81
|
description = options.delete(:description)
|
@@ -317,6 +317,7 @@ module Origen
|
|
317
317
|
unless line =~ /^Logging/ || line == '' ||
|
318
318
|
line =~ /V(\d+\.\d+-\d+|\d.\d+)/ || # Screen out something like "V5.1-1205" or "V6R2010"
|
319
319
|
line =~ /^3DEXPERIENCER\d+x$/ || # Screen out something like '3DEXPERIENCER2016x'
|
320
|
+
line =~ /^3DEXPERIENCE R\d+x$/ || # Screen out something like '3DEXPERIENCE R2017x'
|
320
321
|
line.strip.empty?
|
321
322
|
output << line.strip
|
322
323
|
end
|
data/lib/origen/site_config.rb
CHANGED
@@ -39,18 +39,25 @@ module Origen
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def eval_path(path, options = {})
|
42
|
-
#
|
43
|
-
|
44
|
-
path[0] = ''
|
45
|
-
else
|
46
|
-
path = File.expand_path(path)
|
47
|
-
end
|
42
|
+
# Any leading ~ should be expanded with whatever ~/ points to. This needs to be done now because later ~ will be replaced with just the username.
|
43
|
+
path = path.sub(/^~/, File.expand_path('~/'))
|
48
44
|
|
49
45
|
# Gsub the remaining ~ that aren't escaped.
|
50
46
|
# If it was escaped, eat the escape character
|
51
47
|
path.gsub!(/(?<!\\|\A)~/, "#{Etc.getlogin}")
|
52
48
|
path.gsub!(/\\(?=~)/, '')
|
53
49
|
|
50
|
+
# Now, expand the entire path for any other OS-specific symbols.
|
51
|
+
# One note, if we still have a leading '~', that means it was escaped at the beginning. So, what we'll do for this is let it expand
|
52
|
+
# then replace the leading File.expand_path('~/') with just '~', pretty much the opposite of path.sub(/^~/, File.expand_path('~/'))
|
53
|
+
# Note, we can't just take it out, expand, then add it back because expanding the path on Windows will expand to
|
54
|
+
# C:\, or D:\ or whatever, so need to do this 'expand, then unexpand' method.
|
55
|
+
if path.start_with?('~')
|
56
|
+
path = File.expand_path(path).sub(/^#{Regexp.quote(File.expand_path('~/'))}/, '~')
|
57
|
+
else
|
58
|
+
path = File.expand_path(path)
|
59
|
+
end
|
60
|
+
|
54
61
|
append = find_val('append_dot_origen')
|
55
62
|
append = '.origen' if append == true || append.nil?
|
56
63
|
|
@@ -1,15 +1,30 @@
|
|
1
1
|
module Origen
|
2
2
|
module Utility
|
3
3
|
class Collector
|
4
|
+
# Returns the collector's hash. This is the same as calling {#to_h}
|
4
5
|
attr_reader :_hash_
|
6
|
+
|
7
|
+
# Queries the current merge_method.
|
5
8
|
attr_reader :merge_method
|
6
9
|
|
7
10
|
# Need to keep a seperate methods list so we know what's been added by method missing instead of what's
|
8
11
|
# been added either by the hash or by method missing.
|
9
12
|
# Only overwriting a value in the block should cause an error. Overriding a value from the hash depends on
|
10
13
|
# the merge method's setting.
|
14
|
+
|
15
|
+
# List of the currently seen method names.
|
11
16
|
attr_reader :_methods_
|
12
17
|
|
18
|
+
# Creates a new Collector object and creates a Hash out of the methods names and values in the given block.
|
19
|
+
# @see http://origen-sdk.org/origen/guides/misc/utilities/#Collector
|
20
|
+
# @example Create a collector to transform a block into a Hash
|
21
|
+
# Origen::Utility::Collector.new { |c| c.my_param 'My Parameter'}.to_h #=> {my_param: 'My Parameter'}
|
22
|
+
# @yield [self] Passes the collector to the given block.
|
23
|
+
# @param options [Hash] Customization options.
|
24
|
+
# @option options [Hash] :hash Input, or starting, values that are set in the output hash prior to calling the given block.
|
25
|
+
# @option options [Symbol] :merge_method (:keep_hash) Indicates how arguments that exist in both the input hash and in the block should be handled.
|
26
|
+
# Accpeted values are :keep_hash, :keep_block, :fail.
|
27
|
+
# @raise [Origen::OrigenError] Raised when an unknown merge method is used.
|
13
28
|
def initialize(options = {}, &block)
|
14
29
|
@merge_method = options[:merge_method] || :keep_hash
|
15
30
|
@fail_on_empty_args = options[:fail_on_empty_args]
|
@@ -25,18 +40,32 @@ module Origen
|
|
25
40
|
end
|
26
41
|
end
|
27
42
|
|
28
|
-
#
|
43
|
+
# Retrieve the collector's hash.
|
44
|
+
# @deprecated Use Ruby-centric {#to_hash} instead.
|
45
|
+
# @return [Hash] Hash representation of the collector.
|
29
46
|
def store
|
30
47
|
Origen.log.deprecate 'Collector::store method was used. Please use the Ruby-centric Collector::to_h or Collector::to_hash method instead' \
|
31
48
|
" Called from: #{caller[0]}"
|
32
49
|
@_hash_
|
33
50
|
end
|
34
51
|
|
52
|
+
# Returns the collector, as a Hash.
|
53
|
+
# @return [Hash] Hash representation of the collector.
|
35
54
|
def to_hash
|
36
55
|
@_hash_
|
37
56
|
end
|
38
57
|
alias_method :to_h, :to_hash
|
39
58
|
|
59
|
+
# Using the method name, creates a key in the Collector with argument given to the method.
|
60
|
+
# @see http://origen-sdk.org/origen/guides/misc/utilities/#Collector
|
61
|
+
# @note If no args are given, the method key is set to <code>nil</code>.
|
62
|
+
# @raise [ArgumentError] Raised when a method attempts to use both arguments and a block in the same line.
|
63
|
+
# E.g.: <code>collector.my_param 'my_param' { 'MyParam' }</code>
|
64
|
+
# @raise [ArgumentError] Raised when a method attempts to use multiple input values.
|
65
|
+
# E.g.: <code>collector.my_param 'my_param', 'MyParam'</code>
|
66
|
+
# @raise [Origen::OrigenError] Raised when a method is set more than once. I.e., overriding values are not allowed.
|
67
|
+
# E.g.: <code>collector.my_param 'my_param'; collector.my_param 'MyParam'</code>
|
68
|
+
# @raise [Origen::OrigenError] Raised when the input hash and the block attempt to set the same method name and the merge method is set to <code>:fail</code>.
|
40
69
|
def method_missing(method, *args, &_block)
|
41
70
|
key = method.to_s.sub('=', '').to_sym
|
42
71
|
|
data/templates/nanoc/config.yaml
CHANGED
@@ -58,6 +58,9 @@ data_sources:
|
|
58
58
|
# it will become /about.html/ instead.
|
59
59
|
allow_periods_in_identifiers: false
|
60
60
|
|
61
|
+
# Force utf-8 encoding scheme.
|
62
|
+
encoding: utf-8
|
63
|
+
|
61
64
|
# Configuration for the watch command, which watches a site for changes and
|
62
65
|
# recompiles if necessary.
|
63
66
|
watcher:
|
@@ -8,6 +8,7 @@ class SearchFilter < Nanoc::Filter
|
|
8
8
|
def run(content, params={})
|
9
9
|
doc = Nokogiri::HTML(content)
|
10
10
|
url = assigns[:item_rep].path
|
11
|
+
encoding = params[:encoding] || 'UTF-8'
|
11
12
|
#first_image = doc.xpath('//img/@src').to_a[0]
|
12
13
|
document = {
|
13
14
|
# See this next time you need to fix this: https://gist.github.com/LeCoupa/8c305ec8c713aad07b14
|
@@ -19,7 +20,7 @@ class SearchFilter < Nanoc::Filter
|
|
19
20
|
}
|
20
21
|
|
21
22
|
if File.exist?(search_file)
|
22
|
-
documents = JSON.parse(File.read(search_file))
|
23
|
+
documents = JSON.parse(File.read(search_file, encoding: encoding))
|
23
24
|
else
|
24
25
|
documents = {}
|
25
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.34.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -128,14 +128,14 @@ dependencies:
|
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: 3.7.0
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: 3.7.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: kramdown
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -644,7 +644,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
644
644
|
version: 1.8.11
|
645
645
|
requirements: []
|
646
646
|
rubyforge_project:
|
647
|
-
rubygems_version: 2.
|
647
|
+
rubygems_version: 2.4.5.5
|
648
648
|
signing_key:
|
649
649
|
specification_version: 4
|
650
650
|
summary: The Semiconductor Developer's Kit
|