origen 0.7.23 → 0.7.24
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/version.rb +1 -1
- data/lib/origen.rb +16 -2
- data/lib/origen/application.rb +46 -3
- data/lib/origen/application/configuration.rb +17 -9
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96077b0fbaaf9abb787b9db8aa77e996da1035b9
|
4
|
+
data.tar.gz: 9c54cb2a4381a4176e683a5818660f5e69a979df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0a59431d8da8766af067d96397e11fb0d22b78a3e8a6f8ebb34b6b1cdd8f2f5ed21e73ea57bb0cd4a1897030e2a4aa292aa4f936afdcc166ba7cf5a7be470fe
|
7
|
+
data.tar.gz: a192b3b3d8a0982d7302570899709f70b8ad44b585ef1d2e034c0d7b3baf227a4fe2ad9bd85b4918938efddd747032e62cbed515882cc223b17e8aa355005555
|
data/config/version.rb
CHANGED
data/lib/origen.rb
CHANGED
@@ -109,6 +109,10 @@ unless defined? RGen::ORIGENTRANSITION
|
|
109
109
|
@application_loaded
|
110
110
|
end
|
111
111
|
|
112
|
+
def plugins_loaded?
|
113
|
+
@plugins_loaded
|
114
|
+
end
|
115
|
+
|
112
116
|
# Returns the current (top-level) application instance
|
113
117
|
def app(plugin = nil, _options = {})
|
114
118
|
plugin, options = nil, plugin if plugin.is_a?(Hash)
|
@@ -418,8 +422,7 @@ unless defined? RGen::ORIGENTRANSITION
|
|
418
422
|
# chdir to the new app directory (to fetch it) Origen.log would try to load the partial app.
|
419
423
|
@running_outside_an_app = true unless in_app_workspace?
|
420
424
|
return nil if @running_outside_an_app
|
421
|
-
|
422
|
-
@application = _applications_lookup[:root][root.to_s]
|
425
|
+
# Load the app's plugins and other gem requirements
|
423
426
|
if File.exist?(File.join(root, 'Gemfile')) && !@with_boot_environment
|
424
427
|
# Don't understand the rules here, belt and braces approach for now to make
|
425
428
|
# sure that all Origen plugins are auto-required (otherwise Origen won't know
|
@@ -429,6 +432,12 @@ unless defined? RGen::ORIGENTRANSITION
|
|
429
432
|
Bundler.require(:runtime)
|
430
433
|
Bundler.require(:default)
|
431
434
|
end
|
435
|
+
@plugins_loaded = true
|
436
|
+
# Now load the app
|
437
|
+
@loading_top_level = true
|
438
|
+
require File.join(root, APP_CONFIG)
|
439
|
+
@application = _applications_lookup[:root][root.to_s]
|
440
|
+
@loading_top_level = false
|
432
441
|
if @with_boot_environment
|
433
442
|
@application.plugins.disable_current
|
434
443
|
else
|
@@ -447,6 +456,11 @@ unless defined? RGen::ORIGENTRANSITION
|
|
447
456
|
end
|
448
457
|
end
|
449
458
|
|
459
|
+
# @api private
|
460
|
+
def loading_top_level?
|
461
|
+
@loading_top_level
|
462
|
+
end
|
463
|
+
|
450
464
|
def launch_time
|
451
465
|
@launch_time ||= time_now
|
452
466
|
end
|
data/lib/origen/application.rb
CHANGED
@@ -35,7 +35,12 @@ module Origen
|
|
35
35
|
root = Pathname.new(caller[0].sub(/(\\|\/)?config(\\|\/)application.rb.*/, '')).realpath
|
36
36
|
app = base.instance
|
37
37
|
app.root = root.to_s
|
38
|
-
Origen.
|
38
|
+
if Origen.plugins_loaded? && !Origen.loading_top_level?
|
39
|
+
Origen.log.warning "The #{app.name} plugin is using a non-standard loading mechanism, upgrade to a newer version to get rid of this error (please report a bug if that does not remove this warning)"
|
40
|
+
Origen.app.plugins << app
|
41
|
+
else
|
42
|
+
Origen.register_application(app)
|
43
|
+
end
|
39
44
|
app.add_lib_to_load_path!
|
40
45
|
end
|
41
46
|
end
|
@@ -253,13 +258,47 @@ module Origen
|
|
253
258
|
# Returns true if the given application instance is the
|
254
259
|
# current top level application
|
255
260
|
def current?
|
256
|
-
|
261
|
+
# If this is called before the plugins are loaded (i.e. by a plugin's application file), then
|
262
|
+
# it is definitely not the top-level app
|
263
|
+
if Origen.plugins_loaded?
|
264
|
+
Origen.app == self
|
265
|
+
else
|
266
|
+
false
|
267
|
+
end
|
257
268
|
end
|
269
|
+
alias_method :standalone?, :current?
|
270
|
+
alias_method :running_standalone?, :current?
|
258
271
|
|
259
272
|
# Returns true if the given application instance is
|
260
273
|
# the current plugin
|
261
274
|
def current_plugin?
|
262
|
-
Origen.
|
275
|
+
if Origen.plugins_loaded?
|
276
|
+
Origen.app.plugins.current == self
|
277
|
+
else
|
278
|
+
puts <<-END
|
279
|
+
current_plugin? cannot be used at this point in your code since the app is not loaded yet.
|
280
|
+
|
281
|
+
If you are calling this from config/application.rb then you can only use current_plugin? within a block:
|
282
|
+
|
283
|
+
# Not OK
|
284
|
+
if current_plugin?
|
285
|
+
config.output_directory = "#{Origen.root}/output/dir1"
|
286
|
+
else
|
287
|
+
config.output_directory = "#{Origen.root}/output/dir2"
|
288
|
+
end
|
289
|
+
|
290
|
+
# OK
|
291
|
+
config.output_directory do
|
292
|
+
if current_plugin?
|
293
|
+
"#{Origen.root}/output/dir1"
|
294
|
+
else
|
295
|
+
"#{Origen.root}/output/dir2"
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
END
|
300
|
+
exit 1
|
301
|
+
end
|
263
302
|
end
|
264
303
|
|
265
304
|
# Returns the current top-level object (the DUT)
|
@@ -464,6 +503,10 @@ module Origen
|
|
464
503
|
@config ||= Configuration.new(self)
|
465
504
|
end
|
466
505
|
|
506
|
+
def add_config_attribute(*args)
|
507
|
+
Application::Configuration.add_attribute(*args)
|
508
|
+
end
|
509
|
+
|
467
510
|
# Returns the name of the given application, this is the name that will
|
468
511
|
# be used to refer to the application when it is used as a plugin
|
469
512
|
def name
|
@@ -37,11 +37,11 @@ module Origen
|
|
37
37
|
|
38
38
|
# Any attributes that want to accept a block, but not necessarily require the target
|
39
39
|
# can be added here
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
40
|
+
ATTRS_THAT_DONT_DEPEND_ON_TARGET = [
|
41
|
+
:release_instructions, :history_file, :log_directory, :copy_command,
|
42
|
+
:diff_command, :remotes,
|
43
|
+
:external_app_dirs
|
44
|
+
]
|
45
45
|
|
46
46
|
# If a current plugin is present then its value for these attributes will be
|
47
47
|
# used instead of that from the current application
|
@@ -122,7 +122,11 @@ module Origen
|
|
122
122
|
# # config/application.rb
|
123
123
|
#
|
124
124
|
# config.output_directory = ->{ "#{Origen.root}/output/#{$dut.class}" }
|
125
|
-
|
125
|
+
def self.add_attribute(name, options = {})
|
126
|
+
options = {
|
127
|
+
depend_on_target: true
|
128
|
+
}.merge(options)
|
129
|
+
attr_writer name
|
126
130
|
define_method name do |override = true, &block|
|
127
131
|
if block # _given?
|
128
132
|
instance_variable_set("@#{name}".to_sym, block)
|
@@ -131,9 +135,9 @@ module Origen
|
|
131
135
|
app.current? && Origen.app.plugins.current
|
132
136
|
var = Origen.app.plugins.current.config.send(name, override: false)
|
133
137
|
end
|
134
|
-
var ||= instance_variable_get("@#{name}".to_sym)
|
138
|
+
var ||= instance_variable_get("@#{name}".to_sym) || options[:default]
|
135
139
|
if var.respond_to?('call')
|
136
|
-
if
|
140
|
+
if options[:depend_on_target]
|
137
141
|
# If an attempt has been made to access this attribute before the target has
|
138
142
|
# been instantiated raise an error
|
139
143
|
# Note Origen.app here instead of just app to ensure we are talking to the top level application,
|
@@ -150,7 +154,11 @@ module Origen
|
|
150
154
|
end
|
151
155
|
end
|
152
156
|
|
153
|
-
|
157
|
+
ATTRS_THAT_DEPEND_ON_TARGET.each { |n| add_attribute(n) }
|
158
|
+
|
159
|
+
ATTRS_THAT_DONT_DEPEND_ON_TARGET.each { |n| add_attribute(n, depend_on_target: false) }
|
160
|
+
|
161
|
+
(ATTRS_THAT_CURRENT_PLUGIN_CAN_OVERRIDE - ATTRS_THAT_DEPEND_ON_TARGET - ATTRS_THAT_DONT_DEPEND_ON_TARGET).each do |name|
|
154
162
|
if override && ATTRS_THAT_CURRENT_PLUGIN_CAN_OVERRIDE.include?(name) &&
|
155
163
|
app.current? && Origen.app.plugins.current
|
156
164
|
var = Origen.app.plugins.current.config.send(name, override: false)
|
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.7.
|
4
|
+
version: 0.7.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -567,7 +567,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
567
567
|
version: 1.8.11
|
568
568
|
requirements: []
|
569
569
|
rubyforge_project:
|
570
|
-
rubygems_version: 2.
|
570
|
+
rubygems_version: 2.5.1
|
571
571
|
signing_key:
|
572
572
|
specification_version: 4
|
573
573
|
summary: The Semiconductor Developer's Kit
|