RaspberrPi project source code
Guo Wenxue
2024-07-06 f67df94069569d193ee2cc8d70dd9747cc2574a4
commit | author | age
d6b4a7 1 #!/bin/bash
f67df9 2 # Build depends system tools:
GW 3 #    sudo apt install -y automake texinfo libtool
d6b4a7 4
G 5 # library name and version
6 # Official: https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git
01a9d8 7 LIB_NAME=libgpiod-1.6.2
d6b4a7 8 PACK_SUFIX=tar.gz
G 9
10 # LingYun source code FTP server
f67df9 11 LY_FTP=http://main.weike-iot.com:2211/src/
d6b4a7 12
G 13 # library download URL address
14 LIB_URL=$LY_FTP
15
16 # Cross compiler for cross compile on Linux server
17 CROSS_COMPILE=arm-linux-gnueabihf-
18
19 # compile jobs
20 JOBS=`cat /proc/cpuinfo |grep "processor"|wc -l`
21
22 # this project absolute path
23 PRJ_PATH=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
24
25 # top project absolute path
26 TOP_PATH=$(realpath $PRJ_PATH/..)
27
28 # binaries install path
29 PREFIX_PATH=$TOP_PATH/install
30 BIN_PATH=$PREFIX_PATH/bin
31 LIB_PATH=$PREFIX_PATH/lib
32 INC_PATH=$PREFIX_PATH/include
33
34 # check installed or not file
35 INST_FILE=$PREFIX_PATH/lib/libgpiod.so
36
37 # shell script will exit once get command error
38 set -e
39
40 #+-------------------------+
41 #| Shell script functions  |
42 #+-------------------------+
43
44 function pr_error() {
45     echo -e "\033[40;31m $1 \033[0m"
46 }
47
48 function pr_warn() {
49     echo -e "\033[40;33m $1 \033[0m"
50 }
51
52 function pr_info() {
53     echo -e "\033[40;32m $1 \033[0m"
54 }
55
56 function check_result()
57 {
58     if [ $? != 0 ] ; then
59         pr_error $1
60     fi
61 }
62 # decompress a packet to destination path
63 function do_unpack()
64 {
65     tarball=$1
66     dstpath=`pwd`
67
68     if [[ $# == 2 ]] ; then
69         dstpath=$2
70     fi
71
72     pr_info "decompress $tarball => $dstpath"
73
74     mkdir -p $dstpath
75     case $tarball in
76         *.tar.gz)
77             tar -xzf $tarball -C $dstpath
78             ;;
79
80         *.tar.bz2)
81             tar -xjf $tarball -C $dstpath
82             ;;
83
84         *.tar.xz)
85             tar -xJf $tarball -C $dstpath
86             ;;
87
88         *.tar.zst)
89             tar -I zstd -xf $tarball -C $dstpath
90             ;;
91
92         *.tar)
93             tar -xf $tarball -C $dstpath
94             ;;
95
96         *.zip)
97             unzip -qo $tarball -d $dstpath
98             ;;
99
100         *)
101             pr_error "decompress Unsupport packet: $tarball"
102             return 1;
103             ;;
104     esac
105 }
106
107 function do_export()
108 {
109     BUILD_ARCH=$(uname -m)
110     if [[ $BUILD_ARCH =~ "arm" ]] ; then
111         pr_warn "local($BUILD_ARCH) compile $LIB_NAME"
112         return ;
113     fi
114
115     pr_warn "cross(${CROSS_COMPILE}) compile $LIB_NAME"
116
117     # export cross toolchain
118     export CC=${CROSS_COMPILE}gcc
119     export CXX=${CROSS_COMPILE}g++
120     export AS=${CROSS_COMPILE}as
121     export AR=${CROSS_COMPILE}ar
122     export LD=${CROSS_COMPILE}ld
123     export NM=${CROSS_COMPILE}nm
124     export RANLIB=${CROSS_COMPILE}ranlib
125     export OBJDUMP=${CROSS_COMPILE}objdump
126     export STRIP=${CROSS_COMPILE}strip
127
128     # export cross configure
129     export CONFIG_CROSS=" --build=i686-pc-linux --host=arm-linux "
130
131     # Clear LDFLAGS and CFLAGS
132     export LDFLAGS=
133     export CFLAGS=
134 }
135
136 function do_fetch()
137 {
138     if [ -e ${INST_FILE} ] ; then
139         pr_warn "$LIB_NAME compile and installed alredy"
140         exit ;
141     fi
142
143     if [ -d $LIB_NAME ] ; then
144         pr_warn "$LIB_NAME fetch already"
145         return ;
146     fi
147
148     if [ ! -f ${LIB_NAME}.${PACK_SUFIX} ] ; then
149         wget ${LIB_URL}/${LIB_NAME}.${PACK_SUFIX}
150         check_result "ERROR: download ${LIB_NAME} failure"
151     fi
152
153     do_unpack ${LIB_NAME}.${PACK_SUFIX}
154 }
155
156 function do_build()
157 {
158     cd $LIB_NAME
159
160     ./autogen.sh
161
162     do_export
163
164     echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.cache
165     ./configure --prefix=${PREFIX_PATH} ${CONFIG_CROSS} --enable-static \
166         --cache-file=arm-linux.cache --enable-tools
167     check_result "ERROR: configure ${LIB_NAME} failure"
168
169     make -j ${JOBS} && make install
170     check_result "ERROR: compile ${LIB_NAME} failure"
171 }
172
173 function do_clean()
174 {
175     rm -rf *${LIB_NAME}*
176 }
177
178 if [[ $# == 1 && $1 == -c ]] ;then
179     pr_warn "start clean ${LIB_NAME}"
180     do_clean
181     exit;
182 fi
183
184 do_fetch
185
186 do_build
187