module GHC.Driver.Config.HsToCore.Ticks
  ( initTicksConfig
  )
where

import GHC.Prelude

import Data.Maybe (catMaybes)

import GHC.Driver.Backend
import GHC.Driver.Session
import GHC.HsToCore.Ticks

initTicksConfig :: DynFlags -> TicksConfig
initTicksConfig dflags = TicksConfig
  { ticks_passes       = coveragePasses dflags
  , ticks_profAuto     = profAuto dflags
  , ticks_countEntries = gopt Opt_ProfCountEntries dflags
  }

coveragePasses :: DynFlags -> [TickishType]
coveragePasses dflags = catMaybes
  [ ifA Breakpoints $ backendWantsBreakpointTicks $ backend dflags
  , ifA HpcTicks $ gopt Opt_Hpc dflags
  , ifA ProfNotes $ sccProfilingEnabled dflags && profAuto dflags /= NoProfAuto
  , ifA SourceNotes $ needSourceNotes dflags
  ]
  where ifA x cond = if cond then Just x else Nothing