avr-shake-0.0.1.0: src/Development/Shake/AVR.hs
module Development.Shake.AVR
( avr_gcc, avr_gcc'
, avr_ld, avr_ld'
, avr_objcopy, avr_objcopy'
, avr_objdump, avr_objdump'
, avr_size, avr_size'
, avrdude, avrdude'
, AVRDUDE.MemType(..)
, AVRDUDE.Dir(..)
, AVRDUDE.Op(..)
, AVRDUDE.Format(..)
, AVRDUDE.ActionsM
, AVRDUDE.Actions
, AVRDUDE.action
, AVRDUDE.r, AVRDUDE.v, AVRDUDE.w, AVRDUDE.imm
) where
import Development.Shake
import qualified System.Command.AVRDUDE as AVRDUDE
gccDeps cc cFlags src = do
Stdout cppOut <- command [Traced ""] cc (cFlags ++ ["-M", "-MG", "-E", src])
return (filter (/= "\\") (drop 2 (words cppOut)))
avr_gcc = avr_gcc' "avr-gcc"
avr_gcc' cc cFlags src out = do
need [src]
need =<< gccDeps cc cFlags src
command_ [] cc (cFlags ++ ["-c", src, "-o", out])
avr_ld = avr_ld' "avr-ld"
avr_ld' ld ldFlags objs out = do
need objs
command_ [] ld (ldFlags ++ ["-o", out] ++ objs)
avr_objcopy = avr_objcopy' "avr-objcopy"
avr_objcopy' objcopy fmt flags src out = do
need [src]
command_ [] objcopy (flags ++ ["-O", fmt, src, out])
avr_objdump = avr_objdump' "avr-objdump"
avr_objdump' objdump src out = do
need [src]
Stdout lss <- command [] objdump ["-h", "-S", src]
writeFileChanged out lss
avr_size = avr_size' "avr-size"
avr_size' avrsizeBin src = do
need [src]
Stdout lss <- command [] avrsizeBin [src]
putNormal lss
avrdude = avrdude' "avrdude"
avrdude' avrdudeBin mcu opts actions = do
alwaysRerun
need (fst (AVRDUDE.actionFiles actions))
command_ [] avrdudeBin (["-p", mcu] ++ opts ++ AVRDUDE.encodeActions actions)