提交 5c079501 编写于 作者: Z Zhang Zhijin

Splitted build script and documentation

上级 27757d88
......@@ -56,7 +56,34 @@ cmake_build_android-arm64-v8:
bazel_build:
stage: build
script:
- sh tools/bazel-build-standalone-lib.sh
- bash tools/bazel_build_standalone_lib.sh
- bash tools/bazel_build_standalone_lib.sh --abi=armeabi-v7a --runtimes=cpu
- bash tools/bazel_build_standalone_lib.sh --abi=armeabi-v7a --runtimes=cpu,gpu
- bash tools/bazel_build_standalone_lib.sh --abi=armeabi-v7a --runtimes=cpu,gpu,dsp
- bash tools/bazel_build_standalone_lib.sh --abi=armeabi-v7a --runtimes=cpu,gpu,apu
- bash tools/bazel_build_standalone_lib.sh --abi=arm64-v8a --runtimes=cpu
- bash tools/bazel_build_standalone_lib.sh --abi=arm64-v8a --runtimes=cpu,gpu
- bash tools/bazel_build_standalone_lib.sh --abi=arm64-v8a --runtimes=cpu,gpu,dsp
- bash tools/bazel_build_standalone_lib.sh --abi=arm64-v8a --runtimes=cpu,gpu,apu
- bash tools/bazel_build_standalone_lib.sh --abi=arm_linux_gnueabihf --runtimes=cpu
- bash tools/bazel_build_standalone_lib.sh --abi=arm_linux_gnueabihf --runtimes=cpu,gpu
- bash tools/bazel_build_standalone_lib.sh --abi=aarch64_linux_gnu --runtimes=cpu
- bash tools/bazel_build_standalone_lib.sh --abi=aarch64_linux_gnu --runtimes=cpu,gpu
- bash tools/bazel_build_standalone_lib.sh --abi=host
- bash tools/bazel_build_standalone_lib.sh --static
- bash tools/bazel_build_standalone_lib.sh --abi=armeabi-v7a --runtimes=cpu --static
- bash tools/bazel_build_standalone_lib.sh --abi=armeabi-v7a --runtimes=cpu,gpu --static
- bash tools/bazel_build_standalone_lib.sh --abi=armeabi-v7a --runtimes=cpu,gpu,dsp --static
- bash tools/bazel_build_standalone_lib.sh --abi=armeabi-v7a --runtimes=cpu,gpu,apu --static
- bash tools/bazel_build_standalone_lib.sh --abi=arm64-v8a --runtimes=cpu --static
- bash tools/bazel_build_standalone_lib.sh --abi=arm64-v8a --runtimes=cpu,gpu --static
- bash tools/bazel_build_standalone_lib.sh --abi=arm64-v8a --runtimes=cpu,gpu,dsp --static
- bash tools/bazel_build_standalone_lib.sh --abi=arm64-v8a --runtimes=cpu,gpu,apu --static
- bash tools/bazel_build_standalone_lib.sh --abi=arm_linux_gnueabihf --runtimes=cpu --static
- bash tools/bazel_build_standalone_lib.sh --abi=arm_linux_gnueabihf --runtimes=cpu,gpu --static
- bash tools/bazel_build_standalone_lib.sh --abi=aarch64_linux_gnu --runtimes=cpu --static
- bash tools/bazel_build_standalone_lib.sh --abi=aarch64_linux_gnu --runtimes=cpu,gpu --static
- bash tools/bazel_build_standalone_lib.sh --abi=host --static
only:
- triggers
......
......@@ -5,7 +5,7 @@ Basic usage for Bazel users
Build and run an example model
-------------------------------
At first, make sure the environment has been set up correctly already (refer to :doc:`../installation/env_requirement`).
At first, make sure the environment has been set up correctly already (refer to :doc:`../installation/env_requirement.rst`).
The followings are instructions about how to quickly build and run a provided model in
`MACE Model Zoo <https://github.com/XiaoMi/mace-models>`__.
......@@ -45,16 +45,16 @@ Here we use the mobilenet-v2 model as an example.
cd path/to/mace
# Build library
# output lib path: build/lib
bash tools/bazel-build-standalone-lib.sh
bash tools/bazel_build_standalone_lib.sh [-abi=abi][-runtimes=rt1,rt2,...][-static]
.. note::
- This step can be skipped if you just want to run a model using ``tools/converter.py``, such as commands in step 5.
- Libraries in ``build/lib/armeabi-v7a/cpu_gpu/`` means it can run on ``cpu`` or ``gpu`` devices.
- The results in ``build/lib/armeabi-v7a/cpu_gpu_dsp/`` need HVX supported.
- Use the `-abi` parameter to specify the ABI. Supported ABIs are armeabi-v7a, arm64-v8a, arm_linux_gnueabihf, aarch64_linux_gnu and host (for host machine, linux-x86-64). The default ABI is arm64-v8a.
- For each ABI, several runtimes can be chosen by specifying the `-runtimes` parameter. Supported runtimes are CPU, GPU, DSP and APU. By default, the library is built to run on CPU.
- Omit the `-static` option if a shared library is desired instead of a static one. By default, a shared library is built.
- See 'bash tools/bazel_build_standalone_lib.sh -help' for detailed information.
- DO respect the hyphens ('-') and the underscores ('_') in the ABI.
4. Convert the pre-trained mobilenet-v2 model to MACE format model.
......@@ -189,14 +189,13 @@ Or use bazel to build MACE source code into a library.
cd path/to/mace
# Build library
# output lib path: build/lib
bash tools/bazel-build-standalone-lib.sh
bash tools/bazel_build_standalone_lib.sh [-abi=abi][-runtimes=rt1,rt2,...][-static]
The above command will generate dynamic library ``build/lib/${ABI}/${DEVICES}/libmace.so`` and static library ``build/lib/${ABI}/${DEVICES}/libmace.a``.
The above command will generate static library ``build/lib/libmace.a`` dynamic library ``build/lib/libmace.so``.
.. warning::
Please verify that the target_abis param in the above command and your deployment file are the same.
Please verify that the -abi param in the above command is the same as the target_abi param in your deployment file.
==================
5. Run your model
......@@ -284,21 +283,9 @@ header files.
│   └── public
│   └── mace.h
├── lib
│   ├── arm64-v8a
│   │ └── cpu_gpu
│   │   ├── libmace.a
│   │   └── libmace.so
│   ├── armeabi-v7a
│   │ ├── cpu_gpu
│   │   │ ├── libmace.a
│   │   │ └── libmace.so
│   │ └── cpu_gpu_dsp
│   │   ├── libhexagon_controller.so
│   │   ├── libmace.a
│   │   └── libmace.so
│   └── linux-x86-64
│   ├── libmace.a
│   └── libmace.so
│ ├── libmace.a (for static library)
│ ├── libmace.so (for shared library)
│   └── libhexagon_controller.so (for DSP runtime)
└── mobilenet-v1
├── model
│   ├── mobilenet_v1.data
......@@ -387,3 +374,4 @@ Please refer to \ ``mace/tools/mace_run.cc``\ for full usage. The following list
MaceStatus status = engine.Run(inputs, &outputs);
More details are in :doc:`advanced_usage`.
#!/bin/bash
set -e
LIB_DIR=build/lib
INCLUDE_DIR=build/include
mkdir -p $LIB_DIR
mkdir -p $INCLUDE_DIR
# copy include headers
cp -R include/mace $INCLUDE_DIR/
# make directories
rm -rf $LIB_DIR/armeabi-v7a
mkdir -p $LIB_DIR/armeabi-v7a/cpu_gpu_dsp
mkdir -p $LIB_DIR/armeabi-v7a/cpu_gpu
rm -rf $LIB_DIR/arm64-v8a
mkdir -p $LIB_DIR/arm64-v8a/cpu_gpu_dsp
mkdir -p $LIB_DIR/arm64-v8a/cpu_gpu
mkdir -p $LIB_DIR/arm64-v8a/cpu_gpu_apu
if [[ "$BUILD_HTA" == "1" ]]; then
mkdir -p $LIB_DIR/armeabi-v7a/cpu_gpu_hta
mkdir -p $LIB_DIR/arm64-v8a/cpu_gpu_hta
fi
rm -rf $LIB_DIR/linux-x86-64
mkdir -p $LIB_DIR/linux-x86-64
rm -rf $LIB_DIR/arm_linux_gnueabihf
mkdir -p $LIB_DIR/arm_linux_gnueabihf/cpu_gpu
rm -rf $LIB_DIR/aarch64_linux_gnu
mkdir -p $LIB_DIR/aarch64_linux_gnu/cpu_gpu
# build shared libraries
if [[ "$BUILD_HTA" == "1" ]]; then
echo "build shared lib for armeabi-v7a + cpu_gpu_hta"
bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define opencl=true --define hta=true --define quantize=true --cpu=armeabi-v7a --define rpcmem=true
cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/armeabi-v7a/cpu_gpu_hta/
cp third_party/hta/armeabi-v7a/*so $LIB_DIR/armeabi-v7a/cpu_gpu_hta/
echo "build shared lib for arm64-v8a + cpu_gpu_hta"
bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define opencl=true --define hta=true --define quantize=true --cpu=arm64-v8a --define rpcmem=true
cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/arm64-v8a/cpu_gpu_hta/
cp third_party/hta/arm64-v8a/*so $LIB_DIR/arm64-v8a/cpu_gpu_hta/
fi
echo "build shared lib for armeabi-v7a + cpu_gpu_dsp"
bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define opencl=true --define hexagon=true --define quantize=true --cpu=armeabi-v7a --define rpcmem=true
cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/armeabi-v7a/cpu_gpu_dsp/
cp third_party/nnlib/armeabi-v7a/*so $LIB_DIR/armeabi-v7a/cpu_gpu_dsp/
echo "build shared lib for arm64-v8a + cpu_gpu_dsp"
bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define opencl=true --define hexagon=true --define quantize=true --cpu=arm64-v8a --define rpcmem=true
cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/arm64-v8a/cpu_gpu_dsp/
cp third_party/nnlib/arm64-v8a/*so $LIB_DIR/arm64-v8a/cpu_gpu_dsp/
echo "build shared lib for arm64-v8a + cpu_gpu_apu"
bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define openmp=false --define opencl=true --define apu=true --define quantize=true --cpu=arm64-v8a
cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/arm64-v8a/cpu_gpu_apu/
cp third_party/apu/*so $LIB_DIR/arm64-v8a/cpu_gpu_apu/
echo "build shared lib for armeabi-v7a + cpu_gpu"
bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define opencl=true --define quantize=true --cpu=armeabi-v7a --define rpcmem=true
cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/armeabi-v7a/cpu_gpu/
echo "build shared lib for arm64-v8a + cpu_gpu"
bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define opencl=true --define quantize=true --cpu=arm64-v8a --define rpcmem=true
cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/arm64-v8a/cpu_gpu/
echo "build shared lib for arm_linux_gnueabihf + cpu_gpu"
bazel build --config arm_linux_gnueabihf --config optimization mace/libmace:libmace_dynamic --define neon=true --define opencl=true --define quantize=true
cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/arm_linux_gnueabihf/cpu_gpu/
echo "build shared lib for aarch64_linux_gnu + cpu_gpu"
bazel build --config aarch64_linux_gnu --config optimization mace/libmace:libmace_dynamic --define neon=true --define opencl=true --define quantize=true
cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/aarch64_linux_gnu/cpu_gpu/
if [[ "$OSTYPE" != "darwin"* ]];then
echo "build shared lib for linux-x86-64"
bazel build mace/libmace:libmace_dynamic --config linux --config optimization
cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/linux-x86-64/
fi
# build static libraries
if [[ "$BUILD_HTA" == "1" ]]; then
echo "build static lib for armeabi-v7a + cpu_gpu_hta"
bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define opencl=true --define hta=true --define quantize=true --cpu=armeabi-v7a --define rpcmem=true
cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/armeabi-v7a/cpu_gpu_hta/
cp third_party/hta/armeabi-v7a/*so $LIB_DIR/armeabi-v7a/cpu_gpu_hta/
echo "build static lib for arm64-v8a + cpu_gpu_hta"
bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define opencl=true --define hta=true --define quantize=true --cpu=arm64-v8a --define rpcmem=true
cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/arm64-v8a/cpu_gpu_hta/
cp third_party/hta/arm64-v8a/*so $LIB_DIR/arm64-v8a/cpu_gpu_hta/
fi
echo "build static lib for armeabi-v7a + cpu_gpu_dsp"
bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define opencl=true --define hexagon=true --define quantize=true --cpu=armeabi-v7a --define rpcmem=true
cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/armeabi-v7a/cpu_gpu_dsp/
cp third_party/nnlib/armeabi-v7a/*so $LIB_DIR/armeabi-v7a/cpu_gpu_dsp/
echo "build static lib for arm64-v8a + cpu_gpu_dsp"
bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define opencl=true --define hexagon=true --define quantize=true --cpu=arm64-v8a --define rpcmem=true
cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/arm64-v8a/cpu_gpu_dsp/
cp third_party/nnlib/arm64-v8a/*so $LIB_DIR/arm64-v8a/cpu_gpu_dsp/
echo "build static lib for arm64-v8a + cpu_gpu_apu"
bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define openmp=false --define opencl=true --define apu=true --define quantize=true --cpu=arm64-v8a
cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/arm64-v8a/cpu_gpu_apu/
cp third_party/apu/*so $LIB_DIR/arm64-v8a/cpu_gpu_apu/
echo "build static lib for armeabi-v7a + cpu_gpu"
bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define opencl=true --define quantize=true --cpu=armeabi-v7a --define rpcmem=true
cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/armeabi-v7a/cpu_gpu/
echo "build static lib for arm64-v8a + cpu_gpu"
bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define opencl=true --define quantize=true --cpu=arm64-v8a --define rpcmem=true
cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/arm64-v8a/cpu_gpu/
echo "build static lib for arm_linux_gnueabihf + cpu_gpu"
bazel build --config arm_linux_gnueabihf --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define opencl=true --define quantize=true
cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/arm_linux_gnueabihf/cpu_gpu/
echo "build static lib for aarch64_linux_gnu + cpu_gpu"
bazel build --config aarch64_linux_gnu --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define opencl=true --define quantize=true
cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/aarch64_linux_gnu/cpu_gpu/
if [[ "$OSTYPE" != "darwin"* ]];then
echo "build static lib for linux-x86-64"
bazel build mace/libmace:libmace_static --config linux --config optimization
cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/linux-x86-64/
fi
echo "LIB PATH: $LIB_DIR"
echo "INCLUDE FILE PATH: $INCLUDE_DIR"
#!/bin/bash
# Copyright 2020 The MACE Authors. All Rights Reserved.
set -e
LIB_DIR=build/lib
INCLUDE_DIR=build/include
# colors for terminal display
declare -r RED='\033[0;31m'
declare -r NC='\033[0m' # No Color
declare -r BOLD=$(tput bold)
declare -r NORMAL=$(tput sgr0)
# helper function
helper() {
echo -e "usage:\t$0 ["${BOLD}"--abi"${NORMAL}"=abi]\
["${BOLD}"--runtimes"${NORMAL}"=rt1,rt2,...]["${BOLD}"--static"${NORMAL}"]"
echo -e "\t"${BOLD}"--abi:"${NORMAL}" specifies the targeted ABI, supported \
ABIs are:\n\t\tarmeabi-v7a, arm64-v8a, arm_linux_gnueabihf, aarch64_linux_gnu \
or \n\t\thost if the library is built for the host machine (linux-x86-64).\n\t\
\tThe default ABI is arm64-v8a."
echo -e "\t"${BOLD}"--runtimes:"${NORMAL}" specifies the runtimes, supported \
runtimes are:\n\t\tcpu, gpu, dsp, apu, hta. By default, the library is built to\
run on CPU."
echo -e "\t"${BOLD}"--static:"${NORMAL}" option to generate the corresponding\
static library.\n\t\tIf the option is omitted, a shared library is built."
exit 0
}
# configuration variables
abi=arm64-v8a
enable_neon=true
enable_hta=false
enable_cpu=true
enable_gpu=false
enable_dsp=false
enable_apu=false
enable_quantize=true
enable_rpcmem=true
static_lib=false
symbol_hidden=
runtime_label="cpu"
lib_type=dynamic
lib_label=shared
lib_suffix=.so
bazel_dir=bazel-bin
# make lib and include directories
mkdir -p "${LIB_DIR}"
mkdir -p "${INCLUDE_DIR}"
# copy include headers
cp -R include/mace ${INCLUDE_DIR}/
# positional parameters parsing
for opt in "${@}";do
case "${opt}" in
abi=*|-abi=*|--abi=*)
abi="$(echo "${opt}" | cut -d '=' -f 2-)"
;;
runtime=*|runtimes=*|-runtime=*|-runtimes=*|--runtime=*|--runtimes=*)
arg="$(echo "$opt" | cut -d '=' -f 2-)"
for runtime in $(echo $arg | sed s/,/\ /g);do
case $runtime in
cpu|CPU)
;;
gpu|GPU)
enable_gpu=true
runtime_label=""${runtime_label}" gpu"
;;
dsp|DSP)
enable_dsp=true
runtime_label=""${runtime_label}" dsp"
;;
apu|APU)
enable_apu=true
runtime_label=""${runtime_label}" apu"
;;
hta|HTA)
enable_hta=true
runtime_label=""${runtime_label}" hta"
;;
*)
echo -e ""${RED}""${BOLD}"ERROR:"${NORMAL}""${NC}" unknown device \
"${device}""
exit 1
;;
esac
done
;;
static|-static|--static)
static_lib=true
;;
help|-help|--help)
helper
;;
*)
echo -e ""${RED}""${BOLD}"ERROR:"${NORMAL}""${NC}" unknown parameter \
$(echo "$1" | cut -d '=' -f -1)"
echo -e "See \x27$0 --help\x27 for more information"
exit 1
;;
esac
done
if [[ "${enable_apu}" == true ]];then
enable_rpcmem=false
fi
if [[ "${static_lib}" == true ]];then
lib_type=static
lib_label=static
lib_suffix=.a
symbol_hidden="--config symbol_hidden"
bazel_dir=bazel-genfiles
fi
if [[ "${abi}" == host || "${abi}" == HOST ]];then
abi=linux-x86-64
fi
# make the directory
rm -rf "${LIB_DIR}"/"${abi}"
mkdir "${LIB_DIR}"/"${abi}"
# build the target library
build_msg="build "${lib_label}" lib for "${abi}""
if [[ "${abi}" != linux-x86-64 ]];then
build_msg=""${build_msg}" + "${runtime_label}""
fi
echo "-------------${build_msg}------------"
case "${abi}" in
arm_linux_gnueabihf|aarch64_linux_gnu)
bazel build --config "${abi}" \
--config optimization mace/libmace:libmace_"${lib_type}"\
--define neon="${enable_neon}" \
--define opencl="${enable_gpu}" \
--define quantize="${enable_quantize}"
;;
linux-x86-64)
bazel build mace/libmace:libmace_"${lib_type}" --config linux --config \
optimization
cp "${bazel_dir}"/mace/libmace/libmace"${lib_suffix}" "${LIB_DIR}"/"${abi}"/
;;
*)
bazel build --config android --config optimization \
mace/libmace:libmace_"${lib_type}" ${symbol_hidden} \
--define neon="${enable_neon}" --define hta="${enable_hta}" \
--define opencl="${enable_gpu}" --define apu="${enable_apu}" \
--define hexagon="${enable_dsp}" --define quantize="${enable_quantize}" \
--cpu="${abi}" --define rpcmem="${enable_rpcmem}"
if [[ "${enable_dsp}" == true ]];then
cp third_party/nnlib/"${abi}"/libhexagon_controller.so \
"${LIB_DIR}"/"${abi}"/
fi
if [[ "${enable_apu}" == true ]];then
cp third_party/apu/*so "${LIB_DIR}"/"${abi}"/
fi
if [[ "${enable_hta}" == true ]];then
cp third_party/hta/"${abi}"/*so "${LIB_DIR}"/"${abi}"/
fi
;;
esac
cp "${bazel_dir}"/mace/libmace/libmace"${lib_suffix}" "${LIB_DIR}"/"${abi}"/
echo "LIB PATH: ${LIB_DIR}"
echo "INCLUDE FILE PATH: ${INCLUDE_DIR}"
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册