The steps of this tutorial have been tested on an ubuntu-x86 box. If you don't have linux installed on a PC, you can use:
pdax86 is just like pdaxrom on your Zaurus, except that it runs on a desktop pc. The benefit of using this distribution rather than another one is that it contains all the libraries and utilities with which the cross-compiler has been built.
Not the cross compiler will not work under cygwin, MacOsx or non x86 linux (ie linux-ppc). The cross compiler contains linux-x86 binaries.
ubuntu@ubuntu:/$ cd / ubuntu@ubuntu:/$ sudo tar jxvf ~/Desktop/cross-sdk-armv5tel-cacko-linux-3.4.5-2.2.5-softfloat.tar.bz2
If you use pdax86, you can skip this step. pdaxrom uses libiconv to avoid the dependency on gconv. However most recent linux distributions use the functions from the glibc library rather than a separate libiconv. If your system doesn't have libiconv.so.2 installed, for instance if you get the error:
error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directorywhile running arm-cacko-linux-gcc, you need to install the library.
First download libiconv.so.2, place it in /opt/cross/arm/3.4.5-xscale-softvfp/lib/ and make it executable:
ubuntu@ubuntu:/$ sudo mv ~/Desktop/libiconv.so.2 /opt/cross/arm/3.4.5-xscale-softvfp/lib/libiconv.so.2 ubuntu@ubuntu:/$ sudo chmod a+x /opt/cross/arm/3.4.5-xscale-softvfp/lib/libiconv.so.2
Then modify /opt/cross/arm/3.4.5-xscale-softvfp/runsdk.sh add the line, somewhere with the other export, before bash:
export LD_LIBRARY_PATH=/opt/cross/arm/3.4.5-xscale-softvfp/libFor instance use:
ubuntu@ubuntu:/$ sudo gedit /opt/cross/arm/3.4.5-xscale-softvfp/runsdk.sh
That's it, the cross-compiler is installed
The cross-compiler contains a little script that will set up the right environment variables: runsdk.sh. Use the sdk only in a terminal where you have previously run this script. The script does not set the environment of the whole system.
ubuntu@ubuntu:~$ /opt/cross/arm/3.4.5-xscale-softvfp/runsdk.sh Type exit for leave armv5tel-cacko-linux cross environment. ubuntu@ubuntu:~$
ubuntu@ubuntu:~$ cd ubuntu@ubuntu:~$ echo -e '#include "stdio.h"\n int main(){ printf("Hello World\\n"); }' > hello.c ubuntu@ubuntu:~$ armv5tel-cacko-linux-gcc -o hello hello.c ubuntu@ubuntu:~$ file hello hello: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), not stripped ubuntu@ubuntu:~$You can try now to run "hello" on you zaurus. Hopefully you have successfully cross-compiled your first programs for pdaxrom. :)
ubuntu@ubuntu:~$ wget http://links.twibright.com/download/links-2.1pre20.tar.gz ubuntu@ubuntu:~$ tar zxvf links-2.1pre20.tar.gz ubuntu@ubuntu:~/links-2.1pre20$ cd links-2.1pre20
ubuntu@ubuntu:~/links-2.1pre20$ ./configure --help
in most cases running "./configure --host=armv5tel-cacko-linux --build=i686-linux" is enough but here it fails :
configure: error: no acceptable cc found in $PATH
We need to specify the compiler using the CC environement variable, like this:
ubuntu@ubuntu:~/links-2.1pre20$ CC=armv5tel-cacko-linux-gcc ./configure --host=armv5tel-cacko-linux --build=i686-linux --enable-graphics --enable-javascript
I have also added 2 more options for graphics and javascript support
This is enough to configure links2, but it's not allways that easy. Other options and variables that you might need to set:
But even with these, configure might still fail. Cross-compilation is not allways straightforward, you can try to get some help on the oesf.org forums
on ubuntu you might need to install the make package:
ubuntu@ubuntu:~$ sudo apt-get install make
We are now ready to launch the compilation:
ubuntu@ubuntu:~/links-2.1pre20$ make
Hopefully after some time the compilation should end succsessfully.
first we are going to create a directory where the application is to be installed:
ubuntu@ubuntu:~/links-2.1pre20$ mkdir ipkg-tempnext we specify the destination using the variable DESTDIR:
ubuntu@ubuntu:~/links-2.1pre20$ make DESTDIR=/home/ubuntu/links-2.1pre20/ipkg-temp/ installAgain, not all applications uses the DESTDIR variable, to check this I usually do:
ubuntu@ubuntu:~/links-2.1pre20$ grep DESTDIR Makefile DESTDIR = $(mkinstalldirs) $(DESTDIR)$(bindir) echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/If it returns something, then there is a good chance that DESTDIR is valid.
Now you have an install tree that you can put and try on your Zaurus in ipkg-tmp/
ubuntu@ubuntu:~/links-2.1pre20$ cd ipkg-temp/usr/local/bin/ ubuntu@ubuntu:~/links-2.1pre20/ipkg-temp/usr/local/bin$ ls -l links -rw------- 1 ubuntu ubuntu 4720295 2005-12-28 16:33 links ubuntu@ubuntu:~/links-2.1pre20/ipkg-temp/usr/local/bin$ armv5tel-cacko-linux-strip links ubuntu@ubuntu:~/links-2.1pre20/ipkg-temp/usr/local/bin$ ls -l links -rw------- 1 ubuntu ubuntu 3018352 2005-12-29 03:45 links ubuntu@ubuntu:~/links-2.1pre20/ipkg-temp/usr/local/bin$Sometimes the Makefile provides an install-strip target, that will strip the binaries for your. here:
ubuntu@ubuntu:~/links-2.1pre20$ make DESTDIR=/home/ubuntu/links-2.1pre20/ipkg-temp/ install-stripinstall-strip fails because it tries to use "strip" instead of "armv5tel-cacko-linux-strip". Passing an environment variable STRIP during the configuration might solve this problem.