Exporting to Make

mbed OS 2 and mbed OS 5

This is the handbook for mbed OS 2. If you’re working with mbed OS 5, please see the new handbook and API References. For the latest information about exporting to third party toolchains, please see Third party development tools.

Support

Please note, changing the compiler toolchain introduces many degrees of freedom in the system; these differences include the translation of C/C++ code to assembly code, the link time optimizations, differences because of the implementations of the C standard libraries, and differences based on compile and link options. It also makes it a lot harder to share code and questions with other developers, as the context needs to be shared too!

Whilst we support exporting your project and the libraries to an alternate toolchain, we cannot guarantee the same consistency as using the mbed Online Compiler. We will do our best to maintain the exported libraries, project file and makefiles, but please understand we can not cover all cases, combinations or provide support for use of these alternate tools themselves!

"GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files." (Taken verbatim from the GNU Make website).

Make itself does not compile source code. It relies on a compiler like GCC ARM Embedded or Code Sourcery (Sourcery CodeBench). Sourcery CodeBench is a paid tool and can be purchased on the Mentor website. GCC ARM Embedded can be installed for free using instructions found here.

Add compiler to PATH

The current Makefile requires that your compiler is added to your PATH variable. This contradicts the instruction given on the installation website because those instructions are intended for Eclipse, not Make.

For a complete overview of the "export" feature, please refer to our general: Exporting to offline toolchains.

/media/uploads/bridadan/mbed_exporting_online_ide.png

To export your mbed program for use in Make, right-click the program in your program workspace. From the dialog, you can select your desired compiler under the "Export Toolchain" field. Also, be sure to select the correct target platform under the "Export Target" field.

When you choose export, a zip file containing all the files you need for Make will be generated. Unzip it and you are ready to launch make:

Make

$ cd /my/program/directory/
$ ls
main.cpp  Makefile  mbed  mbed.lib

$ make
arm-none-eabi-g++ -c -Os -fno-common -fmessage-length=0 -Wall -fno-exceptions -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections  -DTARGET_LPC1768 -DTOOLCHAIN_GCC_CS -DNDEBUG -std=gnu++98 -I./mbed -I./mbed/LPC1768 -I./mbed/LPC1768/GCC_CS  -o main.o main.cpp
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wl,--gc-sections -Tmbed/LPC1768/GCC_CS/LPC1768.ld -L./mbed -L./mbed/LPC1768 -L./mbed/LPC1768/GCC_CS  -o my_program.elf main.o mbed/LPC1768/GCC_CS/startup_LPC17xx.o mbed/LPC1768/GCC_CS/sys.o mbed/LPC1768/GCC_CS/cmsis_nvic.o mbed/LPC1768/GCC_CS/core_cm3.o mbed/LPC1768/GCC_CS/system_LPC17xx.o -lmbed -lcapi -lstdc++ -lsupc++ -lm -lc -lgcc -lmbed -lcapi -lstdc++ -lsupc++ -lm -lc -lgcc
arm-none-eabi-objcopy -O binary my_program.elf my_program.bin

$ ls
main.cpp  main.o  Makefile  mbed  mbed.lib  my_program.bin  my_program.elf

The binary file (".bin") is ready to be flashed on the mbed.