# Use the Web Builder

The Mizar32 Web Builder at http://builder.simplemachines.it lets you customise the firmware in several ways and will build you a new firmware image without you having to do any of this horrible stuff.
If that doesn't do enough for you, or if you just enjoy this kind of thing, then take a deep breath and...

# Install an AVR32 cross-compiler
## On Linux
### Atmel AVR 32-bit Toolchain 3.4.2

The cross-compiler for Linux is the Atmel AVR Toolchain for Linux.
At the time of writing, April 2013, the latest version is Atmel AVR Toolchain 3.4.2, based on the GNU C Compiler version 4.4.7.
To skip the Atmel registration form, you can use these quick download links:
* Atmel AVR 32-bit Toolchain 3.4.2 - Linux 32-bit
* Atmel AVR 32-bit Toolchain 3.4.2 - Linux 64-bit
You will also need
* Atmel AVR Toolchain 3.4.2 - Header Files
and, if you are interested in building the toolchain yourself, the source code is here:
* Atmel AVR 32-bit Toolchain 3.4.2 - Source code

#### Fetching and unpacking the toolchain

Here we show the steps to install the 32-bit version:
then, to use it, once per session:
you can, set the include path (C_INCLUDE_PATH), to use atmel-headers-6.1.3.1475 with avr32.
For the 64-bit version, replace every "x86" in the above with "x86_64"

#### Installing it as a Debian/Ubuntu package

To make a Debian/Ubuntu package out of this, do the above, then go:
or, for the 64-bit version, do the same thing in avr32-gnu-toolchain-linux_x86_64 and rename the .deb file to ..._amd64.deb
If you had installed their old 2.4.2 Ubuntu packages, you will need to remove those first:
then you can install the new toolchain with
(to remove it again, sudo apt-get purge avr32-gnu-toolchain)

### Build a toolchain from source code

ct-ng, a fork of crosstool-ng, builds better AVR32 cross compilers for you:
By default, it installs the cross-toolchain under your home directory, so before building eLua you need to say:

## On Windows

Atmel also provide the Atmel AVR Toolchain for Windows as a setup.exe, for which the quick download link is:
* Atmel AVR Toolchain 3.4.2 for Windows

# Install the build system

The Alcor6L build system (same as the official elua0.9) uses "scons" and "gcc". The eLua/Alcor6L sources are under git, so install those.
On Debian or Ubuntu:

# Download the sources
## Stable release

The latest stable source release is elua0.9, which fully supports the Mizar32 boards.
An alternative is:

## The current development version
# The eLua project

Please note: The (bleeding edge) eLua build system has changed, so the instructions using scons will need changing. Alcor6L on the other hand doesn't have this problem. It uses scons

# Compile eLua/Alcor6L
## For Mizar32 A and B

The 256KB and 512KB flash/64MB internal RAM versions of Mizar32 use the same eLua/Alcor6L firmware. Use this command:
If you're compiling the eLua sources, the build will create a file elua_lua_at32uc3a0256.elf. On the other hand if you're compiling the Alcor6L sources, it will create a file Alcor6L_elua_fp_at32uc3a0256_<timestamp>.elf. The <timestamp> indicates the date of the build.
Alcor6L will by default compile eLua (version 0.9). To use another language (for example, Lisp) on the Mizar32, use the following:
The above will generate Alcor6L_picolisp_fp_at32uc3a0256_<timestamp>.elf. The generated file can be programmed into the Mizar32 boards in various ways: see the chapter Flashing firmware.
To build a version of the eLua interpreter where all numeric variables are integers instead of floating point values, which is smaller and slightly faster, use:

## For Mizar32 C

In 128KB of flash memory you can fit the 8KB DFU bootloader and a 120K integer version of eLua. Standard eLua for the Mizar C, compiled with
produces a firmware with most of the eLua modules omitted, leaving just the PIO, Timer and UART modules.
The Mizar32 branch of eLua has a series of modification to reduce the code size so as to be able to include all the eLua modules except for the Ethernet module. The features that it removes from eLua are:
* the eLua shell (it runs the Lua interpreter directly);
* Lua interrupts (an option available with the GPIO, Timer and UART modules);
* the Lua debug module, which is of little use in an embedded system;
* dump, used to write compiled code or Lua data into files;
* undump, used to read the same back in, or to load precompiled Lua bytecode from *.lc files;
* collectgarbage and gcinfo, used to monitor and fine-tune eLua's use of RAM;
* the Emergency Garbage Collector, used to improve the performance of systems with very little RAM.
To use this branch, fetch a copy of it:
and compile it thus:

# Program the firmware to the board

When the compilation is finished, it should have created a file called something like elua_lualong_at32uc3a0256.elf which can be programmed into the Mizar32 board in various ways: see the chapter on Flashing firmware.
If you will be using dfu-programmer to do this, you will first need to convert your .elf file to a .hex file. For example: