# 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)
*	[ARM variables](#arm-variables)
*	[Ctags variables](#ctags-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 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*

----

### ARM_TOOLS_DIR

**Description:**

Directory where the arm toolchain is installed. `arm-none-eabi-*` should be
within a /bin subdirectory.

Can usually be detected from `$ARDUINO_PACKAGE_DIR` /tools subdirectory when ARM
device support is installed.

**Example:**

```Makefile
ARM_TOOLS_DIR = /usr
# or
ARM_TOOLS_DIR =
/usr/share/arduino/hardware/tools/arm-none-eabi-gcc/VERSION
```

**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 = $(HOME)/gertduino/reset
```

**Requirement:** *Optional*

----

## Arduino IDE variables

### ARDUINO_DIR

**Description:**

Directory where the Arduino IDE and/or core files are stored. Usually can be auto-detected as `AUTO_ARDUINO_DIR`.

**Example:**

```Makefile
# Linux
ARDUINO_DIR = /usr/share/arduino
# Mac OS X
ARDUINO_DIR = /Applications/Arduino.app/Contents/Resources/Java
# Mac OSX with IDE 1.5+
ARDUINO_DIR = /Applications/Arduino.app/Contents/Java
```

**Requirement:** *Optional*

----

### ARDUINO_PACKAGE_DIR

**Description:**

Directory where the Arduino package support files are stored. Can auto-detect based on default OS IDE locations.

**Example:**

```Makefile
# Linux
ARDUINO_PACKAGE_DIR = $(HOME)/.arduino15/packages
# Mac OS X
ARDUINO_PACKAGE_DIR = $(HOME)/Library/Arduino15/packages
# Windows
ARDUINO_PACKAGE_DIR = $(USERPROFILE)/AppData/Local/Arduino15/packages
```

**Requirement:** *Optional*

----

### ARDUINO_PLATFORM_LIB_PATH

**Description:**

Directory where the Arduino platform dependent libraries are stored.
(Used only for Arduino 1.5+)

**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+. This value is not literally the chip architecture but will often be
the chip series within a vendor's 'hardware' folder. For example, will default to `samd` if using Sam.mk.

**Example:**

```Makefile
ARCHITECTURE = arm
```

**Requirement:** *Optional*

----

### ARDMK_VENDOR

**Description:**

Board vendor/maintainer/series.

Defaults to `arduino`.

**Example:**

```Makefile
ARDMK_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 `$(HOME)/sketchbook`

**Example:**

```Makefile
ARDUINO_SKETCHBOOK = $(HOME)/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 (1.0):     `$(HOME)/.arduino/preferences.txt`
*	on Linux (1.5+):    `$(HOME)/.arduino15/preferences.txt`
*	on Mac OS X (1.0):  `$(HOME)/Library/Arduino/preferences.txt`
*	on Mac OS X (1.5+): `$(HOME)/Library/Arduino15/preferences.txt`

**Example:**

```Makefile
ARDUINO_PREFERENCES_PATH = $(HOME)/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` or `make show_submenu`.

**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*

----

### BOARD_CLOCK

**Description:**

Allow selection of f_cpu and fuses specified in `boards.txt` as `{BOARD_TAG}.menu.clock.{BOARD_CLOCK}`.
This works for microprocessor board definitions like ATtiny that specify not only the clock speed but fuse settings as clock overrides.

It also works for f_cpu values specified in `boards.txt` as `{BOARD_TAG}.menu.speed.{BOARD_CLOCK}`.
For example, the Watterott ATmega328PB library [https://github.com/watterott/ATmega328PB-Testing](https://github.com/watterott/ATmega328PB-Testing).

**Example:**

```Makefile
# Select external 16 MHz clock
BOARD_CLOCK=external16
```

**Example:**
```Makefile
# Select 20MHz speed
BOARD_CLOCK=20mhz
```

**Requirement:** *Optional to override main board f_cpu and/or fuse settings.*

----

### 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*

----

### FORCE_MONITOR_PORT

**Description:**

Skip the MONITOR_PORT existance check.

**Example:**

```Makefile
# Enable
FORCE_MONITOR_PORT = true
# Disable (default)
undefine FORCE_MONITOR_PORT
```

**Requirement:** *Optional*

----

### USER_LIB_PATH

**Description:**

Directory where additional libraries are stored.

Defaults to `libraries` directory within user's sketchbook.

**Example:**

```Makefile
# Linux
USER_LIB_PATH = $(HOME)/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*

----

### TARGET

**Description:**

What name you would like for generated target files.

Defaults to the name of your current working directory, but with underscores (_) instead of spaces.

**Example:**

```Makefile
TARGET = my-project
```

Will generate targets like `my-project.hex` and `my-project.elf`.

**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 = $(HOME)/sketchbook/hardware/arduino-tiny/cores/tiny
```

**Requirement:** *Optional*

----

### CORE

**Description:**

Name of the core *inside* the ALTERNATE_CORE or the standard core.

Usually can be auto-detected as `build.core` from `boards.txt`.

**Example:**

```Makefile
# standard Arduino core (undefine ALTERNATE_CORE)
CORE = arduino
# or
CORE = robot
# tiny core (ALTERNATE_CORE = arduino-tiny)
CORE = 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_TYPE

**Description:**

Define Teensy 3.1 usb device type. Default is USB_SERIAL

**Example:**

```Makefile
USB_TYPE = USB_SERIAL
# or
USB_TYPE = USB_HID
# or
USB_TYPE = USB_SERIAL_HID
# or
USB_TYPE = USB_MIDI
# or
USB_TYPE = USB_RAWHID
# or
USB_TYPE = USB_FLIGHTSIM
```

**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`, except in
some 1.5+ cores like attiny where there is a clock submenu.

**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. Also used to define
bootloader port on SAMD devices.

**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*

----

## Compiler/Executable variables

### TOOL_PREFIX

**Description:**

The tool prefix, which gets prepended to the tools like $(TOOL_PREFIX)-gcc, $(TOOL_PREFIX)-g++, etc.
The following tools will be prefixed with '$(TOOL_PREFIX)-':

   * gcc
   * g++
   * as
   * objcopy
   * objdump
   * ar
   * size
   * nm

Defaults to `avr`

**Example:**

```Makefile
TOOL_PREFIX = arm-none-eabi
TOOL_PREFIX = pic32
```

**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` unless you're using toolchain > 4.9.0 in which case we use avr-gcc-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*

----

### GDB_NAME

**Description:**

GDB utility.

Defaults to `arm-none-eabi-gdb`

**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*

----

### OTHER_LIBS

**Description:**

Additional Linker lib flags, for platform support

Defaults to ""

**Example:**

```Makefile
OTHER_LIBS = -lsomeplatformlib
```

**Requirement:** *Optional*

----

### CFLAGS_STD

**Description:**

Controls, *exclusively*, which C standard is to be used for compilation.

Defaults to `undefined` on 1.0.x or `-std=gnu11` on 1.5+ or if you install AVR toolchain > 4.9.0

Possible values:

*	With `avr-gcc 4.3`, shipped with the 1.0 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 or 1.5+ IDE:
	*	`undefined`
	*	`-std=c99`
	*	`-std=c11`
	*	`-std=gnu89`
	*	`-std=gnu99`
	*	`-std=gnu11` - This is the default for C code

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` on 1.0 or `-std=gnu++11` on AVR toolchain > 4.9.0 (e.g. IDE 1.6.10+)

Possible values:

*	With `avr-gcc 4.3`, shipped with the 1.0 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 or 1.5+ IDE:
	*	`undefined`
	*	`-std=c++98`
	*	`-std=c++11`
	*	`-std=c++1y`
	*	`-std=c++14`
	*	`-std=gnu++98`
	*	`-std=gnu++11` - This is the default for C++ code
	*	`-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 `undefined` on 1.0 or `-flto -fno-fat-lto-objects -fdiagnostics-color=$(DIAGNOSTICS_COLOR_WHEN)` on AVR toolchain > 4.9.0 (e.g. IDE 1.6.10+)

**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 `-fpermissive -fno-exceptions` on 1.0
or `-fpermissive -fno-exceptions -fno-threadsafe-statics -flto -fno-devirtualize -fdiagnostics-color`
on AVR toolchain > 4.9.0 (e.g. IDE 1.6.10+)

**Example:**

```Makefile
CXXFLAGS += -my-c++-onlyflag
```

**Requirement:** *Optional*

----

### DIAGNOSTICS_COLOR_WHEN

**Description:**

This variable controls the compiler's diagnostics-color setting, as defined
in CFLAGS or CXXFLAGS, on AVR toolchain > 4.9.0.
Supported values are: `always`, `never` and `auto`.
For more details, see: [Options to Control Diagnostic Messages Formatting]
(https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Language-Independent-Options.html#Language-Independent-Options)

Defaults to `always`.

**Example:**

```Makefile
DIAGNOSTICS_COLOR_WHEN = never
# or
DIAGNOSTICS_COLOR_WHEN = auto
```

**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 files). 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 tool paths and names.

If OVERRIDE_EXECUTABLES is defined, all tools (`CC`, `CXX`, `AS`,
`OBJCOPY`, `OBJDUMP`, `AR`, `SIZE`, `NM`) must have their paths
explicitly defined. This may be used in the rare case where
overriding a path and/or executable name is required.
The "?=" assignment cannot be used because the executable tags
are already implicitly defined by Make (e.g. $(CC) == cc).

**Example:**

```Makefile
OVERRIDE_EXECUTABLES = 1
CC      = /usr/bin/avr-gcc
CXX     = /usr/bin/avr-g++
AS      = /usr/bin/avr-as
OBJCOPY = /usr/bin/avr-objcopy
OBJDUMP = /usr/bin/avr-objdump
AR      = /usr/bin/avr-ar
SIZE    = /some_path/alternative_avr-size
NM      = /some_path/alternative_avr-nm
```

**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 = $(HOME)/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 = $(HOME)/sketchbook/hardware/arduino-tiny/cores/tiny
```

**Requirement:** *Optional*

----

### CORE_VER

**Description:**

Alternate core release version. The Arduino board support packages are within
a sub-directory indicated by this define.

Defaults to package current release.

**Example:**

```Makefile
CORE_VER = 1.6.17
```

**Requirement:** *Optional*

----

### CMSIS_DIR

**Description:**

Path to ARM CMSIS. Normally installed as part of ARM  board support.

Defaults to `ARDUINO_PACKAGE_DIR/tools/CMSIS/4.5.0/CMSIS`

**Example:**

```Makefile
CMSIS_DIR = /usr/share/CMSIS
```

**Requirement:** *Optional*

----

### CMSIS_ATMEL_DIR

**Description:**

Path to CMSIS-Atmel directory. Installed with ARM support package.

Defaults to `ARDUINO_PACKAGE_DIR/tools/CMSIS-Atmel/1.1.0/CMSIS`

**Requirement:** *Optional*
----

### BOARDS_TXT

**Description:**

Path to `boards.txt`

Defaults to `ARDUINO_DIR/hardware/arduino/boards.txt`

**Example:**

```Makefile
BOARD_TXT = $(HOME)/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 = $(HOME)/sketchbook/hardware/promicro/bootloaders
BOOTLOADER_PATH  = caterina
BOOTLOADER_FILE  = Caterina-promicro16.hex
```

Would result in an absolute path to the bootloader hex file of `$(HOME)/sketchbook/hardware/promicro/bootloaders/caterina/Caterina-promicro16.hex`

**Requirement:** *Optional, unless BOOTLOADER_FILE and/or BOOTLOADER_PATH are user-defined*

----

### BOOTLOADER_SIZE

**Description:**

Size of bootloader on ARM devices, ensures correct start address when flashing
application area. Normally parsed from boards.txt

Defaults to `0x2000`

**Requirement:** *Optional*

----

### BOOTLOADER_UNPROTECT

**Description:**

Bootloader unprotect sequence for upload tool. Normally parsed from boards.txt

Defaults to `at91samd bootloader 0`

**Requirement:** *Optional*

----

### BOOTLOADER_PROTECT

**Description:**

Bootloader protect sequence for upload tool. Normally parsed from boards.txt

Defaults to `at91samd bootloader 16384`

**Requirement:** *Optional*

----

### BOOTLOADER_PROTECT_VERIFY

**Description:**

Bootloader protect and verify  sequence for upload tool. Normally parsed from boards.txt

Defaults to `at91samd bootloader`

**Requirement:** *Optional*

----

### BOOTLOADER_UPLOAD_TOOL

**Description:**

Bootloader upload binary to use. Normally parsed from boards.txt.

Defaults to `openocd`

**Requirement:** *Optional*

----

## 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 = $(HOME)/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 `$(HOME)/.mpide/preferences.txt` (Linux) or `$(HOME)/Library/Mpide/preferences.txt` (OSX)

**Example:**

```Makefile
MPIDE_PREFERENCES_PATH = $(HOME)/chipkit/preferences.txt
```

**Requirement:** *Optional*

----

## ARM variables

### UPLOAD_TOOL

**Description:**

Tool to upload binary to device. Normally parsed from boards.txt.

Defaults to `openocd`

**Example:**

```Makefile
UPLOAD_TOOL = gdb
```

**Requirement:** *Optional*

----

### DEBUG

**Description:**

Define to set `DEBUG_FLAGS` and allow stepping of code using GDB.

Defaults to undefined.

**Example:**

```Makefile
DEBUG = 1
```

**Requirement:** *Optional*

----

### GDB_PORT

**Description:**

Server port to use for GDB debugging or upload. Default assumes server running
on localhost but can re-define to use Black Magic Probe serial port.

Defaults to `localhost:3333`

**Example:**

```Makefile
GDB_PORT = /dev/ttyACM0
```

**Requirement:** *Optional*

----

### GDB_OPTS

**Description:**

Optional arguments to parse to GDB command.

Defaults to `-ex "target extended-remote $(GDB_PORT)" -ex "monitor swdp_scan" -ex "attach 1" -ex "load" -d $(OBJDIR) $(TARGET_ELF)`

**Requirement:** *Optional*

----

### GDB_UPLOAD_OPTS

**Description:**

Optional arguments to parse to GDB command when uploading binary only.

Defaults to `GDB_UPLOAD_OPTS = $(GDB_OPTS) -ex "set confirm off" -ex "set target-async off" -ex "set remotetimeout 30" -ex "detach" -ex "kill" -ex "quit"`

**Requirement:** *Optional*

----

### BOSSA

**Description:**

Path to bossac binary.

Can usually be detected from `$ARDUINO_PACKAGE_DIR` /tools subdirectory when ARM
device support is installed.

**Requirement:** *Optional*

----

### BOSSA_OPTS

**Description:**

Flags to pass to bossac command.

Defaults to `-d --info --erase --write --verify --reset`

**Requirement:** *Optional*

----

### OPENOCD

**Description:**

Path to openocd binary.

Can usually be detected from `$ARDUINO_PACKAGE_DIR` /tools subdirectory when ARM
device support is installed.

**Requirement:** *Optional*

----

### OPENOCD_OPTS

**Description:**

Flags to pass to openocd command. If using openocd from non-Arduino
distributions, one should define this with the path to the Arduino openocd script.

Defaults to `-d2`

Example:

```Makefile
OPENOCD_OPTS = $(ARDUINO_PACKAGE_DIR)/$(ARDMK_VENDOR)/tools/openocd/0.9.0-arduino6-static/share/openocd/scripts/ -f $(ARDUINO_PACKAGE_DIR)/$(ARDMK_VENDOR)/hardware/samd/1.6.17/variants/$(VARIANT)/$(OPENOCD_SCRIPT) 
```

**Requirement:** *Optional*


----

## Ctags variables

### TAGS_FILE

**Description:**

Output file name for tags. Defaults to 'tags'.

**Example:**

```Makefile
TAGS_FILE = .tags
```

**Requirement:** *Optional*

----

### CTAGS_OPTS

**Description:**

Additional options to pass to `ctags` command.

**Example:**

```Makefile
# Run ctags in verbose mode
CTAGS_OPTS = -V
```

**Requirement:** *Optional*

----

### CTAGS_CMD

**Description:**

Location of `ctags` binary. Defaults to user path.

**Example:**

```Makefile
CTAGS_CMD = /usr/local/bin/
```

**Requirement:** *Optional*