    {-|
    Copyright  :  (C) 2019     , Myrtle Software Ltd,
                      2023     , QBayLogic B.V.,
    License    :  BSD2 (see the file LICENSE)
    Maintainer :  QBayLogic B.V. <devops@qbaylogic.com>
    -}

    {-# LANGUAGE CPP #-}

    {-# OPTIONS_HADDOCK hide #-}

    module Clash.CPP
     ( maxTupleSize
     , haddockOnly

     -- ** Cabal flags
     , fSuperStrict
     , fStrictMapSignal
     ) where

    #ifndef MAX_TUPLE_SIZE
    #ifdef LARGE_TUPLES

    #if MIN_VERSION_ghc(9,0,0)
    import GHC.Settings.Constants (mAX_TUPLE_SIZE)
    #else
    import Constants (mAX_TUPLE_SIZE)
    #endif
    #define MAX_TUPLE_SIZE (fromIntegral mAX_TUPLE_SIZE)

    #else
    #ifdef HADDOCK_ONLY
    #define MAX_TUPLE_SIZE 3
    #else
    #define MAX_TUPLE_SIZE 12
    #endif
    #endif
    #endif

    maxTupleSize :: Num a => a
    maxTupleSize :: forall a. Num a => a
    maxTupleSize = MAX_TUPLE_SIZE

    haddockOnly :: Bool
    #ifdef HADDOCK_ONLY
    haddockOnly = True
    #else
    haddockOnly :: Bool
    haddockOnly = Bool
    False
    #endif

    -- | Whether clash-prelude was compiled with -fsuper-strict
    fSuperStrict :: Bool
    #ifdef CLASH_SUPER_STRICT
    fSuperStrict = True
    #else
    fSuperStrict :: Bool
    fSuperStrict = Bool
    False
    #endif
    {-# INLINE fSuperStrict #-}

    -- | Whether clash-prelude was compiled with -fstrict-mapSignal
    fStrictMapSignal :: Bool
    #ifdef CLASH_STRICT_MAPSIGNAL
    fStrictMapSignal = True
    #else
    fStrictMapSignal :: Bool
    fStrictMapSignal = Bool
    False
    #endif
    {-# INLINE fStrictMapSignal #-}