build_ios.sh 7.9 KB
Newer Older
1 2 3 4 5 6 7
#!/bin/bash
set +x

#####################################################################################################
# 1. global variables, you can change them according to your requirements
#####################################################################################################
# armv7 or armv8, default armv8.
8
ARCH=armv8
9 10 11 12 13
# ON or OFF, default OFF.
WITH_EXTRA=OFF
# controls whether to compile cv functions into lib, default is OFF.
WITH_CV=OFF
# controls whether to hide log information, default is ON.
14
WITH_LOG=ON
15 16
# controls whether to throw the exception when error occurs, default is OFF 
WITH_EXCEPTION=OFF
17 18 19 20 21
# absolute path of Paddle-Lite.
workspace=$PWD/$(dirname $0)/../../
# options of striping lib according to input model.
OPTMODEL_DIR=""
WITH_STRIP=OFF
22
IOS_DEPLOYMENT_TARGET=9.0
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
# num of threads used during compiling..
readonly NUM_PROC=${LITE_BUILD_THREADS:-4}
#####################################################################################################


#####################################################################################################
# 2. local variables, these variables should not be changed.
#####################################################################################################
# on mac environment, we should expand the maximum file num to compile successfully
os_name=`uname -s`
if [ ${os_name} == "Darwin" ]; then
   ulimit -n 1024
fi
#####################################################################################################

####################################################################################################
# 3. compiling functions
####################################################################################################
function make_ios {
42
    local arch=$1
43

44
    if [ ${arch} == "armv8" ]; then
45
        local os=ios64
46
    elif [ ${arch} == "armv7" ]; then
47 48
        local os=ios
    else
49
        echo -e "Error: unsupported arch: ${arch} \t --arch: armv8|armv7"
50 51 52
        exit 1
    fi

53
    build_dir=$workspace/build.ios.${os}.${arch}
54 55 56 57 58
    if [ -d $build_dir ]
    then
        rm -rf $build_dir
    fi
    echo "building ios target into $build_dir"
59
    echo "target arch: $arch"
60 61 62 63 64 65 66 67 68 69 70 71 72
    mkdir -p ${build_dir}
    cd ${build_dir}
    GEN_CODE_PATH_PREFIX=lite/gen_code
    mkdir -p ./${GEN_CODE_PATH_PREFIX}
    touch ./${GEN_CODE_PATH_PREFIX}/__generated_code__.cc

    cmake $workspace \
            -DWITH_LITE=ON \
            -DLITE_WITH_ARM=ON \
            -DLITE_ON_TINY_PUBLISH=ON \
            -DLITE_WITH_OPENMP=OFF \
            -DWITH_ARM_DOTPROD=OFF \
            -DLITE_WITH_LIGHT_WEIGHT_FRAMEWORK=ON \
73
            -DLITE_WITH_X86=OFF \
74
            -DLITE_WITH_LOG=$WITH_LOG \
75
            -DLITE_WITH_EXCEPTION=$WITH_EXCEPTION \
76 77
            -DLITE_BUILD_TAILOR=$WITH_STRIP \
            -DLITE_OPTMODEL_DIR=$OPTMODEL_DIR \
78
            -DARM_TARGET_ARCH_ABI=$arch \
79 80
            -DLITE_BUILD_EXTRA=$WITH_EXTRA \
            -DLITE_WITH_CV=$WITH_CV \
81
            -DDEPLOYMENT_TARGET=${IOS_DEPLOYMENT_TARGET} \
82 83 84 85 86 87 88 89 90 91 92 93 94 95
            -DARM_TARGET_OS=$os

    make publish_inference -j$NUM_PROC
    cd -
}


function print_usage {
    echo "----------------------------------------------------------------------------------------------------------------------------------------"
    echo -e "| Methods of compiling Padddle-Lite iOS library:                                                                                       |"
    echo "----------------------------------------------------------------------------------------------------------------------------------------"
    echo -e "|  compile iOS armv8 library:                                                                                                          |"
    echo -e "|     ./lite/tools/build_ios.sh                                                                                                        |"
    echo -e "|  compile iOS armv7 library:                                                                                                          |"
96
    echo -e "|     ./lite/tools/build_ios.sh  --arch=armv7                                                                                          |"
97 98 99 100
    echo -e "|  print help information:                                                                                                             |"
    echo -e "|     ./lite/tools/build_ios.sh help                                                                                                   |"
    echo -e "|                                                                                                                                      |"
    echo -e "|  optional argument:                                                                                                                  |"
101
    echo -e "|     --arch: (armv8|armv7), default is armv8                                                                                          |"
102
    echo -e "|     --with_cv: (OFF|ON); controls whether to compile cv functions into lib, default is OFF                                           |"
103
    echo -e "|     --with_log: (OFF|ON); controls whether to print log information, default is ON                                                   |"
104
    echo -e "|     --with_exception: (OFF|ON); controls whether to throw the exception when error occurs, default is OFF                            |"
105
    echo -e "|     --with_extra: (OFF|ON); controls whether to publish extra operators and kernels for (sequence-related model such as OCR or NLP)  |"
106
    echo -e "|     --ios_deployment_target: (default: 9.0); Set the minimum compatible system version for ios deployment.                           |"
107 108 109 110 111 112 113 114 115 116 117 118
    echo -e "|                                                                                                                                      |"
    echo -e "|  arguments of striping lib according to input model:(armv8, gcc, c++_static)                                                         |"
    echo -e "|     ./lite/tools/build_android.sh --with_strip=ON --opt_model_dir=YourOptimizedModelDir                                              |"
    echo -e "|     --with_strip: (OFF|ON); controls whether to strip lib accrding to input model, default is OFF                                    |"
    echo -e "|     --opt_model_dir: (absolute path to optimized model dir) required when compiling striped library                                  |"
    echo -e "|  detailed information about striping lib:  https://paddle-lite.readthedocs.io/zh/latest/user_guides/library_tailoring.html           |"
    echo "----------------------------------------------------------------------------------------------------------------------------------------"

}

function main {
    if [ -z "$1" ]; then
119
        make_ios $ARCH
120 121 122 123 124 125
        exit -1
    fi

    # Parse command line.
    for i in "$@"; do
        case $i in
126 127
            --arch=*)
                ARCH="${i#*=}"
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
                shift
                ;;
            --with_extra=*)
                WITH_EXTRA="${i#*=}"
                shift
                ;;
            --with_cv=*)
                WITH_CV="${i#*=}"
                shift
                ;;
            --opt_model_dir=*)
                OPTMODEL_DIR="${i#*=}"
                shift
                ;;
            --with_strip=*)
                WITH_STRIP="${i#*=}"
                shift
                ;;
146 147
            --with_log=*)
                WITH_LOG="${i#*=}"
148 149
                shift
                ;;
150 151 152 153
            --with_exception=*)
                WITH_EXCEPTION="${i#*=}"
                shift
                ;;
154 155 156 157
            --ios_deployment_target=*)
                IOS_DEPLOYMENT_TARGET="${i#*=}"
                shift
                ;;
158 159 160 161 162 163 164 165 166 167 168
            help)
                print_usage
                exit 0
                ;;
            *)
                # unknown option
                print_usage
                exit 1
                ;;
        esac
    done
169
    make_ios $ARCH
170 171 172
}

main $@