cabal-version: 2.4
name:           futhark
version:        0.25.17
synopsis:       An optimising compiler for a functional, array-oriented language.

description:    Futhark is a small programming language designed to be compiled to
                efficient parallel code. It is a statically typed, data-parallel,
                and purely functional array language in the ML family, and comes
                with a heavily optimising ahead-of-time compiler that presently
                generates GPU code via CUDA and OpenCL, although the language itself
                is hardware-agnostic.
                .
                For more information, see the website at https://futhark-lang.org
                .
                For introductionary information about hacking on the
                Futhark compiler, see
                <https://github.com/diku-dk/futhark/blob/master/HACKING.md the hacking guide>.
                Regarding the internal design of the compiler, the following modules make
                good starting points:
                .
                * "Futhark" contains a basic architectural overview of the compiler.
                * "Futhark.IR.Syntax" explains the
                  basic design of the intermediate representation (IR).
                * "Futhark.Construct" explains how to write code that
                  manipulates and creates AST fragments.
                .
                <<docs/assets/ohyes.png You too can go fast once you rewrite your program in Futhark.>>

category:       Futhark
homepage:       https://futhark-lang.org
bug-reports:    https://github.com/diku-dk/futhark/issues
maintainer:     Troels Henriksen athas@sigkill.dk
license:        ISC
license-file:   LICENSE
build-type:     Simple
extra-source-files:
-- Cabal's recompilation tracking doesn't work when we use wildcards
-- here, so for now we spell out every single file.
    rts/c/atomics.h
    rts/c/context.h
    rts/c/context_prototypes.h
    rts/c/backends/c.h
    rts/c/backends/cuda.h
    rts/c/backends/hip.h
    rts/c/backends/multicore.h
    rts/c/backends/opencl.h
    rts/c/lock.h
    rts/c/copy.h
    rts/c/timing.h
    rts/c/errors.h
    rts/c/free_list.h
    rts/c/event_list.h
    rts/c/gpu.h
    rts/c/gpu_prototypes.h
    rts/c/tuning.h
    rts/c/values.h
    rts/c/half.h
    rts/c/cache.h
    rts/c/ispc_util.h
    rts/c/scalar.h
    rts/c/scalar_f16.h
    rts/c/scheduler.h
    rts/c/uniform.h
    rts/c/util.h
    rts/c/server.h
    rts/cuda/prelude.cu
    rts/futhark-doc/style.css
    rts/javascript/server.js
    rts/javascript/values.js
    rts/javascript/wrapperclasses.js
    rts/opencl/copy.cl
    rts/opencl/prelude.cl
    rts/opencl/transpose.cl
    rts/python/tuning.py
    rts/python/panic.py
    rts/python/memory.py
    rts/python/server.py
    rts/python/values.py
    rts/python/opencl.py
    rts/python/scalar.py
    prelude/functional.fut
    prelude/math.fut
    prelude/soacs.fut
    prelude/zip.fut
    prelude/ad.fut
    prelude/array.fut
    prelude/prelude.fut
-- Just enough of the docs to build the manpages.
    docs/**/*.rst
    docs/Makefile
    docs/conf.py
    docs/requirements.txt
