Project

General

Profile

Toolchain » History » Revision 22

Revision 21 (fixeria, 04/18/2022 12:36 PM) → Revision 22/23 (laforge, 07/25/2022 09:03 AM)

h1. Toolchain 

 To compile the target firmware for [[OsmocomBB]] or [[SIMtrace:]], you need a GNU toolchain for ARM. You can either use binary packages provided by your distribution (recommended), or build a toolchain from source code yourself. There are various pre-compiled toolchains available (e.g. Code Sourcery), but not all of them will produce working firmware. We're trying to support all these configurations, but it might take a while to identify the source of a problem. If you have persistent errors when compiling, try using a different package. 

 h3. Binary packages 

 You can use a pre-compiled toolchain provided by your GNU/Linux distribution. 

 For Debian based distributions (Ubuntu, Linux Mint, etc.), use the following command: 

 <pre> 
 $ sudo apt install gcc-arm-none-eabi 
 </pre> 

 For ArchLinux (https://www.archlinux.org/packages/community/x86_64/arm-none-eabi-gcc/): 

 <pre> 
 $ sudo pacman -S arm-none-eabi-gcc arm-none-eabi-newlib 
 </pre> 

 The following versions are confirmed to work: 

 <pre> 
 Name              : arm-none-eabi-gcc 
 Version           : 10.2.0-1 
 --- 
 Name              : arm-none-eabi-binutils 
 Version           : 2.34-1 
 --- 
 Name              : arm-none-eabi-newlib 
 Version           : 3.3.0-1 
 </pre> 

 h3. Building from source 

 If a pre-compiled toolchain provided by your distribution fails to produce working firmware images, you can build your own toolchain known to be working with [[OsmocomBB]], see here: [[GnuArmToolchain]]. 

 

 h3. Building old branches 

 If you need to build the *firmware* from old unmaintained branches (sylvain/burst_ind, sylvain/testing, jolly/testing, etc.), an older version of toolchain is needed. 

 This combination is known to work: 

 * binutils 2.21.1a, 
 * newlib 1.19.0, 
 * gcc 4.8.2. 

 It can be compiled using our "Dockerfiles":https://gitea.osmocom.org/osmocom/docker-playground: "Dockerfiles":https://cgit.osmocom.org/docker-playground/: 

 <pre> 
 $ git clone https://gitea.osmocom.org/osmocom/docker-playground https://git.osmocom.org/docker-playground 
 $ cd docker-playground/arm-none-eabi-gcc-4.8.2 
 $ make 
 </pre> 

 Usage example: 

 <pre> 
 $ cd osmocom-bb 
 $ docker run --user $(id -u) -v $(pwd):/data -it --rm root/arm-none-eabi-gcc-4.8.2 
 # cd /data/src 
 # make firmware 
 </pre> 

 When using toolchain with GCC >=4.8, the firmware can be compiled, but will hang as soon as you want to sync to an ARFCN. 
 This issue has been fixed in master: http://cgit.osmocom.org/osmocom-bb/commit/?id=a903b3c1ee27047c79728b18ff6340d23d1aad2e. 

 

 h3. Mac OS X 

 Apparently the arm-elf-gcc 4.3.2 from ports for MacOS X can compile the firmware as well after symlinking _/opt/local/bin/arm-elf-ranlib_ to _/opt/local/bin/arm-elf-linux-ranlib_ and _/opt/local/bin/arm-elf-strip_ to _/opt/local/bin/arm-elf-linux-strip_. If you omit the links, there will be unresolvable references to symbols in the libraries.
Add picture from clipboard (Maximum size: 48.8 MB)