From: @wei-gangqiang Reviewed-by: @sheng-nan Signed-off-by:tags/v1.3.0
@@ -3,8 +3,17 @@ | |||
/output | |||
/prebuilts | |||
/cov | |||
/deps | |||
.autotools | |||
.project | |||
.cproject | |||
.settings/ | |||
/tests/frm/ | |||
*.ir | |||
*.out | |||
*.DS_Store | |||
.DS_Store | |||
server_config.sh | |||
# Dynamic libraries | |||
# *.so | |||
@@ -0,0 +1,25 @@ | |||
#!/bin/bash | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
set -e | |||
export PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../} | |||
function main(){ | |||
${PROJECT_HOME}/build.sh "$@" | |||
} | |||
main "$@" | |||
set +e |
@@ -1,5 +1,5 @@ | |||
#!/bin/bash | |||
# Copyright 2019-2020 Huawei Technologies Co., Ltd | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
@@ -13,7 +13,6 @@ | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
set -e | |||
CLANG_FORMAT=$(which clang-format) || (echo "Please install 'clang-format' tool first"; exit 1) | |||
@@ -25,10 +24,10 @@ if [[ "${version}" -lt "8" ]]; then | |||
fi | |||
CURRENT_PATH=$(pwd) | |||
SCRIPTS_PATH=$(dirname "$0") | |||
PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../} | |||
echo "CURRENT_PATH=$CURRENT_PATH" | |||
echo "SCRIPTS_PATH=$SCRIPTS_PATH" | |||
echo "PROJECT_HOME=$PROJECT_HOME" | |||
# print usage message | |||
function usage() | |||
@@ -81,45 +80,46 @@ function checkopts() | |||
checkopts "$@" | |||
# switch to project root path, which contains clang-format config file '.clang-format' | |||
cd "${SCRIPTS_PATH}/.." || exit 1 | |||
pushd "${CURRENT_PATH}" | |||
CHECK_LIST_FILE='__checked_files_list__' | |||
cd "${PROJECT_HOME}" || exit 1 | |||
CHECK_LIST_FILE='__checked_files_list__' | |||
if [ "X${mode}" == "Xall" ]; then | |||
find src -type f -name "*" | grep "\.h$\|\.cc$" > "${CHECK_LIST_FILE}" || true | |||
find inc -type f -name "*" | grep "\.h$\|\.cc$" >> "${CHECK_LIST_FILE}" || true | |||
elif [ "X${mode}" == "Xchanged" ]; then | |||
# --diff-filter=ACMRTUXB will ignore deleted files in commit | |||
git diff --diff-filter=ACMRTUXB --name-only | grep "^inc\|^src" | grep "\.h$\|\.cc$" > "${CHECK_LIST_FILE}" || true | |||
else # "X${mode}" == "Xlastcommit" | |||
git diff --diff-filter=ACMRTUXB --name-only HEAD~ HEAD | grep "^inc\|^src" | grep "\.h$\|\.cc$" > "${CHECK_LIST_FILE}" || true | |||
fi | |||
if [ "X${mode}" == "Xall" ]; then | |||
find src -type f -name "*" | grep "\.h$\|\.cc$" > "${CHECK_LIST_FILE}" || true | |||
find inc -type f -name "*" | grep "\.h$\|\.cc$" >> "${CHECK_LIST_FILE}" || true | |||
elif [ "X${mode}" == "Xchanged" ]; then | |||
# --diff-filter=ACMRTUXB will ignore deleted files in commit | |||
git diff --diff-filter=ACMRTUXB --name-only | grep "^inc\|^src" | grep "\.h$\|\.cc$" > "${CHECK_LIST_FILE}" || true | |||
else # "X${mode}" == "Xlastcommit" | |||
git diff --diff-filter=ACMRTUXB --name-only HEAD~ HEAD | grep "^inc\|^src" | grep "\.h$\|\.cc$" > "${CHECK_LIST_FILE}" || true | |||
fi | |||
CHECK_RESULT_FILE=__code_format_check_result__ | |||
echo "0" > "$CHECK_RESULT_FILE" | |||
CHECK_RESULT_FILE=__code_format_check_result__ | |||
echo "0" > "$CHECK_RESULT_FILE" | |||
# check format of files modified in the lastest commit | |||
while read line; do | |||
BASE_NAME=$(basename "${line}") | |||
TEMP_FILE="__TEMP__${BASE_NAME}" | |||
cp "${line}" "${TEMP_FILE}" | |||
${CLANG_FORMAT} -i "${TEMP_FILE}" | |||
set +e | |||
diff "${TEMP_FILE}" "${line}" | |||
ret=$? | |||
set -e | |||
rm "${TEMP_FILE}" | |||
if [[ "${ret}" -ne 0 ]]; then | |||
echo "File ${line} is not formated, please format it." | |||
echo "1" > "${CHECK_RESULT_FILE}" | |||
break | |||
fi | |||
done < "${CHECK_LIST_FILE}" | |||
# check format of files modified in the lastest commit | |||
while read line; do | |||
BASE_NAME=$(basename "${line}") | |||
TEMP_FILE="__TEMP__${BASE_NAME}" | |||
cp "${line}" "${TEMP_FILE}" | |||
${CLANG_FORMAT} -i "${TEMP_FILE}" | |||
set +e | |||
diff "${TEMP_FILE}" "${line}" | |||
ret=$? | |||
set -e | |||
rm "${TEMP_FILE}" | |||
if [[ "${ret}" -ne 0 ]]; then | |||
echo "File ${line} is not formated, please format it." | |||
echo "1" > "${CHECK_RESULT_FILE}" | |||
break | |||
fi | |||
done < "${CHECK_LIST_FILE}" | |||
result=$(cat "${CHECK_RESULT_FILE}") | |||
rm "${CHECK_RESULT_FILE}" | |||
rm "${CHECK_LIST_FILE}" | |||
popd | |||
result=$(cat "${CHECK_RESULT_FILE}") | |||
rm "${CHECK_RESULT_FILE}" | |||
rm "${CHECK_LIST_FILE}" | |||
cd "${CURRENT_PATH}" || exit 1 | |||
if [[ "X${result}" == "X0" ]]; then | |||
echo "Check PASS: specified files are well formated!" | |||
fi | |||
@@ -0,0 +1,90 @@ | |||
#!/bin/bash | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
set -e | |||
PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../../} | |||
function help(){ | |||
cat <<-EOF | |||
Usage: ge clean [OPTIONS] | |||
Options: | |||
-b, --build Clean build dir | |||
-d, --docs Clean generate docs | |||
-i, --install Clean dependenices | |||
-a, --all Clean all | |||
-h, --help | |||
EOF | |||
} | |||
function clean_relative_dir(){ | |||
rm -rf "${PROJECT_HOME}/${1:-output}" | |||
} | |||
function parse_args(){ | |||
parsed_args=$(getopt -a -o bdiah --long build,docs,install,all,help -- "$@") || { | |||
help | |||
exit 1 | |||
} | |||
if [ $# -lt 1 ]; then | |||
clean_relative_dir "build" | |||
clean_relative_dir "output" | |||
exit 1 | |||
fi | |||
eval set -- "$parsed_args" | |||
while true; do | |||
case "$1" in | |||
-b | --build) | |||
clean_relative_dir "build" | |||
clean_relative_dir "output" | |||
;; | |||
-d | --docs) | |||
clean_relative_dir "docs/doxygen" | |||
;; | |||
-i | --install) | |||
clean_relative_dir "deps" | |||
;; | |||
-a | --all) | |||
clean_relative_dir "deps" | |||
clean_relative_dir "build" | |||
clean_relative_dir "output" | |||
clean_relative_dir "docs/doxygen" | |||
;; | |||
-h | --help) | |||
help | |||
;; | |||
--) | |||
shift; break; | |||
;; | |||
*) | |||
help; exit 1 | |||
;; | |||
esac | |||
shift | |||
done | |||
} | |||
function main(){ | |||
parse_args "$@" | |||
} | |||
main "$@" | |||
set +e |
@@ -0,0 +1,115 @@ | |||
#!/bin/bash | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
set -e | |||
PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../../} | |||
PROJECT_HOME=$(cd $PROJECT_HOME || return; pwd) | |||
function help(){ | |||
cat <<-EOF | |||
Usage: ge config [OPTIONS] | |||
update server config for ge, you need input all config info (ip, user, password) | |||
Options: | |||
-i, --ip Config ip config | |||
-u, --user Config user name | |||
-p, --password Config password | |||
-h, --help | |||
Example: ge config -i=121.36.**.** -u=asc**, -p=Asc***\#@\!\$ (Need add escape character \ before special charactor $、#、!) | |||
EOF | |||
} | |||
function write_config_file(){ | |||
local IP=$1 | |||
local USER=$2 | |||
local PASSWORD=$3 | |||
if [[ -z "$IP" ]] || [[ -z "$USER" ]] || [[ -z "$USER" ]]; then | |||
echo "You need input all info (ip, user,password)obout server config !!!" | |||
help | |||
exit 1 | |||
fi | |||
local PASSWORD=${PASSWORD//!/\\!} | |||
local PASSWORD=${PASSWORD//#/\\#} | |||
local PASSWORD=${PASSWORD/\$/\\\$} | |||
local SERVER_CONFIG_FILE=${PROJECT_HOME}/scripts/config/server_config.sh | |||
[ -n "${SERVER_CONFIG_FILE}" ] && rm -rf "${SERVER_CONFIG_FILE}" | |||
cat>${SERVER_CONFIG_FILE}<<-EOF | |||
SERVER_PATH=http://${IP}/package/etrans | |||
DEP_USER=${USER} | |||
DEP_PASSWORD=${PASSWORD} | |||
EOF | |||
} | |||
function parse_args(){ | |||
parsed_args=$(getopt -a -o i::u::p::h --long ip::,user::,password::,help -- "$@") || { | |||
help | |||
exit 1 | |||
} | |||
if [ $# -lt 1 ]; then | |||
help | |||
exit 1 | |||
fi | |||
local IP= | |||
local USER= | |||
local PASSWORD= | |||
eval set -- "$parsed_args" | |||
while true; do | |||
case "$1" in | |||
-i | --ip) | |||
IP=$2 | |||
;; | |||
-u | --user) | |||
USER=$2 | |||
;; | |||
-p | --password) | |||
PASSWORD=$2 | |||
;; | |||
-h | --help) | |||
help; exit; | |||
;; | |||
--) | |||
shift; break; | |||
;; | |||
*) | |||
help; exit 1 | |||
;; | |||
esac | |||
shift 2 | |||
done | |||
write_config_file $IP $USER $PASSWORD | |||
} | |||
function main(){ | |||
parse_args "$@" | |||
} | |||
main "$@" | |||
set +e |
@@ -0,0 +1,136 @@ | |||
#!/bin/bash | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
set -e | |||
function help(){ | |||
cat <<-EOF | |||
Usage: ge cov [OPTIONS] | |||
Options: | |||
-a, --all Full coverage | |||
-i, --increment Increment coverage | |||
-d, --directory Coverage of directory | |||
-h, --help | |||
EOF | |||
} | |||
PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../../} | |||
PROJECT_HOME=$(cd $PROJECT_HOME || return; pwd) | |||
ALL_COV_GEN_PATH=${PROJECT_HOME}/cov/all | |||
DIFF_FILE_PATH=${PROJECT_HOME}/cov/diff | |||
DIFF_FILE_NAME=${DIFF_FILE_PATH}/inc_change_diff.txt | |||
function process_diff_format(){ | |||
sed -i "s/--- a/--- \/code\/Turing\/graphEngine/g" ${DIFF_FILE_NAME} | |||
sed -i "s/+++ b/+++ \/code\/Turing\/graphEngine/g" ${DIFF_FILE_NAME} | |||
} | |||
function add_cov_generate(){ | |||
addlcov --diff ${ALL_COV_GEN_PATH}/coverage.info ${DIFF_FILE_NAME} -o ${PROJECT_HOME}/cov/diff/inc_coverage.info | |||
} | |||
function gen_add_cov_html(){ | |||
genhtml --prefix ${PROJECT_HOME} -o ${PROJECT_HOME}/cov/diff/html ${PROJECT_HOME}/cov/diff/inc_coverage.info --legend -t CHG --no-branch-coverage --no-function-coverage | |||
} | |||
function increment_cov_for_directory(){ | |||
[ -n "${DIFF_FILE_PATH}" ] && rm -rf "${DIFF_FILE_PATH}" | |||
mkdir -p ${DIFF_FILE_PATH} | |||
git diff HEAD -- $1 >>${DIFF_FILE_NAME} | |||
process_diff_format | |||
add_cov_generate | |||
gen_add_cov_html | |||
} | |||
function run_all_coverage(){ | |||
[ -n "${ALL_COV_GEN_PATH}" ] && rm -rf ${ALL_COV_GEN_PATH} | |||
mkdir -p ${ALL_COV_GEN_PATH} | |||
pushd "${PWD}" >/dev/null | |||
cd ${PROJECT_HOME} | |||
lcov -c -d build/tests/ut/ge -d build/tests/ut/common/graph/ -o ${ALL_COV_GEN_PATH}/tmp.info | |||
lcov -r ${ALL_COV_GEN_PATH}/tmp.info '*/output/*' '*/build/opensrc/*' '*/build/proto/*' '*/third_party/*' '*/tests/*' '/usr/local/*' '/usr/include/*' '*/metadef/*' '*/parser/*' -o ${ALL_COV_GEN_PATH}/coverage.info | |||
cd ${ALL_COV_GEN_PATH} | |||
genhtml coverage.info | |||
popd >/dev/null | |||
} | |||
function do_coverage_run(){ | |||
local cov_mode=$1 | |||
local directory_dir=$2 | |||
run_all_coverage | |||
if [ "$cov_mode" = "all" ]; then | |||
exit 1 | |||
elif [ -n "$directory_dir" ]; then | |||
increment_cov_for_directory $directory_dir | |||
else | |||
increment_cov_for_directory "ge" | |||
fi | |||
} | |||
function parse_args(){ | |||
parsed_args=$(getopt -a -o aid::h --long all,increment,directory::,help -- "$@") || { | |||
help | |||
exit 1 | |||
} | |||
if [ $# -lt 1 ]; then | |||
run_all_coverage | |||
exit 1 | |||
fi | |||
local cov_mode="increment" | |||
local directory_dir= | |||
eval set -- "$parsed_args" | |||
while true; do | |||
case "$1" in | |||
-a | --all) | |||
cov_mode="all" | |||
;; | |||
-i | --increment) | |||
;; | |||
-d | --directory) | |||
directory_dir=$2 | |||
shift | |||
;; | |||
-h | --help) | |||
help; exit 1; | |||
;; | |||
--) | |||
shift; break; | |||
;; | |||
*) | |||
help; exit 1; | |||
;; | |||
esac | |||
shift | |||
done | |||
do_coverage_run $cov_mode $directory_dir | |||
} | |||
function main(){ | |||
parse_args "$@" | |||
} | |||
main "$@" | |||
set +e |
@@ -0,0 +1,87 @@ | |||
#!/bin/bash | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
set -e | |||
function help(){ | |||
cat <<-EOF | |||
Usage: ge docs [OPTIONS] | |||
Options: | |||
-b, --brief Build brief docs | |||
-a, --all Build all docs | |||
-h, --help | |||
EOF | |||
} | |||
PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../../} | |||
PROJECT_HOME=$(cd $PROJECT_HOME || return; pwd) | |||
BRIEF_DOXYFILE_PATH=${PROJECT_HOME}/scripts/docs/Doxyfile_brief | |||
ALL_DOXYFILE_PATH=${PROJECT_HOME}/scripts/docs/Doxyfile_all | |||
function build_brief_docs(){ | |||
rm -rf "${PROJECT_HOME}/docs/doxygen" | |||
doxygen ${BRIEF_DOXYFILE_PATH} | |||
} | |||
function build_all_docs(){ | |||
rm -rf "${PROJECT_HOME}/docs/doxygen" | |||
doxygen ${ALL_DOXYFILE_PATH} | |||
} | |||
function parse_args(){ | |||
parsed_args=$(getopt -a -o bah --long brief,all,help -- "$@") || { | |||
help | |||
exit 1 | |||
} | |||
if [ $# -lt 1 ]; then | |||
build_all_docs | |||
exit 1 | |||
fi | |||
eval set -- "$parsed_args" | |||
while true; do | |||
case "$1" in | |||
-b | --brief) | |||
build_brief_docs | |||
;; | |||
-a | --all) | |||
build_all_docs | |||
;; | |||
-h | --help) | |||
help; exit 1; | |||
;; | |||
--) | |||
shift; break; | |||
;; | |||
*) | |||
help; exit 1; | |||
;; | |||
esac | |||
shift | |||
done | |||
} | |||
function main(){ | |||
parse_args "$@" | |||
} | |||
main "$@" | |||
set +e |
@@ -0,0 +1,42 @@ | |||
# this dockerfile used for graphengine build | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
FROM ubuntu:18.04 | |||
RUN apt-get update \ | |||
&& apt-get install -y git g++ wget unzip clang-format-9 build-essential lcov vim | |||
# install for doxygen | |||
RUN apt-get install -y graphviz doxygen | |||
# install for graph ensy engine | |||
RUN cpan install -y Graph::Easy | |||
RUN wget https://cmake.org/files/v3.16/cmake-3.16.7-Linux-x86_64.tar.gz | |||
RUN mkdir -p /opt/cmake-3.16.7 \ | |||
&& tar -xvf cmake-3.16.7-Linux-x86_64.tar.gz -C /opt/cmake-3.16.7 --strip-components=1 \ | |||
&& ln -sf /opt/cmake-3.16.7/bin/* /usr/bin/ \ | |||
&& mv /usr/bin/clang-format-9 /usr/bin/clang-format | |||
RUN wget https://github.com/ccup/lcov/archive/refs/tags/add_lcov.tar.gz -O add_lcov.tar.gz \ | |||
&& mkdir -p /opt/addlcov1.0.0 \ | |||
&& tar -xvf add_lcov.tar.gz -C /opt/addlcov1.0.0 \ | |||
&& mv /opt/addlcov1.0.0/lcov-add_lcov/bin/lcov /usr/bin/addlcov | |||
ENV PROJECT_HOME=/code/Turing/graphEngine | |||
RUN echo "alias ge=/code/Turing/graphEngine/scripts/ge.sh">>~/.bashrc | |||
@@ -0,0 +1,146 @@ | |||
#!/bin/bash | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
set -e | |||
PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../../} | |||
MOUNT_PROJECT_HOME=$(cd $PROJECT_HOME || return; pwd) | |||
DOCKER_BUILD_ENV_NAME=${MOUNT_PROJECT_HOME#*/} | |||
DOCKER_BUILD_ENV_NAME=${DOCKER_BUILD_ENV_NAME//\//\_} | |||
DOCKER_IMAGE_TAG=ge_build_env.1.0.6 | |||
DOCKER_IAMGE_NAME=joycode2art/turing | |||
DOCKER_FULL_IMAGE_NAME=${DOCKER_IAMGE_NAME}:${DOCKER_IMAGE_TAG} | |||
if [ "$(uname)" == "Darwin" ]; then | |||
#running on Mac OS | |||
docker_cmd=docker | |||
MOUNT_PROJECT_HOME=${MOUNT_PROJECT_HOME} | |||
docker_work_dir=/code/Turing/graphEngine | |||
docker_bash_dir=/bin/bash | |||
elif [ "$(expr substr "$(uname -s)" 1 10)" == "MINGW32_NT" ] || [ "$(expr substr "$(uname -s)" 1 10)" == "MINGW64_NT" ]; then | |||
#running on Windows | |||
docker_cmd="winpty docker" | |||
MOUNT_PROJECT_HOME=/${MOUNT_PROJECT_HOME} | |||
docker_work_dir=//code/Turing/graphEngine | |||
docker_bash_dir=//bin/bash | |||
elif [ "$(expr substr "$(uname -s)" 1 5)" == "Linux" ]; then | |||
#running on Linux | |||
docker_cmd=docker | |||
MOUNT_PROJECT_HOME=${PROJECT_HOME} | |||
docker_work_dir=/code/Turing/graphEngine | |||
docker_bash_dir=/bin/bash | |||
fi | |||
function build_docker_image(){ | |||
if test -z "$(docker images |grep ${DOCKER_IAMGE_NAME} | grep ${DOCKER_IMAGE_TAG})"; then | |||
$docker_cmd build -t ${DOCKER_FULL_IMAGE_NAME} ${PROJECT_HOME}/scripts/env | |||
else | |||
echo "docker image for graph engine build is build ok...." | |||
fi | |||
} | |||
function pull_docker_image(){ | |||
$docker_cmd pull $DOCKER_FULL_IMAGE_NAME | |||
} | |||
function enter_docker_env(){ | |||
if test -z "$(docker images |grep ${DOCKER_IAMGE_NAME} | grep ${DOCKER_IMAGE_TAG})"; then | |||
echo "please run 'ge env --pull' to download images first!" | |||
elif test -z "$(docker ps -a |grep ${DOCKER_BUILD_ENV_NAME})"; then | |||
$docker_cmd run -it -v ${MOUNT_PROJECT_HOME}:/code/Turing/graphEngine --workdir ${docker_work_dir} --name ${DOCKER_BUILD_ENV_NAME} ${DOCKER_FULL_IMAGE_NAME} ${docker_bash_dir} | |||
elif test -z "$(docker ps |grep ${DOCKER_BUILD_ENV_NAME})"; then | |||
$docker_cmd start ${DOCKER_BUILD_ENV_NAME} | |||
$docker_cmd exec -w ${docker_work_dir} -it ${DOCKER_BUILD_ENV_NAME} ${docker_bash_dir} | |||
else | |||
$docker_cmd exec -w ${docker_work_dir} -it ${DOCKER_BUILD_ENV_NAME} ${docker_bash_dir} | |||
fi | |||
} | |||
function resert_docker_env(){ | |||
if test -z "$(docker ps -a |grep ${DOCKER_BUILD_ENV_NAME})"; then | |||
echo "no runing container for graphengine build" | |||
elif test -z "$(docker ps |grep ${DOCKER_BUILD_ENV_NAME})"; then | |||
$docker_cmd rm ${DOCKER_BUILD_ENV_NAME} | |||
else | |||
$docker_cmd stop ${DOCKER_BUILD_ENV_NAME} | |||
$docker_cmd rm ${DOCKER_BUILD_ENV_NAME} | |||
fi | |||
} | |||
function help(){ | |||
cat <<-EOF | |||
Usage: ge env [OPTIONS] | |||
Prepare for docker env for build and test | |||
Options: | |||
-b, --build Build docker image | |||
-p, --pull Pull docker image | |||
-e, --enter Enter container | |||
-r, --reset Reset container | |||
-h, --help | |||
EOF | |||
} | |||
function parse_args(){ | |||
parsed_args=$(getopt -a -o bperh --long build,pull,enter,resethelp -- "$@") || { | |||
help | |||
exit 1 | |||
} | |||
if [ $# -lt 1 ]; then | |||
pull_docker_image | |||
enter_docker_env | |||
exit 1 | |||
fi | |||
eval set -- "$parsed_args" | |||
while true; do | |||
case "$1" in | |||
-b | --build) | |||
build_docker_image | |||
;; | |||
-p | --pull) | |||
pull_docker_image | |||
;; | |||
-e | --enter) | |||
enter_docker_env | |||
;; | |||
-r | --reset) | |||
resert_docker_env | |||
;; | |||
-h | --help) | |||
help | |||
;; | |||
--) | |||
shift; break; | |||
;; | |||
*) | |||
help; exit 1 | |||
;; | |||
esac | |||
shift | |||
done | |||
} | |||
function main(){ | |||
parse_args "$@" | |||
} | |||
main "$@" | |||
set -e |
@@ -1,5 +1,5 @@ | |||
#!/bin/bash | |||
# Copyright 2019-2020 Huawei Technologies Co., Ltd | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
@@ -24,11 +24,12 @@ if [[ "${version}" -lt "8" ]]; then | |||
exit 1 | |||
fi | |||
CURRENT_PATH=$(pwd) | |||
SCRIPTS_PATH=$(dirname "$0") | |||
PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../../} | |||
echo "CURRENT_PATH=${CURRENT_PATH}" | |||
echo "SCRIPTS_PATH=${SCRIPTS_PATH}" | |||
echo "PROJECT_HOME=${PROJECT_HOME}" | |||
# print usage message | |||
function usage() | |||
@@ -81,27 +82,28 @@ function checkopts() | |||
checkopts "$@" | |||
# switch to project root path, which contains clang-format config file '.clang-format' | |||
cd "${SCRIPTS_PATH}/.." || exit 1 | |||
FMT_FILE_LIST='__format_files_list__' | |||
if [[ "X${mode}" == "Xall" ]]; then | |||
find src -type f -name "*" | grep "\.h$\|\.cc$" > "${FMT_FILE_LIST}" || true | |||
find inc -type f -name "*" | grep "\.h$\|\.cc$" >> "${FMT_FILE_LIST}" || true | |||
elif [[ "X${mode}" == "Xchanged" ]]; then | |||
# --diff-filter=ACMRTUXB will ignore deleted files in commit | |||
git diff --diff-filter=ACMRTUXB --name-only | grep "^inc\|^src" | grep "\.h$\|\.cc$" >> "${FMT_FILE_LIST}" || true | |||
else # "X${mode}" == "Xlastcommit" | |||
git diff --diff-filter=ACMRTUXB --name-only HEAD~ HEAD | grep "^inc\|^src" | grep "\.h$\|\.cc$" > "${FMT_FILE_LIST}" || true | |||
fi | |||
while read line; do | |||
if [ -f "${line}" ]; then | |||
${CLANG_FORMAT} -i "${line}" | |||
fi | |||
done < "${FMT_FILE_LIST}" | |||
pushd "${CURRENT_PATH}" | |||
cd "${PROJECT_HOME}" || exit 1 | |||
FMT_FILE_LIST='__format_files_list__' | |||
if [[ "X${mode}" == "Xall" ]]; then | |||
find src -type f -name "*" | grep "\.h$\|\.cc$" > "${FMT_FILE_LIST}" || true | |||
find inc -type f -name "*" | grep "\.h$\|\.cc$" >> "${FMT_FILE_LIST}" || true | |||
elif [[ "X${mode}" == "Xchanged" ]]; then | |||
# --diff-filter=ACMRTUXB will ignore deleted files in commit | |||
git diff --diff-filter=ACMRTUXB --name-only | grep "^inc\|^src" | grep "\.h$\|\.cc$" >> "${FMT_FILE_LIST}" || true | |||
else # "X${mode}" == "Xlastcommit" | |||
git diff --diff-filter=ACMRTUXB --name-only HEAD~ HEAD | grep "^inc\|^src" | grep "\.h$\|\.cc$" > "${FMT_FILE_LIST}" || true | |||
fi | |||
while read line; do | |||
if [ -f "${line}" ]; then | |||
${CLANG_FORMAT} -i "${line}" | |||
fi | |||
done < "${FMT_FILE_LIST}" | |||
rm "${FMT_FILE_LIST}" | |||
cd "${CURRENT_PATH}" || exit 1 | |||
rm "${FMT_FILE_LIST}" | |||
popd | |||
echo "Specified cpp source files have been format successfully." |
@@ -0,0 +1,77 @@ | |||
#!/bin/bash | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
GE_BASH_HOME=$(dirname "$0") | |||
export PROJECT_HOME=${PROJECT_HOME:-${GE_BASH_HOME}/../} | |||
PROJECT_HOME=$(cd $PROJECT_HOME || return; pwd) | |||
function help(){ | |||
cat <<-EOF | |||
Usage: ge COMMANDS | |||
Run ge commands | |||
Commands: | |||
env Prepare docker env | |||
config Config dependencies server | |||
update Update dependencies | |||
format Format code | |||
build Build code | |||
test Run test of UT/ST | |||
cov Run Coverage | |||
docs Generate documents | |||
clean Clean | |||
EOF | |||
} | |||
function ge_error() { | |||
echo "Error: $*" >&2 | |||
help | |||
exit 1 | |||
} | |||
function main(){ | |||
if [ $# -eq 0 ]; then | |||
help; exit 0 | |||
fi | |||
local cmd=$1 | |||
local shell_cmd= | |||
shift | |||
case "$cmd" in | |||
-h|--help) | |||
help; exit 0 | |||
;; | |||
build) | |||
shell_cmd=${PROJECT_HOME}/build.sh | |||
;; | |||
*) | |||
shell_cmd=$GE_BASH_HOME/$cmd/ge_$cmd.sh | |||
;; | |||
esac | |||
[ -e $shell_cmd ] || { | |||
ge_error "ge $shell_cmd is not found" | |||
} | |||
$shell_cmd "$@" | |||
} | |||
main "$@" | |||
@@ -0,0 +1,331 @@ | |||
# graph engine 个人开发工具链使用说明 | |||
GE开发者工具链是graph engine中的一套面向个人开发者的自动化脚本工具链。 | |||
目前支持基于容器开发环境准备、构建依赖的自动下载安装和配置、代码格式化、编译、测试、代码覆盖率检查、文档生成等一系列开发者常用功能。 | |||
## 前置准备 | |||
下面是使用GE开发者工具链,需要手动进行的前置准备; | |||
下列是经过验证后的性能最佳推荐配置: | |||
1. 操作系统,以下任选其一: | |||
- 原生的Linux操作系统,如ubuntu; | |||
- Windows操作系统,推荐安装WSL的ubuntu系统,强烈建议登录WSL内直接下载代码,不要挂卷(构建性能差)! | |||
- MAC OS; | |||
2. docker安装: | |||
- docker安装成功,并且相关镜像源已经设置正确,可正常下载外部镜像。 | |||
3. OS支持的命令行工具: 原生Linux or WSL shell; | |||
可用但不推荐的配置: | |||
- 在windows中直接安装docker,采用仿linux bash(Cygwin,minGW等)执行ge工具链; | |||
(使用这种方式也可以执行所有GE工具链的操作,但是因为windows和容器异构内核的文件访问限制会导致构建速度比较慢) | |||
## 快速上手 | |||
GE工具链对应的脚本在scripts下,可以按照下面流程来执行: | |||
1. 进入到scripts目录: | |||
```sh | |||
$ cd ./scripts | |||
``` | |||
2.执行`ge env`自动下载容器环境,并登陆到环境中 | |||
```sh | |||
$ ./ge.sh env | |||
``` | |||
3.配置外部依赖服务器信息 | |||
```sh | |||
ge config -i=121.36.**.** -u=asc**, -p=Asc***\#@\!$ (Need add escape character \ before special charactor $、#、!) | |||
``` | |||
4.下载和安装构建所依赖的外部库 | |||
```sh | |||
$ ge update | |||
``` | |||
(注:进入容器后,`ge`命令已经自动注册进系统,因此容器内不需要写脚本全称) | |||
5.执行测试,默认执行单元测试用例,`ge test`会自动触发构建 | |||
```sh | |||
$ ge test | |||
``` | |||
## 详细用法 | |||
在scripts目录下,运行./ge.sh -h 即可查看到所有的子命令集合。 | |||
```sh | |||
$ ./ge.sh -h | |||
Usage: ge COMMANDS | |||
Run ge commands | |||
Commands: | |||
env Prepare docker env | |||
config Config dependencies server | |||
update Update dependencies | |||
format Format code | |||
lint Static verify | |||
build Build code | |||
test Run test of UT/ST | |||
cov Run Coverage | |||
docs Generate documents | |||
clean Clean | |||
``` | |||
脚本内置的每个子命令,代表一个独立功能;每个子命令还提供了二级参数用于灵活指定执行方式。 | |||
每个子命令可以通过`-h`查看支持的可配参数。 | |||
例如查询`env`子命令的参数,可以使用如下命令: | |||
```sh | |||
$ ./ge.sh env -h | |||
``` | |||
每个子命令在不带参数时,会有一个默认的行为。 | |||
### `ge env` | |||
该命令用于准备构建和测试使用的容器环境,具体包含参数如下: | |||
``` | |||
$ ./ge.sh env -h | |||
Usage: ge env [OPTIONS] | |||
Prepare for docker env for build and test | |||
Options: | |||
-b, --build Build docker image | |||
-p, --pull Pull docker image | |||
-e, --enter Enter container | |||
-r, --reset Reset container | |||
-h, --help | |||
``` | |||
参数详细解释: | |||
- `-b -- build`: 依据“scripts/env/Dockerfile”生成需要运行的容器镜像; | |||
- `-p -- pull` : 从本地配置的容器中央仓拉取需要的的容器镜像; | |||
- `-e -- enter`: 在本地已有容器镜像的前提下,登录容器运行环境; | |||
- `-r -- reset`: 删除本地运行的容器镜像环境; | |||
默认:从中央容器仓拉取对应的容器镜像,运行实例并登陆。 | |||
### `ge config` | |||
配置外部依赖服务器,具体参数如下: | |||
```sh | |||
$ ge config -h | |||
Usage: ge config [OPTIONS] | |||
update server config for ge, you need input all config info (ip, user, password) | |||
Options: | |||
-i, --ip Config ip config | |||
-u, --user Config user name | |||
-p, --password Config password | |||
-h, --help | |||
Example: ge config -i=121.36.**.** -u=asc**, -p=Asc***\#@\!$ (Need add escape character \ before special charactor $、#、!) | |||
``` | |||
参数详细解释: | |||
- `-i, --ip` : 配置依赖库服务器IP地址; | |||
- `-u, --usr` : 配置依赖库服务器用户名; | |||
- `-p, --password` : 配置依赖库地址; | |||
默认:打印帮助信息。 | |||
### `ge update` | |||
安装graph engine构建所需的外部依赖库,具体参数如下: | |||
```sh | |||
$ ge update -h | |||
Usage: ge update [OPTIONS] | |||
update dependencies of build and test | |||
Options: | |||
-d, --download Download dependencies | |||
-i, --install Install dependencies | |||
-c, --clear Clear dependencies | |||
-h, --help | |||
``` | |||
参数详细解释: | |||
- `-d, --download` : 下载构建需要外部依赖库; | |||
- `-i, --install` : 安装外部依赖包到对应位置; | |||
- `-c, --clear` : 清除下载的外部依赖包; | |||
默认:根据"scripts/update/deps_config.sh"的配置下载外部依赖库并安装到对应目录。 | |||
(注:请确保“scripts/update/server_config.sh”中的服务器地址、用户名、密码已经配置) | |||
### `ge format` | |||
使用clang-format进行代码格式化,具体参数如下: | |||
```sh | |||
$ ge format -h | |||
Options: | |||
-a format of all files | |||
-c format of the files changed compared to last commit, default case | |||
-l format of the files changed in last commit | |||
-h Print usage | |||
``` | |||
参数详细解释: | |||
- `-a` : 格式化所有代码; | |||
- `-c` : 只格式化本次修改的代码; | |||
- `-l` : 格式化上次提交的代码; | |||
默认:格式化本次修改代码。 | |||
### `ge lint` | |||
使用clang-format进行代码格式化检查,具体参数如下: | |||
```sh | |||
$ ge lint -h | |||
Options: | |||
-a Check code format of all files, default case | |||
-c Check code format of the files changed compared to last commit | |||
-l Check code format of the files changed in last commit | |||
-h Print usage | |||
``` | |||
参数详细解释: | |||
- `-a` : 检查所有代码格式; | |||
- `-c` : 只检查修改的代码格式; | |||
- `-l` : 检查上次提交的代码格式; | |||
默认:检查本次修改代码格式。 | |||
### `ge build` | |||
执行构建 (注:调用原有build.sh脚本,改造中...); | |||
### `ge test` | |||
构建和运行测试用例,目前可以支持参数如下: | |||
```sh | |||
$ ge test -h | |||
Usage: ge test [OPTIONS] | |||
Options: | |||
-u, --unit Run unit Test | |||
-c, --component Run component Test | |||
-h, --help | |||
``` | |||
参数详细解释: | |||
- `-u, --unit` : 执行单元测试 | |||
- `-c, --component` : 执行组件测试 | |||
默认:执行单元测试。 | |||
### `ge cov` | |||
执行代码覆盖率检查, 支持全量覆盖和增量覆盖的功能,该命令需要已经跑完测试用例,目前可以支持参数如下: | |||
```sh | |||
$ ge cov -h | |||
Usage: ge cov [OPTIONS] | |||
Options: | |||
-a, --all Full coverage | |||
-i, --increment Increment coverage | |||
-d, --directory Coverage of directory | |||
-h, --help | |||
``` | |||
参数详细解释: | |||
- `-a, --all` : 执行全量覆盖率统计; | |||
- `-i, --increment` : 执行增量覆盖率检查,默认是分析未提交修改的代码覆盖率(如果存在新增加的git未跟踪文件,需要先git add 添加进来才可以); | |||
- `-d, --directory` : 代码进行增量覆盖率检查的代码路径,支持传入路径参数; | |||
默认:执行增量覆盖率检查; | |||
下面的命令演示了如何检查ge目录下所有代码的增量覆盖率: | |||
```sh | |||
$ ge cov -d=ge | |||
``` | |||
### `ge docs` | |||
Doxygen文档生成,包含代码逻辑和物理结构和关系,方便阅读和理解代码;目前可以支持参数如下: | |||
```sh | |||
$ ge docs -h | |||
Usage: ge docs [OPTIONS] | |||
Options: | |||
-b, --brief Build brief docs | |||
-a, --all Build all docs | |||
-h, --help | |||
``` | |||
参数详细解释: | |||
- `-b, --brief` : 生成简要文档,忽略部分关系图生成,速度快; | |||
- `-a, --all` : 生成全量文档,包含各种代码关系图,速度相对慢; | |||
默认: 生成全量代码文档。 | |||
### `ge clean` | |||
清除各种下载或生成的中间文件,目前支持的参数如下: | |||
```sh | |||
$ ge clean -h | |||
Usage: ge clean [OPTIONS] | |||
Options: | |||
-b, --build Clean build dir | |||
-d, --docs Clean generate docs | |||
-i, --install Clean dependenices | |||
-a, --all Clean all | |||
-h, --help | |||
``` | |||
参数详细解释: | |||
- `-b, --build` : 清除生成的编译构建临时文件; | |||
- `-d, --docs` : 清除生成的文档临时文件; | |||
- `-i, --install` : 清除安装的依赖文件; | |||
- `-a, --all` : 清除所有下载和生成的临时文件; | |||
默认:清除编译构建产生临时文件。 | |||
## Follow us | |||
工具链的功能还在不断完善中,有问题请提issue,谢谢! |
@@ -0,0 +1,80 @@ | |||
#!/bin/bash | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
set -e | |||
PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../../} | |||
function help(){ | |||
cat <<-EOF | |||
Usage: ge test [OPTIONS] | |||
Options: | |||
-u, --unit Run unit Test | |||
-c, --component Run component Test | |||
-h, --help | |||
EOF | |||
} | |||
function unit_test(){ | |||
${PROJECT_HOME}/build.sh -u | |||
} | |||
function component_test(){ | |||
${PROJECT_HOME}/build.sh -s | |||
} | |||
function parse_args(){ | |||
parsed_args=$(getopt -a -o uch --long unit,component,help -- "$@") || { | |||
help | |||
exit 1 | |||
} | |||
if [ $# -lt 1 ]; then | |||
unit_test | |||
exit 1 | |||
fi | |||
eval set -- "$parsed_args" | |||
while true; do | |||
case "$1" in | |||
-u | --unit) | |||
unit_test | |||
;; | |||
-c | --component) | |||
component_test | |||
;; | |||
-h | --help) | |||
help | |||
;; | |||
--) | |||
shift; break; | |||
;; | |||
*) | |||
help; exit 1 | |||
;; | |||
esac | |||
shift | |||
done | |||
} | |||
function main(){ | |||
parse_args "$@" | |||
} | |||
main "$@" | |||
set +e |
@@ -0,0 +1,47 @@ | |||
#!/bin/bash | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
set -e | |||
SERVER_CONFIG_FILE=${PROJECT_HOME}/scripts/config/server_config.sh | |||
[ -e $SERVER_CONFIG_FILE ] || { | |||
echo "You have not config dependencies account info first !!!!!" | |||
${PROJECT_HOME}/scripts/config/ge_config.sh -h | |||
exit 1; | |||
} | |||
source scripts/config/server_config.sh | |||
CPU_ARCH=ubuntu18.04.x86_64 | |||
DRIVER_VERSION=20.2.0 | |||
CHIP_NAME=A800-9010 | |||
PRODUCT_VERSION=driver_C76_TR5 | |||
DRIVER_NAME=npu-driver | |||
DRIVER_RUN_NAME=${CHIP_NAME}-${DRIVER_NAME}_${DRIVER_VERSION}_ubuntu18.04-x86_64.run | |||
DEV_TOOLS_VERSION=1.78.t10.0.b100 | |||
export ATC_RUN_NAME=Ascend-atc-${DEV_TOOLS_VERSION}-${CPU_ARCH}.run | |||
export ACL_RUN_NAME=Ascend-acllib-${DEV_TOOLS_VERSION}-${CPU_ARCH}.run | |||
export FWKACL_RUN_NAME=Ascend-fwkacllib-${DEV_TOOLS_VERSION}-${CPU_ARCH}.run | |||
DEV_TOOLS_PACKAGE=x86_ubuntu_os_devtoolset_package | |||
export DRIVER_URL=${SERVER_PATH}/${PRODUCT_VERSION}/${DRIVER_RUN_NAME} | |||
export DEV_TOOLS_URL=${SERVER_PATH}/20210428/${DEV_TOOLS_PACKAGE}.zip | |||
set +e |
@@ -0,0 +1,136 @@ | |||
#!/bin/bash | |||
# Copyright 2021 Huawei Technologies Co., Ltd | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# ============================================================================ | |||
set -e | |||
PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../../} | |||
PROJECT_HOME=$(cd $PROJECT_HOME || return; pwd) | |||
DOWNLOAD_PATH=${PROJECT_HOME}/deps | |||
DEP_LIB_DIR=./lib | |||
DEP_TMP_DIR=./tmp | |||
function extract_deps_so() | |||
{ | |||
echo "begin to extract .run file ........." | |||
chmod 777 ./${DRIVER_RUN_NAME} | |||
unzip ${DEV_TOOLS_PACKAGE}.zip | |||
chmod -R 777 ${DEV_TOOLS_PACKAGE} | |||
[ -n "${DEP_TMP_DIR}" ] && rm -rf "${DEP_TMP_DIR}" | |||
./${DRIVER_RUN_NAME} --noexec --extract=${DEP_TMP_DIR}/driver | |||
./${DEV_TOOLS_PACKAGE}/${ATC_RUN_NAME} --noexec --extract=${DEP_TMP_DIR}/atc | |||
./${DEV_TOOLS_PACKAGE}/${ACL_RUN_NAME} --noexec --extract=${DEP_TMP_DIR}/acllib | |||
./${DEV_TOOLS_PACKAGE}/${FWKACL_RUN_NAME} --noexec --extract=${DEP_TMP_DIR}/fwkacllib | |||
} | |||
function copy_so_to_target_dir() | |||
{ | |||
mkdir -p $DEP_LIB_DIR | |||
mv ${DEP_TMP_DIR}/driver/driver $DEP_LIB_DIR/driver | |||
mv ${DEP_TMP_DIR}/atc/atc $DEP_LIB_DIR/atc | |||
mv ${DEP_TMP_DIR}/acllib/acllib $DEP_LIB_DIR/acllib | |||
mv ${DEP_TMP_DIR}/fwkacllib/fwkacllib $DEP_LIB_DIR/fwkacllib | |||
} | |||
function clear_libs() | |||
{ | |||
[ -n "${DOWNLOAD_PATH}" ] && rm -rf "${DOWNLOAD_PATH}" | |||
} | |||
function download_runs() | |||
{ | |||
source scripts/update/deps_config.sh | |||
echo "begin to download .run file ........." | |||
clear_libs | |||
mkdir -p ./ ${DOWNLOAD_PATH} | |||
pushd "${DOWNLOAD_PATH}" >/dev/null | |||
cd ${DOWNLOAD_PATH} | |||
wget --user=${DEP_USER} --password=${DEP_PASSWORD} ${DRIVER_URL} | |||
wget --user=${DEP_USER} --password=${DEP_PASSWORD} ${DEV_TOOLS_URL} | |||
popd >/dev/null | |||
} | |||
function install_deps() | |||
{ | |||
source scripts/update/deps_config.sh | |||
mkdir -p ./ ${DOWNLOAD_PATH} | |||
pushd "${DOWNLOAD_PATH}" >/dev/null | |||
cd ${DOWNLOAD_PATH} | |||
extract_deps_so | |||
copy_so_to_target_dir | |||
popd >/dev/null | |||
} | |||
function help(){ | |||
cat <<-EOF | |||
Usage: ge update [OPTIONS] | |||
update dependencies of build and test | |||
Options: | |||
-d, --download Download dependencies | |||
-i, --install Install dependencies | |||
-c, --clear Clear dependencies | |||
-h, --help | |||
EOF | |||
} | |||
function parse_args(){ | |||
parsed_args=$(getopt -a -o dich --long download,install,clear,help -- "$@") || { | |||
help | |||
exit 1 | |||
} | |||
if [ $# -lt 1 ]; then | |||
download_runs | |||
install_deps | |||
exit 1 | |||
fi | |||
eval set -- "$parsed_args" | |||
while true; do | |||
case "$1" in | |||
-d | --download) | |||
download_runs | |||
;; | |||
-i | --install) | |||
install_deps | |||
;; | |||
-c | --clear) | |||
clear_libs | |||
;; | |||
-h | --help) | |||
help; exit 1; | |||
;; | |||
--) | |||
shift; break; | |||
;; | |||
*) | |||
help; exit 1 | |||
;; | |||
esac | |||
shift | |||
done | |||
} | |||
function main(){ | |||
parse_args "$@" | |||
} | |||
main "$@" | |||
set +e |