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 | |||