Arduino-Makefile/arduino-mk-vars.md
Thomas Hebb 05b57c3cc3 Allow avrdude to erase the chip before programming during ispload
We currently pass the -D (do not erase) option to avrdude
unconditionally in order to work around an Arduino Mega bootloader bug.
However, this has the side-effect of breaking the ispload target for all
non-XMEGA chips, since a write operation on these chips essentially ANDs
the new program with the existing memory contents. If the memory is not
first erased to contain only 0xff, the resulting image is garbage. This
patch makes it so we pass -D when we're using the Arduino bootloader but
don't pass it when we're using ISP directly.
2014-11-07 22:47:08 -05:00

1308 lines
18 KiB
Markdown

# Documentation of variables
The following are the different variables that can be overwritten in the user makefiles.
* [Global variables](#global-variables)
* [Installation/Directory variables](#installationdirectory-variables)
* [Arduino IDE variables](#arduino-ide-variables)
* [Sketch related variables](#sketch-related-variables)
* [ISP programming variables](#isp-programming-variables)
* [Compiler/Executable variables](#compilerexecutable-variables)
* [Avrdude setting variables](#avrdude-setting-variables)
* [Bootloader variables](#bootloader-variables)
* [ChipKIT variables](#chipkit-variables)
## Global variables
### ARDUINO_QUIET
**Description:**
Suppress printing of Arduino-Makefile configuration.
Defaults to `0` (unset/disabled).
**Example:**
```Makefile
ARDUINO_QUIET = 1
```
**Requirement:** *Optional*
----
## Installation/Directory variables
### ARDMK_DIR
**Description:**
Directory where the `*.mk` files are stored.
Usually can be auto-detected as `AUTO_ARDUINO_DIR` (parent of `Arduino.mk`).
**Example:**
```Makefile
ARDMK_DIR = /usr/share/arduino
```
**Requirement:** *Optional*
----
### AVR_TOOLS_DIR
**Description:**
Directory where tools such as `avrdude`, `avr-g++`, `avr-gcc`, etc. are stored in the `bin/` subdirectory.
Usually can be auto-detected from `$PATH` as `SYSTEMPATH_AVR_TOOLS_DIR` or as `BUNDLED_AVR_TOOLS_DIR` within the Arduino distribution.
**Example:**
```Makefile
AVR_TOOLS_DIR = /usr
# or
AVR_TOOLS_DIR = /usr/share/arduino/hardware/tools/avr
```
**Requirement:** *Optional*
----
### RESET_CMD
**Description:**
Command to reset the MCU.
Defaults to `ard-reset-arduino` with the extra `--caterina` flag for atmega32u4 boards.
**Example:**
```Makefile
RESET_CMD = ~/gertduino/reset
```
**Requirement:** *Optional*
----
## Arduino IDE variables
### ARDUINO_DIR
**Description:**
Directory where the Arduino IDE and/or core files are stored.
**Example:**
```Makefile
# Linux
ARDUINO_DIR = /usr/share/arduino
# Mac OS X
ARDUINO_DIR = /Applications/Arduino.app/Contents/Resources/Java
```
**Requirement:** *Optional*
----
### ARDUINO_PLATFORM_LIB_PATH
**Description:**
Directory where the Arduino platform dependent libraries are stored.
(Used only for Arduino 1.5.x)
**Example:**
```Makefile
ARDUINO_PLATFORM_LIB_PATH = /usr/share/arduino/hardware/arduino/avr/libraries
```
**Requirement:** *Optional*
----
### ARDUINO_VERSION
**Description:**
Version string for Arduino IDE and/or core.
Usually can be auto-detected as `AUTO_ARDUINO_VERSION` from `/usr/share/arduino/lib/version.txt`
**Example:**
```Makefile
ARDUINO_VERSION = 105
```
**Requirement:** *Optional*
----
### ARCHITECTURE
**Description:**
Architecture for Arduino 1.5
Defaults to unset for 1.0 or `avr` for 1.5
**Example:**
```Makefile
ARCHITECTURE = sam
```
**Requirement:** *Optional*
----
### VENDOR
**Description:**
Board vendor/maintainer.
Defaults to `arduino`
**Example:**
```Makefile
VENDOR = sparkfun
```
**Requirement:** *Optional*
----
### ARDUINO_SKETCHBOOK
**Description:**
Path to `sketchbook` directory.
Usually can be auto-detected from the Arduino `preferences.txt` file or the default `~/sketchbook`
**Example:**
```Makefile
ARDUINO_SKETCHBOOK = ~/sketches
```
**Requirement:** *Optional*
----
### ARDUINO_PREFERENCES_PATH
**Description:**
Path to Arduino `preferences.txt` file.
Usually can be auto-detected as `AUTO_ARDUINO_PREFERENCES` from the defaults:
* on Linux : `~/.arduino/preferences.txt`
* on Mac OS X : `~/Library/Arduino/preferences.txt`
**Example:**
```Makefile
ARDUINO_PREFERENCES_PATH = ~/sketches/preferences.txt
```
**Requirement:** *Optional*
----
### ARDUINO_CORE_PATH
**Description:**
Path to standard Arduino core files.
**Example:**
```Makefile
ARDUINO_CORE_PATH = /usr/share/arduino/hardware/arduino/cores/arduino
```
**Requirement:** *Optional*
----
## Sketch related variables
### ARDUINO_LIBS
**Description:**
Any libraries you intend to include.
Usually can be auto-detected from the sketch. Separated by spaces. If the library has a `/utility` folder (like `SD` or `Wire` library), then the utility folder should also be specified.
**Example:**
```Makefile
ARDUINO_LIBS = SD SD/utility Wire Wire/utility
```
**Requirement:** *Optional*
----
### BOARD_TAG
**Description:**
Device type as listed in `boards.txt` or `make show_boards`.
**Example:**
```Makefile
BOARD_TAG = uno or mega2560
```
**Requirement:** *Mandatory*
----
### BOARD_SUB
**Description:**
1.5 submenu as listed in `boards.txt`
**Example:**
```Makefile
# diecimila.name=Arduino Duemilanove or Diecimila
BOARD_TAG=diecimila
# diecimila.menu.cpu.atmega168=ATmega168
BOARD_SUB=atmega168
```
**Requirement:** *Mandatory for 1.5 if using a submenu CPU*
----
### MONITOR_PORT
**Description:**
Path to serial (USB) device used for uploading/serial comms.
**Example:**
```Makefile
# Linux
MONITOR_PORT = /dev/ttyUSB0
# or
MONITOR_PORT = /dev/ttyACM0
# Mac OS X
MONITOR_PORT = /dev/cu.usb*
# Windows
MONITOR_PORT = com3
```
**Requirement:** *Mandatory*
----
### USER_LIB_PATH
**Description:**
Directory where additional libraries are stored.
Defaults to `libraries` directory within user's sketchbook.
**Example:**
```Makefile
# Linux
USER_LIB_PATH = ~/sketchbook/libraries
# For a random project on *nix
USER_LIB_PATH = /path/to/my/project
```
**Requirement:** *Optional*
----
### OBJDIR
**Description:**
Directory where binaries and compiled files are put.
Defaults to `build-$(BOARD_TAG)` in your `Makefile` directory.
**Example:**
```Makefile
OBJDIR = /path/to/my/project-directory/bin
```
**Requirement:** *Optional*
----
### ALTERNATE_CORE
**Description:**
Non-standard core for Arduino-unsupported chips like the ATtiny.
**Example:**
```Makefile
# HLT core
ALTERNATE_CORE = attiny-master
# tiny core
ALTERNATE_CORE = arduino-tiny
# tiny core 2
ALTERNATE_CORE = tiny2
```
**Requirement:** *Optional*
----
### ARDUINO_VAR_PATH
**Description:**
Path to non-standard core's variant files.
**Example:**
```Makefile
ARDUINO_VAR_PATH = ~/sketchbook/hardware/arduino-tiny/cores/tiny
```
**Requirement:** *Optional*
----
### VARIANT
**Description:**
Variant of a standard board design.
Usually can be auto-detected as `build.variant` from `boards.txt`.
**Example:**
```Makefile
VARIANT = leonardo
```
**Requirement:** *Optional*
----
### USB_VID
**Description:**
Override `USB VID` for atmega32u4 boards.
Usually can be auto-detected as `build.vid` from `boards.txt`
**Example:**
```Makefile
USB_VID = 0x2341
```
**Requirement:** *Optional*
----
### USB_PID
**Description:**
Override `USB PID` for atmega32u4 boards.
Usually can be auto-detected as `build.pid` from `boards.txt`
**Example:**
```Makefile
USB_PID = 0x8039
```
**Requirement:** *Optional*
----
### F_CPU
**Description:**
CPU speed in Hz
Usually can be auto-detected as `build.f_cpu` from `boards.txt`
**Example:**
```Makefile
F_CPU = 8000000L
```
**Requirement:** *Optional*
----
### HEX_MAXIMUM_SIZE
**Description:**
Maximum hex file size
Usually can be auto-detected as `upload.maximum_size` from `boards.txt`
**Example:**
```Makefile
HEX_MAXIMUM_SIZE = 14336
```
**Requirement:** *Optional*
----
### MCU
**Description:**
Microcontroller model.
Usually can be auto-detected as `build.mcu` from `boards.txt`
**Example:**
```Makefile
MCU = atmega32u4
```
**Requirement:** *Optional*
----
### MCU_FLAG_NAME
**Description:**
Override default MCU flags.
Defaults to `mmcu`
**Example:**
```Makefile
MCU_FLAG_NAME = mprocessor
```
**Requirement:** *Optional*
----
### MONITOR_BAUDRATE
**Description:**
Baudrate of the serial monitor.
Defaults to `9600` if it can't find it in the sketch `Serial.begin()`
**Example:**
```Makefile
MONITOR_BAUDRATE = 57600
```
**Requirement:** *Optional*
----
## ISP programming variables
### ISP_PROG
**Description:**
Type of ISP. Either a USB device or ArduinoISP protocol.
**Example:**
```Makefile
ISP_PROG = usbasp
# or
ISP_PROG = usbtiny
# or
ISP_PROG = stk500v2
# or
ISP_PROG = stk500v1
```
**Requirement:** *Optional*
----
### ISP_PORT
**Description:**
Device path to ArduinoISP. Not needed for hardware ISP's.
**Example:**
```Makefile
# Linux
ISP_PORT = /dev/ttyACM0
```
**Requirement:** *Optional*
----
### ISP_LOCK_FUSE_PRE
**Description:**
Bootloader unlock bits.
Usually can be auto-detected from `boards.txt`
**Example:**
```Makefile
ISP_LOCK_FUSE_PRE = 0x3f
```
**Requirement:** *Optional*
----
### ISP_LOCK_FUSE_POST
**Description:**
Bootloader lock bits.
Usually can be auto-detected from `boards.txt`
**Example:**
```Makefile
ISP_LOCK_FUSE_POST = 0xcf
```
**Requirement:** *Optional*
----
### ISP_HIGH_FUSE
**Description:**
`ISP_LOW_FUSE/ISP_EXT_FUSE` - high/low/extended fuse bits.
Usually can be auto-detected from `boards.txt`
**Example:**
```Makefile
ISP_HIGH_FUSE = 0xdf # or 0xff or 0x01
```
**Requirement:** *Optional*
----
### ISP_EEPROM
**Description:**
Whether to upload the EEPROM file or not.
Defaults to `0`
**Example:**
```Makefile
ISP_EEPROM = 1
```
**Requirement:** *Optional*
----
## Compiler/Executable variables
### CC_NAME
**Description:**
C compiler.
Defaults to `avr-gcc`
**Example:**
```Makefile
CC_NAME = pic32-gcc
```
**Requirement:** *Optional*
----
### CXX_NAME
**Description:**
C++ compiler.
Defaults to `avr-g++`
**Example:**
```Makefile
CXX_NAME = pic32-g++
```
**Requirement:** *Optional*
----
### OBJCOPY_NAME
**Description:**
Objcopy utility.
Defaults to `avr-objcopy`
**Example:**
```Makefile
OBJCOPY_NAME = pic32-objcopy
```
**Requirement:** *Optional*
----
### OBJDUMP_NAME
**Description:**
Objdump utility.
Defaults to `avr-objdump`
**Example:**
```Makefile
OBJDUMP_NAME = pic32-objdump
```
**Requirement:** *Optional*
----
### AR_NAME
**Description:**
Archive utility.
Defaults to `avr-ar`
**Example:**
```Makefile
AR_NAME = pic32-ar
```
**Requirement:** *Optional*
----
### SIZE_NAME
**Description:**
Size utility.
Defaults to `avr-size`
**Example:**
```Makefile
SIZE_NAME = pic32-size
```
**Requirement:** *Optional*
----
### NM_NAME
**Description:**
Nm utility.
Defaults to `avr-nm`
**Example:**
```Makefile
NM_NAME = pic32-nm
```
**Requirement:** *Optional*
----
### OPTIMIZATION_LEVEL
**Description:**
Linker's `-O` flag
Defaults to `s`, which shouldn't really be changed as it breaks `SoftwareSerial` and usually results in bigger hex files.
**Example:**
```Makefile
OPTIMIZATION_LEVEL = 3
```
**Requirement:** *Optional*
----
### CFLAGS_STD
**Description:**
Controls, *exclusively*, which C standard is to be used for compilation.
Defaults to `undefined`
Possible values:
* With `avr-gcc 4.3`, shipped with the Arduino IDE:
* `undefined`
* `-std=c99`
* `-std=gnu89` - This is the default for C code
* `-std=gnu99`
* With `avr-gcc 4.7, 4.8 or 4.9`, installed by you
* `undefined`
* `-std=c99`
* `-std=c11`
* `-std=gnu89` - This is the default for C code
* `-std=gnu99`
* `-std=gnu11`
For more information, please refer to the [Options Controlling C Dialect](https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html)
**Example:**
```Makefile
CFLAGS_STD = = -std=gnu89
```
**Requirement:** *Optional*
----
### CXXFLAGS_STD
**Description:**
Controls, *exclusively*, which C++ standard is to be used for compilation.
Defaults to `undefined`
Possible values:
* With `avr-gcc 4.3`, shipped with the Arduino IDE:
* `undefined`
* `-std=c++98`
* `-std=c++0x`
* `-std=gnu++98` - This is the default for C code
* `-std=gnu++0x`
* With `avr-gcc 4.7, 4.8 or 4.9`, installed by you
* `undefined`
* `-std=c++98`
* `-std=c++11`
* `-std=c++1y`
* `-std=c++14`
* `-std=gnu++98` - This is the default for C++ code
* `-std=gnu++11`
* `-std=gnu++1y`
* `-std=gnu++14`
For more information, please refer to the [Options Controlling C Dialect](https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html)
**Example:**
```Makefile
CXXFLAGS_STD = = -std=gnu++98
```
**Requirement:** *Optional*
----
### CFLAGS
**Description:**
Flags passed to compiler for files compiled as C. Add more flags to this
variable using `+=`.
Defaults to all flags required for a typical build.
**Example:**
```Makefile
CFLAGS += -my-c-only-flag
```
**Requirement:** *Optional*
----
### CXXFLAGS
**Description:**
Flags passed to the compiler for files compiled as C++. Add more flags to this
variable using `+=`.
Defaults to all flags required for a typical build.
**Example:**
```Makefile
CXXFLAGS += -my-c++-onlyflag
```
**Requirement:** *Optional*
----
### ASFLAGS
**Description:**
Flags passed to compiler for files compiled as assembly (e.g. `.S` files). Add
more flags to this variable using `+=`.
Defaults to all flags required for a typical build.
**Example:**
```Makefile
ASFLAGS += -my-as-only-flag
```
**Requirement:** *Optional*
----
### CPPFLAGS
**Description:**
Flags passed to the C pre-processor (for C, C++ and assembly source flies). Add
more flags to this variable using `+=`.
Defaults to all flags required for a typical build.
**Example:**
```Makefile
CPPFLAGS += -DMY_DEFINE_FOR_ALL_SOURCE_TYPES
```
**Requirement:** *Optional*
----
### OVERRIDE_EXECUTABLES
**Description:**
Override the default build tools.
If set to `1`, each tool (`CC`, `CXX`, `AS`, `OBJCOPY`, `OBJDUMP`, `AR`, `SIZE`, `NM`) must have its path explicitly defined. See `chipKIT.mk`.
**Example:**
```Makefile
OVERRIDE_EXECUTABLES = 1
```
**Requirement:** *Optional*
----
### MONITOR_CMD
**Description:**
Command to run the serial monitor.
Defaults to `screen`
**Example:**
```Makefile
MONITOR_CMD = minicom
```
**Requirement:** *Optional*
----
### PRE_BUILD_HOOK
**Description:**
Path to shell script to be executed before build. Could be used to automatically
bump revision number for example.
Defaults to `pre-build-hook.sh`
**Example:**
```Makefile
PRE_BUILD_HOOK = ~/bin/bump-revision.sh
```
**Requirement:** *Optional*
----
## Avrdude setting variables
### AVRDUDE
**Description:**
Path to `avrdude` utility
Usually can be auto-detected within the parent of `AVR_TOOLS_DIR` or in the `$PATH`
**Example:**
```Makefile
AVRDUDE = /usr/bin/avrdude
```
**Requirement:** *Optional*
----
### AVRDUDE_CONF
**Description:**
Path to `avrdude.conf` file
Usually can be auto-detected within the parent of `AVR_TOOLS_DIR`
**Example:**
```Makefile
AVRDUDE_CONF = /etc/avrdude.conf
# or
AVRDUDE_CONF = /usr/share/arduino/hardware/tools/avrdude.conf
```
**Requirement:** *Optional*
----
### AVR_TOOLS_PATH
**Description:**
Directory where tools such as `avrdude`, `avr-g++`, `avr-gcc` etc. are stored.
Usually can be auto-detected from `AVR_TOOLS_DIR/bin`
**Example:**
```Makefile
AVR_TOOLS_PATH = /usr/bin
# or
AVR_TOOLS_PATH = /usr/share/arduino/hardware/tools/avr/bin
```
**Requirement:** *Optional*
----
### ARDUINO_LIB_PATH
**Description:**
Directory where the standard Arduino libraries are stored.
Defaults to `ARDUINO_DIR/libraries`
**Example:**
```Makefile
# Linux
ARDUINO_LIB_PATH = /usr/share/arduino/libraries
```
**Requirement:** *Optional*
----
### ARDUINO_CORE_PATH
**Description:**
Directory where the standard Arduino cores are stored.
Defaults to `ARDUINO_DIR/hardware/arduino/cores/arduino`
**Example:**
```Makefile
ARDUINO_CORE_PATH = /usr/share/arduino/hardware/arduino/cores/robot
```
**Requirement:** *Optional*
----
### ALTERNATE_CORE_PATH
**Description:**
Path to non-standard cores.
Defaults to `ARDUINO_SKETCHBOOK/hardware/ALTERNATE_CORE`
**Example:**
```Makefile
ALTERNATE_CORE_PATH = ~/sketchbook/hardware/arduino-tiny/cores/tiny
```
**Requirement:** *Optional*
----
### BOARDS_TXT
**Description:**
Path to `boards.txt`
Defaults to `ARDUINO_DIR/hardware/arduino/boards.txt`
**Example:**
```Makefile
BOARD_TXT = ~/sketchbook/hardware/boards.txt
# or
BOARD_TXT = /usr/share/arduino/hardware/arduino/boards.txt
```
**Requirement:** *Optional*
----
### AVRDUDE_ARD_BAUDRATE
**Description:**
Upload speed
Usually can be auto-detected as `upload.speed` from `boards.txt`
**Example:**
```Makefile
AVRDUDE_ARD_BAUDRATE = 19200
```
**Requirement:** *Optional*
----
### AVRDUDE_ARD_PROGRAMMER
**Description:**
Upload protocol
Usually can be auto-detected as `upload.protocol` from `boards.txt`
**Example:**
```Makefile
AVRDUDE_ARD_PROGRAMMER = stk500v1
```
**Requirement:** *Optional*
----
### AVRDUDE_ISP_BAUDRATE
**Description:**
ISP speed if different to `upload.speed`
Defaults to same as `AVRDUDE_ARD_BAUDRATE` or `19200`
**Example:**
```Makefile
AVRDUDE_ISP_BAUDRATE = 19200
```
**Requirement:** *Optional*
----
### AVRDUDE_OPTS
**Description:**
Options to pass to `avrdude`.
Defaults to `-q -V` (quiet, don't verify). User values are not *ANDed* to the defaults, you have to set each option you require.
**Example:**
```Makefile
AVRDUDE_OPTS = -v
```
**Requirement:** *Optional*
----
## Bootloader variables
### BOOTLOADER_FILE
**Description:**
File for bootloader.
Usually can be auto-detected as `bootloader.file` from `boards.txt`
**Example:**
```Makefile
BOOTLOADER_FILE = optiboot_atmega328.hex
```
**Requirement:** *Optional*
----
### BOOTLOADER_PATH
**Description:**
Relative path to bootloader directory.
Usually can be auto-detected as a relative `bootloader.path` from `boards.txt`
Deprecated in 1.5, now part of bootloader.file
**Example:**
```Makefile
BOOTLOADER_PATH = optiboot
# or
BOOTLOADER_PATH = arduino:atmega
```
**Requirement:** *Optional*
----
### BOOTLOADER_PARENT
**Description:**
Absolute path to bootloader file's parent directory.
Defaults to `/usr/share/arduino/hardware/arduino/bootloaders` (Linux)
**Example:**
```Makefile
BOOTLOADER_PARENT = ~/sketchbook/hardware/promicro/bootloaders
BOOTLOADER_PATH = caterina
BOOTLOADER_FILE = Caterina-promicro16.hex
```
Would result in an absolute path to the bootloader hex file of `~/sketchbook/hardware/promicro/bootloaders/caterina/Caterina-promicro16.hex`
**Requirement:** *Optional, unless BOOTLOADER_FILE and/or BOOTLOADER_PATH are user-defined*
----
## ChipKIT variables
### MPIDE_DIR
**Description:**
Path to chipKIT MP IDE
Usually can be auto-detected as `AUTO_MPIDE_DIR` from the defaults `/usr/share/mpide` (Linux) or `/Applications/Mpide.app/Contents/Resources/Java` (OSX)
**Example:**
```Makefile
MPIDE_DIR = ~/mpide
```
**Requirement:** *Optional*
----
### MPIDE_PREFERENCES_PATH
**Description:**
Path to chipKIT `preferences.txt` file.
Usually can be auto-detected as `AUTO_MPIDE_PREFERENCES_PATH` from the defaults `~/.mpide/preferences.txt` (Linux) or `~/Library/Mpide/preferences.txt` (OSX)
**Example:**
```Makefile
MPIDE_PREFERENCES_PATH = ~/chipkit/preferences.txt
```
**Requirement:** *Optional*