From 655ce0907581ca2fdebdb87a154901c09763db56 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Wed, 21 Aug 2024 15:59:21 +0800 Subject: [PATCH] update libgpiod build shell script --- 3rdparty/libgpiod/build.sh | 235 +++++++++++++++++++++++---------- hal/api/libgpiod/build.sh | 172 +++++++++++++++++------- hal/api/makefile | 9 3 files changed, 287 insertions(+), 129 deletions(-) diff --git a/3rdparty/libgpiod/build.sh b/3rdparty/libgpiod/build.sh index 1db0c57..741e7da 100755 --- a/3rdparty/libgpiod/build.sh +++ b/3rdparty/libgpiod/build.sh @@ -1,97 +1,186 @@ #!/bin/bash -#+-------------------------------------------------------------------------------------------- -#|Description: This shell script used download and compile libgpiod for ARM -#| Author: GuoWenxue <guowenxue@gmail.com> -#| ChangeLog: -#| 1, Initialize 1.0.0 on 2011.04.12 -#| -#| Warnning: libgpiod configure depends on automake >= 1.14, use follow command to change it -#| sudo update-alternatives --config automake -#+-------------------------------------------------------------------------------------------- +# library name and version +# Official: https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git +LIB_NAME=libgpiod-2.0.1 +PACK_SUFIX=tar.gz -PRJ_PATH=`pwd` -PREFIX_PATH=`pwd`/../install +# LingYun source code FTP server +LY_FTP=http://master.weike-iot.com:2211/src/ -LYFTP_SRC=http://master.weike-iot.com:2211/src/ +# library download URL address +LIB_URL=$LY_FTP -CROSSTOOL=/opt/gcc-aarch32-10.3-2021.07/bin/arm-none-linux-gnueabihf- +# Cross compiler for cross compile on Linux server +CROSS_COMPILE=arm-linux-gnueabihf- -function msg_banner() -{ - echo "" - echo "+-----------------------------------------------------------------------" - echo "| $1 " - echo "+-----------------------------------------------------------------------" - echo "" +# compile jobs +JOBS=`cat /proc/cpuinfo |grep "processor"|wc -l` + +# this project absolute path +PRJ_PATH=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) + +# top project absolute path +TOP_PATH=$(realpath $PRJ_PATH/..) + +# binaries install path +PREFIX_PATH=$TOP_PATH/install +BIN_PATH=$PREFIX_PATH/bin +LIB_PATH=$PREFIX_PATH/lib +INC_PATH=$PREFIX_PATH/include + +# check installed or not file +INST_FILE=$PREFIX_PATH/lib/libgpiod.so + +# shell script will exit once get command error +set -e + +#+-------------------------+ +#| Shell script functions | +#+-------------------------+ + +function pr_error() { + echo -e "\033[40;31m $1 \033[0m" +} + +function pr_warn() { + echo -e "\033[40;33m $1 \033[0m" +} + +function pr_info() { + echo -e "\033[40;32m $1 \033[0m" } function check_result() { - if [ $? != 0 ] ; then - echo "" - echo "+-----------------------------------------------------------------------" - echo "| $1 " - echo "+-----------------------------------------------------------------------" - echo "" - exit ; - fi + if [ $? != 0 ] ; then + pr_error "$1" + exit + fi } - -function export_cross() +# decompress a packet to destination path +function do_unpack() { - # 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 + tarball=$1 + dstpath=`pwd` - # export cross configure - export CONFIG_CROSS=" --build=i686-pc-linux --host=arm-linux " + if [[ $# == 2 ]] ; then + dstpath=$2 + fi - # Clear LDFLAGS and CFLAGS - export LDFLAGS= - export CFLAGS= + pr_info "decompress $tarball => $dstpath" + + mkdir -p $dstpath + case $tarball in + *.tar.gz) + tar -xzf $tarball -C $dstpath + ;; + + *.tar.bz2) + tar -xjf $tarball -C $dstpath + ;; + + *.tar.xz) + tar -xJf $tarball -C $dstpath + ;; + + *.tar.zst) + tar -I zstd -xf $tarball -C $dstpath + ;; + + *.tar) + tar -xf $tarball -C $dstpath + ;; + + *.zip) + unzip -qo $tarball -d $dstpath + ;; + + *) + pr_error "decompress Unsupport packet: $tarball" + return 1; + ;; + esac } -function compile_libgpiod() +function do_export() { - SRC_NAME=libgpiod-2.0.1 - PACK_SUFIX=tar.gz - IMG_NAME=libgpiod.so.2.1.1 + BUILD_ARCH=$(uname -m) + if [[ $BUILD_ARCH =~ "arm" ]] ; then + pr_warn "local($BUILD_ARCH) compile $LIB_NAME" + return ; + fi - if [ -f ${PREFIX_PATH}/lib/${IMG_NAME} ] ; then - msg_banner "$SRC_NAME already compile and installed" - return 0; - fi + pr_warn "cross(${CROSS_COMPILE}) compile $LIB_NAME" - msg_banner "Start cross compile $SRC_NAME " + # export cross toolchain + export CC=${CROSS_COMPILE}gcc + export CXX=${CROSS_COMPILE}g++ + 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 - 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 + # export cross configure + export CONFIG_CROSS=" --build=i686-pc-linux --host=arm-linux " - tar -xzf ${SRC_NAME}.${PACK_SUFIX} - cd ${SRC_NAME} - - ./autogen.sh - - echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache - ./configure --prefix=${PREFIX_PATH} ${CONFIG_CROSS} --cache-file=arm-linux.cache --enable-tools - check_result "ERROR: configure ${SRC_NAME} failure" - - make && make install - check_result "ERROR: compile ${SRC_NAME} failure" - - cd - + # Clear LDFLAGS and CFLAGS + export LDFLAGS= + export CFLAGS= } -export_cross +function do_fetch() +{ + if [ -e ${INST_FILE} ] ; then + pr_warn "$LIB_NAME compile and installed alredy" + exit ; + fi -compile_libgpiod + if [ -d $LIB_NAME ] ; then + pr_warn "$LIB_NAME fetch already" + return ; + fi + + if [ ! -f ${LIB_NAME}.${PACK_SUFIX} ] ; then + wget ${LIB_URL}/${LIB_NAME}.${PACK_SUFIX} + check_result "ERROR: download ${LIB_NAME} failure" + fi + + do_unpack ${LIB_NAME}.${PACK_SUFIX} +} + +function do_build() +{ + cd $LIB_NAME + + ./autogen.sh + + do_export + + echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache + ./configure --prefix=${PREFIX_PATH} ${CONFIG_CROSS} --enable-static \ + --cache-file=arm-linux.cache --enable-tools + check_result "ERROR: configure ${LIB_NAME} failure" + + make -j ${JOBS} && make install + check_result "ERROR: compile ${LIB_NAME} failure" +} + +function do_clean() +{ + rm -rf *${LIB_NAME}* +} + +if [[ $# == 1 && $1 == -c ]] ;then + pr_warn "start clean ${LIB_NAME}" + do_clean + exit; +fi + +do_fetch + +do_build + diff --git a/hal/api/libgpiod/build.sh b/hal/api/libgpiod/build.sh index 6009e21..741e7da 100755 --- a/hal/api/libgpiod/build.sh +++ b/hal/api/libgpiod/build.sh @@ -2,117 +2,185 @@ # library name and version # Official: https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git -LIB_NAME=libgpiod-2.0 +LIB_NAME=libgpiod-2.0.1 PACK_SUFIX=tar.gz + +# LingYun source code FTP server +LY_FTP=http://master.weike-iot.com:2211/src/ + +# library download URL address +LIB_URL=$LY_FTP # Cross compiler for cross compile on Linux server CROSS_COMPILE=arm-linux-gnueabihf- +# compile jobs +JOBS=`cat /proc/cpuinfo |grep "processor"|wc -l` + # this project absolute path PRJ_PATH=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +# top project absolute path +TOP_PATH=$(realpath $PRJ_PATH/..) + # binaries install path -PREFIX_PATH=$PRJ_PATH/install +PREFIX_PATH=$TOP_PATH/install +BIN_PATH=$PREFIX_PATH/bin +LIB_PATH=$PREFIX_PATH/lib +INC_PATH=$PREFIX_PATH/include # check installed or not file INST_FILE=$PREFIX_PATH/lib/libgpiod.so + +# shell script will exit once get command error +set -e #+-------------------------+ #| Shell script functions | #+-------------------------+ function pr_error() { - echo -e "\033[40;31m $1 \033[0m" + echo -e "\033[40;31m $1 \033[0m" } function pr_warn() { - echo -e "\033[40;33m $1 \033[0m" + echo -e "\033[40;33m $1 \033[0m" } function pr_info() { - echo -e "\033[40;32m $1 \033[0m" + echo -e "\033[40;32m $1 \033[0m" } function check_result() { - if [ $? != 0 ] ; then - pr_error $1 - fi + if [ $? != 0 ] ; then + pr_error "$1" + exit + fi +} +# decompress a packet to destination path +function do_unpack() +{ + tarball=$1 + dstpath=`pwd` + + if [[ $# == 2 ]] ; then + dstpath=$2 + fi + + pr_info "decompress $tarball => $dstpath" + + mkdir -p $dstpath + case $tarball in + *.tar.gz) + tar -xzf $tarball -C $dstpath + ;; + + *.tar.bz2) + tar -xjf $tarball -C $dstpath + ;; + + *.tar.xz) + tar -xJf $tarball -C $dstpath + ;; + + *.tar.zst) + tar -I zstd -xf $tarball -C $dstpath + ;; + + *.tar) + tar -xf $tarball -C $dstpath + ;; + + *.zip) + unzip -qo $tarball -d $dstpath + ;; + + *) + pr_error "decompress Unsupport packet: $tarball" + return 1; + ;; + esac } function do_export() { - pr_warn "set cross(${CROSS_COMPILE})" + BUILD_ARCH=$(uname -m) + if [[ $BUILD_ARCH =~ "arm" ]] ; then + pr_warn "local($BUILD_ARCH) compile $LIB_NAME" + return ; + fi - # export cross toolchain - export CC=${CROSS_COMPILE}gcc - export CXX=${CROSS_COMPILE}g++ - 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 + pr_warn "cross(${CROSS_COMPILE}) compile $LIB_NAME" - # export cross configure - export CONFIG_CROSS=" --build=i686-pc-linux --host=arm-linux " + # export cross toolchain + export CC=${CROSS_COMPILE}gcc + export CXX=${CROSS_COMPILE}g++ + 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 - # Clear LDFLAGS and CFLAGS - export LDFLAGS= - export CFLAGS= + # export cross configure + export CONFIG_CROSS=" --build=i686-pc-linux --host=arm-linux " + + # Clear LDFLAGS and CFLAGS + export LDFLAGS= + export CFLAGS= } function do_fetch() { - if [ -e ${INST_FILE} ] ; then - pr_warn "$LIB_NAME compile and installed alredy" - exit ; - fi + if [ -e ${INST_FILE} ] ; then + pr_warn "$LIB_NAME compile and installed alredy" + exit ; + fi - if [ -d $LIB_NAME ] ; then - pr_warn "$LIB_NAME fetch already" - return ; - fi + if [ -d $LIB_NAME ] ; then + pr_warn "$LIB_NAME fetch already" + return ; + fi - if [ ! -f ${LIB_NAME}.${PACK_SUFIX} ] ; then - wget https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/snapshot/${LIB_NAME}.${PACK_SUFIX} - check_result "ERROR: download ${LIB_NAME} failure" - fi + if [ ! -f ${LIB_NAME}.${PACK_SUFIX} ] ; then + wget ${LIB_URL}/${LIB_NAME}.${PACK_SUFIX} + check_result "ERROR: download ${LIB_NAME} failure" + fi - pr_warn "$LIB_NAME download already, decompress it now" - tar -xzf ${LIB_NAME}.${PACK_SUFIX} + do_unpack ${LIB_NAME}.${PACK_SUFIX} } function do_build() { - cd $LIB_NAME + cd $LIB_NAME - ./autogen.sh + ./autogen.sh - do_export + do_export - echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache - ./configure --prefix=${PREFIX_PATH} ${CONFIG_CROSS} --enable-static \ - --cache-file=arm-linux.cache --enable-tools - check_result "ERROR: configure ${LIB_NAME} failure" + echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache + ./configure --prefix=${PREFIX_PATH} ${CONFIG_CROSS} --enable-static \ + --cache-file=arm-linux.cache --enable-tools + check_result "ERROR: configure ${LIB_NAME} failure" - make -j ${JOBS} && make install - check_result "ERROR: compile ${LIB_NAME} failure" + make -j ${JOBS} && make install + check_result "ERROR: compile ${LIB_NAME} failure" } function do_clean() { - rm -rf ${LIB_NAME}* - rm -rf install + rm -rf *${LIB_NAME}* } if [[ $# == 1 && $1 == -c ]] ;then - pr_warn "start clean $LIB_NAME" - do_clean - exit; + pr_warn "start clean ${LIB_NAME}" + do_clean + exit; fi do_fetch do_build + diff --git a/hal/api/makefile b/hal/api/makefile index 0c3525e..d600230 100644 --- a/hal/api/makefile +++ b/hal/api/makefile @@ -27,9 +27,9 @@ BINARIES=$(SRCFILES:%.c=%) # libgpiod compile install path -LIBGPIOD_PATH=libgpiod/install -CFLAGS+=-I ${LIBGPIOD_PATH}/include -LDFLAGS+=-L ${LIBGPIOD_PATH}/lib -lgpiod +LIBS_PATH=install +CFLAGS+=-I ${LIBS_PATH}/include +LDFLAGS+=-L ${LIBS_PATH}/lib -lgpiod all: libs binaries install @@ -48,7 +48,8 @@ @rm -f *.o *.lo $(BINARIES) distclean: clean - @rm -f tags cscope* + @rm -f tags cscope* @make clean -C libgpiod + @rm -rf install .PHONY: clean entry -- Gitblit v1.9.1