extra-doc-files:
  assets/*.png
  CHANGELOG.md
  README.md

source-repository head
  type: git
  location: https://github.com/diku-dk/futhark

common common
  ghc-options: -Wall -Wcompat -Wno-incomplete-uni-patterns -Wno-x-partial -Wno-unrecognised-warning-flags  -Wredundant-constraints -Wincomplete-record-updates -Wmissing-export-lists -Wunused-packages
  default-language: GHC2021
  default-extensions:
    OverloadedStrings

library
  import: common
  hs-source-dirs: src
  exposed-modules:
      Futhark
      Futhark.Actions
      Futhark.AD.Derivatives
      Futhark.AD.Fwd
      Futhark.AD.Rev
      Futhark.AD.Rev.Loop
      Futhark.AD.Rev.Hist
      Futhark.AD.Rev.Map
      Futhark.AD.Rev.Monad
      Futhark.AD.Rev.Reduce
      Futhark.AD.Rev.Scan
      Futhark.AD.Rev.Scatter
      Futhark.AD.Rev.SOAC
      Futhark.Analysis.AccessPattern
      Futhark.Analysis.AlgSimplify
      Futhark.Analysis.Alias
      Futhark.Analysis.CallGraph
      Futhark.Analysis.DataDependencies
      Futhark.Analysis.HORep.MapNest
      Futhark.Analysis.HORep.SOAC
      Futhark.Analysis.Interference
      Futhark.Analysis.LastUse
      Futhark.Analysis.MemAlias
      Futhark.Analysis.Metrics
      Futhark.Analysis.Metrics.Type
      Futhark.Analysis.PrimExp
      Futhark.Analysis.PrimExp.Convert
      Futhark.Analysis.PrimExp.Parse
      Futhark.Analysis.PrimExp.Simplify
      Futhark.Analysis.PrimExp.Table
      Futhark.Analysis.SymbolTable
      Futhark.Analysis.UsageTable
      Futhark.Bench
      Futhark.Builder
      Futhark.Builder.Class
      Futhark.CLI.Autotune
      Futhark.CLI.Bench
      Futhark.CLI.C
      Futhark.CLI.CUDA
      Futhark.CLI.Check
      Futhark.CLI.Benchcmp
      Futhark.CLI.Datacmp
      Futhark.CLI.Dataset
      Futhark.CLI.Defs
      Futhark.CLI.Dev
      Futhark.CLI.Doc
      Futhark.CLI.Eval
      Futhark.CLI.HIP
      Futhark.CLI.Literate
      Futhark.CLI.LSP
      Futhark.CLI.Main
      Futhark.CLI.Misc
      Futhark.CLI.Multicore
      Futhark.CLI.MulticoreISPC
      Futhark.CLI.MulticoreWASM
      Futhark.CLI.OpenCL
      Futhark.CLI.Pkg
      Futhark.CLI.Profile
      Futhark.CLI.PyOpenCL
      Futhark.CLI.Python
      Futhark.CLI.Query
      Futhark.CLI.REPL
      Futhark.CLI.Run
      Futhark.CLI.Script
      Futhark.CLI.Test
      Futhark.CLI.WASM
      Futhark.CodeGen.Backends.CCUDA
      Futhark.CodeGen.Backends.COpenCL
      Futhark.CodeGen.Backends.HIP
      Futhark.CodeGen.Backends.GenericC
      Futhark.CodeGen.Backends.GenericC.CLI
      Futhark.CodeGen.Backends.GenericC.Code
      Futhark.CodeGen.Backends.GenericC.EntryPoints
      Futhark.CodeGen.Backends.GenericC.Fun
      Futhark.CodeGen.Backends.GenericC.Monad
      Futhark.CodeGen.Backends.GenericC.Options
      Futhark.CodeGen.Backends.GenericC.Pretty
      Futhark.CodeGen.Backends.GenericC.Server
      Futhark.CodeGen.Backends.GenericC.Types
      Futhark.CodeGen.Backends.GenericPython
      Futhark.CodeGen.Backends.GenericPython.AST
      Futhark.CodeGen.Backends.GenericPython.Options
      Futhark.CodeGen.Backends.GenericWASM
      Futhark.CodeGen.Backends.GPU
      Futhark.CodeGen.Backends.MulticoreC
      Futhark.CodeGen.Backends.MulticoreC.Boilerplate
      Futhark.CodeGen.Backends.MulticoreISPC
      Futhark.CodeGen.Backends.MulticoreWASM
      Futhark.CodeGen.Backends.PyOpenCL
      Futhark.CodeGen.Backends.PyOpenCL.Boilerplate
      Futhark.CodeGen.Backends.SequentialC
      Futhark.CodeGen.Backends.SequentialC.Boilerplate
      Futhark.CodeGen.Backends.SequentialPython
      Futhark.CodeGen.Backends.SequentialWASM
      Futhark.CodeGen.Backends.SimpleRep
      Futhark.CodeGen.RTS.C
      Futhark.CodeGen.RTS.CUDA
      Futhark.CodeGen.RTS.OpenCL
      Futhark.CodeGen.RTS.Python
      Futhark.CodeGen.RTS.JavaScript
      Futhark.CodeGen.ImpCode
      Futhark.CodeGen.ImpCode.GPU
      Futhark.CodeGen.ImpCode.Multicore
      Futhark.CodeGen.ImpCode.OpenCL
      Futhark.CodeGen.ImpCode.Sequential
      Futhark.CodeGen.ImpGen
      Futhark.CodeGen.ImpGen.CUDA
      Futhark.CodeGen.ImpGen.GPU
      Futhark.CodeGen.ImpGen.GPU.Base
      Futhark.CodeGen.ImpGen.GPU.Block
      Futhark.CodeGen.ImpGen.GPU.SegHist
      Futhark.CodeGen.ImpGen.GPU.SegMap
      Futhark.CodeGen.ImpGen.GPU.SegRed
      Futhark.CodeGen.ImpGen.GPU.SegScan
      Futhark.CodeGen.ImpGen.GPU.SegScan.SinglePass
      Futhark.CodeGen.ImpGen.GPU.SegScan.TwoPass
      Futhark.CodeGen.ImpGen.GPU.ToOpenCL
      Futhark.CodeGen.ImpGen.HIP
      Futhark.CodeGen.ImpGen.Multicore
      Futhark.CodeGen.ImpGen.Multicore.Base
      Futhark.CodeGen.ImpGen.Multicore.SegHist
      Futhark.CodeGen.ImpGen.Multicore.SegMap
      Futhark.CodeGen.ImpGen.Multicore.SegRed
      Futhark.CodeGen.ImpGen.Multicore.SegScan
      Futhark.CodeGen.ImpGen.OpenCL
      Futhark.CodeGen.ImpGen.Sequential
      Futhark.CodeGen.OpenCL.Heuristics
      Futhark.Compiler
      Futhark.Compiler.CLI
      Futhark.Compiler.Config
      Futhark.Compiler.Program
      Futhark.Construct
      Futhark.Doc.Generator
      Futhark.Error
      Futhark.FreshNames
      Futhark.Format
      Futhark.IR
      Futhark.IR.Aliases
      Futhark.IR.GPU
      Futhark.IR.GPU.Op
      Futhark.IR.GPU.Simplify
      Futhark.IR.GPU.Sizes
      Futhark.IR.GPUMem
      Futhark.IR.MC
      Futhark.IR.MC.Op
      Futhark.IR.MCMem
      Futhark.IR.Mem
      Futhark.IR.Mem.Interval
      Futhark.IR.Mem.LMAD
      Futhark.IR.Mem.Simplify
      Futhark.IR.Parse
      Futhark.IR.Pretty
      Futhark.IR.Prop
      Futhark.IR.Prop.Aliases
      Futhark.IR.Prop.Constants
      Futhark.IR.Prop.Names
      Futhark.IR.Prop.Pat
      Futhark.IR.Prop.Rearrange
      Futhark.IR.Prop.Reshape
      Futhark.IR.Prop.Scope
      Futhark.IR.Prop.TypeOf
      Futhark.IR.Prop.Types
      Futhark.IR.Rep
      Futhark.IR.Rephrase
      Futhark.IR.RetType
      Futhark.IR.SOACS
      Futhark.IR.SOACS.SOAC
      Futhark.IR.SOACS.Simplify
      Futhark.IR.SegOp
      Futhark.IR.Seq
      Futhark.IR.SeqMem
      Futhark.IR.Syntax
      Futhark.IR.Syntax.Core
      Futhark.IR.Traversals
      Futhark.IR.TypeCheck
      Futhark.Internalise
      Futhark.Internalise.AccurateSizes
      Futhark.Internalise.ApplyTypeAbbrs
      Futhark.Internalise.Bindings
      Futhark.Internalise.Defunctionalise
      Futhark.Internalise.Defunctorise
      Futhark.Internalise.Entry
      Futhark.Internalise.Exps
      Futhark.Internalise.FullNormalise
      Futhark.Internalise.Lambdas
      Futhark.Internalise.LiftLambdas
      Futhark.Internalise.Monad
      Futhark.Internalise.Monomorphise
      Futhark.Internalise.ReplaceRecords
      Futhark.Internalise.TypesValues
      Futhark.LSP.Compile
      Futhark.LSP.Diagnostic
      Futhark.LSP.Handlers
      Futhark.LSP.Tool
      Futhark.LSP.State
      Futhark.LSP.PositionMapping
      Futhark.MonadFreshNames
      Futhark.Optimise.BlkRegTiling
      Futhark.Optimise.CSE
      Futhark.Optimise.DoubleBuffer
      Futhark.Optimise.EntryPointMem
      Futhark.Optimise.Fusion
      Futhark.Optimise.Fusion.Composing
      Futhark.Optimise.Fusion.GraphRep
      Futhark.Optimise.Fusion.TryFusion
      Futhark.Optimise.GenRedOpt
      Futhark.Optimise.HistAccs
      Futhark.Optimise.InliningDeadFun
      Futhark.Optimise.MemoryBlockMerging
      Futhark.Optimise.MemoryBlockMerging.GreedyColoring
      Futhark.Optimise.ArrayShortCircuiting
      Futhark.Optimise.ArrayShortCircuiting.ArrayCoalescing
      Futhark.Optimise.ArrayShortCircuiting.DataStructs
      Futhark.Optimise.ArrayShortCircuiting.MemRefAggreg
      Futhark.Optimise.ArrayShortCircuiting.TopdownAnalysis
      Futhark.Optimise.MergeGPUBodies
      Futhark.Optimise.ArrayLayout
      Futhark.Optimise.ArrayLayout.Transform
      Futhark.Optimise.ArrayLayout.Layout
      Futhark.Optimise.ReduceDeviceSyncs
      Futhark.Optimise.ReduceDeviceSyncs.MigrationTable
      Futhark.Optimise.ReduceDeviceSyncs.MigrationTable.Graph
      Futhark.Optimise.Simplify
      Futhark.Optimise.Simplify.Engine
      Futhark.Optimise.Simplify.Rep
      Futhark.Optimise.Simplify.Rule
      Futhark.Optimise.Simplify.Rules
      Futhark.Optimise.Simplify.Rules.BasicOp
      Futhark.Optimise.Simplify.Rules.ClosedForm
      Futhark.Optimise.Simplify.Rules.Index
      Futhark.Optimise.Simplify.Rules.Loop
      Futhark.Optimise.Simplify.Rules.Match
      Futhark.Optimise.Simplify.Rules.Simple
      Futhark.Optimise.Sink
      Futhark.Optimise.TileLoops
      Futhark.Optimise.TileLoops.Shared
      Futhark.Optimise.Unstream
      Futhark.Pass
      Futhark.Pass.AD
      Futhark.Pass.ExpandAllocations
      Futhark.Pass.ExplicitAllocations
      Futhark.Pass.ExplicitAllocations.GPU
      Futhark.Pass.ExplicitAllocations.MC
      Futhark.Pass.ExplicitAllocations.SegOp
      Futhark.Pass.ExplicitAllocations.Seq
      Futhark.Pass.ExtractKernels
      Futhark.Pass.ExtractKernels.BlockedKernel
      Futhark.Pass.ExtractKernels.DistributeNests
      Futhark.Pass.ExtractKernels.Distribution
      Futhark.Pass.ExtractKernels.ISRWIM
      Futhark.Pass.ExtractKernels.Interchange
      Futhark.Pass.ExtractKernels.Intrablock
      Futhark.Pass.ExtractKernels.StreamKernel
      Futhark.Pass.ExtractKernels.ToGPU
      Futhark.Pass.ExtractMulticore
      Futhark.Pass.FirstOrderTransform
      Futhark.Pass.LiftAllocations
      Futhark.Pass.LowerAllocations
      Futhark.Pass.Simplify
      Futhark.Passes
      Futhark.Pipeline
      Futhark.Pkg.Info
      Futhark.Pkg.Solve
      Futhark.Pkg.Types
      Futhark.Profile
      Futhark.Script
      Futhark.Test
      Futhark.Test.Spec
      Futhark.Test.Values
      Futhark.Tools
      Futhark.Transform.CopyPropagate
      Futhark.Transform.FirstOrderTransform
      Futhark.Transform.Rename
      Futhark.Transform.Substitute
      Futhark.Util
      Futhark.Util.CMath
      Futhark.Util.IntegralExp
      Futhark.Util.Loc
      Futhark.Util.Log
      Futhark.Util.Options
      Futhark.Util.Pretty
      Futhark.Util.ProgressBar
      Futhark.Util.Table
      Futhark.Version
      Language.Futhark
      Language.Futhark.Core
      Language.Futhark.Interpreter
      Language.Futhark.Interpreter.Values
      Language.Futhark.FreeVars
      Language.Futhark.Parser
      Language.Futhark.Parser.Monad
      Language.Futhark.Parser.Lexer.Tokens
      Language.Futhark.Parser.Lexer.Wrapper
      Language.Futhark.Prelude
      Language.Futhark.Pretty
      Language.Futhark.Primitive
      Language.Futhark.Primitive.Parse
      Language.Futhark.Prop
      Language.Futhark.Query
      Language.Futhark.Semantic
      Language.Futhark.Syntax
      Language.Futhark.Traversals
      Language.Futhark.Tuple
      Language.Futhark.TypeChecker
      Language.Futhark.TypeChecker.Consumption
      Language.Futhark.TypeChecker.Names
      Language.Futhark.TypeChecker.Match
      Language.Futhark.TypeChecker.Modules
      Language.Futhark.TypeChecker.Monad
      Language.Futhark.TypeChecker.Terms
      Language.Futhark.TypeChecker.Terms.Loop
      Language.Futhark.TypeChecker.Terms.Monad
      Language.Futhark.TypeChecker.Terms.Pat
      Language.Futhark.TypeChecker.Types
      Language.Futhark.TypeChecker.Unify
      Language.Futhark.Warnings
  other-modules:
      Language.Futhark.Parser.Parser
      Language.Futhark.Parser.Lexer
      Paths_futhark
  autogen-modules:
      Paths_futhark
  build-tool-depends:
      alex:alex
    , happy:happy
  build-depends:
      aeson >=2.0.0.0
    , ansi-terminal >=0.6.3.1
    , array >=0.4
    , base >=4.15 && <5
    , base16-bytestring
    , binary >=0.8.3
    , blaze-html >=0.9.0.1
    , bytestring >=0.11.2
    , bytestring-to-vector >=0.3.0.1
    , bmp >=1.2.6.3
    , co-log-core
    , containers >=0.6.2.1
    , cryptohash-md5
    , Diff >=0.4.1
    , directory >=1.3.0.0
    , directory-tree >=0.12.1
    , dlist >=0.6.0.1
    , fgl
    , fgl-visualize
    , file-embed >=0.0.14.0
    , filepath >=1.4.1.1
    , free >=5.1.10
    , futhark-data >= 1.1.0.0
    , futhark-server >= 1.2.2.1
    , futhark-manifest >= 1.4.0.0
    , githash >=0.1.6.1
    , half >= 0.3
    , haskeline
    , language-c-quote >= 0.12
    , lens
    , lsp >= 2.2.0.0
    , lsp-types >= 2.0.1.0
    , mainland-pretty >=0.7.1
    , cmark-gfm >=0.2.1
    , megaparsec >=9.0.0
    , mtl >=2.2.1
    , neat-interpolation >=0.3
    , parallel >=3.2.1.0
    , random >= 1.2.0
    , process-extras >=0.7.2
    , regex-tdfa >=1.2
    , srcloc >=0.4
    , template-haskell >=2.11.1
    , temporary
    , terminal-size >=0.3
    , text >=1.2.2.2
    , time >=1.6.0.1
    , transformers >=0.3
    , vector >=0.12
    , versions >=6.0.0
    , zlib >=0.7.0.0
    , statistics
    , mwc-random
    , prettyprinter >= 1.7
    , prettyprinter-ansi-terminal >= 1.1

executable futhark
  import: common
  main-is: src/main.hs
  ghc-options: -threaded -rtsopts "-with-rtsopts=-maxN16 -qg1 -A16M"
  build-depends: base, futhark

test-suite unit
  import: common
  type: exitcode-stdio-1.0
  main-is: futhark_tests.hs
  hs-source-dirs: unittests
  other-modules:
      Futhark.AD.DerivativesTests
      Futhark.Analysis.AlgSimplifyTests
      Futhark.Analysis.PrimExp.TableTests
      Futhark.BenchTests
      Futhark.IR.GPUTests
      Futhark.IR.MCTests
      Futhark.IR.Mem.IntervalTests
      Futhark.IR.Mem.IxFun.Alg
      Futhark.IR.Mem.IxFunTests
      Futhark.IR.Mem.IxFunWrapper
      Futhark.IR.Prop.RearrangeTests
      Futhark.IR.Prop.ReshapeTests
      Futhark.IR.PropTests
      Futhark.IR.Syntax.CoreTests
      Futhark.IR.SyntaxTests
      Futhark.Internalise.TypesValuesTests
      Futhark.Optimise.MemoryBlockMerging.GreedyColoringTests
      Futhark.Optimise.ArrayLayout.AnalyseTests
      Futhark.Optimise.ArrayLayout.LayoutTests
      Futhark.Optimise.ArrayLayoutTests
      Futhark.Pkg.SolveTests
      Futhark.ProfileTests
      Language.Futhark.CoreTests
      Language.Futhark.PrimitiveTests
      Language.Futhark.SemanticTests
      Language.Futhark.SyntaxTests
      Language.Futhark.TypeChecker.TypesTests
      Language.Futhark.TypeCheckerTests
      Paths_futhark
  build-depends:
      QuickCheck >=2.8
      , mtl >=2.2.1
    , base
    , containers
    , free
    , futhark
    , megaparsec
    , tasty
    , tasty-hunit
    , tasty-quickcheck
    , text