QtCreator
From Openmoko
Contents |
Introduction
I created a project called "OpenMokoder" which should help to develop Qt4 projects for freerunner. You only need to copy your sourcecode or use the included sample project run the script and you can easy compile, debug, crosscompile, package your project with Trolltechs QtCreator. QtCreator is a very good lightweight Qt IDE with features like embedded Qt Designer, Code completion, debugging, svn, ...
Note:
- This tutorial is tested with Om2009 (but should work with SHR/FSO too)
- The installation process is tested with Kubuntu 8.10 (Jaunty)
Install Toolchain
First of all you have to install the toolchain. If you have already done this skip this step. I will just give a summary of how to do that for copy paste the detailed information can be found at Toolchain
sudo apt-get install gcc g++ autoconf automake binutils libtool libglib2.0-dev ccache libxrender-dev intltool libmokoui2-dev libgconf2-dev mtools fakeroot alien check uboot-mkimage libcurl3 libqt4-dev
Unfortunately the libtool since Ubuntu(intrepid) doesnt't work with the toolchain so you have to install the one from Ubuntu(Hardy)
- deinstall libtool from intrepid/jaunty
sudo apt-get remove libtool
- download libtool from hardy (http://packages.ubuntu.com/de/hardy/libtool)
wget http://ftp.sjtu.edu.cn/ubuntu/pool/main/libt/libtool/libtool_1.5.26-1ubuntu1_i386.deb
or
wget http://ftp.sjtu.edu.cn/ubuntu/pool/main/libt/libtool/libtool_1.5.26-1ubuntu1_amd64.deb
- and install it
sudo dpkg -i libtool_1.5.26-1ubuntu1_i386.deb rm libtool_1.5.26-1ubuntu1_i386.deb
- download the compressed tarfile containing the cross-compilation toolchain
mkdir ~/sources cd ~/sources wget http://downloads.openmoko.org/developer/toolchains/openmoko-i686-20090323-armv4t-linux-gnueabi-toolchain-openmoko.tar.bz2
- either just extract the tarball, it installs (only) to /usr/local/openmoko
cd / sudo tar -xjvf ~/sources/openmoko-i686-20090323-armv4t-linux-gnueabi-toolchain-openmoko.tar.bz2
- or build a debian package with alien and install it
bunzip2 openmoko-i686-20090323-armv4t-linux-gnueabi-toolchain-openmoko.tar.bz2 gzip openmoko-i686-20090323-armv4t-linux-gnueabi-toolchain-openmoko.tar fakeroot alien -d openmoko-i686-20090323-armv4t-linux-gnueabi-toolchain-openmoko.tar.gz sudo dpkg -i openmoko-i686_20090323-2_all.deb
- Change permissions of toolchain that scripts don't need root rights. REPLACE <your-name> (in general with your username)
sudo chown -R <your-name>.<your-name> /usr/local/openmoko/arm
Configure Toolchain
- Install important packages in toolchain
. /usr/local/openmoko/arm/bin/setup-env opkg-target update opkg-target install libpng12-0 libpng12-dev libgcc1 libglib-2.0-0 libgmodule-2.0-0 libgobject-2.0-0 libgthread-2.0-0 libpng-dev libpng3 libxrender-dev libxrender1 libxrandr-dev libxrandr2 libfontconfig-dev libfontconfig1
- Add Angström Repo and QT4.5 libs to toolchain
echo arch base 50 >> /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/etc/opkg.conf echo src/gz base http://www.angstrom-distribution.org/feeds/unstable/ipk/glibc/armv4t/base/ >>/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/etc/opkg.conf opkg-target update
opkg-target install libgcc1 libglib-2.0-0 libgmodule-2.0-0 libgobject-2.0-0 libgthread-2.0-0 libpng12-0
- install with force depends
opkg-target -force-depends install qt4-x11-free qt4-x11-free-dev
- If not done yet install qt sources on Host
sudo apt-get install libqt4-dev
- Check if qmake is linked to qt4 like this
qmake -v
it should look like this
QMake version 2.01a Using Qt version 4.5.0 in /usr/lib
if it is linked to qt3 do the following:
sudo rm /usr/bin/qmake sudo ln /usr/bin/qmake-qt4 /usr/bin/qmake
Configure Freerunner
If Qt libs are not in the feeds
You should NOT install the whole qt4-x11-free metapackage, because it has dependencies which are not compatible and the Freerunner doesn't boot anymore. Because of this we install the libs without the dependancies:
echo arch base 50 >> /etc/opkg/angstrom-feed.conf echo src/gz base http://www.angstrom-distribution.org/feeds/unstable/ipk/glibc/armv4t/base/ >> /etc/opkg/angstrom-feed.conf opkg update opkg -nodeps install libqtgui4 opkg -nodeps install libqtcore4 opkg -nodeps install libqtdbus4 opkg -nodeps install libqtxml4 opkg -nodeps install libqttest4 rm -f /etc/opkg/angstrom-feed.conf opkg update
You may need more Qt4 libs, you can install them the same way.
Install QTCreator
- download binary from:
http://www.qtsoftware.com/downloads/
- easy install via: (Filenames will change)
chmod +x qt-creator-linux-x86-opensource-1.1.0.bin sudo ./qt-creator-linux-x86-opensource-1.1.0.bin
Method 1: OpenMokoder
- OpenMokoder is just a set of folders that contain some scripts, templates and the sample project.
- Install subversion
sudo apt-get install subversion
- Checkout (remember these are only scripts you do not have to compile anything)
svn checkout svn://svn.projects.openmoko.org/svnroot/openmokoder
or
svn checkout https://svn.projects.openmoko.org/svnroot/openmokoder
- Make all scripts executable
cd openmokoder/scripts/ chmod +x *.script cd .. chmod +x *.script
- If your Freerunner has another Ip than 192.168.0.202 please change it in copy.script start.script and packaging.script in the scripts folder
- For the first try I would recommend to use the included sample project
- Run Script
./CreateProject.script sampleproject
- Now switch to Folder /Openmokoder/sampleproject/QtCreator and open the file SampleProject.pro with QtCreator for example by doubleklick
- If you click on "Projects" on the left of QtCreator U should see something like this. In the new QtCreator 1.1 you have to do a right click on the white area to see the "build settings".
- You can see the 3 customized build options
- Host: Builds the sample project on the host
- Freerunner: Crosscompiles the sample project and scp to freerunner /usr/bin/
- Packaging: Packages the sample project and installs the package on the freerunner
Crosscompiling
- Connect your freerunner to your Computer (if necessary use: sudo /etc/init.d/networking/restart)
- Choose "Freerunner" as Build Settings and start compiling with ctrl+b
- You can watch the build process if you chose "Compile Output" at the bottom right
- Once the build process is finished the test program should start on the freerunner
Packaging
- (You must have have run "Freerunner" as Build Settings once before)
- Now choose "Packaging" as Build Settings and hit ctrl+b again
- You can watch the build process if you chose "Compile Output" at the bottom right
- Afterwards the package should be installed on your Freerunner
- You should have a new Icon on the Freerunner Desktop
- The different build steps can be turned on and off
- The BuildStep "Freerunner Autotools" is only needed at the first time or when you add a new file and can afterwards be deactivated then the build process is much faster
NOTE:
The binary for the Freerunner can be found in /openmokoder/sampleproject/src The Host binary can be found in /openmokoder/sampleproject/QtCreator |
Custom Project
If you want to compile your own project just put your Project (It must contain a .pro Poject File) into /Openmokoder/src/ and start
./CreateProject.script projectname
Because the projectname you enter here will also be used for packaging it has to be without capital letters Afterwards continue like with the SampleProject
Adding Librarys
- Install the libs to the toolchain and don't forget the libXY-dev packages
. /usr/local/openmoko/arm/bin/setup-env opkg-target install libXY libXY-dev
- Add the Libs to the CreateProject.script and autotools.script. search for the line
echo "$1_LDADD = -lQtDBus -lQtGui -lQtCore " >> temp2.txt
- and add the lib, for example
echo "$1_LDADD = -lQtDBus -lQtGui -lQtCore -lXY " >> temp2.txt
- Add the Libs to the QtCreator Environment
Build Settings -> Build Environment -> LDFLAGS add
-lXY
Adding Data (pictures, ...)
add file to /openmokoder/YourProjectName/data/ on host and modify /openmokoder/YourProjectName/data/Makefile.in for example:
# # misc. data files # dist_pkgdata_DATA = pic1.png \ pic2.png
Afterwards use build setting packaging
Customize Icon
Just change the Icon in /data/openmoko-sample.png but use the same filename otherwise the Script must be modified
Customize Version Number
Don't know how to do that yet feel free to add it here
What does CreateProject.script do ? (draft)
To be done
Method 2: Making your own custom QMake mkspec
This method provides a very easy and intuitive way for cross-compiling using a custom QMake mkspec configuration. It uses QMake, so the right libraries are automatically included.
Tested under Kubuntu 9.10
- Make your own mkspec by copying an existing one
sudo cp -rf /usr/share/qt4/mkspecs/linux-g++ /usr/share/qt4/mkspec/linux-OM-g++
- Edit the qmake.conf file (gnome users can use gedit instead of kate):
sudo kate /usr/share/qt4/mkspec/linux-OM-g++/qmake.conf
- Change existing content to this one:
# # qmake configuration for linux-OM-g++ # MAKEFILE_GENERATOR = UNIX TEMPLATE = app CONFIG += qt warn_on release incremental link_prl QT += core gui QMAKE_INCREMENTAL_STYLE = sublib include(../common/g++.conf) include(../common/linux.conf) # modifications to g++.conf QMAKE_CC = /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/bin/gcc QMAKE_LINK_C = /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/bin/gcc QMAKE_LINK_C_SHLIB = /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/bin/gcc QMAKE_CXX = /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/bin/g++ QMAKE_LINK = /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/bin/g++ QMAKE_LINK_SHLIB = /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/bin/g++ # modifications to linux.conf QMAKE_AR = /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/bin/ar cqs QMAKE_OBJCOPY = /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/bin/objcopy QMAKE_STRIP = /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/bin/strip QMAKE_INCDIR_QT = /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/include/qt4 QMAKE_LIBDIR_QT = /usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib load(qt_config)
- Now use the following build steps:
qmake-qt4 /path/to/your/project/project.pro -r -spec linux-armv4-g++ make -w in /path/to/your/project
NOTE:
You can do this once in the console and then you can Import this existing build settings in Qt Creator for future use. |
- Copy the compiled project to your Neo Freerunner
scp /path/to/your/project/project root@192.168.0.202:/usr/bin/.
- Run the project either by using SSH or by using the terminal on your Neo Freerunner
Successfully tested with...
(Please add information here if the tutorial succeeds)
* Host Kubuntu Jaunty (9.04) Freerunner Om2009 (testing4) / SHR-unstable * Host OpenGEU Jaunty (9.04) Freerunner SHR-unstable
Todo
- Better documentation in the OpenMokoder scripts
- Add Information here what Createproject.script exactly does
- Information about other Distributions as well on the Freerunner as on the Host
Issues
SSH
- You should be able to connect to your freerunner via SSH else some scripts do not work properly
- Try if
ssh root@192.168.0.202
- works
- The best is using public key authentication that you were not asked for the password
missing libs
If the following error message appears while compiling:
libstdc++.so.6: cannot open shared object file: No such file or directory
Just install the missing lib
opkg install libstdc++6
Packaging Problems
if following error message appears in build option packaging:
/usr/local/openmoko/arm/bin/om-make-ipkg ../../$1 .: 10: Can't open /usr/local/openmoko/arm/setup-env
Change path in /usr/local/openmoko/arm/bin/om-make-ipkg on the host from:
/usr/local/openmoko/arm/setup-env
to:
/usr/local/openmoko/arm/bin/setup-env