Search |
Compiling QtWebkit with RVCT for ARM-LinuxThere are a lot of make specifications in Qt, but none of them is suitable for RVCT compilation. So, if you want to compile QtWebKit with RVCT, you have two options: either you create a new specification or you can use an existing one with wrapper scripts. In this post I'll describe the second option. Libs, header dependenciesThe dependent libs can be found at
Put them to your SDK directory. (e.g. ~/SDKROOT) For the compilation you still need a cross-compiled Qt. You can find some instructions of this at: http://doc.trolltech.com/4.4/qt-embedded-crosscompiling.html GCC system headersYou can use this GNU toolchain's system headers for the compilation: http://www.codesourcery.com/downloads/public/gnu_toolchain/arm-none-linu... Unpack this to your toolchain directory. (e.g. ~/TOOLCHAIN) Generate a config file for RVCTWhit armcc you can generate the config file for the QtWebKit compilation. export TOOLCHAIN="~/TOOLCHAIN/arm-2008q3" export SDKROOT="~/SDKROOT" armcc --arm_linux_configure --arm_linux_config_file=rvct_config --configure_sysroot=$SDKROOT \ --configure_cpp_headers=$TOOLCHAIN/arm-none-linux-gnueabi/include/c++/4.3.2 This creates a config file named rvct_config, which you can use for the compilation. Wrapper scriptsI use the qws/linux-arm-g++ make specification, and the following wrappers: arm-linux-g++: #!/usr/bin/perl @list = @ARGV; # new switches unshift(@list, "--gnu"); unshift(@list, "--exceptions"); unshift(@list, "--arm_linux_paths"); unshift(@list, "--arm_linux_config_file=".$ENV{'RVCT_CONFIG_FILE'}); unshift(@list, "-D__WCHAR_TYPE_"); unshift(@list, "-D__ARM_EABI__"); unshift(@list, "-DQT_NO_XRENDER"); # needed for gcc headers unshift(@list, "-D'__is_empty\(X\)'=false"); unshift(@list, "-D'__is_pod\(X\)'=true"); unshift(@list, "-D'__has_trivial_destructor\(X\)'=true"); $new_string = join(" ",@list); # delete some switches $new_string =~ s/-Wall|-Wl,|-fno-stack-protector|-enum|-Wreturn-type//g; $new_string =~ s/-fno-strict-aliasing|-Wcast-align|-Wchar-subscripts|-Wformat-security//g; $new_string =~ s/-Wreturn-type|-Wno-unused-parameter|-Wno-sign-compare//g; $new_string =~ s/-Wno-switch|-Wno-switch-enum|-Wundef|-Wmissing-noreturn|-Winit-self|-pipe//g; $new_string =~ s/-ffunction-sections|-fdata-sections|-fvisibility=hidden//g; $new_string =~ s/-fvisibility-inlines-hidden|--gc-sections|--no-undefined|-Wextra|-z,origin//g; # set some switches for RVCT $new_string =~ s/-rpath,/-L--userlibpath=/g; $new_string =~ s/-shared/-L--shared -L--fpic/g; $new_string =~ s/-soname,/-L--soname=/g; $new_string =~ s/-L\//-L--userlibpath=\//g; $new_string =~ s/ -l(\w)/ -L--library=\1/g; $new_string =~ s/-fPIC/--shared --apcs=\/fpic/g; $new_string =~ s/[^L]--userlibpath / -L--userlibpath=/g; # not nice but it works $new_string =~ s/ libjscore\.so / libjscore\.a /g; # for defined paths $new_string =~ s/\"/\\\"/g; # execute the command @out = `armcc $new_string 2>&1`; # Check the output for errors $str = join(" ",@out); if($str =~ /Usage:|No such|error:|Error:| error /) { print "\n--ERROR BEGIN--\n $str \n--ERROR END--\n"; exit(1); } # print the output print "armcc $str"; arm-linux-ar: #!/usr/bin/perl @list = @ARGV; $new_string = join(" ",@list); $new_string =~ s/^cqs / -r /g; @out = `armar $new_string`; Put these wrappes to you cross bin directory. (e.g. ~/CROSSBIN) Builder scriptWith this script you can compile QtWebKit with RVCT: # cross compiled Qt QTDIR="/usr/local/Trolltech/Qt-4.6.0-arm-cross" SDKROOT="~/SDKROOT" export PATH=$QTDIR/bin:$PATH export PATH=~/CROSSBIN:$PATH export RVCT_CONFIG_FILE="rvct_config" export BUILD_WEBKIT_ARGS="QMAKESPEC=qws/linux-arm-g++ CONFIG+=rvct_linker LIBS+=-lm \ LIBS*=-lsqlite3 LIBS*=-lexpat LIBS*=-lfreetype LIBS*=-lz LIBS*=-lXrender \ LIBS+=libc_nonshared.a DEFINES+=__ARM_EABI__ DEFINES=QT_NO_UITOOLS \ QMAKE_CXXFLAGS+=-I$SDKROOT/usr/include LIBS*=-L$SDKROOT/usr/lib LIBS*=-L$SDKROOT/lib" cd WebKit WebKitTools/Scripts/build-webkit --qt --release |
Monthly archive
|
Post new comment