cabal-version:         2.4

name:                  helpa
version:               0.4.6.0

synopsis:              HELPA - Heavenly Esoteric Little Portable Assembler to esoteric languages
description:           Please see the README on GitHub at <https://github.com/helvm/helpa#readme>
homepage:              http://helvm.org/helpa/
bug-reports:           https://github.com/helvm/helpa/issues

license:               Apache-2.0
license-file:          docs/license/LICENSE-APACHE
author:                Kamil Adam
maintainer:            kamil.adam.zabinski@gmail.com
copyright:             2020-2024 WriteOnly Developers

category:              Language
build-type:            Simple
extra-source-files:
  docs/developers/CHANGELOG.md
  docs/README.md

tested-with:           GHC == 9.8.1

source-repository head
  type:                git
  location:            https://github.com/helvm/helpa

flag ghcoptions
  description:         compile with options
  manual:              True
  default:             False

common common-options
  build-depends:
      base                 <  4.19
    , relude               == 1.1.0.0
  mixins:
      base hiding (Prelude)
    , relude (Relude as Prelude, Relude.Extra, Data.Text)
  default-language:    Haskell2010
  default-extensions:
    EmptyDataDecls
    ExistentialQuantification
    FlexibleContexts
    FlexibleInstances
    FunctionalDependencies
    GADTs
    GeneralizedNewtypeDeriving
    InstanceSigs
    KindSignatures
    LambdaCase
    MultiParamTypeClasses
    MultiWayIf
    NamedFieldPuns
--    NoImplicitPrelude
    OverloadedStrings
    PartialTypeSignatures
    PatternGuards
    PolyKinds
    RankNTypes
    RecordWildCards
    ScopedTypeVariables
    StandaloneDeriving
    TupleSections
    TypeFamilies
    TypeSynonymInstances
    ViewPatterns
--    CPP
--    TemplateHaskell
--    ForeignFunctionInterface
--    MagicHash
--    UnliftedFFITypes
    TypeOperators
--    UnboxedTuples
--    PackageImports
--    QuasiQuotes
--    DeriveAnyClass
--    DeriveLift
--    StaticPointers
    DerivingStrategies
    ConstraintKinds
    StrictData
  if flag(ghcoptions)
    ghc-options:
      -Wall
      -Wcompat
      -Widentities
      -Wincomplete-uni-patterns
      -Wincomplete-record-updates
      -Wredundant-constraints
      -Wnoncanonical-monad-instances
      -fhide-source-paths
--    -Wmissing-export-lists FIXME
      -Wpartial-fields
      -Wmissing-deriving-strategies
      -fwrite-ide-info
      -hiedir=.hie
      -Wunused-packages
      -fprint-potential-instances
      -Werror

library
  import:              common-options
  hs-source-dirs:      hs/src
  exposed-modules:
    HelVM.HelPA.Assembler.AsmParserExtra
    HelVM.HelPA.Assembler.Extra
    HelVM.HelPA.Assembler.Value

    HelVM.HelPA.Assembler.API.Separator
    HelVM.HelPA.Assembler.API.SourcePath

    HelVM.HelPA.Assembler.IO.BusinessIO

    HelVM.HelPA.Assemblers.Backend.ASQ.API.AssemblyOptions
    HelVM.HelPA.Assemblers.Backend.ASQ.API.QuestionMark
    HelVM.HelPA.Assemblers.Backend.ASQ.API.Version

    HelVM.HelPA.Assemblers.Backend.ASQ.Assembler

    HelVM.HelPA.Assemblers.Backend.ASQ.Eigenratios.AsmParser
    HelVM.HelPA.Assemblers.Backend.ASQ.Eigenratios.Assembler
    HelVM.HelPA.Assemblers.Backend.ASQ.Eigenratios.Instruction
    HelVM.HelPA.Assemblers.Backend.ASQ.Eigenratios.Reducer

    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.AsmParser
    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.Assembler
    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.Instruction
    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.Line
    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.Reducer
    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.Reducers.ExpressionReducer
    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.Reducers.InstructionReducer
    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.Reducers.ItemReducer
    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.Reducers.LabelReducer
    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.Reducers.QuestionMarkReducer

    HelVM.HelPA.Assemblers.Backend.ASQ.Util.AsmParser
    HelVM.HelPA.Assemblers.Backend.ASQ.Util.CodeGenerator

    HelVM.HelPA.Assemblers.Backend.EAS.AsmParser
    HelVM.HelPA.Assemblers.Backend.EAS.Assembler
    HelVM.HelPA.Assemblers.Backend.EAS.CodeGenerator
    HelVM.HelPA.Assemblers.Backend.EAS.Instruction
    HelVM.HelPA.Assemblers.Backend.EAS.Linker
    HelVM.HelPA.Assemblers.Backend.EAS.Reducer

    HelVM.HelPA.Assemblers.Backend.WSA.API.TokenType

    HelVM.HelPA.Assemblers.Backend.WSA.AssemblyOptions
    HelVM.HelPA.Assemblers.Backend.WSA.CodeGenerator
    HelVM.HelPA.Assemblers.Backend.WSA.DSL
    HelVM.HelPA.Assemblers.Backend.WSA.ExtendInstruction
    HelVM.HelPA.Assemblers.Backend.WSA.Instruction
    HelVM.HelPA.Assemblers.Backend.WSA.Token

    HelVM.HelPA.Assemblers.Common.DSL

    HelVM.HelPA.Assemblers.Frontend.EIR.AsmParser
    HelVM.HelPA.Assemblers.Frontend.EIR.DSL
    HelVM.HelPA.Assemblers.Frontend.EIR.Instruction

    HelVM.HelPA.Assemblers.Frontend.WSA.AsmParser
    HelVM.HelPA.Assemblers.Frontend.WSA.Assembler
    HelVM.HelPA.Assemblers.Frontend.WSA.CodeGenerator
    HelVM.HelPA.Assemblers.Frontend.WSA.Instruction
    HelVM.HelPA.Assemblers.Frontend.WSA.Linker
    HelVM.HelPA.Assemblers.Frontend.WSA.Reducer

  build-depends:
      helio
    , attoparsec           <  0.14.4
    , containers           <  0.7
    , filepath
    , ListLike
    , mtl
    , split
    , type-operators
  ghc-options:

executable helpa
  import:              common-options
  hs-source-dirs:      hs/app
  main-is:             Main.hs
  other-modules:
    AppOptions
    Lang
  build-depends:
      helio
    , helpa
    , optparse-applicative >= 0.14.3.0
  ghc-options:
    -threaded
    -rtsopts
    -with-rtsopts=-N

test-suite helpa-test
  import:              common-options
  type:                exitcode-stdio-1.0
  hs-source-dirs:      hs/test
  main-is:             Main.hs
  other-modules:
    Spec

    HelVM.Expectations
    HelVM.GoldenExpectations

    HelVM.HelPA.Assemblers.Backend.ASQ.AssemblyOptionsExtra
    HelVM.HelPA.Assemblers.Backend.ASQ.FileExtra

    HelVM.HelPA.Assemblers.Backend.ASQ.Eigenratios.AsmParserSpec
    HelVM.HelPA.Assemblers.Backend.ASQ.Eigenratios.AssemblerSpec

    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.AsmParserSpec
    HelVM.HelPA.Assemblers.Backend.ASQ.EsoLangs.AssemblerSpec

    HelVM.HelPA.Assemblers.Backend.EAS.AsmParserSpec
    HelVM.HelPA.Assemblers.Backend.EAS.AssemblerSpec
    HelVM.HelPA.Assemblers.Backend.EAS.CodeGeneratorSpec
    HelVM.HelPA.Assemblers.Backend.EAS.FileExtra
    HelVM.HelPA.Assemblers.Backend.EAS.LinkerSpec
    HelVM.HelPA.Assemblers.Backend.EAS.TestData
    HelVM.HelPA.Assemblers.Backend.EAS.ReducerSpec

    HelVM.HelPA.Assemblers.Backend.WSA.AssemblyOptionsExtra

    HelVM.HelPA.Assemblers.Frontend.EIR.AsmParserSpec
    HelVM.HelPA.Assemblers.Frontend.EIR.FileExtra

    HelVM.HelPA.Assemblers.Frontend.WSA.AsmParserSpec
    HelVM.HelPA.Assemblers.Frontend.WSA.AssemblerSpec
    HelVM.HelPA.Assemblers.Frontend.WSA.CodeGeneratorSpec
    HelVM.HelPA.Assemblers.Frontend.WSA.FileExtra
    HelVM.HelPA.Assemblers.Frontend.WSA.LinkerSpec
    HelVM.HelPA.Assemblers.Frontend.WSA.ReducerSpec
    HelVM.HelPA.Assemblers.Frontend.WSA.TestData
    HelVM.HelPA.Assemblers.Frontend.WSA.TestDataReduced

  build-depends:
      hspec
    , hspec-core
    , hspec-expectations-pretty-diff
    , hspec-golden
    , hspec-slow

    , helio
    , helpa

    , filepath
    , type-operators

  build-tool-depends:  hspec-discover:hspec-discover == 2.*
  ghc-options:
    -threaded
    -rtsopts
    -with-rtsopts=-N

benchmark helpa-benchmark
  import:              common-options
  type:                exitcode-stdio-1.0
  hs-source-dirs:      hs/benchmark
  main-is:             Main.hs
  build-depends:
      gauge
--    , helpa

  ghc-options:
    -threaded
    -rtsopts
    -with-rtsopts=-N
