emhell-0.1: hgdb/Options.hs
module Options where
import Gdb (Programmer(..))
import Options.Applicative
import qualified EmHell.Options
import qualified EmHell.Parsers
data Options = Options {
optsProg :: Maybe Programmer
, optsFile :: Maybe FilePath
, optsMILog :: Maybe FilePath
, optsSVD :: Maybe FilePath
, optsCwd :: Maybe FilePath
, optsArm :: Bool
, optsEx :: [String]
} deriving Show
parseProgrammer :: Parser Programmer
parseProgrammer =
(BMP <$> strOption
( long "bmp"
<> metavar "DEV"
<> help "Use BlackMagic Probe at DEV"
)
)
<|>
(uncurry BMPHosted <$> option (EmHell.Parsers.hostPort)
( long "bmphosted"
<> metavar "HOST:PORT"
<> help "Use hosted BlackMagic Probe at HOST:PORT"
)
)
<|>
(uncurry RemoteGDB <$> option (EmHell.Parsers.hostPort)
( long "remotegdb"
<> metavar "HOST:PORT"
<> help "Use remote GDB server at HOST:PORT"
)
)
parseOptions :: Parser Options
parseOptions = Options <$>
optional parseProgrammer
<*> optional (strOption $
long "file"
<> metavar "FILE"
<> help "Load FILE to Gdb")
<*> optional (strOption $
long "milog"
<> metavar "FILE"
<> help "Log Gdb/MI session to FILE")
<*> optional EmHell.Options.parseSVD
<*> optional (strOption $
long "cwd"
<> metavar "DIR"
<> help "Change directory prior any operations")
<*> switch (
long "arm"
<> short 'a'
<> help "Use arm-none-eabi-gdb")
<*> many (strOption $
long "ex"
<> short 'e'
<> help "Execute")
runOpts :: IO Options
runOpts =
execParser
$ info
(parseOptions <**> helper)
(fullDesc <> progDesc "hgdb")