You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					124 lines
				
				4.5 KiB
			
		
		
			
		
	
	
					124 lines
				
				4.5 KiB
			| 
								 
											8 years ago
										 
									 | 
							
								DMBS - Dean's Makefile Build System
							 | 
						||
| 
								 | 
							
								===================================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Project Overview
							 | 
						||
| 
								 | 
							
								----------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								GNU Make is scary, and it's tough to get the rules right sometimes. Many
							 | 
						||
| 
								 | 
							
								projects get by via simple copy-pasting of old makefiles, resulting in many
							 | 
						||
| 
								 | 
							
								redundant copies of the same old rules. DMBS aims to solve this by providing a
							 | 
						||
| 
								 | 
							
								simple modular set of makefiles which can be included by your project to quickly
							 | 
						||
| 
								 | 
							
								add various build functionality.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This aims to replace the old WinAVR "mfile" makefile template, giving better
							 | 
						||
| 
								 | 
							
								functionality and much simpler user makefiles.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Benefits:
							 | 
						||
| 
								 | 
							
								----------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Apart from much simpler, cleaner makefiles DMBS carries the aim of making the
							 | 
						||
| 
								 | 
							
								process of troubleshooting build issues a little easier. Lots can go wrong, so
							 | 
						||
| 
								 | 
							
								DMBS tries to sanity check its inputs wherever possible, and produce
							 | 
						||
| 
								 | 
							
								human-readable error messages. Forgotten to set a variable? Get a
							 | 
						||
| 
								 | 
							
								`Makefile {X} value not set.` message, rather than a possibly unrelated message.
							 | 
						||
| 
								 | 
							
								Have the wrong filename? See `Source file does not exist: {X}` rather than the
							 | 
						||
| 
								 | 
							
								infamous `No rule to make target {X}` message.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Use:
							 | 
						||
| 
								 | 
							
								----------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A template user makefile is provided in the `Template` directory. DMBS modules
							 | 
						||
| 
								 | 
							
								are included via a GNU Make `include` directive. While the DMBS `core` module is
							 | 
						||
| 
								 | 
							
								always required, you can pick and choose what other modules you wish to add to
							 | 
						||
| 
								 | 
							
								your user project.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[See here for the documentation on the individual modules provided by DMBS.](DMBS/ModulesOverview.md)
							 | 
						||
| 
								 | 
							
								If you're interested in writing your own DMBS module(s), [see here.](DMBS/WritingYourOwnModules.md)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Here's an example user makefile:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									MCU          = atmega128
							 | 
						||
| 
								 | 
							
									ARCH         = AVR8
							 | 
						||
| 
								 | 
							
									F_CPU        = 8000000
							 | 
						||
| 
								 | 
							
									OPTIMIZATION = s
							 | 
						||
| 
								 | 
							
									TARGET       = Template
							 | 
						||
| 
								 | 
							
									SRC          = $(TARGET).c
							 | 
						||
| 
								 | 
							
									CC_FLAGS     =
							 | 
						||
| 
								 | 
							
									LD_FLAGS     =
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Default target
							 | 
						||
| 
								 | 
							
									all:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Include DMBS build script makefiles
							 | 
						||
| 
								 | 
							
									DMBS_PATH   ?= ../DMBS
							 | 
						||
| 
								 | 
							
									include $(DMBS_PATH)/core.mk
							 | 
						||
| 
								 | 
							
									include $(DMBS_PATH)/gcc.mk
							 | 
						||
| 
								 | 
							
									include $(DMBS_PATH)/cppcheck.mk
							 | 
						||
| 
								 | 
							
									include $(DMBS_PATH)/doxygen.mk
							 | 
						||
| 
								 | 
							
									include $(DMBS_PATH)/dfu.mk
							 | 
						||
| 
								 | 
							
									include $(DMBS_PATH)/hid.mk
							 | 
						||
| 
								 | 
							
									include $(DMBS_PATH)/avrdude.mk
							 | 
						||
| 
								 | 
							
									include $(DMBS_PATH)/atprogram.mk
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Each DMBS module can optionally supply one or more Make variables and macros,
							 | 
						||
| 
								 | 
							
								which you can reference in your user makefile. Additionally, modules can require
							 | 
						||
| 
								 | 
							
								one or more variables to be set by the user makefile, with (in some cases) sane
							 | 
						||
| 
								 | 
							
								defaults used if left out.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								As modules are added, you can get a list of available targets by simply typing
							 | 
						||
| 
								 | 
							
								`make help` from the command line. This will produce a formatted list of targets
							 | 
						||
| 
								 | 
							
								as well as mandatory and optional variables and exposed variables and macros.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Distribution
							 | 
						||
| 
								 | 
							
								----------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								You can embed DMBS in your project any way you like - some options are:
							 | 
						||
| 
								 | 
							
								1. A git submodule
							 | 
						||
| 
								 | 
							
								2. A source tarball
							 | 
						||
| 
								 | 
							
								3. A manually copied extracted archive
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The intention of DMBS is that users can just import it from whatever source
							 | 
						||
| 
								 | 
							
								they like. If your project needs to extend the existing modules in an unusual
							 | 
						||
| 
								 | 
							
								manner, or if you want to provide your own modules, you can include them in
							 | 
						||
| 
								 | 
							
								your project repository (or submit a patch to DMBS if your module is generic
							 | 
						||
| 
								 | 
							
								enough to warrant wide use).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								License
							 | 
						||
| 
								 | 
							
								----------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DMBS is released into the public domain, making is suitable for use everywhere,
							 | 
						||
| 
								 | 
							
								by everyone. Contributions are greatly appreciated however, in order to make
							 | 
						||
| 
								 | 
							
								DMBS better for everyone.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The actual license text is as follows:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									This is free and unencumbered software released into the public domain.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Anyone is free to copy, modify, publish, use, compile, sell, or
							 | 
						||
| 
								 | 
							
									distribute this software, either in source code form or as a compiled
							 | 
						||
| 
								 | 
							
									binary, for any purpose, commercial or non-commercial, and by any
							 | 
						||
| 
								 | 
							
									means.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									In jurisdictions that recognize copyright laws, the author or authors
							 | 
						||
| 
								 | 
							
									of this software dedicate any and all copyright interest in the
							 | 
						||
| 
								 | 
							
									software to the public domain. We make this dedication for the benefit
							 | 
						||
| 
								 | 
							
									of the public at large and to the detriment of our heirs and
							 | 
						||
| 
								 | 
							
									successors. We intend this dedication to be an overt act of
							 | 
						||
| 
								 | 
							
									relinquishment in perpetuity of all present and future rights to this
							 | 
						||
| 
								 | 
							
									software under copyright law.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
							 | 
						||
| 
								 | 
							
									EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
							 | 
						||
| 
								 | 
							
									MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
							 | 
						||
| 
								 | 
							
									IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
							 | 
						||
| 
								 | 
							
									OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
							 | 
						||
| 
								 | 
							
									ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
							 | 
						||
| 
								 | 
							
									OTHER DEALINGS IN THE SOFTWARE.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									For more information, please refer to <http://unlicense.org/>
							 |