metabrush/brush-strokes/brush-strokes.cabal

374 lines
7.2 KiB
Plaintext

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