-check_filenames: $(TEMP_MANIFEST_XML)
-       @for i in `xsltproc XSLT/lufa_filelist_transform.xslt $< | grep -v "^<" | sed -e "/^$$/d"`; do \
-               if ( ! test -f "$(LUFA_ROOT)/$$i" ); then \
-                       echo "Source file $$i does not exist!"; \
-               fi; \
+generate_xml: $(EXTENSION_OUTPUT_XML) $(MODULE_OUTPUT_XML)
+
+generate_vsix: $(EXTENSION_OUTPUT_XML) $(MODULE_OUTPUT_XML) $(MSHELP_OUTPUT_XML)
+       @echo Generating XDK cache files...
+       @rm -f $(LUFA_ROOT)/../content.xml.cache
+       @rm -f $(LUFA_ROOT)/../ExampleProjects.xml
+       @python VSIX/generate_caches.py $(LUFA_ROOT)/../
+
+       @echo Archiving XDK content...
+       @rm -f contents.zip
+       @cd $(LUFA_ROOT)/../ && zip contents.zip -q -0 -r --exclude=*Documentation* --exclude=*StudioIntegration* LUFA Bootloaders Demos Projects README.txt
+
+       @echo Creating VSIX dependencies...
+       @cp $(VSIX_ASSETS) $(LUFA_ROOT)/..
+       @xsltproc $(VSIX_GEN_PARAMS) VSIX/lufa_vsmanifest_transform.xslt VSIX/extension.vsixmanifest > $(LUFA_ROOT)/../extension.vsixmanifest
+       @xsltproc $(VSIX_GEN_PARAMS) VSIX/lufa_asfmanifest_transform.xslt VSIX/asf-manifest.xml > $(LUFA_ROOT)/../asf-manifest.xml
+
+       @echo Generating Atmel Studio VSIX file...
+       cd $(LUFA_ROOT)/../ && zip $(EXT_VSIX_NAME) -q -9 contents.zip exampleProjects.xml content.xml.cache extension.vsixmanifest asf-manifest.xml extension.xml helpcontentsetup.msha $(notdir $(MSHELP_OUTPUT_XML)) $(notdir $(VSIX_ASSETS))
+
+       @echo "Atmel Studio VSIX extension file generated."
+
+check_filenames: $(MODULE_OUTPUT_XML)
+       @echo Verifying referenced filenames of XDK modules...
+       @for f in `find $(LUFA_ROOT)/../ -name "asf.xml"`; do \
+               echo "Checking $$f..."; \
+               asf_file_dir=`dirname $$f`; \
+               xsltproc XDK/lufa_filelist_transform.xslt $$f | sed -e "/^$$/d" | while read -r i; do \
+                       if ( ( ! test -f "$$asf_file_dir/$$i" ) && ( ! test -d "$$asf_file_dir/$$i" ) ); then \
+                               echo "Source file \"$$i\" referenced in $$f does not exist!"; \
+                               exit 1; \
+                       fi; \
+               done || exit 1; \