]> git.donarmstrong.com Git - qmk_firmware.git/blob - tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt
Merge branch 'master' into coderkun_neo2
[qmk_firmware.git] / tmk_core / protocol / lufa / LUFA-git / LUFA / DoxygenPages / BuildSystem.txt
1 /** \file
2  *
3  *  This file contains special DoxyGen information for the generation of the main page and other special
4  *  documentation pages. It is not a project source file.
5  */
6
7 /** \page Page_BuildSystem The LUFA Build System
8  *
9  *  \section Sec_BuildSystem_Overview Overview of the LUFA Build System
10  *  The LUFA build system is an attempt at making a set of re-usable, modular build make files which
11  *  can be referenced in a LUFA powered project, to minimize the amount of code required in an
12  *  application makefile. The system is written in GNU Make, and each module is independent of
13  *  one-another.
14  *
15  *  For details on the prerequisites needed for Linux and Windows machines to be able to use the LUFA
16  *  build system, see \ref Sec_CompilingApps_Prerequisites.
17  *
18  *  To use a LUFA build system module, simply add an include to your project makefile. All user projects
19  *  should at a minimum include \ref Page_BuildModule_CORE for base functionality:
20  *  \code
21  *  include $(LUFA_PATH)/Build/lufa_core.mk
22  *  \endcode
23  *
24  *  Once included in your project makefile, the associated build module targets will be added to your
25  *  project's build makefile targets automatically. To call a build target, run <tt>make {TARGET_NAME}</tt>
26  *  from the command line, substituting in the appropriate target name.
27  *
28  *  \see \ref Sec_ConfiguringApps_AppMakefileParams for a copy of the sample LUFA project makefile.
29  *
30  *  Each build module may have one or more mandatory parameters (GNU Make variables) which <i>must</i>
31  *  be supplied in the project makefile for the module to work, and one or more optional parameters which
32  *  may be defined and which will assume a sensible default if not.
33  *
34  *  \section SSec_BuildSystem_Modules Available Modules
35  *
36  *  The following modules are included in this LUFA release:
37  *
38  *  \li \subpage Page_BuildModule_ATPROGRAM - Device Programming
39  *  \li \subpage Page_BuildModule_AVRDUDE - Device Programming
40  *  \li \subpage Page_BuildModule_BUILD - Compiling/Assembling/Linking
41  *  \li \subpage Page_BuildModule_CORE - Core Build System Functions
42  *  \li \subpage Page_BuildModule_CPPCHECK - Static Code Analysis
43  *  \li \subpage Page_BuildModule_DFU - Device Programming
44  *  \li \subpage Page_BuildModule_DOXYGEN - Automated Source Code Documentation
45  *  \li \subpage Page_BuildModule_HID - Device Programming
46  *  \li \subpage Page_BuildModule_SOURCES - LUFA Module Source Code Variables
47  *
48  *  If you have problems building using the LUFA build system, see \subpage Page_BuildTroubleshooting for resolution steps.
49  */
50
51  /** \page Page_BuildModule_BUILD The BUILD build module
52  *
53  *  The BUILD LUFA build system module, providing targets for the compilation,
54  *  assembling and linking of an application from source code into binary files
55  *  suitable for programming into a target device, using the GCC compiler.
56  *
57  *  To use this module in your application makefile, add the following code:
58  *  \code
59  *  include $(LUFA_PATH)/Build/lufa_build.mk
60  *  \endcode
61  *
62  *  \section SSec_BuildModule_BUILD_Requirements Requirements
63  *  This module requires the the architecture appropriate binaries of the GCC compiler are available in your
64  *  system's <b>PATH</b> variable. The GCC compiler and associated toolchain is distributed in Atmel AVR Studio
65  *  5.x and Atmel Studio 6.x installation directories, as well as in many third party distribution packages.
66  *
67  *  \section SSec_BuildModule_BUILD_Targets Targets
68  *
69  *  <table>
70  *   <tr>
71  *    <td><tt>size</tt></td>
72  *    <td>Display size of the compiled application FLASH and SRAM segments.</td>
73  *   </tr>
74  *   <tr>
75  *    <td><tt>symbol-sizes</tt></td>
76  *    <td>Display a size-sorted list of symbols from the compiled application, in decimal bytes.</td>
77  *   </tr>
78  *   <tr>
79  *    <td><tt>lib</tt></td>
80  *    <td>Build and archive all source files into a library A binary file.</td>
81  *   </tr>
82  *   <tr>
83  *    <td><tt>all</tt></td>
84  *    <td>Build and link the application into ELF debug and HEX binary files.</td>
85  *   </tr>
86  *   <tr>
87  *    <td><tt>elf</tt></td>
88  *    <td>Build and link the application into an ELF debug file.</td>
89  *   </tr>
90  *   <tr>
91  *    <td><tt>bin</tt></td>
92  *    <td>Build and link the application and produce a BIN binary file.</td>
93  *   </tr>
94  *   <tr>
95  *    <td><tt>hex</tt></td>
96  *    <td>Build and link the application and produce HEX and EEP binary files.</td>
97  *   </tr>
98  *   <tr>
99  *    <td><tt>lss</tt></td>
100  *    <td>Build and link the application and produce a LSS source code/assembly code mixed listing file.</td>
101  *   </tr>
102  *   <tr>
103  *    <td><tt>clean</tt></td>
104  *    <td>Remove all intermediary files and binary output files.</td>
105  *   </tr>
106  *   <tr>
107  *    <td><tt>mostlyclean</tt></td>
108  *    <td>Remove all intermediary files but preserve any binary output files.</td>
109  *   </tr>
110  *   <tr>
111  *    <td><tt><i>&lt;filename&gt;</i>.s</tt></td>
112  *    <td>Create an assembly listing of a given input C/C++ source file.</td>
113  *   </tr>
114  *  </table>
115  *
116  *  \section SSec_BuildModule_BUILD_MandatoryParams Mandatory Parameters
117  *
118  *  <table>
119  *   <tr>
120  *    <td><tt>TARGET</tt></td>
121  *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
122  *   </tr>
123  *   <tr>
124  *    <td><tt>ARCH</tt></td>
125  *    <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>
126  *   </tr>
127  *   <tr>
128  *    <td><tt>MCU</tt></td>
129  *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
130  *   </tr>
131  *   <tr>
132  *    <td><tt>SRC</tt></td>
133  *    <td>List of relative or absolute paths to the application C (.c), C++ (.cpp) and Assembly (.S) source files.</td>
134  *   </tr>
135  *   <tr>
136  *    <td><tt>F_USB</tt></td>
137  *    <td>Speed in Hz of the input clock frequency to the target's USB controller.</td>
138  *   </tr>
139  *   <tr>
140  *    <td><tt>LUFA_PATH</tt></td>
141  *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
142  *   </tr>
143  *  </table>
144  *
145  *  \section SSec_BuildModule_BUILD_OptionalParams Optional Parameters
146  *
147  *  <table>
148  *   <tr>
149  *    <td><tt>BOARD</tt></td>
150  *    <td>LUFA board hardware drivers to use (see \ref Page_DeviceSupport).</td>
151  *   </tr>
152  *   <tr>
153  *    <td><tt>OPTIMIZATION</tt></td>
154  *    <td>Optimization level to use when compiling source files (see GCC manual).</td>
155  *   </tr>
156  *   <tr>
157  *    <td><tt>C_STANDARD</tt></td>
158  *    <td>Version of the C standard to apply when compiling C++ source files (see GCC manual).</td>
159  *   </tr>
160  *   <tr>
161  *    <td><tt>CPP_STANDARD</tt></td>
162  *    <td>Version of the C++ standard to apply when compiling C++ source files (see GCC manual).</td>
163  *   </tr>
164  *   <tr>
165  *    <td><tt>DEBUG_FORMAT</tt></td>
166  *    <td>Format of the debug information to embed in the generated object files (see GCC manual).</td>
167  *   </tr>
168  *   <tr>
169  *    <td><tt>DEBUG_LEVEL</tt></td>
170  *    <td>Level of the debugging information to embed in the generated object files (see GCC manual).</td>
171  *   </tr>
172  *   <tr>
173  *    <td><tt>F_CPU</tt></td>
174  *    <td>Speed of the processor CPU clock, in Hz.</td>
175  *   </tr>
176  *   <tr>
177  *    <td><tt>C_FLAGS</tt></td>
178  *    <td>Flags to pass to the C compiler only, after the automatically generated flags.</td>
179  *   </tr>
180  *   <tr>
181  *    <td><tt>CPP_FLAGS</tt></td>
182  *    <td>Flags to pass to the C++ compiler only, after the automatically generated flags.</td>
183  *   </tr>
184  *   <tr>
185  *    <td><tt>ASM_FLAGS</tt></td>
186  *    <td>Flags to pass to the assembler only, after the automatically generated flags.</td>
187  *   </tr>
188  *   <tr>
189  *    <td><tt>CC_FLAGS</tt></td>
190  *    <td>Common flags to pass to the C/C++ compiler and assembler, after the automatically generated flags.</td>
191  *   </tr>
192  *   <tr>
193  *    <td><tt>COMPILER_PATH</tt></td>
194  *    <td>Directory where the C/C++ toolchain is located, if not available in the system <tt>PATH</tt>.</td>
195  *   </tr>
196  *   <tr>
197  *    <td><tt>LD_FLAGS</tt></td>
198  *    <td>Flags to pass to the linker, after the automatically generated flags.</td>
199  *   </tr>
200  *   <tr>
201  *    <td><tt>LINKER_RELAXATIONS</tt></td>
202  *    <td>Enables or disables linker relaxations when linking the application binary. This can reduce the total size
203  *        of the application by replacing full \c CALL instructions with smaller \c RCALL instructions where possible.
204  *        \note On some unpatched versions of binutils, this can cause link failures in some circumstances. If you
205  *              receive a link error <tt>relocation truncated to fit: R_AVR_13_PCREL</tt>, disable this setting.</td>
206  *   </tr>
207  *   <tr>
208  *    <td><tt>OBJDIR</tt></td>
209  *    <td>Directory to place the generated object and dependency files. If set to "." the same folder as the source file will be used.
210  *        \note When this option is enabled, all source filenames <b>must</b> be unique.</td>
211  *   </tr>
212  *   <tr>
213  *    <td><tt>OBJECT_FILES</tt></td>
214  *    <td>List of additional object files that should be linked into the resulting binary.</td>
215  *   </tr>
216  *  </table>
217  *
218  *  \section SSec_BuildModule_BUILD_ProvidedVariables Module Provided Variables
219  *
220  *  <table>
221  *   <tr>
222  *    <td><i>None</i></td>
223  *   </tr>
224  *  </table>
225  *
226  *  \section SSec_BuildModule_BUILD_ProvidedMacros Module Provided Macros
227  *
228  *  <table>
229  *   <tr>
230  *    <td><i>None</i></td>
231  *   </tr>
232  *  </table>
233  */
234
235 /** \page Page_BuildModule_CORE The CORE build module
236  *
237  *  The core LUFA build system module, providing common build system help and information targets.
238  *
239  *  To use this module in your application makefile, add the following code:
240  *  \code
241  *  include $(LUFA_PATH)/Build/lufa_core.mk
242  *  \endcode
243  *
244  *  \section SSec_BuildModule_CORE_Requirements Requirements
245  *  This module has no requirements outside a standard *nix shell like environment; the <tt>sh</tt>
246  *  shell, GNU <tt>make</tt> and *nix CoreUtils (<tt>echo</tt>, <tt>printf</tt>, etc.).
247  *
248  *  \section SSec_BuildModule_CORE_Targets Targets
249  *
250  *  <table>
251  *   <tr>
252  *    <td><tt>help</tt></td>
253  *    <td>Display build system help and configuration information.</td>
254  *   </tr>
255  *   <tr>
256  *    <td><tt>list_targets</tt></td>
257  *    <td>List all available build targets from the build system.</td>
258  *   </tr>
259  *   <tr>
260  *    <td><tt>list_modules</tt></td>
261  *    <td>List all available build modules from the build system.</td>
262  *   </tr>
263  *   <tr>
264  *    <td><tt>list_mandatory</tt></td>
265  *    <td>List all mandatory parameters required by the included modules.</td>
266  *   </tr>
267  *   <tr>
268  *    <td><tt>list_optional</tt></td>
269  *    <td>List all optional parameters required by the included modules.</td>
270  *   </tr>
271  *   <tr>
272  *    <td><tt>list_provided</tt></td>
273  *    <td>List all variables provided by the included modules.</td>
274  *   </tr>
275  *   <tr>
276  *    <td><tt>list_macros</tt></td>
277  *    <td>List all macros provided by the included modules.</td>
278  *   </tr>
279  *  </table>
280  *
281  *  \section SSec_BuildModule_CORE_MandatoryParams Mandatory Parameters
282  *
283  *  <table>
284  *   <tr>
285  *    <td><i>None</i></td>
286  *   </tr>
287  *  </table>
288  *
289  *  \section SSec_BuildModule_CORE_OptionalParams Optional Parameters
290  *
291  *  <table>
292  *   <tr>
293  *    <td><i>None</i></td>
294  *   </tr>
295  *  </table>
296  *
297  *  \section SSec_BuildModule_CORE_ProvidedVariables Module Provided Variables
298  *
299  *  <table>
300  *   <tr>
301  *    <td><i>None</i></td>
302  *   </tr>
303  *  </table>
304  *
305  *  \section SSec_BuildModule_CORE_ProvidedMacros Module Provided Macros
306  *
307  *  <table>
308  *   <tr>
309  *    <td><i>None</i></td>
310  *   </tr>
311  *  </table>
312  */
313
314 /** \page Page_BuildModule_ATPROGRAM The ATPROGRAM build module
315  *
316  *  The ATPROGRAM programming utility LUFA build system module, providing targets to reprogram an
317  *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
318  *
319  *  To use this module in your application makefile, add the following code:
320  *  \code
321  *  include $(LUFA_PATH)/Build/lufa_atprogram.mk
322  *  \endcode
323  *
324  *  \section SSec_BuildModule_ATPROGRAM_Requirements Requirements
325  *  This module requires the <tt>atprogram.exe</tt> utility to be available in your system's <b>PATH</b>
326  *  variable. The <tt>atprogram.exe</tt> utility is distributed in Atmel AVR Studio 5.x and Atmel Studio 6.x
327  *  inside the application install folder's "\atbackend" subdirectory.
328  *
329  *  \section SSec_BuildModule_ATPROGRAM_Targets Targets
330  *
331  *  <table>
332  *   <tr>
333  *    <td><tt>atprogram</tt></td>
334  *    <td>Program the device FLASH memory with the application's executable data.</td>
335  *   </tr>
336  *   <tr>
337  *    <td><tt>atprogram-ee</tt></td>
338  *    <td>Program the device EEPROM memory with the application's EEPROM data.</td>
339  *   </tr>
340  *  </table>
341  *
342  *  \section SSec_BuildModule_ATPROGRAM_MandatoryParams Mandatory Parameters
343  *
344  *  <table>
345  *   <tr>
346  *    <td><tt>MCU</tt></td>
347  *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
348  *   </tr>
349  *   <tr>
350  *    <td><tt>TARGET</tt></td>
351  *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
352  *   </tr>
353  *  </table>
354  *
355  *  \section SSec_BuildModule_ATPROGRAM_OptionalParams Optional Parameters
356  *
357  *  <table>
358  *   <tr>
359  *    <td><tt>ATPROGRAM_PROGRAMMER</tt></td>
360  *    <td>Name of the Atmel programmer or debugger tool to communicate with (e.g. <tt>jtagice3</tt>).</td>
361  *   </tr>
362  *   <tr>
363  *    <td><tt>ATPROGRAM_INTERFACE</tt></td>
364  *    <td>Name of the programming interface to use when programming the target (e.g. <tt>spi</tt>).</td>
365  *   </tr>
366  *   <tr>
367  *    <td><tt>ATPROGRAM_PORT</tt></td>
368  *    <td>Name of the communication port to use when when programming with a serially connected tool (e.g. <tt>COM2</tt>).</td>
369  *   </tr>
370  *  </table>
371  *
372  *  \section SSec_BuildModule_ATPROGRAM_ProvidedVariables Module Provided Variables
373  *
374  *  <table>
375  *   <tr>
376  *    <td><i>None</i></td>
377  *   </tr>
378  *  </table>
379  *
380  *  \section SSec_BuildModule_ATPROGRAM_ProvidedMacros Module Provided Macros
381  *
382  *  <table>
383  *   <tr>
384  *    <td><i>None</i></td>
385  *   </tr>
386  *  </table>
387  */
388
389 /** \page Page_BuildModule_AVRDUDE The AVRDUDE build module
390  *
391  *  The AVRDUDE programming utility LUFA build system module, providing targets to reprogram an
392  *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
393  *
394  *  To use this module in your application makefile, add the following code:
395  *  \code
396  *  include $(LUFA_PATH)/Build/lufa_avrdude.mk
397  *  \endcode
398  *
399  *  \section SSec_BuildModule_AVRDUDE_Requirements Requirements
400  *  This module requires the <tt>avrdude</tt> utility to be available in your system's <b>PATH</b>
401  *  variable. The <tt>avrdude</tt> utility is distributed in the old WinAVR project releases for
402  *  Windows (<a>http://winavr.sourceforge.net</a>) or can be installed on *nix systems via the project's
403  *  source code (<a>https://savannah.nongnu.org/projects/avrdude</a>) or through the package manager.
404  *
405  *  \section SSec_BuildModule_AVRDUDE_Targets Targets
406  *
407  *  <table>
408  *   <tr>
409  *    <td><tt>avrdude</tt></td>
410  *    <td>Program the device FLASH memory with the application's executable data.</td>
411  *   </tr>
412  *   <tr>
413  *    <td><tt>avrdude-ee</tt></td>
414  *    <td>Program the device EEPROM memory with the application's EEPROM data.</td>
415  *   </tr>
416  *  </table>
417  *
418  *  \section SSec_BuildModule_AVRDUDE_MandatoryParams Mandatory Parameters
419  *
420  *  <table>
421  *   <tr>
422  *    <td><tt>MCU</tt></td>
423  *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
424  *   </tr>
425  *   <tr>
426  *    <td><tt>TARGET</tt></td>
427  *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
428  *   </tr>
429  *  </table>
430  *
431  *  \section SSec_BuildModule_AVRDUDE_OptionalParams Optional Parameters
432  *
433  *  <table>
434  *   <tr>
435  *    <td><tt>AVRDUDE_PROGRAMMER</tt></td>
436  *    <td>Name of the programmer or debugger tool to communicate with (e.g. <tt>jtagicemkii</tt>).</td>
437  *   </tr>
438  *   <tr>
439  *    <td><tt>AVRDUDE_PORT</tt></td>
440  *    <td>Name of the communication port to use when when programming with the connected tool (e.g. <tt>COM2</tt>, <tt>/dev/ttyUSB0</tt> or <tt>usb</tt>).</td>
441  *   </tr>
442  *   <tr>
443  *    <td><tt>AVRDUDE_FLAGS</tt></td>
444  *    <td>Additional flags to pass to avrdude when programming, applied after the automatically generated flags.</td>
445  *   </tr>
446  *  </table>
447  *
448  *  \section SSec_BuildModule_AVRDUDE_ProvidedVariables Module Provided Variables
449  *
450  *  <table>
451  *   <tr>
452  *    <td><i>None</i></td>
453  *   </tr>
454  *  </table>
455  *
456  *  \section SSec_BuildModule_AVRDUDE_ProvidedMacros Module Provided Macros
457  *
458  *  <table>
459  *   <tr>
460  *    <td><i>None</i></td>
461  *   </tr>
462  *  </table>
463  */
464
465  /** \page Page_BuildModule_CPPCHECK The CPPCHECK build module
466  *
467  *  The CPPCHECK programming utility LUFA build system module, providing targets to statically
468  *  analyze C and C++ source code for errors and performance/style issues.
469  *
470  *  To use this module in your application makefile, add the following code:
471  *  \code
472  *  include $(LUFA_PATH)/Build/lufa_cppcheck.mk
473  *  \endcode
474  *
475  *  \section SSec_BuildModule_CPPCHECK_Requirements Requirements
476  *  This module requires the <tt>cppcheck</tt> utility to be available in your system's <b>PATH</b>
477  *  variable. The <tt>cppcheck</tt> utility is distributed through the project's home page
478  *  (<a>http://cppcheck.sourceforge.net</a>) for Windows, and can be installed on *nix systems via
479  *  the project's source code or through the package manager.
480  *
481  *  \section SSec_BuildModule_CPPCHECK_Targets Targets
482  *
483  *  <table>
484  *   <tr>
485  *    <td><tt>cppcheck</tt></td>
486  *    <td>Statically analyze the project source code for issues.</td>
487  *   </tr>
488  *   <tr>
489  *    <td><tt>cppcheck-config</tt></td>
490  *    <td>Check the <tt>cppcheck</tt> configuration - scan source code and warn about missing header files and other issues.</td>
491  *   </tr>
492  *  </table>
493  *
494  *  \section SSec_BuildModule_CPPCHECK_MandatoryParams Mandatory Parameters
495  *
496  *  <table>
497  *   <tr>
498  *    <td><tt>SRC</tt></td>
499  *    <td>List of source files to statically analyze.</td>
500  *   </tr>
501  *  </table>
502  *
503  *  \section SSec_BuildModule_CPPCHECK_OptionalParams Optional Parameters
504  *
505  *  <table>
506  *   <tr>
507  *    <td><tt>CPPCHECK_INCLUDES</tt></td>
508  *    <td>Path of extra directories to check when attemting to resolve C/C++ header file includes.</td>
509  *   </tr>
510  *   <tr>
511  *    <td><tt>CPPCHECK_EXCLUDES</tt></td>
512  *    <td>Paths or path fragments to exclude when analyzing.</td>
513  *   </tr>
514  *   <tr>
515  *    <td><tt>CPPCHECK_MSG_TEMPLATE</tt></td>
516  *    <td>Output message template to use when printing errors, warnings and information (see <tt>cppcheck</tt> documentation).</td>
517  *   </tr>
518  *   <tr>
519  *    <td><tt>CPPCHECK_ENABLE</tt></td>
520  *    <td>Analysis rule categories to enable (see <tt>cppcheck</tt> documentation).</td>
521  *   </tr>
522  *   <tr>
523  *    <td><tt>CPPCHECK_SUPPRESS</tt></td>
524  *    <td>Specific analysis rules to suppress (see <tt>cppcheck</tt> documentation).</td>
525  *   </tr>
526  *   <tr>
527  *    <td><tt>CPPCHECK_FAIL_ON_WARNING</tt></td>
528  *    <td>Set to <b>Y</b> to fail the analysis job with an error exit code if warnings are found, <b>N</b> to continue without failing.</td>
529  *   </tr>
530  *   <tr>
531  *    <td><tt>CPPCHECK_QUIET</tt></td>
532  *    <td>Set to <b>Y</b> to suppress all output except warnings and errors, <b>N</b> to show verbose output information.</td>
533  *   </tr>
534  *   <tr>
535  *    <td><tt>CPPCHECK_FLAGS</tt></td>
536  *    <td>Extra flags to pass to <tt>cppcheck</tt>, after the automatically generated flags.</td>
537  *   </tr>
538  *  </table>
539  *
540  *  \section SSec_BuildModule_CPPCHECK_ProvidedVariables Module Provided Variables
541  *
542  *  <table>
543  *   <tr>
544  *    <td><i>None</i></td>
545  *   </tr>
546  *  </table>
547  *
548  *  \section SSec_BuildModule_CPPCHECK_ProvidedMacros Module Provided Macros
549  *
550  *  <table>
551  *   <tr>
552  *    <td><i>None</i></td>
553  *   </tr>
554  *  </table>
555  */
556
557  /** \page Page_BuildModule_DFU The DFU build module
558  *
559  *  The DFU programming utility LUFA build system module, providing targets to reprogram an
560  *  Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
561  *  This module requires a DFU class bootloader to be running in the target, compatible with
562  *  the DFU bootloader protocol as published by Atmel.
563  *
564  *  To use this module in your application makefile, add the following code:
565  *  \code
566  *  include $(LUFA_PATH)/Build/lufa_dfu.mk
567  *  \endcode
568  *
569  *  \section SSec_BuildModule_DFU_Requirements Requirements
570  *  This module requires either the <tt>batchisp</tt> utility from Atmel's FLIP utility, or the open
571  *  source <tt>dfu-programmer</tt> utility (<a>http://dfu-programmer.sourceforge.net/</a>) to be
572  *  available in your system's <b>PATH</b> variable. On *nix systems the <tt>dfu-programmer</tt> utility
573  *  can be installed via the project's source code or through the package manager.
574  *
575  *  \section SSec_BuildModule_DFU_Targets Targets
576  *
577  *  <table>
578  *   <tr>
579  *    <td><tt>dfu</tt></td>
580  *    <td>Program the device FLASH memory with the application's executable data using <tt>dfu-programmer</tt>.</td>
581  *   </tr>
582  *   <tr>
583  *    <td><tt>dfu-ee</tt></td>
584  *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>dfu-programmer</tt>.</td>
585  *   </tr>
586  *   <tr>
587  *    <td><tt>flip</tt></td>
588  *    <td>Program the device FLASH memory with the application's executable data using <tt>batchisp</tt>.</td>
589  *   </tr>
590  *   <tr>
591  *    <td><tt>flip-ee</tt></td>
592  *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>batchisp</tt>.</td>
593  *   </tr>
594  *  </table>
595  *
596  *  \section SSec_BuildModule_DFU_MandatoryParams Mandatory Parameters
597  *
598  *  <table>
599  *   <tr>
600  *    <td><tt>MCU</tt></td>
601  *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
602  *   </tr>
603  *   <tr>
604  *    <td><tt>TARGET</tt></td>
605  *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
606  *   </tr>
607  *  </table>
608  *
609  *  \section SSec_BuildModule_DFU_OptionalParams Optional Parameters
610  *
611  *  <table>
612  *   <tr>
613  *    <td><i>None</i></td>
614  *   </tr>
615  *  </table>
616  *
617  *  \section SSec_BuildModule_DFU_ProvidedVariables Module Provided Variables
618  *
619  *  <table>
620  *   <tr>
621  *    <td><i>None</i></td>
622  *   </tr>
623  *  </table>
624  *
625  *  \section SSec_BuildModule_DFU_ProvidedMacros Module Provided Macros
626  *
627  *  <table>
628  *   <tr>
629  *    <td><i>None</i></td>
630  *   </tr>
631  *  </table>
632  */
633
634  /** \page Page_BuildModule_DOXYGEN The DOXYGEN build module
635  *
636  *  The DOXYGEN code documentation utility LUFA build system module, providing targets to generate
637  *  project HTML and other format documentation from a set of source files that include special
638  *  Doxygen comments.
639  *
640  *  To use this module in your application makefile, add the following code:
641  *  \code
642  *  include $(LUFA_PATH)/Build/lufa_doxygen.mk
643  *  \endcode
644  *
645  *  \section SSec_BuildModule_DOXYGEN_Requirements Requirements
646  *  This module requires the <tt>doxygen</tt> utility from the Doxygen website
647  *  (<a>http://www.doxygen.org/</a>) to be available in your system's <b>PATH</b> variable. On *nix
648  *  systems the <tt>doxygen</tt> utility can be installed via the project's source code or through
649  *  the package manager.
650  *
651  *  \section SSec_BuildModule_DOXYGEN_Targets Targets
652  *
653  *  <table>
654  *   <tr>
655  *    <td><tt>doxygen</tt></td>
656  *    <td>Generate project documentation.</td>
657  *   </tr>
658  *   <tr>
659  *    <td><tt>doxygen_create</tt></td>
660  *    <td>Create a new Doxygen configuration file using the latest template.</td>
661  *   </tr>
662  *   <tr>
663  *    <td><tt>doxygen_upgrade</tt></td>
664  *    <td>Upgrade an existing Doxygen configuration file to the latest template</td>
665  *   </tr>
666  *  </table>
667  *
668  *  \section SSec_BuildModule_DOXYGEN_MandatoryParams Mandatory Parameters
669  *
670  *  <table>
671  *   <tr>
672  *    <td><tt>LUFA_PATH</tt></td>
673  *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
674  *   </tr>
675  *  </table>
676  *
677  *  \section SSec_BuildModule_DOXYGEN_OptionalParams Optional Parameters
678  *
679  *  <table>
680  *   <tr>
681  *    <td><tt>DOXYGEN_CONF</tt></td>
682  *    <td>Name and path of the base Doxygen configuration file for the project.</td>
683  *   </tr>
684  *   <tr>
685  *    <td><tt>DOXYGEN_FAIL_ON_WARNING</tt></td>
686  *    <td>Set to <b>Y</b> to fail the generation with an error exit code if warnings are found other than unsupported configuration parameters, <b>N</b> to continue without failing.</td>
687  *   </tr>
688  *   <tr>
689  *    <td><tt>DOXYGEN_OVERRIDE_PARAMS</tt></td>
690  *    <td>Extra Doxygen configuration parameters to apply, overriding the corresponding config entry in the project's configuration file (e.g. <tt>QUIET=YES</tt>).</td>
691  *   </tr>
692  *  </table>
693  *
694  *  \section SSec_BuildModule_DOXYGEN_ProvidedVariables Module Provided Variables
695  *
696  *  <table>
697  *   <tr>
698  *    <td><i>None</i></td>
699  *   </tr>
700  *  </table>
701  *
702  *  \section SSec_BuildModule_DOXYGEN_ProvidedMacros Module Provided Macros
703  *
704  *  <table>
705  *   <tr>
706  *    <td><i>None</i></td>
707  *   </tr>
708  *  </table>
709  */
710
711  /** \page Page_BuildModule_HID The HID build module
712  *
713  *  The HID programming utility LUFA build system module, providing targets to reprogram an
714  *  Atmel processor's FLASH memory with a project's compiled binary output file. This module
715  *  requires a HID class bootloader to be running in the target, using a protocol compatible
716  *  with the PJRC "HalfKay" protocol (<a>http://www.pjrc.com/teensy/halfkay_protocol.html</a>).
717  *
718  *  To use this module in your application makefile, add the following code:
719  *  \code
720  *  include $(LUFA_PATH)/Build/lufa_hid.mk
721  *  \endcode
722  *
723  *  \section SSec_BuildModule_HID_Requirements Requirements
724  *  This module requires either the <tt>hid_bootloader_cli</tt> utility from the included LUFA HID
725  *  class bootloader API subdirectory, or the <tt>teensy_loader_cli</tt> utility from PJRC
726  *  (<a>http://www.pjrc.com/teensy/loader_cli.html</a>) to be available in your system's <b>PATH</b>
727  *  variable.
728  *
729  *  \section SSec_BuildModule_HID_Targets Targets
730  *
731  *  <table>
732  *   <tr>
733  *    <td><tt>hid</tt></td>
734  *    <td>Program the device FLASH memory with the application's executable data using <tt>hid_bootloader_cli</tt>.</td>
735  *   </tr>
736  *   <tr>
737  *    <td><tt>hid-ee</tt></td>
738  *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>hid_bootloader_cli</tt> and
739  *        a temporary AVR application programmed into the target's FLASH.
740  *        \note This will erase the currently loaded application in the target.</td>
741  *   </tr>
742  *   <tr>
743  *    <td><tt>teensy</tt></td>
744  *    <td>Program the device FLASH memory with the application's executable data using <tt>teensy_loader_cli</tt>.</td>
745  *   </tr>
746  *   <tr>
747  *    <td><tt>teensy-ee</tt></td>
748  *    <td>Program the device EEPROM memory with the application's EEPROM data using <tt>teensy_loader_cli</tt> and
749  *        a temporary AVR application programmed into the target's FLASH.
750  *        \note This will erase the currently loaded application in the target.</td>
751  *   </tr>
752  *  </table>
753  *
754  *  \section SSec_BuildModule_HID_MandatoryParams Mandatory Parameters
755  *
756  *  <table>
757  *   <tr>
758  *    <td><tt>MCU</tt></td>
759  *    <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
760  *   </tr>
761  *   <tr>
762  *    <td><tt>TARGET</tt></td>
763  *    <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
764  *   </tr>
765  *  </table>
766  *
767  *  \section SSec_BuildModule_HID_OptionalParams Optional Parameters
768  *
769  *  <table>
770  *   <tr>
771  *    <td><i>None</i></td>
772  *   </tr>
773  *  </table>
774  *
775  *  \section SSec_BuildModule_HID_ProvidedVariables Module Provided Variables
776  *
777  *  <table>
778  *   <tr>
779  *    <td><i>None</i></td>
780  *   </tr>
781  *  </table>
782  *
783  *  \section SSec_BuildModule_HID_ProvidedMacros Module Provided Macros
784  *
785  *  <table>
786  *   <tr>
787  *    <td><i>None</i></td>
788  *   </tr>
789  *  </table>
790  */
791
792  /** \page Page_BuildModule_SOURCES The SOURCES build module
793  *
794  *  The SOURCES LUFA build system module, providing variables listing the various LUFA source files
795  *  required to be build by a project for a given LUFA module. This module gives a way to reference
796  *  LUFA source files symbolically, so that changes to the library structure do not break the library
797  *  makefile.
798  *
799  *  To use this module in your application makefile, add the following code:
800  *  \code
801  *  include $(LUFA_PATH)/Build/lufa_sources.mk
802  *  \endcode
803  *
804  *  \section SSec_BuildModule_SOURCES_Requirements Requirements
805  *  None.
806  *
807  *  \section SSec_BuildModule_SOURCES_Targets Targets
808  *
809  *  <table>
810  *   <tr>
811  *    <td><i>None</i></td>
812  *   </tr>
813  *  </table>
814  *
815  *  \section SSec_BuildModule_SOURCES_MandatoryParams Mandatory Parameters
816  *
817  *  <table>
818  *   <tr>
819  *    <td><tt>LUFA_PATH</tt></td>
820  *    <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
821  *   </tr>
822  *   <tr>
823  *    <td><tt>ARCH</tt></td>
824  *    <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>
825  *   </tr>
826  *  </table>
827  *
828  *  \section SSec_BuildModule_SOURCES_OptionalParams Optional Parameters
829  *
830  *  <table>
831  *   <tr>
832  *    <td><i>None</i></td>
833  *   </tr>
834  *  </table>
835  *
836  *  \section SSec_BuildModule_SOURCES_ProvidedVariables Module Provided Variables
837  *
838  *  <table>
839  *   <tr>
840  *    <td><tt>LUFA_SRC_USB</tt></td>
841  *    <td>List of LUFA USB driver source files.</td>
842  *   </tr>
843  *   <tr>
844  *    <td><tt>LUFA_SRC_USBCLASS</tt></td>
845  *    <td>List of LUFA USB Class driver source files.</td>
846  *   </tr>
847  *   <tr>
848  *    <td><tt>LUFA_SRC_TEMPERATURE</tt></td>
849  *    <td>List of LUFA temperature sensor driver source files.</td>
850  *   </tr>
851  *   <tr>
852  *    <td><tt>LUFA_SRC_SERIAL</tt></td>
853  *    <td>List of LUFA Serial U(S)ART driver source files.</td>
854  *   </tr>
855  *   <tr>
856  *    <td><tt>LUFA_SRC_TWI</tt></td>
857  *    <td>List of LUFA TWI driver source files.</td>
858  *   </tr>
859  *   <tr>
860  *    <td><tt>LUFA_SRC_PLATFORM</tt></td>
861  *    <td>List of LUFA architecture specific platform management source files.</td>
862  *   </tr>
863  *  </table>
864  *
865  *  \section SSec_BuildModule_SOURCES_ProvidedMacros Module Provided Macros
866  *
867  *  <table>
868  *   <tr>
869  *    <td><i>None</i></td>
870  *   </tr>
871  *  </table>
872  */
873
874 /** \page Page_BuildTroubleshooting Troubleshooting Information
875  *
876  *  LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and surrounding binaries. This can sometimes lead to problems compiling applications if one of these
877  *  features is buggy in the version of the tools used in a build environment. Missing utilities and incorrectly set makefile configuration options can also result in different
878  *  errors being produced when compilation or other operations are attempted. The table below lists a set of commonly encountered errors and their resolutions.
879  *
880  *  <table>
881  *    <tr>
882  *    <th>Problem</th>
883  *    <th>Resolution</th>
884  *   </tr>
885  *   <tr>
886  *    <td>Error &quot;<b><tt>relocation truncated to fit: R_AVR_13_PCREL against symbol <i>{X}</i></tt></b>&quot; shown when compiling.</td>
887  *    <td>Try compiling with the setting <tt>LINKER_RELAXATIONS=N</tt> in your LUFA Build System 2.0 makefile, or remove the line <tt>-Wl,--relax</tt>
888  *        from other makefiles. Alternatively, make sure you have the latest version of the Atmel Toolchain installed for your system.</td>
889  *   </tr>
890  *   <tr>
891  *    <td>Error &quot;<b><tt>error: ld terminated with signal 11 [Segmentation fault]</tt></b>&quot; shown when compiling.</td>
892  *    <td>Try compiling with the setting <tt>DEBUG_LEVEL=2</tt> in your LUFA Build System 2.0 makefile, or make sure you are using <tt>binutils</tt> version 2.22 or later.</td>
893  *   </tr>
894  *   <tr>
895  *    <td>Error &quot;<b><tt>EMERGENCY ABORT: INFINITE RECURSION DETECTED</tt></b>&quot; shown when compiling.</td>
896  *    <td>Make sure you are using an up to date version of GNU Make when compiling. This error is a safety system added to the mid-level makefiles, to prevent an issue with
897  *        GNU make or other variants of Make causing an infinitely recursive build.</td>
898  *   </tr>
899  *   <tr>
900  *    <td>Error &quot;<b><tt>Unsupported architecture &quot;<i>{X}</i>&quot;</tt></b>&quot; shown when compiling.</td>
901  *    <td>Ensure your makefile's <tt>ARCH</tt> setting is set to one of the architecture names (case-sensitive) supported by the version of LUFA you are compiling against.</td>
902  *   </tr>
903  *   <tr>
904  *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> value not set</tt></b>&quot; shown when compiling.</td>
905  *    <td>The specified Makefile value was not configured in your project's makefile or on the command line, and the nominated setting is required by one or more LUFA
906  *        build system modules. Define the value in your project makefile and try again.</td>
907  *   </tr>
908  *   <tr>
909  *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> option cannot be blank</tt></b>&quot; shown when compiling.</td>
910  *    <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to an empty value. For the nominated configuration
911  *        option, an empty value is not allowed. Define the nominated setting to a correct non-blank value and try again.</td>
912  *   </tr>
913  *   <tr>
914  *    <td>Error &quot;<b><tt>Makefile <i>{X}</i> option must be Y or N</tt></b>&quot; shown when compiling.</td>
915  *    <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to a value other than a Y (for "Yes") or "N" (for "No").
916  *        This configuration option is required to be one of the aforementioned boolean values, and other values are invalid. Set this option to either Y or N and try again.</td>
917  *   </tr>
918  *   <tr>
919  *    <td>Error &quot;<b><tt>Unknown input source file formats: <i>{X}</i></tt></b>&quot; shown when compiling.</td>
920  *    <td>The nominated source files, specified in your project's makefile in the <tt>SRC</tt> configuration option, has an extension that the LUFA build system does not
921  *        recognise. The file extensions are case sensitive, and must be one of the supported formats (<tt>*.c</tt>, <tt>*.cpp</tt> or <tt>*.S</tt>).</td>
922  *   </tr>
923  *   <tr>
924  *    <td>Error &quot;<b><tt>Cannot build with OBJDIR parameter set - one or more object file name is not unique</tt></b>&quot; shown when compiling.</td>
925  *    <td>When a project is built with a non-empty <tt>OBJDIR</tt> object directory name set, all input source files must have unique names, excluding extension and path.
926  *        This means that input files that are named identically and differ only by their path or extension are invalid when this mode is used.</td>
927  *   </tr>
928  *   <tr>
929  *    <td>Error &quot;<b><tt>Source file does not exist: <i>{X}</i></tt></b>&quot; shown when compiling.</td>
930  *    <td>The nominated input source file, specified in the user project's <tt>SRC</tt> parameter, could not be found. Ensure the source file exists and the absolute or
931  *        relative path given in the user project makefile is correct and try again.</td>
932  *   </tr>
933  *   <tr>
934  *    <td>Error &quot;<b><tt>Doxygen configuration file <i>{X}</i> does not exist</tt></b>&quot; shown when upgrading a Doxygen configuration file.</td>
935  *    <td>The nominated Doxygen configuration file, specified in the user project's <tt>DOXYGEN_CONF</tt> parameter, could not be found. Ensure the configuration file exists
936  *        and the absolute or relative path given in the user project makefile is correct and try again, or run the appropriate makefile target to generate a new configuration
937  *        file.</td>
938  *   </tr>
939  *   <tr>
940  *    <td>Error &quot;<b><tt>avr-gcc: error: unrecognized option '<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>
941  *    <td>An unrecognised option was supplied to the compiler, usually in the <tt>C_FLAGS</tt>, <tt>CPP_FLAGS</tt>, <tt>ASM_FLAGS</tt> or <tt>CC_FLAGS</tt> configuration
942  *        options. The nominated compiler switch may be invalid, or unsupported by the version of AVR-GCC on the host system. Remove the unrecognised flag if invalid, or
943  *        upgrade to the latest AVR-GCC. If the option is a valid linker option, use the prefix "-Wl," to ensure it is passed to the linker correctly.</td>
944  *   </tr>
945  *   <tr>
946  *    <td>Error &quot;<b><tt>makefile:{X}: {Y}.mk: No such file or directory</tt></b>&quot; shown when make is invoked.</td>
947  *    <td>The path to the nominated makefile module was incorrect. This usually indicates that the makefile <tt>LUFA_PATH</tt> option is not set to a valid relative or
948  *        absolute path to the LUFA library core.</td>
949  *   </tr>
950  *   <tr>
951  *    <td>Error &quot;<b><tt>fatal error: LUFAConfig.h: No such file or directory</tt></b>&quot; shown when compiling.</td>
952  *    <td>The <tt>USE_LUFA_CONFIG_HEADER</tt> compile time option was set in the user project makefile, but the user supplied <tt>LUFAConfig.h</tt> header could not be
953  *        found. Ensure that the directory that contains this configuration file is correctly passed to the compiler via the -I switch in the makefile <tt>CC_FLAGS</tt>
954  *        parameter.</td>
955  *   </tr>
956  *   <tr>
957  *    <td>Error &quot;<b><tt>ld.exe: section .apitable_trampolines loaded at <i>{X}</i> overlaps section .text</tt></b>&quot; shown when compiling a bootloader.</td>
958  *    <td>The bootloader is compiling too large for the given <tt>FLASH_SIZE_KB</tt> and <tt>BOOT_SECTION_SIZE_KB</tt> parameters set in the bootloader makefile. This
959  *        usually indicates that these values are incorrect for the specified device the bootloader is targeting. If these values are correct, a newer version of the
960  *        compiler may need to be used to ensure that the bootloader is built within the section size constraints of the target device.</td>
961  *   </tr>
962  *   <tr>
963  *    <td>Error &quot;<b><tt>unknown MCU '<i>{X}</i>' specified</tt></b>&quot; shown when compiling.</td>
964  *    <td>The specified microcontroller device model name set in the user application's makefile as the <tt>MCU</tt> parameter is incorrect, or unsupported by the
965  *        version of the compiler being used. Make sure the model name is correct, or upgrade to the latest Atmel Toolchain to obtain newer device support.</td>
966  *   </tr>
967  *   <tr>
968  *    <td>Error &quot;<b><tt>undefined reference to `<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>
969  *    <td>This is usually caused by a missing source file in the user application's <tt>SRC</tt> configuration parameter. If the indicated symbol is one from the LUFA
970  *        library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_SOURCES).</td>
971  *   </tr>
972  *  </table>
973  *
974  *  For troubleshooting other errors you encounter, please see \ref Sec_ProjectHelp.
975  */