llvm: more of the unmaintained llvm bindings fixed
parent
aab120f69c
commit
bc48b82e77
|
@ -5,7 +5,7 @@ alien.syntax ldcache ;
|
||||||
IN: llvm.ffi
|
IN: llvm.ffi
|
||||||
|
|
||||||
<<
|
<<
|
||||||
"llvm" "LLVM-3.8" find-so cdecl add-library
|
"llvm" "LLVM-3.9" find-so cdecl add-library
|
||||||
>>
|
>>
|
||||||
|
|
||||||
LIBRARY: llvm
|
LIBRARY: llvm
|
||||||
|
@ -29,6 +29,26 @@ TYPEDEF: void* LLVMValueRef
|
||||||
TYPEDEF: void* LLVMBasicBlockRef
|
TYPEDEF: void* LLVMBasicBlockRef
|
||||||
TYPEDEF: void* LLVMBuilderRef
|
TYPEDEF: void* LLVMBuilderRef
|
||||||
TYPEDEF: void* LLVMMemoryBufferRef
|
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
|
! Modules
|
||||||
FUNCTION: LLVMModuleRef LLVMModuleCreateWithName ( c-string ModuleID )
|
FUNCTION: LLVMModuleRef LLVMModuleCreateWithName ( c-string ModuleID )
|
||||||
|
@ -36,7 +56,6 @@ FUNCTION: void LLVMDisposeModule ( LLVMModuleRef M )
|
||||||
FUNCTION: void LLVMDumpModule ( LLVMModuleRef M )
|
FUNCTION: void LLVMDumpModule ( LLVMModuleRef M )
|
||||||
FUNCTION: LLVMBool LLVMVerifyModule ( LLVMModuleRef M, int Action, char **OutMessage )
|
FUNCTION: LLVMBool LLVMVerifyModule ( LLVMModuleRef M, int Action, char **OutMessage )
|
||||||
FUNCTION: c-string LLVMGetTarget ( LLVMModuleRef M )
|
FUNCTION: c-string LLVMGetTarget ( LLVMModuleRef M )
|
||||||
DESTRUCTOR: LLVMDisposeModule
|
|
||||||
|
|
||||||
! Types
|
! Types
|
||||||
FUNCTION: LLVMTypeRef LLVMInt1Type ( )
|
FUNCTION: LLVMTypeRef LLVMInt1Type ( )
|
||||||
|
@ -48,6 +67,7 @@ FUNCTION: LLVMTypeRef LLVMIntType ( unsigned NumBits )
|
||||||
FUNCTION: LLVMTypeRef LLVMFunctionType ( LLVMTypeRef ReturnType,
|
FUNCTION: LLVMTypeRef LLVMFunctionType ( LLVMTypeRef ReturnType,
|
||||||
LLVMTypeRef* ParamTypes,
|
LLVMTypeRef* ParamTypes,
|
||||||
unsigned ParamCount, int IsVarArg )
|
unsigned ParamCount, int IsVarArg )
|
||||||
|
FUNCTION: LLVMTypeKind LLVMGetTypeKind ( LLVMTypeRef Ty )
|
||||||
|
|
||||||
! Values
|
! Values
|
||||||
FUNCTION: LLVMValueRef LLVMAddFunction ( LLVMModuleRef M,
|
FUNCTION: LLVMValueRef LLVMAddFunction ( LLVMModuleRef M,
|
||||||
|
@ -56,6 +76,8 @@ FUNCTION: LLVMValueRef LLVMAddFunction ( LLVMModuleRef M,
|
||||||
FUNCTION: LLVMValueRef LLVMGetParam ( LLVMValueRef Fn,
|
FUNCTION: LLVMValueRef LLVMGetParam ( LLVMValueRef Fn,
|
||||||
unsigned index )
|
unsigned index )
|
||||||
FUNCTION: c-string LLVMGetValueName ( LLVMValueRef Val )
|
FUNCTION: c-string LLVMGetValueName ( LLVMValueRef Val )
|
||||||
|
FUNCTION: unsigned LLVMCountParams ( LLVMValueRef Fn )
|
||||||
|
FUNCTION: LLVMTypeRef LLVMTypeOf ( LLVMValueRef Val )
|
||||||
|
|
||||||
! Basic blocks
|
! Basic blocks
|
||||||
FUNCTION: LLVMBasicBlockRef LLVMAppendBasicBlock ( LLVMValueRef Fn,
|
FUNCTION: LLVMBasicBlockRef LLVMAppendBasicBlock ( LLVMValueRef Fn,
|
||||||
|
@ -79,15 +101,19 @@ FUNCTION: LLVMValueRef LLVMBuildSub ( LLVMBuilderRef Builder,
|
||||||
c-string Name )
|
c-string Name )
|
||||||
FUNCTION: LLVMValueRef LLVMBuildRet ( LLVMBuilderRef Builder,
|
FUNCTION: LLVMValueRef LLVMBuildRet ( LLVMBuilderRef Builder,
|
||||||
LLVMValueRef V )
|
LLVMValueRef V )
|
||||||
DESTRUCTOR: LLVMDisposeBuilder
|
|
||||||
|
|
||||||
! Engines
|
! Execution Engines
|
||||||
FUNCTION: LLVMBool LLVMCreateExecutionEngineForModule (
|
FUNCTION: LLVMBool LLVMCreateExecutionEngineForModule (
|
||||||
LLVMExecutionEngineRef* OutEE,
|
LLVMExecutionEngineRef* OutEE,
|
||||||
LLVMModuleRef M,
|
LLVMModuleRef M,
|
||||||
char **OutMessage )
|
char **OutMessage )
|
||||||
FUNCTION: void LLVMDisposeExecutionEngine ( LLVMExecutionEngineRef E )
|
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
|
! Memory buffers
|
||||||
FUNCTION: LLVMBool LLVMCreateMemoryBufferWithContentsOfFile (
|
FUNCTION: LLVMBool LLVMCreateMemoryBufferWithContentsOfFile (
|
||||||
|
@ -96,6 +122,7 @@ FUNCTION: LLVMBool LLVMCreateMemoryBufferWithContentsOfFile (
|
||||||
c-string* OutMessage )
|
c-string* OutMessage )
|
||||||
FUNCTION: void LLVMDisposeMemoryBuffer ( LLVMMemoryBufferRef MemBuf )
|
FUNCTION: void LLVMDisposeMemoryBuffer ( LLVMMemoryBufferRef MemBuf )
|
||||||
FUNCTION: size_t LLVMGetBufferSize ( LLVMMemoryBufferRef MemBuf )
|
FUNCTION: size_t LLVMGetBufferSize ( LLVMMemoryBufferRef MemBuf )
|
||||||
|
! Deprecated and should be replaced with LLVMParseBitcode2.
|
||||||
FUNCTION: int LLVMParseBitcode ( LLVMMemoryBufferRef MemBuf,
|
FUNCTION: int LLVMParseBitcode ( LLVMMemoryBufferRef MemBuf,
|
||||||
LLVMModuleRef* OutModule,
|
LLVMModuleRef* OutModule,
|
||||||
c-string* OutMessage )
|
c-string* OutMessage )
|
||||||
|
@ -104,5 +131,22 @@ FUNCTION: int LLVMParseBitcode ( LLVMMemoryBufferRef MemBuf,
|
||||||
FUNCTION: LLVMModuleProviderRef LLVMCreateModuleProviderForExistingModule ( LLVMModuleRef M )
|
FUNCTION: LLVMModuleProviderRef LLVMCreateModuleProviderForExistingModule ( LLVMModuleRef M )
|
||||||
FUNCTION: void LLVMDisposeModuleProvider ( LLVMModuleProviderRef MP )
|
FUNCTION: void LLVMDisposeModuleProvider ( LLVMModuleProviderRef MP )
|
||||||
|
|
||||||
|
! Targets
|
||||||
|
FUNCTION: LLVMTargetRef LLVMGetFirstTarget ( )
|
||||||
|
FUNCTION: c-string LLVMGetTargetName ( LLVMTargetRef T )
|
||||||
|
|
||||||
! Messages
|
! Messages
|
||||||
FUNCTION: void LLVMDisposeMessage ( char *Message )
|
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
|
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
|
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
|
HELP: load-module
|
||||||
{ $values { "path" string } { "module" module } }
|
{ $values { "path" string } { "module" module } }
|
||||||
{ $description "Parses a file containing llvm bitcode into an llvm 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
|
USING: accessors alien destructors io.pathnames kernel llvm.ffi
|
||||||
llvm.wrappers tools.test ;
|
llvm.reader llvm.wrappers tools.test ;
|
||||||
IN: llvm.wrappers.tests
|
IN: llvm.wrappers.tests
|
||||||
|
|
||||||
|
CONSTANT: ADD.BC "resource:extra/llvm/wrappers/add.bc"
|
||||||
|
|
||||||
{ 728 t } [
|
{ 728 t } [
|
||||||
"resource:extra/llvm/wrappers/add.bc" absolute-path <buffer>
|
ADD.BC absolute-path <buffer>
|
||||||
[ value>> [ LLVMGetBufferSize ] keep ] with-disposal alien?
|
[ value>> [ LLVMGetBufferSize ] keep ] with-disposal alien?
|
||||||
] unit-test
|
] 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.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien.c-types alien.data alien.strings destructors io
|
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
|
IN: llvm.wrappers
|
||||||
|
|
||||||
ERROR: llvm-error message ;
|
ERROR: llvm-error message ;
|
||||||
|
|
||||||
: llvm-throw ( c-string -- )
|
: llvm-throw ( void* -- )
|
||||||
[ utf8 alien>string ] [ LLVMDisposeMessage ] bi llvm-error ;
|
[ utf8 alien>string ] [ LLVMDisposeMessage ] bi llvm-error ;
|
||||||
|
|
||||||
: <dispose> ( alien class -- disposable ) new swap >>value ;
|
: <dispose> ( alien class -- disposable ) new swap >>value ;
|
||||||
|
@ -28,6 +28,28 @@ M: provider dispose* value>> LLVMDisposeModuleProvider ;
|
||||||
: <provider> ( module -- provider )
|
: <provider> ( module -- provider )
|
||||||
[ (provider) ] with-disposal ;
|
[ (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 ;
|
TUPLE: buffer value disposed ;
|
||||||
M: buffer dispose* value>> LLVMDisposeMemoryBuffer ;
|
M: buffer dispose* value>> LLVMDisposeMemoryBuffer ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue