llvm: more of the unmaintained llvm bindings fixed
parent
aab120f69c
commit
bc48b82e77
|
@ -5,7 +5,7 @@ alien.syntax ldcache ;
|
|||
IN: llvm.ffi
|
||||
|
||||
<<
|
||||
"llvm" "LLVM-3.8" find-so cdecl add-library
|
||||
"llvm" "LLVM-3.9" find-so cdecl add-library
|
||||
>>
|
||||
|
||||
LIBRARY: llvm
|
||||
|
@ -29,6 +29,26 @@ TYPEDEF: void* LLVMValueRef
|
|||
TYPEDEF: void* LLVMBasicBlockRef
|
||||
TYPEDEF: void* LLVMBuilderRef
|
||||
TYPEDEF: void* LLVMMemoryBufferRef
|
||||
TYPEDEF: void* LLVMTargetRef
|
||||
TYPEDEF: void* LLVMPassRegistryRef
|
||||
|
||||
! Type types
|
||||
ENUM: LLVMTypeKind
|
||||
LLVMVoidTypeKind
|
||||
LLVMFloatTypeKind
|
||||
LLVMDoubleTypeKind
|
||||
LLVMX86_FP80TypeKind
|
||||
LLVMFP128TypeKind
|
||||
LLVMPPC_FP128TypeKind
|
||||
LLVMLabelTypeKind
|
||||
LLVMMetadataTypeKind
|
||||
LLVMIntegerTypeKind
|
||||
LLVMFunctionTypeKind
|
||||
LLVMStructTypeKind
|
||||
LLVMArrayTypeKind
|
||||
LLVMPointerTypeKind
|
||||
LLVMOpaqueTypeKind
|
||||
LLVMVectorTypeKind ;
|
||||
|
||||
! Modules
|
||||
FUNCTION: LLVMModuleRef LLVMModuleCreateWithName ( c-string ModuleID )
|
||||
|
@ -36,7 +56,6 @@ FUNCTION: void LLVMDisposeModule ( LLVMModuleRef M )
|
|||
FUNCTION: void LLVMDumpModule ( LLVMModuleRef M )
|
||||
FUNCTION: LLVMBool LLVMVerifyModule ( LLVMModuleRef M, int Action, char **OutMessage )
|
||||
FUNCTION: c-string LLVMGetTarget ( LLVMModuleRef M )
|
||||
DESTRUCTOR: LLVMDisposeModule
|
||||
|
||||
! Types
|
||||
FUNCTION: LLVMTypeRef LLVMInt1Type ( )
|
||||
|
@ -48,6 +67,7 @@ FUNCTION: LLVMTypeRef LLVMIntType ( unsigned NumBits )
|
|||
FUNCTION: LLVMTypeRef LLVMFunctionType ( LLVMTypeRef ReturnType,
|
||||
LLVMTypeRef* ParamTypes,
|
||||
unsigned ParamCount, int IsVarArg )
|
||||
FUNCTION: LLVMTypeKind LLVMGetTypeKind ( LLVMTypeRef Ty )
|
||||
|
||||
! Values
|
||||
FUNCTION: LLVMValueRef LLVMAddFunction ( LLVMModuleRef M,
|
||||
|
@ -56,6 +76,8 @@ FUNCTION: LLVMValueRef LLVMAddFunction ( LLVMModuleRef M,
|
|||
FUNCTION: LLVMValueRef LLVMGetParam ( LLVMValueRef Fn,
|
||||
unsigned index )
|
||||
FUNCTION: c-string LLVMGetValueName ( LLVMValueRef Val )
|
||||
FUNCTION: unsigned LLVMCountParams ( LLVMValueRef Fn )
|
||||
FUNCTION: LLVMTypeRef LLVMTypeOf ( LLVMValueRef Val )
|
||||
|
||||
! Basic blocks
|
||||
FUNCTION: LLVMBasicBlockRef LLVMAppendBasicBlock ( LLVMValueRef Fn,
|
||||
|
@ -79,15 +101,19 @@ FUNCTION: LLVMValueRef LLVMBuildSub ( LLVMBuilderRef Builder,
|
|||
c-string Name )
|
||||
FUNCTION: LLVMValueRef LLVMBuildRet ( LLVMBuilderRef Builder,
|
||||
LLVMValueRef V )
|
||||
DESTRUCTOR: LLVMDisposeBuilder
|
||||
|
||||
! Engines
|
||||
! Execution Engines
|
||||
FUNCTION: LLVMBool LLVMCreateExecutionEngineForModule (
|
||||
LLVMExecutionEngineRef* OutEE,
|
||||
LLVMModuleRef M,
|
||||
char **OutMessage )
|
||||
FUNCTION: void LLVMDisposeExecutionEngine ( LLVMExecutionEngineRef E )
|
||||
DESTRUCTOR: LLVMDisposeExecutionEngine
|
||||
FUNCTION: uint64_t LLVMGetGlobalValueAddress ( LLVMExecutionEngineRef E, c-string name )
|
||||
FUNCTION: LLVMBool LLVMFindFunction ( LLVMExecutionEngineRef E,
|
||||
c-string name,
|
||||
LLVMValueRef OutFn )
|
||||
FUNCTION: void* LLVMGetPointerToGlobal ( LLVMExecutionEngineRef EE,
|
||||
LLVMValueRef Global )
|
||||
|
||||
! Memory buffers
|
||||
FUNCTION: LLVMBool LLVMCreateMemoryBufferWithContentsOfFile (
|
||||
|
@ -96,6 +122,7 @@ FUNCTION: LLVMBool LLVMCreateMemoryBufferWithContentsOfFile (
|
|||
c-string* OutMessage )
|
||||
FUNCTION: void LLVMDisposeMemoryBuffer ( LLVMMemoryBufferRef MemBuf )
|
||||
FUNCTION: size_t LLVMGetBufferSize ( LLVMMemoryBufferRef MemBuf )
|
||||
! Deprecated and should be replaced with LLVMParseBitcode2.
|
||||
FUNCTION: int LLVMParseBitcode ( LLVMMemoryBufferRef MemBuf,
|
||||
LLVMModuleRef* OutModule,
|
||||
c-string* OutMessage )
|
||||
|
@ -104,5 +131,22 @@ FUNCTION: int LLVMParseBitcode ( LLVMMemoryBufferRef MemBuf,
|
|||
FUNCTION: LLVMModuleProviderRef LLVMCreateModuleProviderForExistingModule ( LLVMModuleRef M )
|
||||
FUNCTION: void LLVMDisposeModuleProvider ( LLVMModuleProviderRef MP )
|
||||
|
||||
! Targets
|
||||
FUNCTION: LLVMTargetRef LLVMGetFirstTarget ( )
|
||||
FUNCTION: c-string LLVMGetTargetName ( LLVMTargetRef T )
|
||||
|
||||
! Messages
|
||||
FUNCTION: void LLVMDisposeMessage ( char *Message )
|
||||
|
||||
! Pass Registry
|
||||
FUNCTION: LLVMPassRegistryRef LLVMGetGlobalPassRegistry ( )
|
||||
|
||||
! Initialization
|
||||
FUNCTION: void LLVMInitializeCore ( LLVMPassRegistryRef PR )
|
||||
FUNCTION: void LLVMLinkInMCJIT ( )
|
||||
FUNCTION: void LLVMInitializeX86AsmPrinter ( )
|
||||
FUNCTION: void LLVMInitializeX86TargetInfo ( )
|
||||
FUNCTION: void LLVMInitializeX86Target ( )
|
||||
FUNCTION: void LLVMInitializeX86TargetMC ( )
|
||||
|
||||
! Removed symbols: LLVMCreateJITCompiler
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
USING: kernel literals llvm llvm.ffi system tools.test ;
|
||||
IN: llvm.tests
|
||||
|
||||
${ cpu x86.64? "x86-64" "x86-32" ? } [
|
||||
initialize-native-target
|
||||
LLVMGetFirstTarget LLVMGetTargetName
|
||||
] unit-test
|
|
@ -1,2 +1,14 @@
|
|||
USING: kernel ;
|
||||
USING: llvm.ffi ;
|
||||
IN: llvm
|
||||
|
||||
: initialize ( -- )
|
||||
LLVMGetGlobalPassRegistry LLVMInitializeCore ;
|
||||
|
||||
! https://github.com/fsprojects/llvm-fs/blob/master/src/LLVM/Target.fs
|
||||
: initialize-native-target ( -- )
|
||||
LLVMInitializeX86TargetInfo
|
||||
LLVMInitializeX86Target
|
||||
LLVMInitializeX86TargetMC ;
|
||||
|
||||
: initialize-native-asm-printer ( -- )
|
||||
LLVMInitializeX86AsmPrinter ;
|
||||
|
|
|
@ -4,6 +4,10 @@ USING: help.markup help.syntax llvm.wrappers strings ;
|
|||
|
||||
IN: llvm.reader
|
||||
|
||||
HELP: buffer>module
|
||||
{ $values { "buffer" buffer } { "module" module } }
|
||||
{ $description "Creates a module from a buffer. The buffer is disposed of." } ;
|
||||
|
||||
HELP: load-module
|
||||
{ $values { "path" string } { "module" module } }
|
||||
{ $description "Parses a file containing llvm bitcode into an llvm module." }
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
USING: io.pathnames llvm.reader llvm.wrappers tools.test ;
|
||||
IN: llvm.reader.tests
|
||||
|
||||
{ t } [
|
||||
"resource:extra/llvm/wrappers/add.bc" absolute-path load-module
|
||||
module?
|
||||
] unit-test
|
|
@ -1,8 +1,15 @@
|
|||
USING: accessors alien destructors io.pathnames kernel llvm.ffi
|
||||
llvm.wrappers tools.test ;
|
||||
llvm.reader llvm.wrappers tools.test ;
|
||||
IN: llvm.wrappers.tests
|
||||
|
||||
CONSTANT: ADD.BC "resource:extra/llvm/wrappers/add.bc"
|
||||
|
||||
{ 728 t } [
|
||||
"resource:extra/llvm/wrappers/add.bc" absolute-path <buffer>
|
||||
ADD.BC absolute-path <buffer>
|
||||
[ value>> [ LLVMGetBufferSize ] keep ] with-disposal alien?
|
||||
] unit-test
|
||||
|
||||
{ "sum" 2 } [
|
||||
ADD.BC absolute-path load-module <engine>
|
||||
"sum" find-function [ LLVMGetValueName ] [ LLVMCountParams ] bi
|
||||
] unit-test
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
! Copyright (C) 2009 Matthew Willis.
|
||||
! Copyright (C) 2009 Matthew Willis, 2017 Björn Lindqvist.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: accessors alien.c-types alien.data alien.strings destructors io
|
||||
io.encodings.utf8 kernel llvm.ffi ;
|
||||
io.encodings.utf8 kernel llvm.ffi prettyprint ;
|
||||
IN: llvm.wrappers
|
||||
|
||||
ERROR: llvm-error message ;
|
||||
|
||||
: llvm-throw ( c-string -- )
|
||||
: llvm-throw ( void* -- )
|
||||
[ utf8 alien>string ] [ LLVMDisposeMessage ] bi llvm-error ;
|
||||
|
||||
: <dispose> ( alien class -- disposable ) new swap >>value ;
|
||||
|
@ -28,6 +28,28 @@ M: provider dispose* value>> LLVMDisposeModuleProvider ;
|
|||
: <provider> ( module -- provider )
|
||||
[ (provider) ] with-disposal ;
|
||||
|
||||
TUPLE: engine value disposed ;
|
||||
M: engine dispose* value>> LLVMDisposeExecutionEngine ;
|
||||
|
||||
: (engine) ( LLVMModuleRef -- LLVMExecutionEngineRef )
|
||||
f void* <ref> f void* <ref>
|
||||
[ swapd LLVMCreateExecutionEngineForModule drop ] 2keep
|
||||
void* deref [ llvm-throw ] when*
|
||||
void* deref ;
|
||||
|
||||
: <engine> ( module -- engine )
|
||||
[
|
||||
[ value>> (engine) engine <dispose> ]
|
||||
[ t >>disposed drop ] bi
|
||||
] with-disposal ;
|
||||
|
||||
: find-function ( engine name -- function/f )
|
||||
[ value>> ] dip f void* <ref>
|
||||
[ LLVMFindFunction drop ] keep void* deref ;
|
||||
|
||||
: function-pointer ( engine function -- alien )
|
||||
[ value>> ] dip LLVMGetPointerToGlobal ;
|
||||
|
||||
TUPLE: buffer value disposed ;
|
||||
M: buffer dispose* value>> LLVMDisposeMemoryBuffer ;
|
||||
|
||||
|
|
Loading…
Reference in New Issue