summaryrefslogtreecommitdiff
path: root/lib/lufa/LUFA/Build/DMBS/DMBS/WritingYourOwnModules.md
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lufa/LUFA/Build/DMBS/DMBS/WritingYourOwnModules.md')
-rw-r--r--lib/lufa/LUFA/Build/DMBS/DMBS/WritingYourOwnModules.md95
1 files changed, 0 insertions, 95 deletions
diff --git a/lib/lufa/LUFA/Build/DMBS/DMBS/WritingYourOwnModules.md b/lib/lufa/LUFA/Build/DMBS/DMBS/WritingYourOwnModules.md
deleted file mode 100644
index 16df7a53bb..0000000000
--- a/lib/lufa/LUFA/Build/DMBS/DMBS/WritingYourOwnModules.md
+++ /dev/null
@@ -1,95 +0,0 @@
-DMBS - Dean's Makefile Build System
-===================================
-
-
-Writing Your Own Modules
-------------------------
-
-A DMBS module consists of the several boilerplate sections, explained below.
-
-## The DMBS module hooks
-
-Your module needs to advertise to DMBS its name, its makefile targets, the
-required and optional variables, and the variables and macros the module
-provides for use elsewhere. This is achieved with the following section:
-
- DMBS_BUILD_MODULES += EXAMPLE
- DMBS_BUILD_TARGETS += example-target another-target
- DMBS_BUILD_MANDATORY_VARS += MANDATORY_NAME ALSO_MANDATORY
- DMBS_BUILD_OPTIONAL_VARS += OPTIONAL_NAME ALSO_OPTIONAL
- DMBS_BUILD_PROVIDED_VARS += MEANING_OF_LIFE
- DMBS_BUILD_PROVIDED_MACROS += STRIP_WHITESPACE
-
-The example above declares that this module is called `EXAMPLE`, and exposes the
-listed targets, variable requirements and provides variables and macros.
-
-Your module name and provided variable/macro names must be unique, however you
-can (and should) re-use variable names where appropriate if they apply to
-several modules (such as `ARCH` to specify the project's microcontroller
-architecture). Re-using targets is not recommended, but can be used to extend
-the dependencies of another module's targets.
-
-## Importing the CORE module
-
-Next, your module should always import the DMBS `CORE` module, via the
-following:
-
- # Conditionally import the CORE module of DMBS if it is not already imported
- DMBS_MODULE_PATH := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))
- ifeq ($(findstring CORE, $(DMBS_BUILD_MODULES)),)
- include $(DMBS_MODULE_PATH)/core.mk
- endif
-
-This ensures that the `make help` target is always available. In addition, the
-`CORE` module exposes some [commonly used macros and variables](core.md) to
-your module.
-
-## Setting optional variable's defaults
-
-If a variable is optional, you should provide a default value. Do this via the
-`?=` operator of `make`, which sets a variable's value if it has not yet been
-set:
-
- MY_OPTIONAL_VARIABLE ?= some_default_value
-
-## Sanity checking user input
-
-Sanity checks are what make DMBS useful. Where possible, validate user input and
-convert generated errors to human-friendly messages. This can be achieved by
-enforcing that all the declared module mandatory variables have been set by the
-user:
-
- # Sanity-check values of mandatory user-supplied variables
- $(foreach MANDATORY_VAR, $(DMBS_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR)))
-
-As well as complaining if they are set, but currently empty:
-
- $(call ERROR_IF_EMPTY, SOME_MANDATORY_VARIABLE)
- $(call ERROR_IF_EMPTY, SOME_OPTIONAL_BUT_NON_EMPTY_VARIABLE)
-
-Or even if they are boolean (`Y` or `N`) variables that have an invalid value:
-
- $(call ERROR_IF_NONBOOL, SOME_BOOL_VARIABLE)
-
-## Adding targets
-
-The meat of a DMBS module is the targets, which are run when the user types
-`make {target name}` from the command line. These can be as complex or simple
-as you like. See the GNU make manual for information on writing make targets.
-
- example-target:
- echo "Your DMBS module works!"
-
-## And finally, list the PHONYs
-
-Important in GNU Make is the concept of phony targets; this special directive
-tells make that a given target should never be considered a valid file. Listing
-phonies ensures that, for example, if your module had a target called `build`,
-it would always run when the user types `make build` from the command line, even
-if a file called `build` existed in the user project folder.
-
-You can list module-internal targets here, as well as mark all public targets
-via the module header's `DMBS_BUILD_TARGETS` variable.
-
- # Phony build targets for this module
- .PHONY: $(DMBS_BUILD_TARGETS) some-module-internal-target another-internal-target