Blog Code Forum

ArchLinux:ARM:Programming

From Wiki.cyring.fr

Jump to: navigation, search

Contents

Programming

Cross-compiling

Setup

x86_64 <SERVER>
$ yaourt -S arm-linux-gnueabi-gcc arm-linux-gnueabi-binutils arm-linux-gnueabi-eglibc

---PKGBUILD (eglibc)---
build() {
...
  export CFLAGS="${CFLAGS} -U_FORTIFY_SOURCE  -mlittle-endian -mhard-float -O2"
...
}
---PKGBUILD---

---PKGBUILD (gcc)---
build() {
...
        --disable-softfloat \
        --with-float=hard \
...
}
---PKGBUILD---

Usage

x86_64 <SERVER>
$ export CC="arm-linux-gnueabi-gcc"
$ export LD="arm-linux-gnueabi-ld"
$ export CXX="arm-linux-gnueabi-g++"
$ export AR="arm-linux-gnueabi-ar"
$ export AS="arm-linux-gnueabi-as"
$ export LINK="g++"

$ makepkg -A --config arm-makepkg.conf

$ scp package-armv6h.pkg.tar.xz <login>@RasPi:~/tmp
  • arm-makepkg.conf
CARCH="armv6h"
CHOST="armv6l-unknown-linux-gnueabihf"
CFLAGS="-march=armv6 -mfloat-abi=hard -mfpu=vfp -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
CXXFLAGS="-march=armv6 -mfloat-abi=hard -mfpu=vfp -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
LDFLAGS=""
MAKEFLAGS="-j9"
BUILDENV=(fakeroot !distcc color !ccache check !sign)
DISTCC_HOSTS=""
OPTIONS=(!strip docs libtool emptydirs zipman purge !upx)
ARM <TARGET>
$ yaourt -U ~/tmp/package-armv6h.pkg.tar.xz

Distributed compilation [DRAFT]

ARM <MASTER>

# pacman -S base-devel distcc
# pacman -S gdb ddd

# nano /etc/makepkg.conf
# nano /etc/distcc/hosts
/etc/makepkg.conf
CARCH="armv6h"
CHOST="armv6l-unknown-linux-gnueabihf"
CFLAGS="-march=armv6 -mfloat-abi=hard -mfpu=vfp -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -$
CXXFLAGS="-march=armv6 -mfloat-abi=hard -mfpu=vfp -O2 -pipe -fstack-protector --param=ssp-buffer-size=4$
LDFLAGS=""
MAKEFLAGS="-j3"
BUILDENV=(fakeroot distcc color !ccache check !sign)
DISTCC_HOSTS="<SERVER>"
/etc/distcc/hosts
<SERVER>

x86_64 <SERVER>

# pacman -S distcc

# nano /etc/makepkg.conf
# nano /etc/conf.d/distccd
# nano /etc/hosts.allow

# systemctl enable distccd
# systemctl start distccd
/etc/makepkg.conf
MAKEFLAGS="-j9"
/etc/conf.d/distccd
DISTCC_ARGS="--user nobody --allow 192.168.1.0/24"
/etc/hosts.allow
distccd:192.168.1.

Sample

Calculator

cross compile

ddd-ARM_001-300x239.png

$ cd
$ nano src/fcalc.c

$ export DISTCC_VERBOSE=1
$ export DISTCC_HOSTS='<SERVER>'

$ distcc arm-linux-gnueabi-gcc -g -c src/fcalc.c
debug
$ ddd bin/fcalc
Source code
  • C only, no ASM

fcalc.c : download view

  • with ASM inline into C code

fcalc2.c : download view

  • with ASM inline into C code, and selected registers

fcalc3.c : download view

  • using the vfp coprocessor

fcalc5.c : download view

  • mixed vector and scalar calculus

vcalc1-1.c : download view

Personal tools