+# 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
+ hdrs+= jtag.h
+ 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
+ hdrs+= jtag430.h
+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
+ hdrs+= jtag.h
+ endif
+ # add in the jtag430asm code if needed
+ ifneq ($(filter jtag430asm.o, $(libs)), jtag430asm.o)
+ libs+= apps/jtag/jtag430asm.o
+ endif
+ #add in the jtag430 app if not already
+ ifneq ($(filter apps/jtag/jtag430.o, $(apps)), apps/jtag/jtag430.0)
+ apps+= apps/jtag/jtag430.o
+ hdrs+= jtag430.h
+ endif
+ apps+= apps/jtag/jtag430x2.o
+ hdrs+= jtag430x2.h
+endif
+
+# include i2c app
+ifeq ($(filter i2c, $(config)), i2c)
+ apps+= apps/i2c/i2c.o
+ hdrs+= i2c.h
+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
+ hdrs+= jtag.h
+ endif
+ apps+= apps/jtag/jtagarm7.o
+ hdrs+= jtagarm7.h
+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
+ #hdrs+= jtag.h
+ #endif
+ #apps+= apps/jtag/jtagarm7tdmi.o
+ #hdrs+= jtagarm7tdmi.h
+#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
+ hdrs+= jtag.h
+ endif
+ apps+= apps/jtag/ejtag.o
+ hdrs+= ejtag.h
+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
+ hdrs+= jtag.h
+ endif
+ apps+= apps/jtag/jtagxscale.o
+ hdrs+= jtagxscale.h
+endif
+
+# include openocd app
+ifeq ($(filter openocd, $(config)), openocd)
+ # add in base jtag code if not already
+ ifneq ($(filter apps/jtag/jtag.o, $(apps)), apps/jtag/jtag.o)
+ apps+= apps/jtag/jtag.o
+ hdrs+= jtag.h
+ endif
+ apps+= apps/jtag/openocd.o
+ hdrs+= openocd.h
+endif
+
+# include chipcon app
+ifeq ($(filter chipcon, $(config)), chipcon)
+ apps+= apps/chipcon/chipcon.o
+ hdrs+= chipcon.h
+endif
+
+# include avr app
+ifeq ($(filter avr, $(config)), avr)
+ apps+= apps/avr/avr.o
+ hdrs+= avr.h
+endif
+
+# include pic app
+ifeq ($(filter pic, $(config)), pic)
+ apps+= apps/pic/pic.o
+ hdrs+= pic.h
+endif
+
+# include adc app
+ifeq ($(filter adc, $(config)), adc)
+ ifeq ($(mcu), msp430f2274)
+ apps+= apps/adc/adc.o
+ hdrs+= adc.h
+ else
+ ERR= $(error The ADC app only works on GoodFET boards with the msp430x2274 processor)
+ endif
+endif
+
+# include chipcon radio spi app
+ifeq ($(filter ccspi, $(config)), ccspi)
+ apps+= apps/radios/ccspi.o
+ hdrs+= ccspi.h
+endif
+
+# include nrf app
+ifeq ($(filter nrf, $(config)), nrf)
+ apps+= apps/radios/nrf.o
+ hdrs+= nrf.h
+endif
+
+# include glitch app
+ifeq ($(filter glitch, $(config)), glitch)
+ apps+= apps/glitch/glitch.o
+ hdrs+= glitch.h
+endif
+
+# include smartcard app
+ifeq ($(filter smartcard, $(config)), smartcard)
+ apps+= apps/smartcard/smartcard.o
+ hdrs+= smartcard.h
+endif
+
+# include ps2 app
+ifeq ($(filter ps2, $(config)), ps2)
+ apps+= apps/plugins/ps2.o
+ hdrs+= ps2.h
+endif
+
+# include jscan app
+ifeq ($(filter jscan, $(config)), jscan)
+ apps+= apps/jscan/jscan.o
+ hdrs+= jscan.h
+endif
+
+# Rules
+
+app= goodfet