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)