#!/bin/bash CROSSTOOL= INST_PATH=`pwd`/install LYFTP_SRC=ftp://master.iot-yun.club/src/ export CFLAGS= export LDFLAGS= 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() { msg_banner "export cross compiler tools" # export cross toolchain export CC=${CROSSTOOL}gcc export AS=${CROSSTOOL}as export AR=${CROSSTOOL}ar export LD=${CROSSTOOL}ld export NM=${CROSSTOOL}nm export RANLIB=${CROSSTOOL}ranlib export OBJDUMP=${CROSSTOOL}objdump export STRIP=${CROSSTOOL}strip # export cross configure export CONFIG_CROSS=" --build=i686-pc-linux --host=arm-linux " # Clear LDFLAGS and CFLAGS export LDFLAGS= export CFLAGS= } function compile_libgpiod() { PREFIX_PATH=${INST_PATH} SRC_NAME=libgpiod-1.6.3 PACK_SUFIX=tar.gz IMG_NAME=libgpiod.so if [ -f ${PREFIX_PATH}/lib/${IMG_NAME} ] ; then msg_banner "$SRC_NAME already compile and installed" return 0; fi msg_banner "Start compile $SRC_NAME " if [ ! -f ${SRC_NAME}.${PACK_SUFIX} ] ; then #wget https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/snapshot/$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} ./autogen.sh echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache ./configure --enable-tools=yes --prefix=${PREFIX_PATH} ${CONFIG_CROSS} --cache-file=arm-linux.cache make && make install cd - } function compile_cJson() { PREFIX_PATH=${INST_PATH} SRC_NAME=cJSON-1.7.14 PACK_SUFIX=tar.gz IMG_NAME=libcjson.so if [ -f ${PREFIX_PATH}/lib/${IMG_NAME} ] ; then msg_banner "$SRC_NAME already compile and installed" return 0; fi msg_banner "Start compile $SRC_NAME " if [ ! -f ${SRC_NAME}.${PACK_SUFIX} ] ; then # official site: https://github.com/DaveGamble/cJSON wget $LYFTP_SRC/$SRC_NAME.$PACK_SUFIX check_result "ERROR: download ${SRC_NAME} failure" fi tar -xzf ${SRC_NAME}.${PACK_SUFIX} cd ${SRC_NAME} sed -i -e "s|^CC =.*|CC = ${CC} -std=c89|g" Makefile make && make PREFIX=$PREFIX_PATH install cd - } function compile_mosquitto() { PREFIX_PATH=${INST_PATH} SRC_NAME=mosquitto-2.0.10 PACK_SUFIX=tar.gz IMG_NAME=libmosquitto.so if [ -f ${PREFIX_PATH}/lib/${IMG_NAME} ] ; then msg_banner "$SRC_NAME already compile and installed" return 0; fi # mosquitto depends on openssl if [ ! -n "${CROSSTOOL}" ] ; then msg_banner "Using apt install openssl library now..." sudo apt install -y libssl-dev fi msg_banner "Start compile $SRC_NAME " if [ ! -f ${SRC_NAME}.${PACK_SUFIX} ] ; then wget $LYFTP_SRC/$SRC_NAME.$PACK_SUFIX #wget https://mosquitto.org/files/source/$SRC_NAME.$PACK_SUFIX check_result "ERROR: download ${SRC_NAME} failure" fi tar -xzf ${SRC_NAME}.${PACK_SUFIX} cd ${SRC_NAME} export CFLAGS=-I${PREFIX_PATH}/include export LDFLAGS=-L${PREFIX_PATH}/lib make LDFLAGS=${LDFLAGS} && make DESTDIR=${PREFIX_PATH} prefix=/ install cd - } if [[ $# == 1 ]] && [[ $1 == clean ]] ; then rm -rf install rm -rf libgpiod-1.6.3 rm -rf cJSON-1.7.14 rm -rf mosquitto-2.0.10 exit 0; fi if [ -n "${CROSSTOOL}" ] ; then export_cross fi compile_libgpiod compile_cJson compile_mosquitto