ArchLinux:ARM:Programming
From Wiki.cyring.fr
(Difference between revisions)
(→Source code) |
(→Source code) |
||
Line 132: | Line 132: | ||
* using the vfp coprocessor | * using the vfp coprocessor | ||
fcalc5.c : [http://code.cyring.fr/FTS/Source/ASM/fcalc5.c download] [http://code.cyring.fr/FTS/?PATH=Source/ASM/fcalc5.c view] | fcalc5.c : [http://code.cyring.fr/FTS/Source/ASM/fcalc5.c download] [http://code.cyring.fr/FTS/?PATH=Source/ASM/fcalc5.c view] | ||
+ | * mixed vector and scalar calculus | ||
+ | vcalc1-1.c : [http://code.cyring.fr/FTS/Source/ASM/vcalc1-1.c download] [http://code.cyring.fr/FTS/?PATH=Source/ASM/vcalc1-1.c view] |
Latest revision as of 10:05, 26 December 2012
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
$ 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
- with ASM inline into C code
- with ASM inline into C code, and selected registers
- using the vfp coprocessor
- mixed vector and scalar calculus