交叉编译 Webkit (基于 GTK + DFB )

交叉编译 Webkit (基于 GTK + DFB )
最近为了将webkit移植到arm上奋战了2个多星期,才终于将近20个库全部编译成功。在这个过程中碰到了无数困难,而且网上的很多文章都有问题,即使能将gtk勉强编译成功,也无法使用,故在此将一些信息与需要的人分享。
首先有些说明,为了将webkit裁剪的小些,编译中很多功能都disable了,比如多线程。如果需要的人,可以仔细检查每一个configure的选项,将需要的功能enable。
其次,此文中需要注意的是pango和gtk的install,本文中提到的olo是intel的arm的机顶盒,感兴趣的同志可以找我:P。因此directFB就有一些我们自己开发的东西,所以编译过程就不放上来了。
以下的链接是具体的过程:
http://ppbabytiger.spaces.live.com/Blog/cns!549302309A9552BE!397.entry
1.需要的库

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.Prepare Working environment

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
交叉编译libx加GTK+2.1时候用到库各个库文件的集合,不用花费时间网上一个一个下载,已经经过本人亲测试实测,还可以编译GTK+directFB 1.1 libs_for_gtk Dir: atk-1.25.2.tar.gz atk-1.26.0.tar.gz bigreqsproto-1.1.2.tar.bz2 cairo-1.8.6.tar.gz CPAN-1.94.tar.gz DirectFB-1.1.1.tar.gz expat-2.0.1.tar.gz expat-2.1.0.tar.gz ExtUtils-MakeMaker-6.20.tar.gz fontconfig-2.4.2.tar.gz fontconfig-2.6.0.tar.gz fontconfig-2.7.3.tar.gz freetype-2.3.5.tar.bz2 freetype-doc-2.3.6.tar.bz2 glib-2.12.1.tar.bz2 glib-2.14.4.tar.gz glib-2.18.2.tar.bz2 glibc-2.2.5.tar.bz2 gtk+-2.10.14.tar.bz2 gtk+-2.10.7.tar.bz2 gtk+-2.12.12.tar.bz2 inputproto-2.2.tar.bz2 jpegsrc.v6b.rar jpegsrc.v6b.tar.gz kbproto-1.0.6.tar.bz2 libpng-1.2.10.tar.bz2 libpng-1.2.32.tar.lzma libpthread-stubs_0.1.orig.tar.gz libtool-1.5.22.tar.gz libtool-2.4.2.tar.xz libX11-1.0.3.tar.bz2 libX11-1.2.2.tar.bz2 libX11-1.3.2.tar.gz libX11-1.5.0.tar.bz2 libXau-1.0.7.tar.bz2 libXau-1.0.8.tar.bz2 libxcb-1.3.tar.bz2 libxcb-1.4.tar.bz2 libxcb-1.8.1.tar.bz2 libXdmcp-1.0.3.tar.gz libXdmcp-1.1.2.tar.bz2 libXext-1.0.1.tar.bz2 libXfont-1.4.4.tar.bz2 libXft-2.1.12.tar.bz2 libXft-2.1.13.tar.bz2 libxml2-2.6.30.tar.gz libxml2-2.6.32.tar.gz libxslt-1.1.29.tar.gz libXt-1.0.6.tar.bz2 pango-1.16.4.tar.bz2 pango-1.18.2.tar.gz pango-1.22.1.tar.bz2 pango-1.24.4.tar.bz2 pixman-0.24.0.tar.bz2 poky-pinky-3.1.1.tgz stubs-soft.h tiff-3.8.2.tar.gz tiff-4.0.7.tar.gz tslib-1.4.tar.gz xcb-proto-1.7.1.tar.bz2 xcmiscproto-1.1.2.tar.bz2 xcmiscproto-1.2.2.tar.bz2 xextproto-7.2.1.tar.bz2 xorg-server-1.3.0.0.tar.bz2 xorg-server-1.4.2.tar.bz2 xproto-7.0.23.tar.bz2 xtrans-1.2.7.tar.bz2 zlib-1.2.3.rar zlib-1.2.3.tar.gz zlib-1.2.5.tar.gz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值