+# include base jtag if they specified it explicitly
+ifeq ($(filter jtag, $(config)), jtag)
+ ifneq ($(filter apps/jtag/jtag.o, $(apps)), apps/jtag/jtag.o)
+ apps+= apps/jtag/jtag.o
+ endif
+endif
+
+# include the sbw defs if they specified it
+ifeq ($(filter sbw, $(config)), sbw)
+ # if they only specify sbw, include jtag
+ ifneq ($(filter apps/jtag/jtag.o, $(apps)), apps/jtag/jtag.o)
+ apps+= apps/jtag/jtag.o
+ endif
+ apps+= apps/jtag/sbw.o
+endif
+
+# include jtag430 app
+ifeq ($(filter jtag430, $(config)), jtag430)
+ # add in base jtag code if not already
+ ifneq ($(filter apps/jtag/jtag.o, $(apps)), apps/jtag/jtag.o)
+ apps+= apps/jtag/jtag.o
+ endif
+ # add in the jtag430asm code if needed
+ ifneq ($(filter apps/jtag/jtag430asm.o, $(libs)), apps/jtag/jtag430asm.o)
+ apps+= apps/jtag/jtag430asm.o
+ endif
+ apps+= apps/jtag/jtag430.o
+endif
+
+# include jtag430x2 app
+ifeq ($(filter jtag430x2, $(config)), jtag430x2)
+ # add in base jtag code if not already
+ ifneq ($(filter apps/jtag/jtag.o, $(apps)), apps/jtag/jtag.o)
+ apps+= apps/jtag/jtag.o
+ endif
+ # add in the jtag430asm code if needed
+ ifneq ($(filter jtag430asm.o, $(libs)), jtag430asm.o)
+ libs+= apps/jtag/jtag430asm.o
+ endif
+ apps+= apps/jtag/jtag430x2.o
+endif
+
+# include i2c app
+ifeq ($(filter i2c, $(config)), i2c)
+ apps+= apps/i2c/i2c.o
+endif
+
+# include jtagarm7 app
+ifeq ($(filter jtagarm7, $(config)), jtagarm7)
+ # add in base jtag code if not already
+ ifneq ($(filter apps/jtag/jtag.o, $(apps)), apps/jtag/jtag.o)
+ apps+= apps/jtag/jtag.o
+ endif
+ apps+= apps/jtag/jtagarm7.o
+endif
+
+# include jtagarm7tdmi app
+ifeq ($(filter jtagarm7tdmi, $(config)), jtagarm7tdmi)
+ # add in base jtag code if not already
+ ifneq ($(filter apps/jtag/jtag.o, $(apps)), apps/jtag/jtag.o)
+ apps+= apps/jtag/jtag.o
+ endif
+ apps+= apps/jtag/jtagarm7tdmi.o
+endif
+
+# include ejtag app
+ifeq ($(filter ejtag, $(config)), ejtag)
+ # add in base jtag code if not already
+ ifneq ($(filter apps/jtag/jtag.o, $(apps)), apps/jtag/jtag.o)
+ apps+= apps/jtag/jtag.o
+ endif
+ apps+= apps/jtag/ejtag.o
+endif
+
+# include jtagxscale app
+ifeq ($(filter jtagxscale, $(config)), jtagxscale)
+ # add in base jtag code if not already
+ ifneq ($(filter apps/jtag/jtag.o, $(apps)), apps/jtag/jtag.o)
+ apps+= apps/jtag/jtag.o
+ endif
+ apps+= apps/jtag/jtagxscale.o
+endif
+
+# include chipcon app
+ifeq ($(filter chipcon, $(config)), chipcon)
+ apps+= apps/chipcon/chipcon.o
+endif
+
+# include avr app
+ifeq ($(filter avr, $(config)), avr)
+ apps+= apps/avr/avr.o
+endif
+
+# include pic app
+ifeq ($(filter pic, $(config)), pic)
+ apps+= apps/pic/dspic33f.o
+endif
+
+# include adc10 app
+ifeq ($(filter adc, $(config)), adc)
+ ifeq ($(mcu), msp430x2274)
+ apps+= apps/pic/dspic33f.o
+ else
+ ERR= $(error The ADC app only works on GoodFET boards with the msp430x2274 processor)
+.PHONY: err
+err:;$(ERR)
+
+ endif
+endif
+
+# include chipcon radio spi app
+ifeq ($(filter ccspi, $(config)), ccspi)
+ apps+= apps/radios/ccspi.o
+endif
+
+# include nrf app
+ifeq ($(filter nrf, $(config)), nrf)
+ apps+= apps/radios/nrf.o
+endif
+
+# include glitch app
+ifeq ($(filter glitch, $(config)), glitch)
+ apps+= apps/glitch/glitch.o
+endif
+
+# include smartcard app
+ifeq ($(filter smartcard, $(config)), smartcard)
+ apps+= apps/smartcard/smartcard.o
+endif
+
+
+# Rules