From 517dc03dbac5e7432ec0cb4323d3ce239f306ef8 Mon Sep 17 00:00:00 2001 From: Parker Liu Date: Thu, 2 Apr 2020 15:46:20 +0800 Subject: [PATCH] Fix issue of building with cabal 3.0.0 and ghc-8.8.3 --- Generator.hs | 13 +++++++---- Setup.hs | 55 ++++++++++++++++++++++++-------------------- primitive-simd.cabal | 5 ++-- 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/Generator.hs b/Generator.hs index 89a50e7..2b5d668 100644 --- a/Generator.hs +++ b/Generator.hs @@ -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" ] @@ -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' }" @@ -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 "" ,"" @@ -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" diff --git a/Setup.hs b/Setup.hs index c2d4d65..bfe00c5 100644 --- a/Setup.hs +++ b/Setup.hs @@ -3,12 +3,16 @@ 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 @@ -16,10 +20,14 @@ import Data.Maybe 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 @@ -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(..)) @@ -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 @@ -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 @@ -267,7 +289,7 @@ 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 @@ -275,31 +297,14 @@ hooks = simpleUserHooks { 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 diff --git a/primitive-simd.cabal b/primitive-simd.cabal index 2deb7aa..d1c9a1d 100644 --- a/primitive-simd.cabal +++ b/primitive-simd.cabal @@ -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 @@ -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