MIPSELFGenerator: added -KPIC to inform the assembler that we are
[voodoo-lang.git] / lib / voodoo / generators / mips_elf_generator.rb
blobd2998ff2c1d2fb713527a782be7f9cacd8b658ff
1 require 'delegate'
2 require 'tempfile'
3 require 'voodoo/generators/mips_gas_generator'
4 require 'voodoo/generators/gas_elf_generator'
6 module Voodoo
7   # Generator that produces ELF objects for mips and mipsel
8   class MIPSELFGenerator < DelegateClass(MIPSGasGenerator)
9     def initialize params = {}
10       @asmgenerator = MIPSGasGenerator.new params
11       super(@asmgenerator)
12       case params[:architecture]
13       when :mips
14         byte_order = ' -EB'
15       when :mipsel
16         byte_order = ' -EL'
17       else
18         byte_order = ''
19       end
20       opts = '-KPIC' + byte_order
21       @elfgenerator = GasELFGenerator.new @asmgenerator, opts
22     end
24     def output_file_name input_name
25       input_name.sub(/\.voo$/, '') + output_file_suffix
26     end    
28     def output_file_suffix
29       '.o'
30     end
32     def write io
33       @elfgenerator.write io
34     end
35   end
37   # Register class for mips
38   Voodoo::CodeGenerator.register_generator MIPSELFGenerator,
39                                            :architecture => :mips,
40                                            :format => :elf
42   # Register class for mipsel
43   Voodoo::CodeGenerator.register_generator MIPSELFGenerator,
44                                            :architecture => :mipsel,
45                                            :format => :elf
46 end