mirror of
https://gitlab.com/sheaf/metabrush.git
synced 2024-11-05 14:53:37 +00:00
374 lines
7.2 KiB
Plaintext
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
|