{-# LANGUAGE OverloadedStrings #-}
module CodeGen.FileMappings
( files
, HeaderFile
) where
import Data.Monoid ((<>))
import Data.Text (Text)
import qualified Data.Text as T
import CodeGen.Types
import CodeGen.Prelude
import CodeGen.Render (makeModule)
type HeaderFile = FilePath
($:) :: LibType -> CodeGenType -> (LibType -> CodeGenType -> x) -> x
($:) a b fn = fn a b
files :: LibType -> CodeGenType -> [(String, TemplateType -> [Function] -> HModule)]
files TH = \case
GenericFiles -> map (($:) TH GenericFiles)
[ mkModule' "Blas"
, mkModule' "Lapack"
, mkModule' "Storage"
, mkModule (ModuleSuffix "Storage") "StorageCopy"
, mkModule' "Tensor"
, mkModule (ModuleSuffix "Tensor") "TensorConv"
, mkModule (ModuleSuffix "Tensor") "TensorCopy"
, mkModule (ModuleSuffix "Tensor") "TensorLapack"
, mkModule (ModuleSuffix "Tensor") "TensorMath"
, mkModule (ModuleSuffix "Tensor") "TensorRandom"
, mkModule' "Vector"
]
ConcreteFiles -> map (($:) TH ConcreteFiles)
[ mkModule' "File"
, mkModule' "DiskFile"
, mkModule' "Atomic"
, mkModule' "Half"
, mkModule' "LogAdd"
, mkModule' "Random"
, mkModule' "Size"
, mkModule' "Storage"
, mkModule' "MemoryFile"
]
files THC = \case
GenericFiles -> map (($:) THC GenericFiles)
[ mkModule' "Storage"
, mkModule (ModuleSuffix "Storage") "StorageCopy"
, mkModule' "Tensor"
, mkModule (ModuleSuffix "Tensor") "TensorCopy"
, mkModule (ModuleSuffix "Tensor") "TensorIndex"
, mkModule (ModuleSuffix "Tensor") "TensorMasked"
, mkModule (ModuleSuffix "Tensor") "TensorMath"
, mkModule (ModuleSuffix "Tensor") "TensorMathBlas"
, mkModule (ModuleSuffix "Tensor") "TensorMathCompare"
, mkModule (ModuleSuffix "Tensor") "TensorMathCompareT"
, mkModule (ModuleSuffix "Tensor") "TensorMathMagma"
, mkModule (ModuleSuffix "Tensor") "TensorMathPairwise"
, mkModule (ModuleSuffix "Tensor") "TensorMathPointwise"
, mkModule (ModuleSuffix "Tensor") "TensorMathReduce"
, mkModule (ModuleSuffix "Tensor") "TensorMathScan"
, mkModule (ModuleSuffix "Tensor") "TensorMode"
, mkModule (ModuleSuffix "Tensor") "TensorRandom"
, mkModule (ModuleSuffix "Tensor") "TensorScatterGather"
, mkModule (ModuleSuffix "Tensor") "TensorSort"
, mkModule (ModuleSuffix "Tensor") "TensorTopK"
]
ConcreteFiles -> map (($:) THC ConcreteFiles)
[ mkModule' "Allocator"
, mkModule' "Blas"
, mkModule' "CachingAllocator"
, mkModule' "CachingHostAllocator"
, mkModule' "Half"
, mkModule' "Sleep"
, mkModule' "Storage"
, mkModule' "StorageCopy"
, mkModule' "Stream"
, mkModule' "Tensor"
, mkModule' "TensorConv"
, mkModule' "TensorCopy"
, mkModule' "TensorMath"
, mkModule' "TensorMath"
, mkModule' "TensorRandom"
, mkModule' "ThreadLocal"
, mkGeneralFile
]
files THNN = \case { GenericFiles -> map (($:) THNN GenericFiles) [ mkModule' "" ]; ConcreteFiles -> [] }
files THCUNN = \case { GenericFiles -> map (($:) THCUNN GenericFiles) [ mkModule' "" ]; ConcreteFiles -> [] }
files _ = \case { GenericFiles -> []; ConcreteFiles -> [] }
mkGeneralFile
:: LibType
-> CodeGenType
-> (FilePath, TemplateType -> [Function] -> HModule)
mkGeneralFile lt cgt
= ( srcDir lt cgt <> show lt <> "General.h.in"
, makeModule lt (TextPath . T.pack $ outDir lt) cgt (show lt <> "General.h") modsuff filesuff)
where
modsuff = "General"
filesuff = "General"
mkModule
:: ModuleSuffix
-> FileSuffix
-> LibType
-> CodeGenType
-> (FilePath, TemplateType -> [Function] -> HModule)
mkModule modsuff filesuff lt cgt
= (srcDir lt cgt <> hf, makeModule lt (TextPath . T.pack $ outDir lt) cgt hf modsuff filesuff)
where
hf :: FilePath
hf = show lt <> T.unpack (textFileSuffix filesuff) <> ".h"
mkModule'
:: Text
-> LibType
-> CodeGenType
-> (FilePath, TemplateType -> [Function] -> HModule)
mkModule' suff = mkModule (ModuleSuffix suff) (FileSuffix suff)