nvvm-0.7.5.2: Foreign/NVVM/Info.chs
{-# LANGUAGE CPP #-}
{-# LANGUAGE TemplateHaskell #-}
--------------------------------------------------------------------------------
-- |
-- Module : Foreign.NVVM.Info
-- Copyright : [2016] Trevor L. McDonell
-- License : BSD
--
-- General information query
--
--------------------------------------------------------------------------------
module Foreign.NVVM.Info (
nvvmVersion,
nvvmIRVersion,
) where
import Foreign.NVVM.Error
import Foreign.NVVM.Internal.C2HS
import Foreign.Marshal
import Foreign.C
import Foreign.Ptr
import Data.Version
import System.IO.Unsafe
#include "cbits/stubs.h"
{# context lib="nvvm" #}
-- | Get the version of NVVM IR supported by this library. The first component
-- is the NVVM IR version, and the second the version of the debug metadata.
--
-- Requires: CUDA-7.0
--
-- <http://docs.nvidia.com/cuda/libnvvm-api/group__query.html#group__query_1g0894677934db095b3c40d4f8e2578cc5>
--
nvvmIRVersion :: (Version, Version)
#if CUDA_VERSION < 7000
nvvmIRVersion = requireSDK 'nvvmIRVersion 7.0
#else
nvvmIRVersion = unsafePerformIO $ do
(status, r1, r2, d1, d2) <- c_nvvmIRVersion
resultIfOk (status, (makeVersion [r1,r2], makeVersion [d1,d2]))
{#
fun unsafe nvvmIRVersion as c_nvvmIRVersion
{ alloca- `Int' peekIntConv*
, alloca- `Int' peekIntConv*
, alloca- `Int' peekIntConv*
, alloca- `Int' peekIntConv*
}
-> `Status' cToEnum
#}
#endif
-- | Get the version of the NVVM library
--
-- <http://docs.nvidia.com/cuda/libnvvm-api/group__query.html#group__query_1gcdd062f26078d20ded68f1017e999246>
--
nvvmVersion :: Version
nvvmVersion = unsafePerformIO $ do
(status, v1, v2) <- c_nvvmVersion
resultIfOk (status, makeVersion [v1,v2])
{#
fun unsafe nvvmVersion as c_nvvmVersion
{ alloca- `Int' peekIntConv*
, alloca- `Int' peekIntConv*
}
-> `Status' cToEnum
#}
#if __GLASGOW_HASKELL__ <= 708
makeVersion :: [Int] -> Version
makeVersion vs = Version vs []
#endif