#!/bin/bash #+-------------------------------------------------------------------------------------------- #|Description: This shell script used download and compile glib for ARM #| Author: GuoWenxue #| ChangeLog: #| 1, Initialize 1.0.0 on 2011.04.12 #+-------------------------------------------------------------------------------------------- PREFIX_PATH=`pwd`/../install/ LYFTP_SRC=http://master.weike-iot.com:2211/src/ CROSS_COMPILE=/opt/gcc-aarch32-10.3-2021.07/bin/arm-none-linux-gnueabihf- mkdir -p ${PREFIX_PATH}/{include,lib,bin} function msg_banner() { echo "" echo "+-----------------------------------------------------------------------" echo "| $1 " echo "+-----------------------------------------------------------------------" echo "" } function check_result() { if [ $? != 0 ] ; then echo "" echo "+-----------------------------------------------------------------------" echo "| $1 " echo "+-----------------------------------------------------------------------" echo "" exit ; fi } function export_cross() { # export cross toolchain export CC=${CROSS_COMPILE}gcc export AS=${CROSS_COMPILE}as export AR=${CROSS_COMPILE}ar export LD=${CROSS_COMPILE}ld export NM=${CROSS_COMPILE}nm export RANLIB=${CROSS_COMPILE}ranlib export OBJDUMP=${CROSS_COMPILE}objdump export STRIP=${CROSS_COMPILE}strip # export cross configure export CONFIG_CROSS=" --build=i686-pc-linux --host=arm-linux " # Clear LDFLAGS and CFLAGS export LDFLAGS= export CFLAGS= } function compile_libffi() { SRC_NAME=libffi-3.2.1 PACK_SUFIX=tar.gz if [ -f ${PREFIX_PATH}/lib/libffi.so ] ; then msg_banner "$SRC_NAME already compile and installed" return 0; fi msg_banner "Start donwload $SRC_NAME " if [ ! -f ${SRC_NAME}.${PACK_SUFIX} ] ; then #wget ftp://sourceware.org/pub/libffi/${SRC_NAME}.${PACK_SUFIX} wget ${LYFTP_SRC}/${SRC_NAME}.${PACK_SUFIX} check_result "ERROR: download ${SRC_NAME} failure" fi tar -xzf ${SRC_NAME}.${PACK_SUFIX} cd ${SRC_NAME} msg_banner "Start cross compile $SRC_NAME " ./configure --prefix=${PREFIX_PATH} ${CONFIG_CROSS} check_result "ERROR: configure ${SRC_NAME} failure" make && make install check_result "ERROR: compile ${SRC_NAME} failure" cp arm-unknown-linux-gnu/include/ffi.h ${PREFIX_PATH}/include cp src/arm/ffitarget.h ${PREFIX_PATH}/include cd - } function compile_glib() { SRC_NAME=glib-2.50.0 PACK_SUFIX=tar.xz if [ -f ${PREFIX_PATH}/lib/libglib-2.0.so ] ; then msg_banner "$SRC_NAME already compile and installed" return 0; fi msg_banner "Start donwload $SRC_NAME " if [ ! -f ${SRC_NAME}.${PACK_SUFIX} ] ; then #wget http://ftp.gnome.org/pub/gnome/sources/glib/2.50/${SRC_NAME}.${PACK_SUFIX} wget ${LYFTP_SRC}/${SRC_NAME}.${PACK_SUFIX} check_result "ERROR: download ${SRC_NAME} failure" fi tar -xJf ${SRC_NAME}.${PACK_SUFIX} cd ${SRC_NAME} msg_banner "Start cross compile $SRC_NAME " ./configure --prefix=${PREFIX_PATH} ${CONFIG_CROSS} \ --disable-libmount --without-pcre \ LIBFFI_CFLAGS=-I${PREFIX_PATH}/include LIBFFI_LIBS="-L${PREFIX_PATH}/lib -lffi" \ ZLIB_CFLAGS=-I${PREFIX_PATH}/include ZLIB_LIBS="-L${PREFIX_PATH}/lib -lz" \ glib_cv_stack_grows=no \ ac_cv_func_posix_getpwuid_r=yes \ ac_cv_func_posix_getgrgid_r=yes \ ac_cv_lib_rt_clock_gettime=no \ glib_cv_monotonic_clock=yes \ glib_cv_uscore=no check_result "ERROR: configure ${SRC_NAME} failure" make && make install check_result "ERROR: compile ${SRC_NAME} failure" cp ${PREFIX_PATH}/lib/glib-2.0/include/*.h ${PREFIX_PATH}/include/glib-2.0/ cd - } function do_clean() { rm -rf libffi* glib* } if [[ $# == 1 && $1 == -c ]] ;then echo "start clean ${LIB_NAME}" do_clean exit; fi exit export_cross compile_libffi if [ ! -f ${PREFIX_PATH}/bin/libz.so ] ; then cd ../zlib ./build.sh cd - fi compile_glib