magica 0.1.0 → 0.2.0
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/magica/builder.rb +26 -3
- data/lib/magica/commands/compiler.rb +13 -2
- data/lib/magica/commands/linker.rb +20 -3
- data/lib/magica/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c76457397a26e8c8f5530223241085a5de1ed2cd
         | 
| 4 | 
            +
              data.tar.gz: a00d14e584583a1b50774002f0ebe94ea05c5d0c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 7acc35bd25b2c8d3c416097a78ae04a47ff813c85eaad74e7ef921406533947ec58f13ea7e62dd89dd40385ef8bc49d65b74c9aa1e14a2df0303acc5d52c2646
         | 
| 7 | 
            +
              data.tar.gz: 8518c22efb3a15fbd7834847e1a655b9b05448f25272d0c004e4a5fdc8be0599c091ae569d3b912f00b6bc7094a751f8aa09bc09f80e98b40946af3d48356654
         | 
    
        data/lib/magica/builder.rb
    CHANGED
    
    | @@ -13,6 +13,11 @@ module Magica | |
| 13 13 | 
             
                  @sources = FileList["src/**/*.cpp"]
         | 
| 14 14 | 
             
                  @cxx = Command::Compiler.new(self, %w(.cpp))
         | 
| 15 15 | 
             
                  @linker = Command::Linker.new(self)
         | 
| 16 | 
            +
                  @defines = %w()
         | 
| 17 | 
            +
                  @include_paths = %w()
         | 
| 18 | 
            +
                  @libaries = %w()
         | 
| 19 | 
            +
                  @libary_paths = %w()
         | 
| 20 | 
            +
                  @flags = %w()
         | 
| 16 21 |  | 
| 17 22 | 
             
                  Magica.targets[@name] = self
         | 
| 18 23 | 
             
                  Magica.targets[@name].instance_eval(&block) unless block.nil?
         | 
| @@ -20,11 +25,29 @@ module Magica | |
| 20 25 | 
             
                  Magica.default_toolchain.setup(self, Magica.toolchain_params) if Magica.default_toolchain
         | 
| 21 26 | 
             
                end
         | 
| 22 27 |  | 
| 28 | 
            +
                def define(name)
         | 
| 29 | 
            +
                  @defines << name.to_s.upcase
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def include_path(path)
         | 
| 33 | 
            +
                  @include_paths << path.to_s
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def flag(flag)
         | 
| 37 | 
            +
                  @flags << flag.to_s
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                def library(name, path)
         | 
| 41 | 
            +
                  @libaries << name.to_s
         | 
| 42 | 
            +
                  @libary_paths << path.to_s
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
             | 
| 23 45 | 
             
                def source(path)
         | 
| 24 46 | 
             
                  @sources = FileList[path]
         | 
| 25 47 | 
             
                end
         | 
| 26 48 |  | 
| 27 | 
            -
                def filename
         | 
| 49 | 
            +
                def filename(name)
         | 
| 50 | 
            +
                  '"%s"' % name
         | 
| 28 51 | 
             
                end
         | 
| 29 52 |  | 
| 30 53 | 
             
                def exefile(name)
         | 
| @@ -54,13 +77,13 @@ module Magica | |
| 54 77 |  | 
| 55 78 | 
             
                def compile(source)
         | 
| 56 79 | 
             
                  file objfile(source) => source do |t|
         | 
| 57 | 
            -
                    @cxx.run t.name, t.prerequisites.first
         | 
| 80 | 
            +
                    @cxx.run t.name, t.prerequisites.first, @defines, @include_paths, @flags
         | 
| 58 81 | 
             
                  end
         | 
| 59 82 | 
             
                end
         | 
| 60 83 |  | 
| 61 84 | 
             
                def link(exec, objects)
         | 
| 62 85 | 
             
                  task "build:#{@name}" => objects do
         | 
| 63 | 
            -
                    @linker.run "#{exec}", objects
         | 
| 86 | 
            +
                    @linker.run "#{exec}", objects, @libaries, @libary_paths, @flags
         | 
| 64 87 | 
             
                  end
         | 
| 65 88 | 
             
                end
         | 
| 66 89 | 
             
              end
         | 
| @@ -9,11 +9,22 @@ module Magica | |
| 9 9 | 
             
                  @flags = [ENV['CFLAGS'] || []]
         | 
| 10 10 | 
             
                  @source_exts = source_exts
         | 
| 11 11 | 
             
                  @compile_options = "%{flags} -o %{outfile} -c %{infile}"
         | 
| 12 | 
            +
                  @include_paths = ["include"]
         | 
| 13 | 
            +
                  @defines = %w()
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  @option_include_path = "-I%s"
         | 
| 16 | 
            +
                  @option_defines = "-D%s"
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def combine_flags(_defines = [], _include_paths = [], _flags = [])
         | 
| 20 | 
            +
                  define_flags = [@defines, _defines].flatten.map { |define| @option_defines % define }
         | 
| 21 | 
            +
                  include_path_flags = [@include_paths, _include_paths].flatten.map { |include_path| @option_include_path % filename(include_path) }
         | 
| 22 | 
            +
                  [define_flags, include_path_flags, _flags].flatten.join(' ')
         | 
| 12 23 | 
             
                end
         | 
| 13 24 |  | 
| 14 | 
            -
                def run(outfile, infile)
         | 
| 25 | 
            +
                def run(outfile, infile, _defines = [], _include_paths = [], _flags = [])
         | 
| 15 26 | 
             
                  FileUtils.mkdir_p File.dirname(outfile)
         | 
| 16 | 
            -
                  _run @compile_options, { outfile: outfile, infile: infile, flags:  | 
| 27 | 
            +
                  _run @compile_options, { outfile: outfile, infile: infile, flags: combine_flags(_defines, _include_paths, _flags) }
         | 
| 17 28 | 
             
                end
         | 
| 18 29 | 
             
              end
         | 
| 19 30 | 
             
            end
         | 
| @@ -7,11 +7,28 @@ module Magica | |
| 7 7 |  | 
| 8 8 | 
             
                  @command = ENV['LD'] || 'ld'
         | 
| 9 9 | 
             
                  @flags = (ENV['LDFLAGS'] || [])
         | 
| 10 | 
            -
                  @link_options = "%{flags} -o %{outfile} %{objects}"
         | 
| 10 | 
            +
                  @link_options = "%{flags} -o %{outfile} %{objects} %{libs}"
         | 
| 11 | 
            +
                  @libaries = []
         | 
| 12 | 
            +
                  @libary_paths = []
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  @option_libary = "-l%s"
         | 
| 15 | 
            +
                  @option_libary_path = "-L%s"
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def combine_flags(_library_paths = [], _flags = [])
         | 
| 19 | 
            +
                  libary_paths = [@libary_paths, _library_paths].flatten.map { |path| @option_libary_path % filename(path) }
         | 
| 20 | 
            +
                  [flags, libary_paths, _flags].flatten.join(" ")
         | 
| 11 21 | 
             
                end
         | 
| 12 22 |  | 
| 13 | 
            -
                def run(outfile, objects)
         | 
| 14 | 
            -
                   | 
| 23 | 
            +
                def run(outfile, objects, _libaries = [], _library_paths = [], _flags = [])
         | 
| 24 | 
            +
                  libary_flags = [@libaries, _libaries].flatten.map { |library| @option_libary % library }
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  _run @link_options, {
         | 
| 27 | 
            +
                    outfile: outfile,
         | 
| 28 | 
            +
                    objects: objects.join(" "),
         | 
| 29 | 
            +
                    libs: libary_flags.join(" "),
         | 
| 30 | 
            +
                    flags: combine_flags(_library_paths, _flags)
         | 
| 31 | 
            +
                  }
         | 
| 15 32 | 
             
                end
         | 
| 16 33 | 
             
              end
         | 
| 17 34 | 
             
            end
         | 
    
        data/lib/magica/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: magica
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - 蒼時弦也
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016-09- | 
| 11 | 
            +
            date: 2016-09-17 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake
         |