ELLCC is a project aiming at creating a multi-target cross compilation environment for embedded systems. which makes use of Clang and the LLVM compiler infrastructure. QEMU is used for cross-platform testing. The project goals are to implement the following key features: A functional C/C++ compiler based on Clang (ecc) Multi-target support: ARM, i386, Microblaze, Mips, Nios2, PowerPC, PowerPC64, Sparc and X86_64 Multi-OS support: Linux, Standalone, … A complete test environment that allows automatic unit and integration testing of the run-time environment and complete executables. Support of a wide variety of target processors from armv4 to armv7, several mips cores, i386, and more. The project is still being developed, and ELLCC is in a pre-release state. ELLCC is composed of the following components: ecc – The ELLCC C/C++ compiler, a single executable with gcc compatible options. binutils – The GNU binutils package. libecc – The C standard library based on the musl standard […]
ACE CoSy Compiler Framework Outperforms LLVM by up to 25% for ARM9 processors
ACE (Associated Compiler Experts) announced that their 2012 CoSy compiler development system delivers better performance than the latest LLVM 3.0 compiler on ARM9 processors. Using an ARM9 processor as reference, CoSy compiler framework (2012) shows more than 15% performance improvement using Livermore benchmark loops and 25% in MiBench against LLVM 3.0. The CoSy compiler framework is also more than 7% ahead of LLVM on the EEMBC CoreMark benchmark. The company explains this feat by the use of “CoSy’s unique flexible phase ordering of cutting-edge code optimizations and the addition of new CoSy features” such as compile-time code generator feedback injected into optimization algorithms in order to augment realistic and accurate decision making in architecture-independent optimizations. ACE did not publish the benchmark results publicly, and I could not find any reference to “cosy” or “ace” in EEMBC Coremark database, so I could not check those results myself. CoSy Compiler Framework is […]
Getting Started with MultiArch (armel / armhf) in Ubuntu
Until now, I used xapt and dpkg-cross to install cross libraries for armel, but since I’ve upgraded to Ubuntu 12.04, it appears to be broken. I’ve contacted Linaro about this issue, and the “cross-building” expert at Linaro (wookey) recommended me to use multiarch instead, as xapt/dpkg-cross will be eventually deprecated. He provided me an example showing how-to use multiarch to build Chromium. I’ve been looking for a “How-to multiarch”, but haven’t been able to find something really clear and simple, so I thought I would post it here. In the example, they used a chroot for cross-building, which is probably a good idea to avoid messing up with the system. It’s also possible multiarch is not 100% reliable, and I’ve read stories where people messed up their system when using multiarch with i386 (32-bit) and amd64 (64-bit). Preparing a chroot for cross-building I’ll use a 32-bit Ubuntu precise chroot, but […]
Building Chromium OS for Raspberry Pi (ARMv6)
I had previously written the instructions to build an older version of Chromium (via Berkelium) for ARM using Beagleboard/Overo rootfs in order to use it with Xibo digital signage. Recently I’ve been contacted by hexxeh, who maintains Chromium OS vanilla builds for x86 and MacOS computer, as he intends to provide Chromium OS for the Raspberry Pi, and you should be able to get a SD card image once everything is working from the site above. Today, I’ll post the steps followed to build Chromium OS LKGR (“the latest revision to pass only unit tests”) optimized for ARMv6 processor with soft-float support, which is the type of processor (Broadcom BCM2835) used in the Raspberry Pi. Please note that although it can build, it still does not run properly and a few more changes are needed. First, you’ll need a fast machine to build Chromium OS in a reasonable amount of […]
Cross-compiling the ARM Linux Kernel in Ubuntu 12.04 LTS
Yesterday I installed Ubuntu 12.04 ‘Precise’ Beta 1 in Virtual Box to give it a try (I could not manage to have HUD working btw), and today, I’ve noticed an article entitled “Ubuntu 12.04 ‘precise’ and cross compilation of ARM kernels” explaining how to build Linaro ARM kernel in Ubuntu 12.04. So I’ve decided to give it a try, especially it seems straightforward. I followed the instructions in the aforementioned link, it basically worked except I had to install dpkg-dev package that also installed the build essentials (gcc, g++, etc…) and use sudo for some commands. You’ll notice the name change for the ARM gcc toolchain as it now uses hard-float by default which seems to provide quite a boost in performance for the Pandaboard. Here are the steps I followed: Install the ARM GCC cross compiler and the development package of dpkg:
1 |
sudo apt-get install gcc-arm-linux-gnueabihf dpkg-dev |
Retrieve the kernel source:
1 |
apt-get source linux-source-3.2.0 |
Install […]
Cross-compiling FreeRDP Windows Remote Desktop Client for ARM Linux (in Debian/Ubuntu)
Last month, I wrote the instructions to Cross-compile VMWare View for ARM Linux as I intended to “run” Windows 8 in an ARM client (most likely the Raspberry Pi) via PCoIP. However, the procedure to do so seems slightly complicated and requires to purchase a specific VMWare server software (VMware vSphere 5) or download a free trial. The good news is that there are other options such as VNC or RDP (Remote Desktop protocol) and Remmina, a Remote Connection client is available for Linux. As nothing is ever simple, another issue occured: if you are using a stable release of Linux (e.g. Debian Squeeze, Ubuntu 11.10) they come with older version of Remmina and either the connection is successful but the display is garbled (Version 0.7.x) either it crashes when connecting to Windows 8 via RDP (Version 0.8.x). The latest version (Remmina 1.0.0) fixes the problem and is available in […]
How to build qemu-system-arm in Linux
Most (all?) Linux distributions have a binary package for qemu-system (including qemu-system-arm) in order to emulate non-x86 targets such as ARM, MIPS, PPC, Alpha and more. However, in some case you may need to very latest version of qemu-system and it may not be able yet for your distribution. Here’s how to do to build qemu-system-arm without building all qemu-system-***: Download the latest stable version of qemu (qemu 1.0.1 at the time this post was written):
1 |
wget http://wiki.qemu.org/download/qemu-1.0.1.tar.gz |
or get the latest source code (development tree) which has the very latest features and bug fixes, but may not work or compile:
1 |
git clone git://git.qemu.org/qemu.git |
or get the latest source code from linaro (which may be more up-to-date for ARM targets):
1 |
git clone git://git.linaro.org/qemu/qemu-linaro.git |
Configure qemu to build ARM targets:
1 2 |
cd qemu ./configure --target-list=arm-softmmu,arm-linux-user |
Build and install qemu-system-arm:
1 2 |
make -j 2 sudo make install |
Verify the latest version of qemu-ssytem-arm is installed:
1 2 |
# qemu-system-arm --version QEMU emulator version 1.0,1, Copyright (c) 2003-2008 Fabrice Bellard |
Jean-Luc Aufranc (CNXSoft)Jean-Luc started CNX Software in 2010 as a part-time […]
Cross-compiling Berkelium for ARMv6 with Emdebian Toolchain
Berkelium is a BSD licensed library that provides off-screen browser rendering via Google’s open source Chromium web browser. This library is used by Xibo Digital Signage Player python client and I already cross-compiled it using Ubuntu/Linaro toolchain. Since I need it to run on ARMv6 for the Raspberry Pi, I have cross-compiled it again in Debian with Emdebian ARM cross-compiler. Here are the instructions I followed to build Berkelium and Chromium for ARMv6 in Debian. First, you’ll need to install some development libraries for ARM: sudo /usr/share/pdebuild-cross/xapt -a armel libnss3-dev libgconf2-dev libgnome-keyring-dev libgtk2.0-dev libgnome-keyring-dev libgtk2.0-dev libxtst-dev libpam-dev libxss-dev libdbus-glib-1-dev libnss3-dev libgconf2-dev libgnome-keyring-dev libxss-dev libdbus-glib-1-dev libnspr4-dev libglib2.0-dev libjpeg-dev libasound2-dev libbz2-dev libgcrypt-dev libspeex-dev libcups2-dev and some tools on the build machine: sudo apt-get install git-core subversion cmake doxygen gyp gperf flex bison On 64-bit build machines (required for debug build) also install g++-multi and possibly some 32-bit libraries with xapt:
1 |
sudo apt-get install g++-multilib |
If […]