refactor(grfn/xanthous): avoid unnecessary recompilation

hpack is a bit dumb when generating the list of modules for a cabal
file's component if multiple of them live in the same directory.
Specifically it seems to assume that all modules in the source-dirs
of a particular component are also necessary for its compilation.

This is quite bad in the case of xanthous since both library and
executable have source-dirs: src, so all modules will be compiled
twice: Once for the library and then again for the executable
despite it depending on the library (actually 4 times in total
since we need to build a unprofiled and profiled object for each
module…).

To fix this we just move Main.hs into its own directory and change
the executable's source-dirs, so hpack doesn't get confused anymore.
Since all components now have their own source-dirs, unnecessary
redundant compilation should be down to 0. The diff of the cabal
file shows quite nicely how many module recompilation we've gotten
rid of.

Change-Id: I2df4fab9b0299b3a2b5d3005508c79b2d9796039
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3533
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
Reviewed-by: grfn <grfn@gws.fyi>
This commit is contained in:
sterni 2021-09-11 16:23:38 +02:00
parent a63057414d
commit 2f750e4a14
3 changed files with 3 additions and 61 deletions

View file

@ -116,7 +116,7 @@ library:
source-dirs: src
executable:
source-dirs: src
source-dirs: app
main: Main.hs
dependencies:
- xanthous

View file

@ -4,7 +4,7 @@ cabal-version: 1.12
--
-- see: https://github.com/sol/hpack
--
-- hash: 761fd1d1a9f9f9fdf8e14e56922558f7968401c879dcb95ca697dab03d1e9eec
-- hash: c12ae4038a2e1f287de557b72b8493da05ccbf428e7ac7862349c46d241f342f
name: xanthous
version: 0.1.0.0
@ -29,7 +29,6 @@ source-repository head
library
exposed-modules:
Data.Aeson.Generic.DerivingVia
Main
Xanthous.AI.Gormlak
Xanthous.App
Xanthous.App.Autocommands
@ -188,66 +187,9 @@ library
executable xanthous
main-is: Main.hs
other-modules:
Data.Aeson.Generic.DerivingVia
Xanthous.AI.Gormlak
Xanthous.App
Xanthous.App.Autocommands
Xanthous.App.Common
Xanthous.App.Prompt
Xanthous.App.Time
Xanthous.Command
Xanthous.Data
Xanthous.Data.App
Xanthous.Data.Entities
Xanthous.Data.EntityChar
Xanthous.Data.EntityMap
Xanthous.Data.EntityMap.Graphics
Xanthous.Data.Levels
Xanthous.Data.Memo
Xanthous.Data.NestedMap
Xanthous.Data.VectorBag
Xanthous.Entities.Character
Xanthous.Entities.Creature
Xanthous.Entities.Creature.Hippocampus
Xanthous.Entities.Draw.Util
Xanthous.Entities.Entities
Xanthous.Entities.Environment
Xanthous.Entities.Item
Xanthous.Entities.Marker
Xanthous.Entities.Raws
Xanthous.Entities.RawTypes
Xanthous.Game
Xanthous.Game.Arbitrary
Xanthous.Game.Draw
Xanthous.Game.Env
Xanthous.Game.Lenses
Xanthous.Game.Memo
Xanthous.Game.Prompt
Xanthous.Game.State
Xanthous.Generators.Level
Xanthous.Generators.Level.CaveAutomata
Xanthous.Generators.Level.Dungeon
Xanthous.Generators.Level.LevelContents
Xanthous.Generators.Level.Util
Xanthous.Generators.Level.Village
Xanthous.Generators.Speech
Xanthous.Messages
Xanthous.Messages.Template
Xanthous.Monad
Xanthous.Orphans
Xanthous.Prelude
Xanthous.Random
Xanthous.Util
Xanthous.Util.Comonad
Xanthous.Util.Graph
Xanthous.Util.Graphics
Xanthous.Util.Inflection
Xanthous.Util.JSON
Xanthous.Util.Optparse
Xanthous.Util.QuickCheck
Paths_xanthous
hs-source-dirs:
src
app
default-extensions:
BlockArguments
ConstraintKinds