In order to build MMDVM, you need to tell the Arduino GUI to link with the
CMSIS DSP library, which is doesn't do by default.

My development is on Windows and so I can vouch for the following instructions.

For Arduino 1.6.3 with SAM 1.6.4
--------------------------------

1. Go to the where the platform.txt file is located. On my Windows machine it's
in:

C:\Users\Jonathan\AppData\Roaming\Arduino15\packages\arduino\hardware\sam\1.6.4

On Mac OS X it's located in:

/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/sam
Or
~/Library/Arduino15/packages/arduino/hardware/sam/1.6.6

2. You'll need to open the file in a text editor and find the line:

## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group "{build.path}/syscalls_sam3.c.o" {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.path}/{archive_file}" -Wl,--end-group -lm -gcc

In my version it's line 73.

3. Modify it to read as follows:

## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" {compiler.c.elf.flags} -mcpu={build.mcu} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group "{build.path}/syscalls_sam3.c.o" {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.system.path}/CMSIS/CMSIS/Lib/ARM/arm_cortexM3l_math.lib" "{build.path}/{archive_file}" -Wl,--end-group -lm -gcc

The change is near the end, and is the addition of:

"{build.system.path}/CMSIS/CMSIS/Lib/ARM/arm_cortexM3l_math.lib"

Which is the CMSIS AMR3 DSP library for little-endian operation.

4. Save the file and start up the Arduino GUI and build MMDVM.

I would like to get instructions for doing the same on a Linux platform. As a
starter find the relevent platform.txt and try adding:

"{build.system.path}/CMSIS/CMSIS/Lib/ARM/libarm_cortexM3l_math.a"

or maybe:

"{build.variant.path}/libarm_cortexM3l_math.a"

Likely on Linux

"{build.system.path}/CMSIS/CMSIS/Lib/GCC/libarm_cortexM3l_math.a"

As with Arduino 1.6.7 with SAM 1.6.6, see below.


For Arduino 1.6.7 with SAM 1.6.6 
--------------------------------
(checked OK on Arduino 1.6.11 and SAM 1.6.9)

1. Go to the where the platform.txt file is located. On my Windows machine it's
in:

C:\Users\Jonathan\AppData\Local\Arduino15\packages\arduino\hardware\sam\1.6.6

On Mac OS X it's located in:

/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/sam

On Linux, it's located in my home directory, downloaded and extracted from Arduino website, but must be installed.

/home/m1geo/arduino-1.6.7/hardware/arduino/sam 

or

/home/m1geo/.arduino15/packages/arduino/hardware/sam/1.6.9 (if you let the board/library manager install SAM)


I (M1GEO) found it was necessary to download SAM-1.6.6 outside of the Arduino IDE, and manually extract the files. 
  The Board Manager didn't seem to install the SAM files correctly. Here's how I did it:
  
  a) wget http://downloads.arduino.cc/cores/sam-1.6.6.tar.bz2 -O /tmp/sam-1.6.6.tar.bz2 (download and save in /tmp)
  b) cd arduino-1.6.7/hardware/arduino/ (Arduino root, here, in my home directory)
  c) tar xvfj /tmp/sam-1.6.6.tar.bz2

2. You'll need to open the file (platform.txt) in a text editor and find the line:

## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" -mcpu={build.mcu} -mthumb {compiler.c.elf.flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--start-group "{build.path}/core/syscalls_sam3.c.o" {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.path}/{archive_file}" -Wl,--end-group -lm -gcc

In my version it's line 73.

3. Modify it to read as follows:

## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" -mcpu={build.mcu} -mthumb {compiler.c.elf.flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--start-group "{build.path}/core/syscalls_sam3.c.o" {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.system.path}/CMSIS/CMSIS/Lib/ARM/arm_cortexM3l_math.lib" "{build.path}/{archive_file}" -Wl,--end-group -lm -gcc

The change is near the end, and is the addition of:

"{build.system.path}/CMSIS/CMSIS/Lib/ARM/arm_cortexM3l_math.lib"

On Linux, the path was found to differ slightly (GCC instead of ARM):

"{build.system.path}/CMSIS/CMSIS/Lib/GCC/libarm_cortexM3l_math.a"

Which is the CMSIS AMR3 DSP library for little-endian operation.

4. Save the file and start up the Arduino GUI and build MMDVM.

For Arduino 1.6.9 with SAM 1.6.8
--------------------------------

1. Locate platform.txt. On Ubuntu 14.04 LTS x86_64 OS it is in:

/home/$user/.arduino15/packages/arduino/hardware/sam/1.6.8/

2. Open the file in a text editor and change the line:

## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" -mcpu={build.mcu} -mthumb {compiler.c.elf.flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--start-group {compiler.combine.flags} {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.path}/{archive_file}" -Wl,--end-group -lm -gcc

to

recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" -mcpu={build.mcu} -mthumb {compiler.c.elf.flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" {compiler.c.elf.extra_flags} -o "{build.path}/{build.project_name}.elf" "-L{build.path}" -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--start-group {compiler.combine.flags} {object_files} "{build.variant.path}/{build.variant_system_lib}" "{build.system.path}/CMSIS/CMSIS/Lib/GCC/libarm_cortexM3l_math.a" "{build.path}/{archive_file}" -Wl,--end-group -lm -gcc

3. Save the file, open the Arduino IDE and build MMDVM
