summaryrefslogtreecommitdiff
path: root/AltOS/building.mdwn
blob: d28b779703a7657604f7cdf456f7942670aba4d7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# Building AltOS

The AltOS source tree has a fairly long list of build dependencies, because
it builds firmware for at least 4 different processor cores, ground station 
software in Java, various utilities in C, etc.  By *far* the easiest way to
build from source is to start with a [Debian](http://debian.org) 'unstable' 
installation and take advantage of Debian tools and processes.  From this
platform, it is possible to build installable packages not only for Debian,
but also for Windows, Mac OS X, and generic Linux.

## Compilers

We use standard gcc and OpenJDK to build all of the ground software, but the
situation for building the firmware is a bit more complicated.  Because we
realize many people may be only interested in working on the ground station
software, or may only care about building firmware for a single target, we
have crafted the Makefile contents to test for the presence of the various
compilers... and will only build firmware for the targets we can find the
right tools for!

### cc1111

The first generation of Altus Metrum products were all based on the TI cc1111,
which has an 8051 core.  We started out using standard SDCC, but Keith made a
number of changes to better support the cc1111, and then SDCC 3.X changed code
generation such that 8051 executables became significantly larger and our code
just wouldn't fit in available flash any more!  

As a result, we maintain a fork of SDCC we call 'cc1111' that is based
on the last upstream version of SDCC 2.X, plus a highly modified sdcdb with
support for the cc1111 debugging interface.  This is avilable as a package in
Debian, or you can find the sources on [git.gag.com](http://git.gag.com)
in the project [debian/cc1111](http://git.gag.com/?p=debian/cc1111;a=summary).

### AVR

We use the standard gcc-avr tools for this target, which thanks to the 
popularity of the [Arduino](http://arduino.cc) community are well taken care 
of in Debian.

### ARM Cortex

Most of the new products we're working on now are based on system on chip
parts using ARM Cortex M3 or ARM Cortex M0 cores.  These require a "bare metal"
toolchain, not the standard ARM compiler and libraries used for ARM Linux.  We
continue to discuss our needs with others in the Debian community and have
high hopes for a suitable toolchain to eventually be part of the main 
distribution.  But, in the meantime, here's what it takes to build a suitable
toolchain in /opt/cortex:

* mkdir /opt/cortex, and ensure it's owned by you (so no root privs are needed)
* clone our [cortex-toolchain](http://git.gag.com/?p=fw/cortex-toolchain;a=summary) with `git clone git://git.gag.com/fw/cortex-toolchain`
* cd into the cortex-toolchain directory, review the list of build dependencies
  documented in the README file, then build using 
  `./summon-arm-toolchain`.  This will download all
  the source packages, unpack them, build everything, and install it all in
  /opt/cortex automatically.  This takes a bunch of disk space and a lot of
  time, so be patient!
* clone our [pdclib](http://git.gag.com/?p=fw/pdclib;a=summary) C library
  repository with `git clone git://git.gag.com/fw/pdclib`
* cd into the pdclib directory, and build using `make ; make install` which
  will build the library using the just-installed cortex tools and deliver
  the results to the /opt/cortex tree

That's it!  You should now have an ARM toolchain targetting bare metal for
both Cortex M0 and M3 variants including a minimal C runtime library.

If you're using a debug/programming interface from ST (either an STlinkV2 USB
dongle or something like a Discovery board) then you may also want to build
and install tools for that as follows:

* clone our fork of the [stlink](http://git.gag.com/?p=fw/stlink;a=xummary) 
  reposirtory with `git clone git://git.gag.com/fw/stlink`
* cd into the stlink directory, and build using 
  './configure --prefix=/opt/cortex; make ; make install'.  This will install
  the stlink library and related utilities in /opt/cortex.