class Rmk::Mex

Compile MEX files and use settings from CC,CXX and LD

Constants

MEX_FUNCTION_PATTERN

pattern to look for +main()+ function

Attributes

auto_detect_mex[RW]

enable automatic detection of #main_sources

extension[R]

MEX file #extension

Public Class Methods

new() click to toggle source
Calls superclass method Rmk::Processor.new
# File tools/mex.rb, line 18
def initialize
  super
  @slot = SLOTS[:compiler]
  @requires = [CC, CXX, LD]

  data = tool_params(:Mex, generator.configuration)
  @extension = data[:extension] || '.mexa64'
  @auto_detect_mex = true
end

Public Instance Methods

find_main_sources() click to toggle source
# File tools/mex.rb, line 31
def find_main_sources
  return unless auto_detect_mex

  # src_files: no generated files
  src_files = @sources.find_all { |name| name !~ /^\$builddir/ }
  grep(MEX_FUNCTION_PATTERN, src_files).each do |src|
    @main_sources[src] = true
  end
end
mex(*files) click to toggle source

Manually add #mex file

See also #auto_detect_mex.

# File tools/mex.rb, line 44
def mex(*files)
  files.each do |f|
    next if exclude?(f)
    @main_sources[f] = true
  end
end
mexfile(filename) click to toggle source
# File tools/mex.rb, line 55
def mexfile(filename)
  "#{strip_extension(filename)}.#{extension}"
end
ninja_build(writer = generator.ninja) click to toggle source
Calls superclass method
# File tools/mex.rb, line 59
def ninja_build(writer = generator.ninja)
  super
  find_sources(source_pattern)
  find_main_sources

  @main_sources.each_key do |src|
    obj = if src =~ /^\$builddir/
            generator.object(src)
            # source = src
          else
            "$builddir/#{generator.object(src)}"
            # source = generator.expand_source(src)
          end
    generator.add_object(obj,
                         type: :shared_main, prefix: '', suffix: extension)
  end
end
source_pattern() click to toggle source
# File tools/mex.rb, line 51
def source_pattern
  @@source_pattern ||= Regexp.union(cc.source_pattern, cxx.source_pattern)
end