ruby-llvm/ruby-llvm

View on GitHub
lib/llvm/support.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require 'llvm/core_ffi'

module LLVM

  module Support
    # @private

    module C
      extend FFI::Library

      lib_name = FFI.map_library_name("RubyLLVMSupport-#{LLVM_VERSION}")
      lib_path = File.expand_path("../../ext/ruby-llvm-support/#{lib_name}", File.dirname(__FILE__))
      ffi_lib [lib_path]

      attach_function :initialize_all_target_infos,
          :LLVMInitializeAllTargetInfos, [], :void
      attach_function :initialize_all_targets,
          :LLVMInitializeAllTargets, [], :void
      attach_function :initialize_all_target_mcs,
          :LLVMInitializeAllTargetMCs, [], :void
      attach_function :initialize_all_asm_printers,
          :LLVMInitializeAllAsmPrinters, [], :void

      attach_function :initialize_native_target,
          :LLVMInitializeNativeTarget, [], :void
      attach_function :initialize_native_asm_printer,
          :LLVMInitializeNativeAsmPrinter, [], :void

      attach_function :get_enum_attribute_name_for_kind, :LLVMGetEnumAttributeNameForKind, [:uint], :string
      attach_function :get_attribute_as_string, :LLVMGetAttributeAsString, [:pointer], :string
    end
  end

  def self.load_library(libname)
    if C.load_library_permanently(libname) != 0
      raise "LLVM::Support.load_library failed"
    end

    nil
  end
end