{-# LINE 1 "src/Foreign/CUDA/Driver/Module/Link.chs" #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE TemplateHaskell #-}
module Foreign.CUDA.Driver.Module.Link (
LinkState, JITOption(..), JITInputType(..),
create, destroy, complete,
addFile,
addData, addDataFromPtr,
) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
{-# LINE 31 "src/Foreign/CUDA/Driver/Module/Link.chs" #-}
import Foreign.CUDA.Driver.Error
import Foreign.CUDA.Driver.Module.Base
import Foreign.CUDA.Internal.C2HS
import Control.Monad ( liftM )
import Foreign
import Foreign.C
import Unsafe.Coerce
import GHC.Ptr
import Data.ByteString.Char8 ( ByteString )
import qualified Data.ByteString.Char8 as B
newtype LinkState = LinkState { LinkState -> Ptr ()
useLinkState :: ((C2HSImp.Ptr ())) }
deriving (Int -> LinkState -> ShowS
[LinkState] -> ShowS
LinkState -> String
(Int -> LinkState -> ShowS)
-> (LinkState -> String)
-> ([LinkState] -> ShowS)
-> Show LinkState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LinkState] -> ShowS
$cshowList :: [LinkState] -> ShowS
show :: LinkState -> String
$cshow :: LinkState -> String
showsPrec :: Int -> LinkState -> ShowS
$cshowsPrec :: Int -> LinkState -> ShowS
Show)
{-# INLINEABLE create #-}
create :: [JITOption] -> IO LinkState
create :: [JITOption] -> IO LinkState
create ![JITOption]
options =
let ([JITOptionInternal]
opt,[Int]
val) = [(JITOptionInternal, Int)] -> ([JITOptionInternal], [Int])
forall a b. [(a, b)] -> ([a], [b])
unzip ([(JITOptionInternal, Int)] -> ([JITOptionInternal], [Int]))
-> [(JITOptionInternal, Int)] -> ([JITOptionInternal], [Int])
forall a b. (a -> b) -> a -> b
$ (JITOption -> (JITOptionInternal, Int))
-> [JITOption] -> [(JITOptionInternal, Int)]
forall a b. (a -> b) -> [a] -> [b]
map JITOption -> (JITOptionInternal, Int)
jitOptionUnpack [JITOption]
options
in
[CInt] -> (Ptr CInt -> IO LinkState) -> IO LinkState
forall a b. Storable a => [a] -> (Ptr a -> IO b) -> IO b
withArray ((JITOptionInternal -> CInt) -> [JITOptionInternal] -> [CInt]
forall a b. (a -> b) -> [a] -> [b]
map JITOptionInternal -> CInt
forall e i. (Enum e, Integral i) => e -> i
cFromEnum [JITOptionInternal]
opt) ((Ptr CInt -> IO LinkState) -> IO LinkState)
-> (Ptr CInt -> IO LinkState) -> IO LinkState
forall a b. (a -> b) -> a -> b
$ \Ptr CInt
p_opts ->
[Ptr ()] -> (Ptr (Ptr ()) -> IO LinkState) -> IO LinkState
forall a b. Storable a => [a] -> (Ptr a -> IO b) -> IO b
withArray ((Int -> Ptr ()) -> [Int] -> [Ptr ()]
forall a b. (a -> b) -> [a] -> [b]
map Int -> Ptr ()
forall a b. a -> b
unsafeCoerce [Int]
val) ((Ptr (Ptr ()) -> IO LinkState) -> IO LinkState)
-> (Ptr (Ptr ()) -> IO LinkState) -> IO LinkState
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr ())
p_vals ->
(Status, LinkState) -> IO LinkState
forall a. (Status, a) -> IO a
resultIfOk ((Status, LinkState) -> IO LinkState)
-> IO (Status, LinkState) -> IO LinkState
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Int -> Ptr CInt -> Ptr (Ptr ()) -> IO (Status, LinkState)
cuLinkCreate ([JITOptionInternal] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [JITOptionInternal]
opt) Ptr CInt
p_opts Ptr (Ptr ())
p_vals
{-# INLINE cuLinkCreate #-}
cuLinkCreate :: (Int) -> (Ptr CInt) -> (Ptr (Ptr ())) -> IO ((Status), (LinkState))
cuLinkCreate :: Int -> Ptr CInt -> Ptr (Ptr ()) -> IO (Status, LinkState)
cuLinkCreate Int
a1 Ptr CInt
a2 Ptr (Ptr ())
a3 =
let {a1' :: CUInt
a1' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a1} in
let {a2' :: Ptr CInt
a2' = Ptr CInt -> Ptr CInt
forall a. a -> a
id Ptr CInt
a2} in
let {a3' :: Ptr (Ptr ())
a3' = Ptr (Ptr ()) -> Ptr (Ptr ())
forall a. a -> a
id Ptr (Ptr ())
a3} in
(Ptr (Ptr ()) -> IO (Status, LinkState)) -> IO (Status, LinkState)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr (Ptr ()) -> IO (Status, LinkState))
-> IO (Status, LinkState))
-> (Ptr (Ptr ()) -> IO (Status, LinkState))
-> IO (Status, LinkState)
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr ())
a4' ->
CUInt -> Ptr CInt -> Ptr (Ptr ()) -> Ptr (Ptr ()) -> IO CInt
cuLinkCreate'_ CUInt
a1' Ptr CInt
a2' Ptr (Ptr ())
a3' Ptr (Ptr ())
a4' IO CInt
-> (CInt -> IO (Status, LinkState)) -> IO (Status, LinkState)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CInt
res ->
let {res' :: Status
res' = CInt -> Status
forall i e. (Integral i, Enum e) => i -> e
cToEnum CInt
res} in
Ptr (Ptr ()) -> IO LinkState
peekLS Ptr (Ptr ())
a4'IO LinkState
-> (LinkState -> IO (Status, LinkState)) -> IO (Status, LinkState)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \LinkState
a4'' ->
(Status, LinkState) -> IO (Status, LinkState)
forall (m :: * -> *) a. Monad m => a -> m a
return (Status
res', LinkState
a4'')
{-# LINE 94 "src/Foreign/CUDA/Driver/Module/Link.chs" #-}
where
peekLS :: Ptr (Ptr ()) -> IO LinkState
peekLS = (Ptr () -> LinkState) -> IO (Ptr ()) -> IO LinkState
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM Ptr () -> LinkState
LinkState (IO (Ptr ()) -> IO LinkState)
-> (Ptr (Ptr ()) -> IO (Ptr ())) -> Ptr (Ptr ()) -> IO LinkState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (Ptr ()) -> IO (Ptr ())
forall a. Storable a => Ptr a -> IO a
peek
{-# INLINEABLE destroy #-}
destroy :: LinkState -> IO ()
destroy :: LinkState -> IO ()
destroy !LinkState
s = Status -> IO ()
nothingIfOk (Status -> IO ()) -> IO Status -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< LinkState -> IO Status
cuLinkDestroy LinkState
s
{-# INLINE cuLinkDestroy #-}
cuLinkDestroy :: (LinkState) -> IO ((Status))
cuLinkDestroy :: LinkState -> IO Status
cuLinkDestroy LinkState
a1 =
let {a1' :: Ptr ()
a1' = LinkState -> Ptr ()
useLinkState LinkState
a1} in
Ptr () -> IO CInt
cuLinkDestroy'_ Ptr ()
a1' IO CInt -> (CInt -> IO Status) -> IO Status
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CInt
res ->
let {res' :: Status
res' = CInt -> Status
forall i e. (Integral i, Enum e) => i -> e
cToEnum CInt
res} in
Status -> IO Status
forall (m :: * -> *) a. Monad m => a -> m a
return (Status
res')
{-# LINE 117 "src/Foreign/CUDA/Driver/Module/Link.chs" #-}
{-# INLINEABLE complete #-}
complete :: LinkState -> IO Module
complete :: LinkState -> IO Module
complete !LinkState
ls = do
Ptr ()
cubin <- (Status, Ptr ()) -> IO (Ptr ())
forall a. (Status, a) -> IO a
resultIfOk ((Status, Ptr ()) -> IO (Ptr ()))
-> IO (Status, Ptr ()) -> IO (Ptr ())
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< LinkState -> Ptr Int -> IO (Status, Ptr ())
cuLinkComplete LinkState
ls Ptr Int
forall a. Ptr a
nullPtr
Module
mdl <- Ptr Word8 -> IO Module
loadDataFromPtr (Ptr () -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr Ptr ()
cubin)
LinkState -> IO ()
destroy LinkState
ls
Module -> IO Module
forall (m :: * -> *) a. Monad m => a -> m a
return Module
mdl
{-# INLINE cuLinkComplete #-}
cuLinkComplete :: (LinkState) -> (Ptr Int) -> IO ((Status), (Ptr ()))
cuLinkComplete :: LinkState -> Ptr Int -> IO (Status, Ptr ())
cuLinkComplete LinkState
a1 Ptr Int
a3 =
let {a1' :: Ptr ()
a1' = LinkState -> Ptr ()
useLinkState LinkState
a1} in
(Ptr (Ptr ()) -> IO (Status, Ptr ())) -> IO (Status, Ptr ())
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca ((Ptr (Ptr ()) -> IO (Status, Ptr ())) -> IO (Status, Ptr ()))
-> (Ptr (Ptr ()) -> IO (Status, Ptr ())) -> IO (Status, Ptr ())
forall a b. (a -> b) -> a -> b
$ \Ptr (Ptr ())
a2' ->
let {a3' :: Ptr b
a3' = Ptr Int -> Ptr b
forall a b. Ptr a -> Ptr b
castPtr Ptr Int
a3} in
Ptr () -> Ptr (Ptr ()) -> Ptr CULong -> IO CInt
cuLinkComplete'_ Ptr ()
a1' Ptr (Ptr ())
a2' Ptr CULong
forall a. Ptr a
a3' IO CInt -> (CInt -> IO (Status, Ptr ())) -> IO (Status, Ptr ())
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CInt
res ->
let {res' :: Status
res' = CInt -> Status
forall i e. (Integral i, Enum e) => i -> e
cToEnum CInt
res} in
Ptr (Ptr ()) -> IO (Ptr ())
forall a. Storable a => Ptr a -> IO a
peek Ptr (Ptr ())
a2'IO (Ptr ())
-> (Ptr () -> IO (Status, Ptr ())) -> IO (Status, Ptr ())
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr ()
a2'' ->
(Status, Ptr ()) -> IO (Status, Ptr ())
forall (m :: * -> *) a. Monad m => a -> m a
return (Status
res', Ptr ()
a2'')
{-# LINE 146 "src/Foreign/CUDA/Driver/Module/Link.chs" #-}
{-# INLINEABLE addFile #-}
addFile :: LinkState -> FilePath -> JITInputType -> [JITOption] -> IO ()
addFile :: LinkState -> String -> JITInputType -> [JITOption] -> IO ()
addFile !LinkState
ls !String
fp !JITInputType
t ![JITOption]
options =
let ([JITOptionInternal]
opt,[Int]
val) = [(JITOptionInternal, Int)] -> ([JITOptionInternal], [Int])
forall a b. [(a, b)] -> ([a], [b])
unzip ([(JITOptionInternal, Int)] -> ([JITOptionInternal], [Int]))
-> [(JITOptionInternal, Int)] -> ([JITOptionInternal], [Int])
forall a b. (a -> b) -> a -> b
$ (JITOption -> (JITOptionInternal, Int))
-> [JITOption] -> [(JITOptionInternal, Int)]
forall a b. (a -> b) -> [a] -> [b]
map JITOption -> (JITOptionInternal, Int)
jitOptionUnpack [JITOption]
options
in
[CInt] -> (Int -> Ptr CInt -> IO ()) -> IO ()
forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen ((JITOptionInternal -> CInt) -> [JITOptionInternal] -> [CInt]
forall a b. (a -> b) -> [a] -> [b]
map JITOptionInternal -> CInt
forall e i. (Enum e, Integral i) => e -> i
cFromEnum [JITOptionInternal]
opt) ((Int -> Ptr CInt -> IO ()) -> IO ())
-> (Int -> Ptr CInt -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Int
i Ptr CInt
p_opts ->
[Ptr ()] -> (Ptr (Ptr ()) -> IO ()) -> IO ()
forall a b. Storable a => [a] -> (Ptr a -> IO b) -> IO b
withArray ((Int -> Ptr ()) -> [Int] -> [Ptr ()]
forall a b. (a -> b) -> [a] -> [b]
map Int -> Ptr ()
forall a b. a -> b
unsafeCoerce [Int]
val) ((Ptr (Ptr ()) -> IO ()) -> IO ())
-> (Ptr (Ptr ()) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \ Ptr (Ptr ())
p_vals ->
Status -> IO ()
nothingIfOk (Status -> IO ()) -> IO Status -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< LinkState
-> JITInputType
-> String
-> Int
-> Ptr CInt
-> Ptr (Ptr ())
-> IO Status
cuLinkAddFile LinkState
ls JITInputType
t String
fp Int
i Ptr CInt
p_opts Ptr (Ptr ())
p_vals
{-# INLINE cuLinkAddFile #-}
cuLinkAddFile :: (LinkState) -> (JITInputType) -> (FilePath) -> (Int) -> (Ptr CInt) -> (Ptr (Ptr ())) -> IO ((Status))
cuLinkAddFile :: LinkState
-> JITInputType
-> String
-> Int
-> Ptr CInt
-> Ptr (Ptr ())
-> IO Status
cuLinkAddFile LinkState
a1 JITInputType
a2 String
a3 Int
a4 Ptr CInt
a5 Ptr (Ptr ())
a6 =
let {a1' :: Ptr ()
a1' = LinkState -> Ptr ()
useLinkState LinkState
a1} in
let {a2' :: CInt
a2' = JITInputType -> CInt
forall e i. (Enum e, Integral i) => e -> i
cFromEnum JITInputType
a2} in
String -> (CString -> IO Status) -> IO Status
forall a. String -> (CString -> IO a) -> IO a
withCString String
a3 ((CString -> IO Status) -> IO Status)
-> (CString -> IO Status) -> IO Status
forall a b. (a -> b) -> a -> b
$ \CString
a3' ->
let {a4' :: CUInt
a4' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a4} in
let {a5' :: Ptr CInt
a5' = Ptr CInt -> Ptr CInt
forall a. a -> a
id Ptr CInt
a5} in
let {a6' :: Ptr (Ptr ())
a6' = Ptr (Ptr ()) -> Ptr (Ptr ())
forall a. a -> a
id Ptr (Ptr ())
a6} in
Ptr ()
-> CInt -> CString -> CUInt -> Ptr CInt -> Ptr (Ptr ()) -> IO CInt
cuLinkAddFile'_ Ptr ()
a1' CInt
a2' CString
a3' CUInt
a4' Ptr CInt
a5' Ptr (Ptr ())
a6' IO CInt -> (CInt -> IO Status) -> IO Status
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CInt
res ->
let {res' :: Status
res' = CInt -> Status
forall i e. (Integral i, Enum e) => i -> e
cToEnum CInt
res} in
Status -> IO Status
forall (m :: * -> *) a. Monad m => a -> m a
return (Status
res')
{-# LINE 178 "src/Foreign/CUDA/Driver/Module/Link.chs" #-}
{-# INLINEABLE addData #-}
addData :: LinkState -> ByteString -> JITInputType -> [JITOption] -> IO ()
addData :: LinkState -> ByteString -> JITInputType -> [JITOption] -> IO ()
addData !LinkState
ls !ByteString
img !JITInputType
k ![JITOption]
options =
ByteString -> (CStringLen -> IO ()) -> IO ()
forall a. ByteString -> (CStringLen -> IO a) -> IO a
B.useAsCStringLen ByteString
img (\(CString
p, Int
n) -> LinkState
-> Int -> Ptr Word8 -> JITInputType -> [JITOption] -> IO ()
addDataFromPtr LinkState
ls Int
n (CString -> Ptr Word8
forall a b. Ptr a -> Ptr b
castPtr CString
p) JITInputType
k [JITOption]
options)
{-# INLINEABLE addDataFromPtr #-}
addDataFromPtr :: LinkState -> Int -> Ptr Word8 -> JITInputType -> [JITOption] -> IO ()
addDataFromPtr :: LinkState
-> Int -> Ptr Word8 -> JITInputType -> [JITOption] -> IO ()
addDataFromPtr !LinkState
ls !Int
n !Ptr Word8
img !JITInputType
t ![JITOption]
options =
let ([JITOptionInternal]
opt,[Int]
val) = [(JITOptionInternal, Int)] -> ([JITOptionInternal], [Int])
forall a b. [(a, b)] -> ([a], [b])
unzip ([(JITOptionInternal, Int)] -> ([JITOptionInternal], [Int]))
-> [(JITOptionInternal, Int)] -> ([JITOptionInternal], [Int])
forall a b. (a -> b) -> a -> b
$ (JITOption -> (JITOptionInternal, Int))
-> [JITOption] -> [(JITOptionInternal, Int)]
forall a b. (a -> b) -> [a] -> [b]
map JITOption -> (JITOptionInternal, Int)
jitOptionUnpack [JITOption]
options
name :: Ptr a
name = Addr# -> Ptr a
forall a. Addr# -> Ptr a
Ptr Addr#
"<unknown>"#
in
[CInt] -> (Int -> Ptr CInt -> IO ()) -> IO ()
forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen ((JITOptionInternal -> CInt) -> [JITOptionInternal] -> [CInt]
forall a b. (a -> b) -> [a] -> [b]
map JITOptionInternal -> CInt
forall e i. (Enum e, Integral i) => e -> i
cFromEnum [JITOptionInternal]
opt) ((Int -> Ptr CInt -> IO ()) -> IO ())
-> (Int -> Ptr CInt -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Int
i Ptr CInt
p_opts ->
[Ptr ()] -> (Ptr (Ptr ()) -> IO ()) -> IO ()
forall a b. Storable a => [a] -> (Ptr a -> IO b) -> IO b
withArray ((Int -> Ptr ()) -> [Int] -> [Ptr ()]
forall a b. (a -> b) -> [a] -> [b]
map Int -> Ptr ()
forall a b. a -> b
unsafeCoerce [Int]
val) ((Ptr (Ptr ()) -> IO ()) -> IO ())
-> (Ptr (Ptr ()) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \ Ptr (Ptr ())
p_vals ->
Status -> IO ()
nothingIfOk (Status -> IO ()) -> IO Status -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< LinkState
-> JITInputType
-> Ptr Word8
-> Int
-> CString
-> Int
-> Ptr CInt
-> Ptr (Ptr ())
-> IO Status
cuLinkAddData LinkState
ls JITInputType
t Ptr Word8
img Int
n CString
forall a. Ptr a
name Int
i Ptr CInt
p_opts Ptr (Ptr ())
p_vals
{-# INLINE cuLinkAddData #-}
cuLinkAddData :: (LinkState) -> (JITInputType) -> (Ptr Word8) -> (Int) -> (Ptr CChar) -> (Int) -> (Ptr CInt) -> (Ptr (Ptr ())) -> IO ((Status))
cuLinkAddData :: LinkState
-> JITInputType
-> Ptr Word8
-> Int
-> CString
-> Int
-> Ptr CInt
-> Ptr (Ptr ())
-> IO Status
cuLinkAddData LinkState
a1 JITInputType
a2 Ptr Word8
a3 Int
a4 CString
a5 Int
a6 Ptr CInt
a7 Ptr (Ptr ())
a8 =
let {a1' :: Ptr ()
a1' = LinkState -> Ptr ()
useLinkState LinkState
a1} in
let {a2' :: CInt
a2' = JITInputType -> CInt
forall e i. (Enum e, Integral i) => e -> i
cFromEnum JITInputType
a2} in
let {a3' :: Ptr b
a3' = Ptr Word8 -> Ptr b
forall a b. Ptr a -> Ptr b
castPtr Ptr Word8
a3} in
let {a4' :: CULong
a4' = Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a4} in
let {a5' :: CString
a5' = CString -> CString
forall a. a -> a
id CString
a5} in
let {a6' :: CUInt
a6' = Int -> CUInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
a6} in
let {a7' :: Ptr CInt
a7' = Ptr CInt -> Ptr CInt
forall a. a -> a
id Ptr CInt
a7} in
let {a8' :: Ptr (Ptr ())
a8' = Ptr (Ptr ()) -> Ptr (Ptr ())
forall a. a -> a
id Ptr (Ptr ())
a8} in
Ptr ()
-> CInt
-> Ptr ()
-> CULong
-> CString
-> CUInt
-> Ptr CInt
-> Ptr (Ptr ())
-> IO CInt
cuLinkAddData'_ Ptr ()
a1' CInt
a2' Ptr ()
forall a. Ptr a
a3' CULong
a4' CString
a5' CUInt
a6' Ptr CInt
a7' Ptr (Ptr ())
a8' IO CInt -> (CInt -> IO Status) -> IO Status
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \CInt
res ->
let {res' :: Status
res' = CInt -> Status
forall i e. (Integral i, Enum e) => i -> e
cToEnum CInt
res} in
Status -> IO Status
forall (m :: * -> *) a. Monad m => a -> m a
return (Status
res')
{-# LINE 226 "src/Foreign/CUDA/Driver/Module/Link.chs" #-}
foreign import ccall unsafe "Foreign/CUDA/Driver/Module/Link.chs.h cuLinkCreate"
cuLinkCreate'_ :: (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt)))))
foreign import ccall unsafe "Foreign/CUDA/Driver/Module/Link.chs.h cuLinkDestroy"
cuLinkDestroy'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))
foreign import ccall unsafe "Foreign/CUDA/Driver/Module/Link.chs.h cuLinkComplete"
cuLinkComplete'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> ((C2HSImp.Ptr C2HSImp.CULong) -> (IO C2HSImp.CInt))))
foreign import ccall unsafe "Foreign/CUDA/Driver/Module/Link.chs.h cuLinkAddFile"
cuLinkAddFile'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr C2HSImp.CChar) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt)))))))
foreign import ccall unsafe "Foreign/CUDA/Driver/Module/Link.chs.h cuLinkAddData"
cuLinkAddData'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> ((C2HSImp.Ptr ()) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CChar) -> (C2HSImp.CUInt -> ((C2HSImp.Ptr C2HSImp.CInt) -> ((C2HSImp.Ptr (C2HSImp.Ptr ())) -> (IO C2HSImp.CInt)))))))))