Class: MRuby::Build
- Includes:
- LoadGems, Rake::DSL
- Defined in:
- ext/enterprise_script_service/mruby/lib/mruby/build.rb
Direct Known Subclasses
Defined Under Namespace
Classes: Exts
Constant Summary collapse
- COMPILERS =
%w(cc cxx objc asm)- COMMANDS =
COMPILERS + %w(linker archiver yacc gperf git exts mrbc)
Class Attribute Summary collapse
-
.current ⇒ Object
Returns the value of attribute current.
Instance Attribute Summary collapse
-
#bins ⇒ Object
Returns the value of attribute bins.
-
#build_dir ⇒ Object
Returns the value of attribute build_dir.
- #enable_bintest ⇒ Object
- #enable_test ⇒ Object
-
#exts ⇒ Object
Returns the value of attribute exts.
-
#file_separator ⇒ Object
Returns the value of attribute file_separator.
-
#gem_clone_dir ⇒ Object
Returns the value of attribute gem_clone_dir.
-
#gems ⇒ Object
readonly
Returns the value of attribute gems.
-
#libmruby_objs ⇒ Object
(also: #libmruby)
readonly
Returns the value of attribute libmruby_objs.
-
#name ⇒ Object
Returns the value of attribute name.
-
#toolchains ⇒ Object
readonly
Returns the value of attribute toolchains.
Instance Method Summary collapse
- #bintest_enabled? ⇒ Boolean
- #build_mrbc_exec ⇒ Object
- #build_mrbtest ⇒ Object
- #build_mrbtest_lib_only ⇒ Object
- #build_mrbtest_lib_only? ⇒ Boolean
- #compile_as_cxx(src, cxx_src, obj = nil, includes = []) ⇒ Object
- #compilers ⇒ Object
- #cxx_abi_enabled? ⇒ Boolean
- #cxx_exception_enabled? ⇒ Boolean
- #cygwin_filename(name) ⇒ Object
- #debug_enabled? ⇒ Boolean
- #define_rules ⇒ Object
- #disable_cxx_exception ⇒ Object
- #enable_cxx_abi ⇒ Object
- #enable_cxx_exception ⇒ Object
- #enable_debug ⇒ Object
- #exefile(name) ⇒ Object
- #filename(name) ⇒ Object
-
#initialize(name = 'host', build_dir = nil, &block) ⇒ Build
constructor
A new instance of Build.
- #libfile(name) ⇒ Object
- #libmruby_core_static ⇒ Object
- #libmruby_static ⇒ Object
- #libraries ⇒ Object
- #mrbcfile ⇒ Object
- #objfile(name) ⇒ Object
- #primary_toolchain ⇒ Object
- #print_build_summary ⇒ Object
- #root ⇒ Object
- #run_bintest ⇒ Object
- #run_test ⇒ Object
- #test_enabled? ⇒ Boolean
- #toolchain(name, params = {}) ⇒ Object
- #verbose_flag ⇒ Object
Methods included from LoadGems
#enable_gems?, #gem, #gembox, #load_special_path_gem
Constructor Details
#initialize(name = 'host', build_dir = nil, &block) ⇒ Build
Returns a new instance of Build.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 59 def initialize(name='host', build_dir=nil, &block) @name = name.to_s unless MRuby.targets[@name] if ENV['OS'] == 'Windows_NT' @exts = Exts.new('.o', '.exe', '.a') else @exts = Exts.new('.o', '', '.a') end build_dir = build_dir || ENV['MRUBY_BUILD_DIR'] || "#{MRUBY_ROOT}/build" @file_separator = '/' @build_dir = "#{build_dir}/#{@name}" @gem_clone_dir = "#{build_dir}/mrbgems" @cc = Command::Compiler.new(self, %w(.c)) @cxx = Command::Compiler.new(self, %w(.cc .cxx .cpp)) @objc = Command::Compiler.new(self, %w(.m)) @asm = Command::Compiler.new(self, %w(.S .asm)) @linker = Command::Linker.new(self) @archiver = Command::Archiver.new(self) @yacc = Command::Yacc.new(self) @gperf = Command::Gperf.new(self) @git = Command::Git.new(self) @mrbc = Command::Mrbc.new(self) @bins = [] @gems, @libmruby_objs = MRuby::Gem::List.new, [] @build_mrbtest_lib_only = false @cxx_exception_enabled = false @cxx_exception_disabled = false @cxx_abi_enabled = false @enable_bintest = false @enable_test = false @toolchains = [] MRuby.targets[@name] = self end MRuby::Build.current = MRuby.targets[@name] MRuby.targets[@name].instance_eval(&block) build_mrbc_exec if name == 'host' build_mrbtest if test_enabled? end |
Class Attribute Details
.current ⇒ Object
Returns the value of attribute current.
43 44 45 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 43 def current @current end |
Instance Attribute Details
#bins ⇒ Object
Returns the value of attribute bins.
47 48 49 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 47 def bins @bins end |
#build_dir ⇒ Object
Returns the value of attribute build_dir.
47 48 49 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 47 def build_dir @build_dir end |
#enable_bintest ⇒ Object
190 191 192 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 190 def enable_bintest @enable_bintest = true end |
#enable_test ⇒ Object
213 214 215 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 213 def enable_test @enable_test = true end |
#exts ⇒ Object
Returns the value of attribute exts.
47 48 49 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 47 def exts @exts end |
#file_separator ⇒ Object
Returns the value of attribute file_separator.
47 48 49 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 47 def file_separator @file_separator end |
#gem_clone_dir ⇒ Object
Returns the value of attribute gem_clone_dir.
47 48 49 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 47 def gem_clone_dir @gem_clone_dir end |
#gems ⇒ Object (readonly)
Returns the value of attribute gems.
48 49 50 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 48 def gems @gems end |
#libmruby_objs ⇒ Object (readonly) Also known as: libmruby
Returns the value of attribute libmruby_objs.
48 49 50 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 48 def libmruby_objs @libmruby_objs end |
#name ⇒ Object
Returns the value of attribute name.
47 48 49 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 47 def name @name end |
#toolchains ⇒ Object (readonly)
Returns the value of attribute toolchains.
48 49 50 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 48 def toolchains @toolchains end |
Instance Method Details
#bintest_enabled? ⇒ Boolean
194 195 196 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 194 def bintest_enabled? @enable_bintest end |
#build_mrbc_exec ⇒ Object
225 226 227 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 225 def build_mrbc_exec gem :core => 'mruby-bin-mrbc' end |
#build_mrbtest ⇒ Object
221 222 223 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 221 def build_mrbtest gem :core => 'mruby-test' end |
#build_mrbtest_lib_only ⇒ Object
297 298 299 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 297 def build_mrbtest_lib_only @build_mrbtest_lib_only = true end |
#build_mrbtest_lib_only? ⇒ Boolean
301 302 303 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 301 def build_mrbtest_lib_only? @build_mrbtest_lib_only end |
#compile_as_cxx(src, cxx_src, obj = nil, includes = []) ⇒ Object
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 164 def compile_as_cxx src, cxx_src, obj = nil, includes = [] obj = objfile(cxx_src) if obj.nil? file cxx_src => [src, __FILE__] do |t| FileUtils.mkdir_p File.dirname t.name IO.write t.name, "#define __STDC_CONSTANT_MACROS\n#define __STDC_LIMIT_MACROS\n\n#ifndef MRB_ENABLE_CXX_ABI\nextern \"C\" {\n#endif\n#include \"\#{File.absolute_path src}\"\n#ifndef MRB_ENABLE_CXX_ABI\n}\n#endif\n" end file obj => cxx_src do |t| cxx.run t.name, t.prerequisites.first, [], ["#{MRUBY_ROOT}/src"] + includes end obj end |
#compilers ⇒ Object
237 238 239 240 241 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 237 def compilers COMPILERS.map do |c| instance_variable_get("@#{c}") end end |
#cxx_abi_enabled? ⇒ Boolean
146 147 148 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 146 def cxx_abi_enabled? @cxx_abi_enabled end |
#cxx_exception_enabled? ⇒ Boolean
142 143 144 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 142 def cxx_exception_enabled? @cxx_exception_enabled end |
#cygwin_filename(name) ⇒ Object
262 263 264 265 266 267 268 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 262 def cygwin_filename(name) if name.is_a?(Array) name.flatten.map { |n| cygwin_filename(n) } else '"%s"' % `cygpath -w "#{filename(name)}"`.strip end end |
#debug_enabled? ⇒ Boolean
105 106 107 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 105 def debug_enabled? @enable_debug end |
#define_rules ⇒ Object
243 244 245 246 247 248 249 250 251 252 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 243 def define_rules compilers.each do |compiler| if respond_to?(:enable_gems?) && enable_gems? compiler.defines -= %w(DISABLE_GEMS) else compiler.defines += %w(DISABLE_GEMS) end compiler.define_rules build_dir, File.(File.join(File.dirname(__FILE__), '..', '..')) end end |
#disable_cxx_exception ⇒ Object
121 122 123 124 125 126 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 121 def disable_cxx_exception if @cxx_exception_enabled or @cxx_abi_enabled raise "cxx_exception already enabled" end @cxx_exception_disabled = true end |
#enable_cxx_abi ⇒ Object
150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 150 def enable_cxx_abi return if @cxx_abi_enabled if @cxx_exception_enabled raise "cxx_exception already enabled" end compilers.each { |c| c.defines += %w(MRB_ENABLE_CXX_EXCEPTION MRB_ENABLE_CXX_ABI) c.flags << c.cxx_compile_flag } compilers.each { |c| c.flags << c.cxx_compile_flag } linker.command = cxx.command if toolchains.find { |v| v == 'gcc' } @cxx_abi_enabled = true end |
#enable_cxx_exception ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 128 def enable_cxx_exception return if @cxx_exception_enabled return if @cxx_abi_enabled if @cxx_exception_disabled raise "cxx_exception disabled" end @cxx_exception_enabled = true compilers.each { |c| c.defines += %w(MRB_ENABLE_CXX_EXCEPTION) c.flags << c.cxx_exception_flag } linker.command = cxx.command if toolchains.find { |v| v == 'gcc' } end |
#enable_debug ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 109 def enable_debug compilers.each do |c| c.defines += %w(MRB_DEBUG) if toolchains.any? { |toolchain| toolchain == "gcc" } c.flags += %w(-g3 -O0) end end @mrbc. += ' -g' @enable_debug = true end |
#exefile(name) ⇒ Object
270 271 272 273 274 275 276 277 278 279 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 270 def exefile(name) if name.is_a?(Array) name.flatten.map { |n| exefile(n) } elsif File.extname(name).empty? "#{name}#{exts.executable}" else # `name` sometimes have (non-standard) extension (e.g. `.bat`). name end end |
#filename(name) ⇒ Object
254 255 256 257 258 259 260 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 254 def filename(name) if name.is_a?(Array) name.flatten.map { |n| filename(n) } else '"%s"' % name.gsub('/', file_separator) end end |
#libfile(name) ⇒ Object
289 290 291 292 293 294 295 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 289 def libfile(name) if name.is_a?(Array) name.flatten.map { |n| libfile(n) } else "#{name}#{exts.library}" end end |
#libmruby_core_static ⇒ Object
345 346 347 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 345 def libmruby_core_static libfile("#{build_dir}/lib/libmruby_core") end |
#libmruby_static ⇒ Object
341 342 343 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 341 def libmruby_static libfile("#{build_dir}/lib/libmruby") end |
#libraries ⇒ Object
349 350 351 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 349 def libraries [libmruby_static] end |
#mrbcfile ⇒ Object
229 230 231 232 233 234 235 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 229 def mrbcfile return @mrbcfile if @mrbcfile mrbc_build = MRuby.targets['host'] gems.each { |v| mrbc_build = self if v.name == 'mruby-bin-mrbc' } @mrbcfile = mrbc_build.exefile("#{mrbc_build.build_dir}/bin/mrbc") end |
#objfile(name) ⇒ Object
281 282 283 284 285 286 287 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 281 def objfile(name) if name.is_a?(Array) name.flatten.map { |n| objfile(n) } else "#{name}#{exts.object}" end end |
#primary_toolchain ⇒ Object
205 206 207 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 205 def primary_toolchain @toolchains.first end |
#print_build_summary ⇒ Object
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 323 def print_build_summary puts "================================================" puts " Config Name: #{@name}" puts " Output Directory: #{self.build_dir.relative_path}" puts " Binaries: #{@bins.join(', ')}" unless @bins.empty? unless @gems.empty? puts " Included Gems:" @gems.map do |gem| gem_version = " - #{gem.version}" if gem.version != '0.0.0' gem_summary = " - #{gem.summary}" if gem.summary puts " #{gem.name}#{gem_version}#{gem_summary}" puts " - Binaries: #{gem.bins.join(', ')}" unless gem.bins.empty? end end puts "================================================" puts end |
#root ⇒ Object
209 210 211 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 209 def root MRUBY_ROOT end |
#run_bintest ⇒ Object
316 317 318 319 320 321 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 316 def run_bintest puts ">>> Bintest #{name} <<<" targets = @gems.select { |v| File.directory? "#{v.dir}/bintest" }.map { |v| filename v.dir } targets << filename(".") if File.directory? "./bintest" sh "ruby test/bintest.rb#{verbose_flag} #{targets.join ' '}" end |
#run_test ⇒ Object
309 310 311 312 313 314 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 309 def run_test puts ">>> Test #{name} <<<" mrbtest = exefile("#{build_dir}/bin/mrbtest") sh "#{filename mrbtest.relative_path}#{verbose_flag}" puts end |
#test_enabled? ⇒ Boolean
217 218 219 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 217 def test_enabled? @enable_test end |
#toolchain(name, params = {}) ⇒ Object
198 199 200 201 202 203 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 198 def toolchain(name, params={}) tc = Toolchain.toolchains[name.to_s] fail "Unknown #{name} toolchain" unless tc tc.setup(self, params) @toolchains.unshift name.to_s end |
#verbose_flag ⇒ Object
305 306 307 |
# File 'ext/enterprise_script_service/mruby/lib/mruby/build.rb', line 305 def verbose_flag $verbose ? ' -v' : '' end |