Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions Generator.hs
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ genTypeDecl maxCapability typeDesc = unlines
storableInstance = unlines
["instance Storable " ++ dataName ++ " where"
," sizeOf x = vectorSize x * elementSize x"
," alignment = sizeOf" -- for best performance align vectors as good as their size
," alignment = FSt.sizeOf" -- for best performance align vectors as good as their size
," peek (Ptr a) = readOffAddr (Addr a) 0"
," poke (Ptr a) = writeOffAddr (Addr a) 0"
]
Expand Down Expand Up @@ -350,8 +350,8 @@ genTypeDecl maxCapability typeDesc = unlines
else ""
primInstance = unlines
["instance Prim " ++ dataName ++ " where"
," sizeOf# a = let !(I# x) = sizeOf a in x"
," alignment# a = let !(I# x) = alignment a in x"
," sizeOf# a = let !(I# x) = PTy.sizeOf a in x"
," alignment# a = let !(I# x) = PTy.alignment a in x"
," indexByteArray# ba i = index" ++ dataName ++ "Array (ByteArray ba) (I# i)"
," readByteArray# mba i s = let (ST r) = read" ++ dataName ++ "Array (MutableByteArray mba) (I# i) in r s"
," writeByteArray# mba i v s = let (ST r) = write" ++ dataName ++ "Array (MutableByteArray mba) (I# i) v in case r s of { (# s', _ #) -> s' }"
Expand Down Expand Up @@ -853,6 +853,7 @@ classFile genPatSyns doRules = unlines $
,""
,"import Control.Monad.Primitive"
,"import Data.Primitive"
,"import Data.Primitive.Addr"
,""
,if doRules then "import GHC.Exts" else ""
,""
Expand Down Expand Up @@ -1035,14 +1036,16 @@ fileHeader td = unlines $
,"import GHC.Exts"
,"import GHC.ST"
,""
,"import Foreign.Storable"
,"import Foreign.Storable as FSt"
,""
,"import Control.Monad.Primitive"
,""
,"import Data.Primitive.Types"
,"import Data.Primitive.Types as PTy"
,"import Data.Primitive.ByteArray"
,"import Data.Primitive.Addr"
,"#if __GLASGOW_HASKELL__ < 804"
,"import Data.Monoid"
,"#endif"
,"import Data.Typeable"
,""
,"import qualified Data.Vector.Primitive as PV"
Expand Down
55 changes: 30 additions & 25 deletions Setup.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,31 @@
module Main where

import Control.Arrow (first)
#if !MIN_VERSION_Cabal(3,0,0)
import Control.Applicative (pure, (<$>), (<*>))
#endif
import Control.Monad (when, unless)

import Prelude

#if !MIN_VERSION_Cabal(3,0,0)
import Data.Char (isSpace)
#endif
import Data.List (stripPrefix)
import Data.Maybe

#if MIN_VERSION_Cabal(2,0,0)
import qualified Data.Map as Map
#endif

#if !MIN_VERSION_Cabal(3,0,0)
import Distribution.ModuleName (ModuleName, fromString)
#endif
#if MIN_VERSION_Cabal(2,0,0)
#if !MIN_VERSION_Cabal(3,0,0)
import Distribution.PackageDescription (BuildInfo(..), Library(..), PackageDescription(..), defaultLibName)
import Distribution.Types.LocalBuildInfo (LocalBuildInfo(..))
#endif
#else
import Distribution.PackageDescription (BuildInfo(..), Library(..), PackageDescription(..))
#endif
Expand All @@ -30,6 +38,13 @@ import Distribution.Simple.Program.Types (programFindLocation, ProgramSearchPath
import Distribution.System (Arch(..), buildArch)
import Distribution.Verbosity (silent)

#if MIN_VERSION_Cabal(3,0,0)
import Distribution.Simple.LocalBuildInfo
#endif
#if MIN_VERSION_Cabal(2,3,0)
import Distribution.System ( buildPlatform )
#endif

import System.Environment (getArgs, getEnvironment)
import System.Exit (ExitCode(..))

Expand Down Expand Up @@ -74,7 +89,7 @@ checkLLVMSupport chatty = case buildCompilerFlavor of
pure False
Just loc -> withSystemTempDirectory "llvm-test" $ \ tmpDir -> do
let hsFile = tmpDir </> "LLVMTest.hs"
exeFile = tmpDir </> replaceExtension "LLVMTest" exeExtension
exeFile = tmpDir </> replaceExtension "LLVMTest" myExeExtension
writeFile hsFile "main = putStrLn \"Hello, World\""
(exitCode, stdoutS, stderrS) <- readProcessWithExitCode loc ["-O", hsFile, "-fllvm", "-o", exeFile] ""
case exitCode of
Expand All @@ -100,6 +115,13 @@ checkLLVMSupport chatty = case buildCompilerFlavor of
when chatty $ hPutStrLn stderr "Usage of LLVM is currently only supported for GHC"
pure False

myExeExtension :: String
#if MIN_VERSION_Cabal(2,3,0)
myExeExtension = exeExtension buildPlatform
#else
myExeExtension = exeExtension
#endif

-- | Example code for our use of pattern synonyms. We use it to make sure we can
-- use them (we can't on GHC 8.0.1).
patSynTestCode :: Bool -> String
Expand Down Expand Up @@ -267,39 +289,22 @@ hooks = simpleUserHooks {
(_, flag) <- resolveFlags False strArgs
-- generate sources
#if MIN_VERSION_Cabal(2,0,0)
let componentLocalBuildInfo = case fromMaybe [] $ Map.lookup defaultLibName $ componentNameMap localBuildInfo of
let componentLocalBuildInfo = case fromMaybe [] $ Map.lookup mainLibName $ componentNameMap localBuildInfo of
[] -> error "Can't find library component build info"
(x:_) -> x
genSrcForFlag flag $ autogenComponentModulesDir localBuildInfo componentLocalBuildInfo
#else
genSrcForFlag flag $ autogenModulesDir localBuildInfo
#endif
pure localBuildInfo
,sDistHook = \ pkgDesc mLocBuildInfo uHooks sDistFlags -> do
-- we have to filter our the auto generated modules to avoid cabal complaining
-- about not finding them
let parseXAutogenModules :: String -> [ModuleName]
parseXAutogenModules = map (fromString . filter (not. isSpace)) . lines
filterModules :: BuildInfo -> [ModuleName] -> [ModuleName]
filterModules bi = case maybe [] parseXAutogenModules $ lookup "x-autogen-modules" $ customFieldsBI bi of
autogens -> filter (`notElem` autogens)
fixBuildInfoAutogens :: BuildInfo -> BuildInfo
fixBuildInfoAutogens bi = bi { otherModules = filterModules bi (otherModules bi) }
fixLibraryAutogens :: Library -> Library
fixLibraryAutogens lib = lib {
exposedModules = filterModules (libBuildInfo lib) (exposedModules lib)
#if MIN_VERSION_Cabal(2,0,0)
,signatures = filterModules (libBuildInfo lib) (signatures lib)
}

mainLibName :: ComponentName
#if MIN_VERSION_Cabal(3,0,0)
mainLibName = CLibName defaultLibName
#else
,requiredSignatures = filterModules (libBuildInfo lib) (requiredSignatures lib)
,exposedSignatures = filterModules (libBuildInfo lib) (exposedSignatures lib)
mainLibName = defaultLibName
#endif
,libBuildInfo = fixBuildInfoAutogens (libBuildInfo lib)
}
pkgDesc' :: PackageDescription
pkgDesc' = pkgDesc { library = fixLibraryAutogens <$> library pkgDesc }
sDistHook simpleUserHooks pkgDesc' mLocBuildInfo uHooks sDistFlags
}

main :: IO ()
main = do
Expand Down
5 changes: 3 additions & 2 deletions primitive-simd.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ library
Data.Primitive.SIMD.DoubleX8
Data.Primitive.SIMD.DoubleX16
-- custom field listing all modules which we exclude from source distributions
x-autogen-modules:
autogen-modules:
Data.Primitive.SIMD
Data.Primitive.SIMD.Class
Data.Primitive.SIMD.Int8X16
Expand Down Expand Up @@ -151,7 +151,8 @@ library
build-depends:
base >= 4.7 && < 5,
ghc-prim >= 0.3.1,
primitive >= 0.5,
primitive >= 0.7,
primitive-addr >= 0.1.0,
vector >= 0.10
if !flag(no-vec) && (flag(vec128) || flag(vec256) || flag(vec512))
ghc-options: -fllvm
Expand Down