Contiki build system
Contiki has a useful and complex build system that consists of multiple Makefiles. These multiple Makefiles make it simple to compile code for different platforms and with different parameters. We do not need to worry about editing the Makefile; instead we can just reuse the files available in the distribution. A complete documentation of the build system can be found here and here
The base Makefile file is located in the root directory: contiki/Makefile.include. It must be included in the user's Makefile. Depending on the target platform, which must be specified by the user, other Makefiles are merged before compilation. The other Makefile may be platform or cpu-dependent, and they can be found in folders: contiki/platform/*/Makefile.platform' and contiki/cpu/*/Makefile.cpu.
Changing the Platform
The default target is native, which compiles code to be executed on the host machine (x86). Other available targets are: "z1, wismote, stk500, sky, etc.". The Sky Motes used in ANRG lab should be burned using target sky.
To compile a code for sky platform we should simply type
make TARGET=sky. To compile for default (native) platform, we should simply type make. It is possible to change the default platform typing
make TARGET=sky savetarget. This creates a file Makefile.target with the definition of the new default platform. The process of defining the default platform affects only the application being developed inside the current directory. If you change your path to another directory where Makefile.target does not exist, the default target will be native again.
Build system can also be used to upload the compiled firmware into the platforms. We just need to append ".upload" to the end of the firmware file name. In order to upload hello-world application, for instance, we should type
Make can also be used to invoke serial-dump-linux application and open the serial port with target platform. Typing
make login, for example, opens up a serial connection with the first device connected to the development machine (usually at /dev/ttyS0). Once in the serial interface, type
help to get a list of commands.