cabal-version: 3.0 name: brush-strokes version: 0.1.0.0 synopsis: Stroking brush paths category: Calligraphy, Geometry, Graphics license: BSD-3-Clause homepage: https://gitlab.com/sheaf/MetaBrush build-type: Simple description: Computing brush strokes using Bézier curves. extra-source-files: cbits/**/*.{S,c,h,cpp,hpp} flag use-simd description: Use SIMD instructions to implement interval arithmetic. default: False manual: True flag use-fma description: Use fused-muliply add instructions to implement interval arithmetic. default: False manual: True flag asserts description: Enable debugging assertions. default: False manual: True common common build-depends: base >= 4.17 && < 5.0 , code-page ^>= 0.2.1 , containers >= 0.6.0.1 && < 0.8 , deepseq >= 1.4.4.0 && < 1.6 , tree-view ^>= 0.5 default-extensions: BangPatterns BlockArguments ConstraintKinds DataKinds DeriveAnyClass DeriveTraversable DeriveGeneric DerivingVia FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralisedNewtypeDeriving InstanceSigs LambdaCase LexicalNegation MagicHash MultiWayIf NamedFieldPuns NoStarIsType PatternSynonyms RankNTypes RecordWildCards RoleAnnotations StandaloneDeriving StandaloneKindSignatures TupleSections TypeApplications TypeFamilyDependencies TypeOperators UnboxedTuples ViewPatterns if impl(ghc >= 9.8) default-extensions: TypeAbstractions ghc-options: -O2 -fexpose-all-unfoldings -- -funfolding-use-threshold=1000 -fspecialise-aggressively -flate-dmd-anal -fmax-worker-args=200 -optc-O3 -Wall -Wcompat -fwarn-missing-local-signatures -fwarn-incomplete-patterns -fwarn-incomplete-uni-patterns -fwarn-missing-deriving-strategies -fno-warn-unticked-promoted-constructors if flag(use-fma) cpp-options: -DUSE_FMA ghc-options: -mfma build-depends: base >= 4.19 if flag(use-simd) cpp-options: -DUSE_SIMD ghc-options: -mavx if flag(asserts) cpp-options: -DASSERTS common extra build-depends: acts ^>= 0.3.1.0 , generic-lens >= 2.2 && < 2.3 , groups ^>= 0.5.3 library import: common, extra hs-source-dirs: src/lib default-language: Haskell2010 exposed-modules: Calligraphy.Brushes , Math.Algebra.Dual , Math.Bezier.Cubic , Math.Bezier.Cubic.Fit , Math.Bezier.Quadratic , Math.Bezier.Spline , Math.Bezier.Stroke , Math.Bezier.Stroke.EnvelopeEquation , Math.Differentiable , Math.Epsilon , Math.Float.Utils , Math.Interval , Math.Linear , Math.Linear.Solve , Math.Module , Math.Monomial , Math.Orientation , Math.Ring , Math.Roots , Math.Root.Isolation , Math.Root.Isolation.Bisection , Math.Root.Isolation.Core , Math.Root.Isolation.Degree , Math.Root.Isolation.Narrowing , Math.Root.Isolation.Newton , Math.Root.Isolation.Newton.GaussSeidel , Math.Root.Isolation.Newton.LP , Math.Root.Isolation.Utils , Debug.Utils other-modules: Math.Algebra.Dual.Internal , Math.Interval.Internal , Math.Linear.Internal , Math.Module.Internal , TH.Utils if flag(use-simd) other-modules: Math.Interval.Internal.SIMD build-depends: simd-interval , ghc-prim >= 0.11 if flag(use-fma) && !flag(use-simd) other-modules: Math.Interval.Internal.FMA if !flag(use-fma) && !flag(use-simd) other-modules: Math.Interval.Internal.RoundedHW build-depends: template-haskell >= 2.18 && < 3.0 , bifunctors >= 5.5.4 && < 5.7 , directory >= 1.3.7.1 && < 1.4 , eigen ^>= 3.3.7.0 , filepath >= 1.4 && < 1.6 , fp-ieee ^>= 0.1.0.4 , groups-generic ^>= 0.3.1.0 , parallel ^>= 3.2.2.0 , primitive ^>= 0.9.0.0 , rounded-hw ^>= 0.4 , time >= 1.12.2 && < 1.15 , transformers >= 0.5.6.2 && < 0.7 include-dirs: cbits c-sources: -- C code for: setting the rounding mode cbits/rounding.c cxx-sources: -- Walter's C++ code for 2D linear systems of interval equations cbits/lp_2d.cpp cxx-options: -std=c++20 -mavx2 -mfma -frounding-math -ffp-contract=off -fno-math-errno -fno-signed-zeros -fno-trapping-math -Wno-unused-result -Wno-sign-compare -Wno-switch -march=native -mtune=native -O3 -DNDEBUG build-depends: system-cxx-std-lib -- Separate library to implement interval arithmetic using SIMD, -- to work around TH linking bugs: -- -- - https://gitlab.haskell.org/ghc/ghc/-/issues/25240 -- - https://github.com/haskell/cabal/issues/5623 library simd-interval import: common hs-source-dirs: src/simd-interval exposed-modules: Math.Interval.Internal.SIMD.Internal include-dirs: cbits asm-sources: -- X86 assembly for interval multiplication using SIMD instructions cbits/mul.S build-depends: base >= 4.20 -- 4.21 , deepseq , ghc-prim >= 0.11 --executable convert-metafont -- -- import: -- common -- -- hs-source-dirs: -- src/metafont -- -- default-language: -- Haskell2010 -- -- main-is: -- Main.hs -- -- other-modules: -- Calligraphy.MetaFont.Convert -- -- build-depends: -- diagrams-contrib, -- diagrams-lib, -- linear, -- parsec executable inspect import: common, extra hs-source-dirs: src/cusps/inspect default-language: Haskell2010 main-is: Main.hs other-modules: Math.Interval.Abstract build-depends: brush-strokes , data-reify ^>= 0.6.3 test-suite tests import: common type: exitcode-stdio-1.0 hs-source-dirs: src/test default-language: Haskell2010 main-is: Main.hs build-depends: brush-strokes , falsify ^>= 0.2 , hspray ^>= 0.1.3 , tasty ^>= 1.5 , unordered-containers >= 0.2.15 && < 0.3 benchmark cusps import: common hs-source-dirs: src/cusps/bench main-is: Main.hs other-modules: Bench.Types Bench.Cases build-depends: brush-strokes , deepseq type: exitcode-stdio-1.0 default-language: Haskell2010 ghc-options: -threaded -rtsopts