Module: L::C::CompilerGCC
- Defined in:
- lib/rub/l/c/compiler/gcc.rb
Overview
GNU Compiler Collection
Constant Summary collapse
- @@o_flags =
{ :none=> D[:debug] ? '-Og' : '-O0', :some=>'-O1', :full=>'-O2', :max =>'-O3', }
- @@of_flags =
{ nil=>[], :speed=>'-Ofast', :size=>'-Os', }
Class Method Summary collapse
- .available? ⇒ Boolean
- .compile_command(opt, src, obj) ⇒ Object
- .do_compile_string(opt, str, obj) ⇒ Object
- .find ⇒ Object
- .generate_flags(opt) ⇒ Object
- .linker ⇒ Object
- .name ⇒ Object
Class Method Details
.available? ⇒ Boolean
34 35 36 |
# File 'lib/rub/l/c/compiler/gcc.rb', line 34 def self.available? !!find end |
.compile_command(opt, src, obj) ⇒ Object
81 82 83 |
# File 'lib/rub/l/c/compiler/gcc.rb', line 81 def self.compile_command(opt, src, obj) [find, '-c', *generate_flags(opt), "-o#{obj}", *src] end |
.do_compile_string(opt, str, obj) ⇒ Object
85 86 87 88 89 90 |
# File 'lib/rub/l/c/compiler/gcc.rb', line 85 def self.do_compile_string(opt, str, obj) c = R::Command.new [find, '-c', '-xc', *generate_flags(opt), '-o', obj, '-'] c.stdin = str c.run c end |
.find ⇒ Object
38 39 40 41 42 |
# File 'lib/rub/l/c/compiler/gcc.rb', line 38 def self.find @exe and return @exe @exe = ::C.find_command 'gcc' end |
.generate_flags(opt) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/rub/l/c/compiler/gcc.rb', line 60 def self.generate_flags(opt) f = [] f << (@@o_flags[opt.optimize ] || []) f << (@@o_flags[opt.optimize_for] || []) f << opt.include_dirs.map do |d| "-I#{d}" end f << opt.define.map do |k, v| if v # -Dk if v is true else -Dk=v. "-D#{k}#{v.eql?(true)?"":"=#{v}"}" else "-U#{k}" end end f.flatten! end |
.linker ⇒ Object
44 45 46 |
# File 'lib/rub/l/c/compiler/gcc.rb', line 44 def self.linker :gcc end |
.name ⇒ Object
30 31 32 |
# File 'lib/rub/l/c/compiler/gcc.rb', line 30 def self.name :gcc end |