123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- #!/bin/sh
- # Copyright (C) 2018-2019 Nick Peng ([email protected])
- CURR_DIR=$(cd $(dirname $0);pwd)
- VER="`date +"1.%Y.%m.%d-%H%M"`"
- CODE_DIR="$CURR_DIR/.."
- IS_BUILD_SMARTDNS=1
- OUTPUTDIR=$CURR_DIR
- export CC
- export STRIP
- showhelp()
- {
- echo "Usage: $0 [OPTION]"
- echo "Options:"
- echo " --platform [luci|luci-compat|debian|openwrt|optware|linux] build for platform. "
- echo " --arch [all|armhf|arm64|x86-64|...] build for architecture, e.g. "
- echo " --cross-tool [cross-tool] cross compiler, e.g. mips-openwrt-linux-"
- echo ""
- echo "Advance Options:"
- echo " --static static link smartdns"
- echo " --only-package only package, not build source"
- echo " --filearch [arch] output file arch, default: equal --arch"
- echo " --outputdir [dir] output package to specific directory"
- echo " "
- echo "Example:"
- echo " build luci:"
- echo " $0 --platform luci"
- echo " build luci:"
- echo " $0 --platform luci-compat"
- echo " build debian:"
- echo " $0 --platform debian --arch x86-64"
- echo " build raspbian pi:"
- echo " $0 --platform debian --arch armhf"
- echo " build optware mips:"
- echo " $0 --platform optware --arch mipsbig"
- echo " build openwrt mips:"
- echo " $0 --platform openwrt --arch mips_24kc"
- echo " build generic linux:"
- echo " $0 --platform linux --arch x86-64"
- }
- build_smartdns()
- {
- if [ "$PLATFORM" != "luci" ]; then
- make -C $CODE_DIR clean $MAKE_ARGS
- make -C $CODE_DIR all -j8 VER=$VER $MAKE_ARGS
- if [ $? -ne 0 ]; then
- echo "make smartdns failed"
- exit 1
- fi
- fi
- $STRIP -d $CODE_DIR/src/smartdns >/dev/null 2>&1
- return 0
- }
- build()
- {
- echo "build package for $PLATFORM"
- if [ $IS_BUILD_SMARTDNS -eq 1 ]; then
- build_smartdns
- if [ $? -ne 0 ]; then
- return 1
- fi
- fi
- chmod +x $CODE_DIR/package/$PLATFORM/make.sh
- $CODE_DIR/package/$PLATFORM/make.sh -o $CURR_DIR --arch $ARCH --ver $VER --filearch $FILEARCH -o $OUTPUTDIR
- if [ $? -ne 0 ]; then
- echo "build package for $PLATFORM failed"
- return 1
- fi
- echo "build package for $PLATFORM success."
- return 0
- }
- main()
- {
- OPTS=`getopt -o o:h --long arch:,filearch:,ver:,platform:,cross-tool:,with-nftables,static,only-package,outputdir: \
- -n "" -- "$@"`
- if [ "$#" -le "1" ]; then
- showhelp
- exit 1
- fi
- if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
- # Note the quotes around `$TEMP': they are essential!
- eval set -- "$OPTS"
- while true; do
- case "$1" in
- --arch)
- ARCH="$2"
- shift 2;;
- --filearch)
- FILEARCH="$2"
- shift 2;;
- --platform)
- PLATFORM="$2"
- shift 2;;
- --cross-tool)
- CROSS_TOOL="$2"
- shift 2;;
- --static)
- export STATIC="yes"
- shift 1;;
- --only-package)
- IS_BUILD_SMARTDNS=0
- shift 1;;
- --outputdir)
- OUTPUTDIR="$2"
- shift 2;;
- --ver)
- VER="$2"
- shift 2;;
- -h | --help )
- showhelp
- return 0
- shift ;;
- -- ) shift; break ;;
- * ) break ;;
- esac
- done
- if [ -z "$PLATFORM" ]; then
- echo "please input platform"
- echo "run $0 -h for help."
- return 1
- fi
-
- if [ "$PLATFORM" = "luci" ]; then
- ARCH="all"
- fi
- if [ -z "$ARCH" ]; then
- echo "please input arch."
- echo "run $0 -h for help."
- return 1
- fi
- if [ -z "$FILEARCH" ]; then
- FILEARCH="$ARCH"
- fi
- if [ -z "$OUTPUTDIR" ]; then
- OUTPUTDIR=$CURR_DIR
- fi
- if [ ! -z "$CROSS_TOOL" ]; then
- CC="${CROSS_TOOL}gcc"
- STRIP="${CROSS_TOOL}strip"
- fi
- if [ -z "$CC" ]; then
- CC="gcc"
- fi
- if [ -z "$STRIP" ]; then
- if [ ! -z "`echo $CC | grep '\-gcc'`" ]; then
- STRIP="`echo "$CC" | sed 's/-gcc\$/-strip/g'`"
- else
- STRIP="strip"
- fi
- fi
- if [ ! -e "`which $CC`" ]; then
- echo "Cannot find compiler $CC"
- return 1
- fi
- build
- }
- main $@
- exit $?
|