GTK Cross Compie for ARM

개발환경/opensource 2012. 6. 4. 23:24

** target board OMAP3530 or OMAP4460 **

gtk를 PXA255에 Porting 해 본 것이 2004년 대학원 시절이었던 것 같다. 흠..

 

Open-source간에 Dependency가 맞아야 한다. 최대한 순서되로 하겠지만 시간이 지나서 정리를 하려니 100% 믿으면 안됨.

 

1. shell script for libffi-3.0.10

 

#!/bin/sh

PREFIX=/home/hskim/rootfs    ## 나의 root file이다.
HOST=arm-none-linux-gnueabi
CC=arm-none-linux-gnueabi-gcc
CXX=arm-none-linux-gnueabi-g++
AR=arm-none-linux-gnueabi-ar rc
AS=arm-none-linux-gnueabi-as
RANLIB=arm-none-linux-gnueabi-ranlib
CFLAGS=-I${PREFIX}/include
LDFLAGS=-L${PREFIX}/lib
LIBS=-lm

./configure \
CC=${CC} \
CXX=${CXX} \
CFLAGS=${CFLAGS} \
LDFLAGS=${LDFLAGS} \
LIBS=${LIBS} \
--prefix=${PREFIX} \
--host=${HOST} \
--enable-shared \
--enable-static

 

2. shell script for gettext-0.18.1.1

 

libffi와 동일한 script를 사용하면 됨. -lm은 없어도 될 듯, 여기저기서 복사해서 가져오다보니
불필요한 것도 들어있음.

다음 싸이트를 참조

http://www.gnu.org/software/gettext/

http://ivivaldi.blog.me/120143104780

 

3. for glib-2.30.3
  glib-2.32.x는 build되지 않고, glib-2.31.xx도 되지 않는다.

 

## script ##  중복되는 부분은 생략, 여기서는 PKG_CONFIG와 cache file를 잘 정리해주면 된다.
 ~~~ 생략 ~~~
./configure \
CC=${CC} \
CFLAGS=${CFLAGS} \
LDFLAGS=${LDFLAGS} \
PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig \
PKG_CONFIG_LIBDIR=${PREFIX}/lib \
--prefix=${PREFIX} \
--host=${HOST} \
--target=${HOST} \
--cache-file=arm-linux.cache \
--with-threads=posix \
--enable-shared \
--enable-static

 

## arm-linux.cache file ##

glib_cv_long_long_format=ll
glib_cv_stack_grows=no
glib_cv_has__inline=yes
glib_cv_has__inline__=yes
glib_cv_uscore=no
ac_cv_func_posix_getpwuid_r=yes
ac_cv_func_posix_getgrgid_r=yes
glib_cv_use_pid_surrogate=yes 

 

4. for expat-2.1.0

libffi와 동일한 script를 사용하면 된다.

 

5. for fontconfig-2.9.0

 

glib script를 사용하면 되지만, 아래와 같이 ft_config 변수를 넣어주어야 한다. 그렇지 않으면 freetype path를 정확히 잡지 못한다.

버전에 따라 차이가 있겠지만 이 fontconfig 버전에서는 이 작업을 해주어야 함.
~~ 생략 ~~

LDFLAGS=-L${PREFIX}/lib
ft_config=/home/hskim/rootfs/bin/freetype-config
#LIBS='-lz -lexpat -lfreetype'
./configure \
CC=${CC} \
CFLAGS=${CFLAGS} \
LDFLAGS=${LDFLAGS} \
LIBS='-lz -lexpat -lfreetype' \
PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig \
PKG_CONFIG_LIBDIR=${PREFIX}/lib \
--prefix=${PREFIX} \
--host=${HOST} \
--target=${HOST} \
--enable-shared \
--enable-static \
ft_config=${ft_config}

 

6. pixman-0.24.4

7. cairo-1.10.0

 

cairo의 경우, 아래의 두개의 Option이 포함되어야 gtk에서 directfb로 backend를 사용할 수 있다.

--with-x=no
--enable-directfb=yes

 

8. atk-2.1.0

 

세개의 Open Source에 대해서도 glib script를 동일하게 적용하면 잘 build 됨.

 

9. gdk-pixbuf-2.24.0

현재 아래의 script는 지금 정리하는 순서되로 library를 build한 것이 아니라서 error나는 부분은 막고 할수도 있다.

따라서 다음에 열어서 재시도하면 잘 될지도 모른다. 또한 gio_can_sniff=yes 부분을 넣어주어야 한다.

configure를 수행하다보면 gio_can_sniff가 정의되지 않아서 문제가 발생하는 것으로 보인다.  

 

./configure \
CC=${CC} \
CFLAGS=${CFLAGS} \
LDFLAGS=${LDFLAGS} \
PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig \
PKG_CONFIG_LIBDIR=${PREFIX}/lib \
gio_can_sniff=yes \
--prefix=${PREFIX} \
--host=${HOST} \
--target=${HOST} \
--enable-shared \
--enable-static \
--without-libtiff \
--without-libjpeg \
--disable-glibtest \
--without-gdiplus

 

10. for pango-1.28.0

처음에 script를 만들 때, CXX옵션을 넣어주지 않고, 또한 Open Source Dependency가 맞지 않아서 삽질을 좀 했는데

아래와 같이 CXX만 넣어주면 문제없이 빌드된다.

 

./configure \
CC=${CC} \
CXX=${CXX} \
CFLAGS=${CFLAGS} \
LDFLAGS=${LDFLAGS} \
PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig \
PKG_CONFIG_LIBDIR=${PREFIX}/lib \
--prefix=${PREFIX} \
--host=${HOST} \
--target=${HOST} \
--enable-shared \
--enable-static \
--with-x=no

 

11. gtk+-2.24.10

*** check porint ***

1. gtk+ 최신버전에서는 directfb backend가 빠졌다. 따라서 gtk+2.24버전을 택했다.

2. 내가 glib-2.30.3을 사용해서 G_CONST_RETURN 관련 error가 끊이지 않는다.

   귀찮아서 나의 rootfs인 아래의 위치에서

   /home/hskim/rootfs/include/glib-2.0/glib/gmacros.h 파일 (rootfs에 있는 파일, 원 source 파일이 아님)

  G_CONST_RETURN관련 정의부분 다 지우고, 아래와 같이 const로 고정함.  

   #define G_CONST_RETURN const

   

  glib-2.28이전에는 G_CONST_RETURN관련 macro를 지원했는데, 2.30이상에서는 지원하지 않아서 문제가 끊이지 않음.

  결론은 내가 버전간의 dependency를 무시하고 막 해서 그런 것 같다.

  

** shell script **

 

./configure \
CC=${CC} \
CFLAGS=${CFLAGS} \
LDFLAGS=${LDFLAGS} \
PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig \
PKG_CONFIG_LIBDIR=${PREFIX}/lib \
--prefix=${PREFIX} \
--host=${HOST} \
--target=${HOST} \
--enable-shared \
--enable-static \
--with-x=no \
--with-gdktarget=directfb

'개발환경 > opensource' 카테고리의 다른 글

Cross Compile OpenSSL (MIPS)  (0) 2013.11.05
Yaffs Kernel Configuration  (1) 2012.06.04
basic opensource cross compile for ARM  (0) 2012.06.04
Directfb Cross Compile for ARM  (0) 2012.06.04
: