ebngen 1.0.0 → 1.0.1
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/lib/ebngen/adapter/_assert.rb +25 -0
- data/lib/ebngen/adapter/_base.rb +25 -0
- data/lib/ebngen/adapter/_path_modifier.rb +29 -0
- data/lib/ebngen/adapter/_yml_helper.rb +51 -0
- data/lib/ebngen/adapter/cmake/CMakeList.txt +570 -0
- data/lib/ebngen/adapter/cmake/txt.rb +75 -0
- data/lib/ebngen/adapter/cmake.rb +291 -0
- data/lib/ebngen/adapter/iar/ewd.rb +6 -0
- data/lib/ebngen/adapter/iar/ewp.rb +250 -0
- data/lib/ebngen/adapter/iar/eww.rb +62 -0
- data/lib/ebngen/adapter/iar.rb +390 -0
- data/lib/ebngen/assembly.rb +22 -0
- data/lib/ebngen/ebngen.rb +4 -0
- data/lib/ebngen/generate.rb +42 -0
- data/lib/ebngen/settings/target_types.rb +2 -0
- data/lib/ebngen/settings/tool_chains.rb +5 -0
- data/lib/ebngen/translate.rb +238 -0
- data/lib/ebngen/unifmt.rb +290 -0
- metadata +19 -1
@@ -0,0 +1,238 @@
|
|
1
|
+
require 'deep_merge'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'pathname'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
module Utils_set
|
7
|
+
def nodes_exist?(node, subnodes)
|
8
|
+
return if subnodes.class != 'Array'
|
9
|
+
subnodes.each do |key|
|
10
|
+
return false if ! node.has_key?(key)
|
11
|
+
end
|
12
|
+
return true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Translator
|
17
|
+
attr_accessor :data_in, :data_out, :reference_path
|
18
|
+
|
19
|
+
include Utils_set
|
20
|
+
|
21
|
+
def initialize(node, logger: nil)
|
22
|
+
@data_in = deep_copy(node)
|
23
|
+
@data_in_component = deep_copy(node)
|
24
|
+
@data_out = Hash.new
|
25
|
+
merge_by_add(@data_in)
|
26
|
+
end
|
27
|
+
|
28
|
+
def deep_copy(o)
|
29
|
+
Marshal.load(Marshal.dump(o))
|
30
|
+
end
|
31
|
+
|
32
|
+
def deep_add_merge(struct, subnode, addon)
|
33
|
+
return if Hash != struct.class
|
34
|
+
if struct[addon]['__add__'].nil?
|
35
|
+
#we do not want the addon module to change the status
|
36
|
+
struct[addon]['attribute'] = ""
|
37
|
+
struct[subnode] = struct[subnode].deep_merge(deep_copy(struct[addon]))
|
38
|
+
struct[addon]['attribute'] = 'required'
|
39
|
+
return
|
40
|
+
end
|
41
|
+
#if has more addon
|
42
|
+
if struct[addon]['__add__'].count != 0
|
43
|
+
struct[addon]['__add__'].each do |submodule|
|
44
|
+
deep_add_merge(struct, addon, submodule)
|
45
|
+
end
|
46
|
+
else
|
47
|
+
struct[addon]['attribute'] = ""
|
48
|
+
struct[subnode] = struct[subnode].deep_merge(deep_copy(struct[addon]))
|
49
|
+
struct[addon]['attribute'] = 'required'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# perform merge by "__add__" node only applys to application type
|
54
|
+
def merge_by_add(struct)
|
55
|
+
#only scan the top level
|
56
|
+
return if Hash != struct.class
|
57
|
+
struct.each_key do |subnode|
|
58
|
+
if struct[subnode]['__add__'] != nil
|
59
|
+
struct[subnode]['__add__'].each do |addon|
|
60
|
+
next if struct[addon].class != Hash
|
61
|
+
begin
|
62
|
+
next if struct[subnode]['configuration']['section-type'] != "application"
|
63
|
+
if struct[addon]['configuration']['section-type'] != "component"
|
64
|
+
puts "WARNING #{addon} is required as component but has not a component attribute"
|
65
|
+
end
|
66
|
+
rescue
|
67
|
+
puts "error with the merge_by_add with #{subnode} add #{addon}"
|
68
|
+
end
|
69
|
+
deep_add_merge(struct, subnode, addon)
|
70
|
+
end
|
71
|
+
#struct[subnode].delete('__add__')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def translate
|
77
|
+
translate_project()
|
78
|
+
return [@data_out, @data_in_component, @data_in]
|
79
|
+
#puts @data_out.to_yaml
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
def convert_rules(proj, comp = 'iar')
|
85
|
+
if @data_in[proj]['configuration']['section-type'] == "virtual-library"
|
86
|
+
if @data_in[proj].has_key?(comp)
|
87
|
+
@data_out[proj] = @data_in[proj]
|
88
|
+
board = @data_in[proj]['configuration']['board']
|
89
|
+
path = @data_out[proj][comp]['outdir']['path']
|
90
|
+
return if ! @data_out[proj].has_key?('chip-convert')
|
91
|
+
@data_out[proj][comp]['outdir']['path'] = path + @data_out[proj]['chip-convert'][board]
|
92
|
+
return
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
if @data_in[proj]['configuration']['section-type'] == "component"
|
97
|
+
return
|
98
|
+
end
|
99
|
+
|
100
|
+
if @data_in[proj]['configuration'].has_key?('meta_components')
|
101
|
+
@data_out[proj]['meta_components'] = @data_in[proj]['configuration']['meta_components']
|
102
|
+
end
|
103
|
+
|
104
|
+
if @data_in[proj]['configuration']['tools'].has_key?(comp)
|
105
|
+
compiler = @data_in[proj]['configuration']['tools'][comp]
|
106
|
+
@data_out[proj][comp] = Hash.new
|
107
|
+
@data_out[proj][comp]['targets'] = Hash.new
|
108
|
+
@data_out[proj][comp]['type'] = @data_in[proj]['configuration']['section-type']
|
109
|
+
|
110
|
+
@data_out[proj][comp]['templates'] = compiler['project-templates']
|
111
|
+
if compiler.has_key?("group")
|
112
|
+
@data_out[proj][comp]['group'] = compiler['group']
|
113
|
+
end
|
114
|
+
|
115
|
+
if @data_in[proj].has_key?('outdir')
|
116
|
+
board = @data_in[proj]['configuration']['board']
|
117
|
+
if @data_out[proj][comp]['type'] == "library"
|
118
|
+
if comp == 'uv4'
|
119
|
+
@data_out[proj][comp]['outdir'] = File.join(@data_in[proj]['outdir'], proj, "mdk")
|
120
|
+
else
|
121
|
+
@data_out[proj][comp]['outdir'] = File.join(@data_in[proj]['outdir'], proj, comp)
|
122
|
+
end
|
123
|
+
else
|
124
|
+
if comp == "uv4"
|
125
|
+
@data_out[proj][comp]['outdir'] = File.join(@data_in[proj]['outdir'], "mdk", board)
|
126
|
+
else
|
127
|
+
@data_out[proj][comp]['outdir'] = File.join(@data_in[proj]['outdir'], comp, board)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
compiler['config'].each_key do |target|
|
132
|
+
next if compiler['load-to'].nil?
|
133
|
+
next if compiler['load-to'][target].nil?
|
134
|
+
create_and_deep_merge(@data_out[proj][comp]['targets'], target, compiler['config'][target])
|
135
|
+
@data_out[proj][comp]['targets'][target]['linker_file'] = Hash.new
|
136
|
+
@data_out[proj][comp]['targets'][target]['linker_file']['path'] = compiler['load-to'][target]['linker-file']
|
137
|
+
@data_out[proj][comp]['targets'][target]['linker_file']['rootdir'] = compiler['load-to'][target]['rootdir']
|
138
|
+
create_and_deep_merge(@data_out[proj][comp]['targets'][target]['binary_file'], target, compiler['binary-file'])
|
139
|
+
@data_out[proj][comp]['targets'][target]['identifier'] = compiler['load-to'][target]['identifier']
|
140
|
+
@data_out[proj][comp]['targets'][target]['config'] = compiler['load-to'][target]['config']
|
141
|
+
@data_out[proj][comp]['targets'][target]['target'] = compiler['load-to'][target]['target']
|
142
|
+
@data_out[proj][comp]['targets'][target]['libraries'] = Array.new
|
143
|
+
if ! @data_in[proj]['configuration']['section-depends'].nil?
|
144
|
+
@data_in[proj]['configuration']['section-depends'].each do |dep|
|
145
|
+
@data_out[proj][comp]['targets'][target]['libraries'].insert(-1, dep)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
#now translate the source
|
150
|
+
return if ! @data_in[proj].has_key?('modules')
|
151
|
+
|
152
|
+
if @data_in[proj].has_key?('tools')
|
153
|
+
#process compile depend files here
|
154
|
+
if @data_in[proj]['tools'].has_key?(comp) and @data_in[proj].has_key?('modules') and @data_in[proj]["configuration"]["section-type"] == "application"
|
155
|
+
@data_in[proj]['tools'][comp]['files'].each do |file|
|
156
|
+
puts file
|
157
|
+
next ! file.has_key?("virtual-dir")
|
158
|
+
file['virtual_dir'] = file.delete "virtual-dir"
|
159
|
+
end
|
160
|
+
create_and_deep_merge(@data_out[proj][comp], 'source', @data_in[proj]['tools'][comp]['files'])
|
161
|
+
end
|
162
|
+
end
|
163
|
+
@data_in[proj]['modules'].each_key do |mod|
|
164
|
+
if @data_in[proj]['modules'][mod].class == Hash and @data_in[proj]['modules'][mod].has_key?('virtual-dir')
|
165
|
+
temp = Marshal.load(Marshal.dump(@data_in[proj]['modules'][mod]['files']))
|
166
|
+
temp.each do |file|
|
167
|
+
#puts "old virtual-dir is #{mod} #{file['virtual-dir']}"
|
168
|
+
#puts "current #{@data_in[proj]['modules'][mod]['virtual-dir'].to_s}"
|
169
|
+
if file['virtual-dir'] == nil
|
170
|
+
file['virtual-dir'] = @data_in[proj]['modules'][mod]['virtual-dir'].to_s
|
171
|
+
else
|
172
|
+
if ! file.has_key?("processed")
|
173
|
+
#puts proj,mod,file
|
174
|
+
#puts file['virtual-dir']
|
175
|
+
#puts @data_in[proj]['modules'][mod]['virtual-dir'].to_s
|
176
|
+
file['virtual-dir'] = "#{@data_in[proj]['modules'][mod]['virtual-dir']}:#{file['virtual-dir']}"
|
177
|
+
file['processed'] = "true"
|
178
|
+
end
|
179
|
+
end
|
180
|
+
#puts "new virtual-dir is #{file['virtual-dir']} for #{proj}"
|
181
|
+
if comp == 'uv4' || comp == 'mdk'
|
182
|
+
file['virtual-dir'] = file['virtual-dir'].gsub(':','-')
|
183
|
+
end
|
184
|
+
file['virtual_dir'] = file.delete "virtual-dir"
|
185
|
+
end
|
186
|
+
create_and_deep_merge(@data_out[proj][comp], 'source', temp)
|
187
|
+
|
188
|
+
else
|
189
|
+
if @data_in[proj]['modules'][mod].class == Hash and @data_in[proj]['modules'][mod].has_key?('files')
|
190
|
+
@data_in[proj]['modules'][mod]['files'].each do |file|
|
191
|
+
next ! file.has_key?("virtual-dir")
|
192
|
+
file['virtual_dir'] = file.delete "virtual-dir"
|
193
|
+
end
|
194
|
+
create_and_deep_merge(@data_out[proj][comp], 'source', @data_in[proj]['modules'][mod]['files'])
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
if @data_in[proj].has_key?('document')
|
200
|
+
create_and_deep_merge(@data_out[proj][comp],'document', @data_in[proj]['document'])
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def create_and_deep_merge(a, b, c)
|
206
|
+
return if c == nil
|
207
|
+
if c.class == Array
|
208
|
+
a[b] = Array.new if a[b] == nil
|
209
|
+
a[b] = a[b] + c.dup
|
210
|
+
else
|
211
|
+
a[b] = Hash.new if a[b] == nil
|
212
|
+
a[b].deep_merge(c)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
def translate_project
|
217
|
+
@data_in.each_key do |proj|
|
218
|
+
next if @data_in[proj].nil?
|
219
|
+
if @data_in[proj].has_key?('configuration')
|
220
|
+
next if @data_in[proj]['configuration']['section-type'] == "component"
|
221
|
+
end
|
222
|
+
@data_out[proj] = Hash.new
|
223
|
+
if @data_in[proj].has_key?('section-type')
|
224
|
+
@data_out[proj]['type'] = @data_in[proj]['section-type']
|
225
|
+
end
|
226
|
+
convert_rules(proj,'iar')
|
227
|
+
#convert_rules(proj,'uv4')
|
228
|
+
convert_rules(proj,'cmake')
|
229
|
+
#convert_rules(proj,'armgcc')
|
230
|
+
#convert_rules(proj,'kds')
|
231
|
+
#convert_rules(proj,'atl')
|
232
|
+
#convert_rules(proj,'lpcx')
|
233
|
+
end
|
234
|
+
@data_in_component.each_key do |proj|
|
235
|
+
# puts "#{proj} TBD"
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
@@ -0,0 +1,290 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require "deep_merge"
|
3
|
+
#this is for contraucture a uniformat input hierarchy hash
|
4
|
+
require_relative 'settings/tool_chains'
|
5
|
+
require_relative 'settings/target_types'
|
6
|
+
|
7
|
+
class UfBaseClass
|
8
|
+
def self.attr_accessor(*vars)
|
9
|
+
@attributes ||= []
|
10
|
+
@attributes.concat vars
|
11
|
+
super(*vars)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.attributes
|
15
|
+
@attributes
|
16
|
+
end
|
17
|
+
|
18
|
+
def attributes
|
19
|
+
self.class.attributes
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module Validate
|
24
|
+
def validate_array(name)
|
25
|
+
@validate_hash = Hash.new if @validate_hash.nil?
|
26
|
+
@validate_hash[name] = Array
|
27
|
+
end
|
28
|
+
|
29
|
+
def validate_string(name)
|
30
|
+
@validate_hash = Hash.new if @validate_hash.nil?
|
31
|
+
@validate_hash[name] = String
|
32
|
+
end
|
33
|
+
|
34
|
+
def validate_hash(name)
|
35
|
+
@validate_hash = Hash.new if @validate_hash.nil?
|
36
|
+
@validate_hash[name] = Hash
|
37
|
+
end
|
38
|
+
|
39
|
+
def validate(name, value)
|
40
|
+
if @validate_hash.has_key?(name)
|
41
|
+
return @validate_hash[name] == value.class
|
42
|
+
end
|
43
|
+
true
|
44
|
+
end
|
45
|
+
|
46
|
+
def get_validate(name)
|
47
|
+
if @validate_hash.has_key?(name)
|
48
|
+
return @validate_hash[name]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
class Unifmt < UfBaseClass
|
55
|
+
#the soc definitons
|
56
|
+
attr_accessor :cp_defines
|
57
|
+
#the asm defintions
|
58
|
+
attr_accessor :as_predefines, :as_preincludes, :as_defines, :as_include, :as_flags
|
59
|
+
#the c code definitons
|
60
|
+
attr_accessor :cc_predefines, :cc_preincludes, :cc_defines, :cc_include, :cc_flags
|
61
|
+
#the Cxx code difintios
|
62
|
+
attr_accessor :cxx_predefines, :cxx_preincludes, :cxx_defines, :cxx_include, :cxx_flags
|
63
|
+
#link flags
|
64
|
+
attr_accessor :ld_flags
|
65
|
+
#dependant libraries information
|
66
|
+
attr_accessor :libraries
|
67
|
+
#link files
|
68
|
+
attr_accessor :linker_file
|
69
|
+
#meta_components dependency
|
70
|
+
attr_accessor :meta_components
|
71
|
+
#source
|
72
|
+
attr_accessor :sources
|
73
|
+
#template
|
74
|
+
attr_accessor :templates
|
75
|
+
#project_name
|
76
|
+
attr_accessor :project_name
|
77
|
+
#project_name
|
78
|
+
attr_accessor :outdir
|
79
|
+
#tool_chain_set_spec
|
80
|
+
attr_accessor :tool_chain_set_spec
|
81
|
+
#tool_chain_add_apec
|
82
|
+
attr_accessor :tool_chain_add_spec
|
83
|
+
#binary_file
|
84
|
+
attr_accessor :binary_file
|
85
|
+
|
86
|
+
#the keys that used in the uniformat
|
87
|
+
@@UNIFY_KEYS = ["meta_components",
|
88
|
+
"targets",
|
89
|
+
"path",
|
90
|
+
"rootdir",
|
91
|
+
"type",
|
92
|
+
"templates",
|
93
|
+
"outdir",
|
94
|
+
"source",
|
95
|
+
"virtual_dir",
|
96
|
+
"document",
|
97
|
+
"board",
|
98
|
+
"identifier",
|
99
|
+
"linker_file",
|
100
|
+
"sectiontype",
|
101
|
+
"binaryfile",
|
102
|
+
"release_dir"]
|
103
|
+
|
104
|
+
@@CONFIG_SETTINGS = [
|
105
|
+
:cp_defines ,
|
106
|
+
:as_predefines,
|
107
|
+
:as_defines,
|
108
|
+
:as_flags,
|
109
|
+
:as_preincludes ,
|
110
|
+
:as_include,
|
111
|
+
:cc_predefines,
|
112
|
+
:cc_defines,
|
113
|
+
:cc_flags,
|
114
|
+
:cc_preincludes,
|
115
|
+
:cc_include,
|
116
|
+
:cxx_predefines,
|
117
|
+
:cxx_defines,
|
118
|
+
:cxx_flags,
|
119
|
+
:cxx_preincludes,
|
120
|
+
:cxx_include,
|
121
|
+
:ld_flags,
|
122
|
+
:linker_file,
|
123
|
+
:outdir,
|
124
|
+
:binary_file,
|
125
|
+
:tool_chain_set_spec,
|
126
|
+
:tool_chain_add_spec
|
127
|
+
]
|
128
|
+
|
129
|
+
extend Validate
|
130
|
+
|
131
|
+
#constrains of the variables
|
132
|
+
validate_hash :cp_defines
|
133
|
+
validate_hash :as_predefines
|
134
|
+
validate_hash :as_defines
|
135
|
+
validate_array :as_flags
|
136
|
+
validate_array :as_preincludes
|
137
|
+
validate_array :as_include
|
138
|
+
|
139
|
+
validate_hash :cc_predefines
|
140
|
+
validate_hash :cc_defines
|
141
|
+
validate_array :cc_flags
|
142
|
+
validate_array :cc_preincludes
|
143
|
+
validate_array :cc_include
|
144
|
+
|
145
|
+
validate_hash :cxx_predefines
|
146
|
+
validate_hash :cxx_defines
|
147
|
+
validate_array :cxx_flags
|
148
|
+
validate_array :cxx_preincludes
|
149
|
+
validate_array :cxx_include
|
150
|
+
|
151
|
+
validate_array :ld_flags
|
152
|
+
validate_array :meta_components
|
153
|
+
|
154
|
+
validate_array :libraries
|
155
|
+
|
156
|
+
validate_hash :linker_file
|
157
|
+
|
158
|
+
|
159
|
+
validate_hash :sources
|
160
|
+
|
161
|
+
validate_array :templates
|
162
|
+
|
163
|
+
validate_string :project_name
|
164
|
+
validate_string :outdir
|
165
|
+
validate_string :binary_file
|
166
|
+
validate_hash :tool_chain_set_spec
|
167
|
+
validate_hash :tool_chain_add_spec
|
168
|
+
|
169
|
+
def initialize(options)
|
170
|
+
@options_default = {
|
171
|
+
:config => "debug",
|
172
|
+
:tool_chain => "iar",
|
173
|
+
:type => "application",
|
174
|
+
:board => "dummy_board",
|
175
|
+
:project_name => "dummy_project",
|
176
|
+
:project_root_dir => nil,
|
177
|
+
}
|
178
|
+
|
179
|
+
if options.class.to_s != "Hash" and not options.nil?
|
180
|
+
puts "#{options} shall be in hash format like { :targets => [\"release\", \"debug\"]}"
|
181
|
+
return
|
182
|
+
end
|
183
|
+
options.each do |key, value|
|
184
|
+
@options_default[key] = value
|
185
|
+
end
|
186
|
+
|
187
|
+
@projects_hash = Hash.new
|
188
|
+
@projects_hash[@options_default[:project_name]] = Hash.new
|
189
|
+
|
190
|
+
if not $TARGET_TYPES.include?(@options_default[:type])
|
191
|
+
puts "Error type #{@options_default[:type]} is not in allowable list, should be #{$TARGET_TYPES}"
|
192
|
+
return
|
193
|
+
end
|
194
|
+
|
195
|
+
if not $TOOL_CHAINS.include?(@options_default[:tool_chain])
|
196
|
+
puts "Error tool_chain #{@options_default[:tool_chain]} is not supported"
|
197
|
+
return
|
198
|
+
end
|
199
|
+
|
200
|
+
|
201
|
+
self.attributes.each do |item|
|
202
|
+
if @@CONFIG_SETTINGS.include?(item)
|
203
|
+
instance_variable_set("@#{item}",Unifmt.get_validate(item).new)
|
204
|
+
#@projects_hash[tc]["targets"][config][item.to_s] = instance_variable_get("@#{item}")
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def update
|
210
|
+
#some mandatory sections
|
211
|
+
@subhash = @projects_hash[@options_default[:project_name]]
|
212
|
+
@subhash["document"] = Hash.new
|
213
|
+
@subhash["document"]["board"] = @options_default[:board]
|
214
|
+
@subhash["document"]["project_name"] = @options_default[:project_name]
|
215
|
+
@subhash["document"]["project_root_dir"] = @options_default[:project_root_dir]
|
216
|
+
tc = @options_default[:tool_chain]
|
217
|
+
@subhash[tc] = Hash.new
|
218
|
+
@subhash[tc]["targets"] = Hash.new
|
219
|
+
@subhash[tc]["templates"] = instance_variable_get("@templates")
|
220
|
+
@subhash[tc]["type"] = @options_default[:type]
|
221
|
+
config = @options_default[:config]
|
222
|
+
if not $CONFIG_TYPES.include?(config)
|
223
|
+
puts "the config type #{config} is not supported"
|
224
|
+
return
|
225
|
+
end
|
226
|
+
@subhash[tc]["targets"][config] = Hash.new
|
227
|
+
self.attributes.each do |item|
|
228
|
+
if @@CONFIG_SETTINGS.include?(item)
|
229
|
+
@subhash[tc]["targets"][config][item.to_s] = instance_variable_get("@#{item}")
|
230
|
+
end
|
231
|
+
end
|
232
|
+
#other need special process features
|
233
|
+
@subhash[tc]["source"] = instance_variable_get("@sources")
|
234
|
+
@subhash[tc]["outdir"] = instance_variable_get("@outdir")
|
235
|
+
@subhash[tc]["libraries"] = instance_variable_get("@libraries")
|
236
|
+
end
|
237
|
+
|
238
|
+
def output_info
|
239
|
+
@projects_hash
|
240
|
+
end
|
241
|
+
|
242
|
+
def merge_target(project_data)
|
243
|
+
@projects_hash.deep_merge(project_data)
|
244
|
+
end
|
245
|
+
|
246
|
+
def <<(other)
|
247
|
+
@projects_hash.deep_merge(other.output_info)
|
248
|
+
end
|
249
|
+
|
250
|
+
def load(project_data)
|
251
|
+
@projects_hash = project_data
|
252
|
+
end
|
253
|
+
|
254
|
+
def help
|
255
|
+
puts @@UNIFY_KEYS
|
256
|
+
end
|
257
|
+
|
258
|
+
|
259
|
+
def as_preincludes_unit
|
260
|
+
return {"path" => "", "rootdir" => ""}
|
261
|
+
end
|
262
|
+
|
263
|
+
def as_include_unit
|
264
|
+
return {"path" => "", "rootdir" => ""}
|
265
|
+
end
|
266
|
+
|
267
|
+
def cc_preincludes_unit
|
268
|
+
return {"path" => "", "rootdir" => ""}
|
269
|
+
end
|
270
|
+
|
271
|
+
def cc_include_unit
|
272
|
+
return {"path" => "", "rootdir" => ""}
|
273
|
+
end
|
274
|
+
|
275
|
+
def cxx_preincludes_unit
|
276
|
+
return {"path" => "", "rootdir" => ""}
|
277
|
+
end
|
278
|
+
|
279
|
+
def cxx_include_unit
|
280
|
+
return {"path" => "", "rootdir" => ""}
|
281
|
+
end
|
282
|
+
|
283
|
+
def linker_file_unit
|
284
|
+
return {"path" => "", "rootdir" => ""}
|
285
|
+
end
|
286
|
+
|
287
|
+
def sources_unit
|
288
|
+
return {"source" => "", "virtual_dir" => "" ,"rootdir" => "", "release_dir" => ""}
|
289
|
+
end
|
290
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ebngen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hake Huang
|
@@ -18,6 +18,24 @@ extensions: []
|
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
20
|
- lib/ebngen.rb
|
21
|
+
- lib/ebngen/adapter/_assert.rb
|
22
|
+
- lib/ebngen/adapter/_base.rb
|
23
|
+
- lib/ebngen/adapter/_path_modifier.rb
|
24
|
+
- lib/ebngen/adapter/_yml_helper.rb
|
25
|
+
- lib/ebngen/adapter/cmake.rb
|
26
|
+
- lib/ebngen/adapter/cmake/CMakeList.txt
|
27
|
+
- lib/ebngen/adapter/cmake/txt.rb
|
28
|
+
- lib/ebngen/adapter/iar.rb
|
29
|
+
- lib/ebngen/adapter/iar/ewd.rb
|
30
|
+
- lib/ebngen/adapter/iar/ewp.rb
|
31
|
+
- lib/ebngen/adapter/iar/eww.rb
|
32
|
+
- lib/ebngen/assembly.rb
|
33
|
+
- lib/ebngen/ebngen.rb
|
34
|
+
- lib/ebngen/generate.rb
|
35
|
+
- lib/ebngen/settings/target_types.rb
|
36
|
+
- lib/ebngen/settings/tool_chains.rb
|
37
|
+
- lib/ebngen/translate.rb
|
38
|
+
- lib/ebngen/unifmt.rb
|
21
39
|
homepage: http://rubygems.org/gems/ebngen
|
22
40
|
licenses:
|
23
41
|
- Apache-2.0
|