交叉编译 Webkit (基于 GTK + DFB )
以下的链接是具体的过程:
http://ppbabytiger.spaces.live.com/Blog/cns!549302309A9552BE!397.entry
Name | Version |
Zlib | 1.2.3 |
Libpng | 1.2.10 |
Tiff | 3.8.2 |
Libtool | 1.5.24 |
Jpegb | V6b |
Freetype | 2.1.10 |
Libxml | 2.6.30 |
Fontconfig | 2.4.2 |
Olo directFB | In PDK |
Glib | 2.12.0 |
Atk | 1.20.0 |
Cairo | 1.4.2 |
Pango | 1.16.2 |
Gtk+ | 2.10.1 |
ICU | 4c-3-6 |
Libxslt | 1.1.22 |
Libsqlite | 3.5.6 |
Curl | 7.18.0 |
Webkt | r29711 |
2.1.1 Source cross.sh
You can find cross.sh under root directory of subversion. Below gives one example, you can do modification as you need.
export WORK_DIR=`pwd`
mkdir -p $WORK_DIR/rootfs
export ROOTFS_DIR=$WORK_DIR/rootfs
export PKG_CONFIG_PATH=$ROOTFS_DIR/usr/local/lib/pkgconfig:$ROOTFS_DIR/usr/lib/pkgconfig
if [ ! -e "$ROOTFS_DIR/usr/local/include" ]; then mkdir -p $ROOTFS_DIR/usr/local/include;fi;
if [ ! -e "$ROOTFS_DIR/usr/local/lib" ]; then mkdir -p $ROOTFS_DIR/usr/local/lib; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/etc" ]; then mkdir -p $ROOTFS_DIR/usr/local/etc; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/bin" ]; then mkdir -p $ROOTFS_DIR/usr/local/bin; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/share" ]; then mkdir -p $ROOTFS_DIR/usr/local/share; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/man" ]; then mkdir -p $ROOTFS_DIR/usr/local/man; fi;
if [ ! -e "$ROOTFS_DIR/usr/include" ]; then mkdir -p $ROOTFS_DIR/usr/include; fi;
if [ ! -e "$ROOTFS_DIR/usr/lib" ]; then mkdir -p $ROOTFS_DIR/usr/lib; fi;
if [ ! -e "$ROOTFS_DIR/usr/etc" ]; then mkdir -p $ROOTFS_DIR/usr/etc; fi;
if [ ! -e "$ROOTFS_DIR/usr/bin" ]; then mkdir -p $ROOTFS_DIR/usr/bin; fi;
if [ ! -e "$ROOTFS_DIR/usr/share" ]; then mkdir -p $ROOTFS_DIR/usr/share; fi;
if [ ! -e "$ROOTFS_DIR/usr/man" ]; then mkdir -p $ROOTFS_DIR/usr/man; fi;
2.1.2 Build each components in dependency order
All the components (libraries) need to build have internal dependency, we’d better build it as ordered below.
2.1.2.1 Build zlib
export ARCH=arm
export CC=$ARCH-linux-gcc
./configure --prefix=$ROOTFS_DIR/usr --shared && make && make install
2.1.2.2 Build libpng
export ARCH=arm
CC=$ARCH-linux-gcc
rm -rf ./$ARCH-linux.cache
echo ac_cv_fnuc_malloc_O_nonull=yes>>$ARCH-linux.cache
./configure --cache-file=$ARCH-linux.cache --prefix=/$ROOTFS_DIR/usr --build= i686-pc-linux-gnu --host=$ARCH-linux --target=$ARCH-linux CFLAGS=-I/$ROOTFS_DIR/usr/include LIBS="-L/$ROOTFS_DIR/usr/lib -lz"
Comment the “#define malloc rpl_malloc” line in config.h. Otherwise, when build pango, it will report can not find rpl_malloc.
make && make install
2.1.2.3 Build tiff
export ARCH=arm
CC=$ARCH-linux-gcc
./configure /
--prefix=$ROOTFS_DIR/usr --enable-shared --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux /
"CFLAGS=-I$ROOTFS_DIR/usr/include" /
"LIBS=-L$ROOTFS_DIR/usr/lib -lz" && make && make install
2.1.2.4 Build libtool
export ARCH=arm
CC=$ARCH-linux-gcc
./configure /
--prefix=$ROOTFS_DIR/usr --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux && make && make install
2.1.2.5 Build Jpegb
1.
export ARCH=arm
CC=$ARCH-linux-gcc
./configure /
--prefix=$ROOTFS_DIR/usr --enable-shared --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux /
"CFLAGS=-I$ROOTFS_DIR/usr/include" /
"LIBS=-L$ROOTFS_DIR/usr/lib -lz"
Edit Makefile, change the “LIBTOOL=./libtool” to “LIBTOOL=$(ROOTFS_DIR)/usr/bin/libtool”; make sure the “libtool” is in the PATH of local machine.
make&&make install
2.1.2.6 Build Freetype
export ARCH=arm
CC=$ARCH-linux-gcc
./configure /
--prefix=$ROOTFS_DIR/usr --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux /
"CFLAGS=-I$ROOTFS_DIR/usr/include" /
LDFLAGS=-L$ROOTFS_DIR/usr/lib /
LIBS=-lz && make && make install
2.1.2.7 Build libxml
export ARCH=arm
CC=$ARCH-linux-gcc
./configure /
--prefix=$ROOTFS_DIR/usr --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux /
"CFLAGS=-I$ROOTFS_DIR/usr/include" /
LDFLAGS=-L$ROOTFS_DIR/usr/lib /
LIBS=-lz && make && make install
2.1.2.8 Build fontconfig
export ARCH=arm
CC=$ARCH-linux-gcc
./configure /
--prefix=$ROOTFS_DIR/usr --enable-libxml2 --with-arch=$ARCH --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux /
--with-freetype-config=$ROOTFS_DIR/usr/bin/freetype-config && make && make install
2.1.2.9 Build Olo DirectFB
None
2.1.2.10 Build glib
export ARCH=arm
CC=$ARCH-linux-gcc
echo ac_cv_type_long_long=yes>>$ARCH-linux.cache
echo glib_cv_long_long_format=ll>>$ARCH-linux.cache
echo glib_cv_stack_grows=no>>$ARCH-linux.cache
echo glib_cv_uscore=no>>$ARCH-linux.cache
echo ac_cv_func_posix_getpwuid_r=yes>>$ARCH-linux.cache
./configure /
--prefix=$ROOTFS_DIR/usr --cache-file=$ARCH-linux.cache --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux && make && make install
2.1.2.11 Build atk
export ARCH=arm
CC=$ARCH-linux-gcc
./configure /
--prefix=$ROOTFS_DIR/usr --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux && make && make install
2.1.2.12 Build cairo
export ARCH=arm
CC=$ARCH-linux-gcc
export CFLAGS="-I/opt/gui/include"
export LDFLAGS="-L$ROOTFS_DIR/usr/lib"
./configure /
--prefix=$ROOTFS_DIR/usr /
--enable-directfb --disable-xlib --disable-win32 --enable-png --enable-freetype --enable-pdf --enable-ps --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux && make && make install
2.1.2.13 Build pango
Change the configure file as below:
then do the build script
export ARCH=arm
CC=$ARCH-linux-gcc
export LDFLAGS="-L$ROOTFS_DIR/usr/lib -Wl,-rpath=$ROOTFS_DIR/usr/lib"
export FREETYPE_CONFIG=$ROOTFS_DIR/usr/bin/freetype-config
./configure /
--prefix=$ROOTFS_DIR/usr --build= i686-pc-linux-gnu --with-arch=$ARCH --without-x /
--target=$ARCH-linux --host=$ARCH-linux && make && make install
2.1.2.14 Build gtk+
Delete below lines in gtk/Makefile.am and gtk/Makefile.in
GDK_PIXBUF_MODULE_FILE=$(top_builddir)/gdk-pixbuf/gdk-pixbuf.loaders /
./gtk-update-icon-cache --force --ignore-theme-index /
--source builtin_icons stock-icons > gtkbuiltincache.h
cp gtkbuiltincache.h(if need, pls leave your email addr) ./gtk/
export ARCH=arm
CC=$ARCH-linux-gcc
export LDFLAGS="-L$ROOTFS_DIR/usr/lib -Wl,-rpath=$ROOTFS_DIR/usr/lib -ljpeg"
./configure /
--prefix=$ROOTFS_DIR/usr --with-gdktarget=directfb --without-x /
--build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux CFLAGS=-I$ROOTFS_DIR/usr/include CPPFLAGS=-I$ROOTFS_DIR/usr/include && make && make install
2.1.2.15 Setup Gtk+ Envrionment
cd /tftpboot/mediabuild
cp /usr/share/fonts/ usr/share/ -r
cp $ROOTFS_DIR/usr/* /tftpboot/mediabuild -r
boot olo, and follow demands should be run on olo
mkdir –p xxx (the same as $ROOTFS_DIR/usr in your local machine)
cd xxx
ln –s /* .
mkdir /etc/gtk-2.0
cd etc/gtk-2.0
gdk-pixbuf-query-loaders >gdk-pixbuf.loaders
cd –
mkdir /etc/pango
cd etc/pango/
pango-querymodules >pango.modules
/bin/gtk-demo
2.1.2.16 Build ICU
export ARCH=arm
CC=gcc
./configure --enable-static --disable-shared
make
cp -r bin bin.linux
cp -r data data.linux
cp -r tools tools.linux
make distclean
CC=$ARCH-linux-gcc
./configure --enable-static --enable-shared --host=$ARCH-linux --prefix=$ROOTFS_DIR/usr/
make
#will fail: /bin/sh: ../bin/icupkg: cannot execute binary file
cp -r bin bin.$ARCH
cp -r data data.$ARCH
cp -r bin.linux/* bin
cp -r data.linux/* data
make
rm bin/uconv
make
cp bin/uconv bin.$ARCH
cp bin.$ARCH/* bin
cp bin.linux/pkgdata bin
rm lib/*so*
make install
2.1.2.17 Build libxslt
export ARCH=arm
CC=$ARCH-linux-gcc ./configure /
--prefix=$ROOTFS_DIR/usr --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux –without-crypto --with-libxml /
--with-libxml-prefix=$ROOTFS_DIR/usr && make && make install
2.1.2.18 Build libsqlite
export ARCH=arm
CC=$ARCH-linux-gcc ./configure --enable-releasemode /
--prefix=$ROOTFS_DIR/usr --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux && make && make install
2.1.2.19 Build curl
export ARCH=arm
CC=$ARCH-linux-gcc ./configure /
--prefix=$ROOTFS_DIR/usr --with-zlib=$ROOTFS_DIR/usr/ --build= i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux && make && make install
2.1.2.20 Build Webkit
export ARCH=arm
export LDFLAGS="-L$ROOTFS_DIR/usr/lib -Wl,-rpath=$ROOTFS_DIR/usr/lib"
CC=$ARCH-linux-gcc
./configure /
--prefix=$ROOTFS_DIR/usr --with-webkit-target=directfb --without-x --build=i686-pc-linux-gnu --target=$ARCH-linux --host=$ARCH-linux CFLAGS=-I$ROOTFS_DIR/usr/include CPPFLAGS=-I$ROOTFS_DIR/usr/include icu_config=$ROOTFS_DIR/usr/ && make
If failed information is about “u_charType_3_6”, modify libJavaScriptCore.la by adding -licui18n to dependency_libs.
make install