From: @wei-gangqiang Reviewed-by: @sheng-nan Signed-off-by:tags/v1.3.0
| @@ -3,8 +3,17 @@ | |||||
| /output | /output | ||||
| /prebuilts | /prebuilts | ||||
| /cov | /cov | ||||
| /deps | |||||
| .autotools | |||||
| .project | |||||
| .cproject | |||||
| .settings/ | |||||
| /tests/frm/ | |||||
| *.ir | *.ir | ||||
| *.out | *.out | ||||
| *.DS_Store | |||||
| .DS_Store | |||||
| server_config.sh | |||||
| # Dynamic libraries | # Dynamic libraries | ||||
| # *.so | # *.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 | #!/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"); | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| # you may not use this file except in compliance with 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 | # See the License for the specific language governing permissions and | ||||
| # limitations under the License. | # limitations under the License. | ||||
| # ============================================================================ | # ============================================================================ | ||||
| set -e | set -e | ||||
| CLANG_FORMAT=$(which clang-format) || (echo "Please install 'clang-format' tool first"; exit 1) | CLANG_FORMAT=$(which clang-format) || (echo "Please install 'clang-format' tool first"; exit 1) | ||||
| @@ -25,10 +24,10 @@ if [[ "${version}" -lt "8" ]]; then | |||||
| fi | fi | ||||
| CURRENT_PATH=$(pwd) | CURRENT_PATH=$(pwd) | ||||
| SCRIPTS_PATH=$(dirname "$0") | |||||
| PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../} | |||||
| echo "CURRENT_PATH=$CURRENT_PATH" | echo "CURRENT_PATH=$CURRENT_PATH" | ||||
| echo "SCRIPTS_PATH=$SCRIPTS_PATH" | |||||
| echo "PROJECT_HOME=$PROJECT_HOME" | |||||
| # print usage message | # print usage message | ||||
| function usage() | function usage() | ||||
| @@ -81,45 +80,46 @@ function checkopts() | |||||
| checkopts "$@" | checkopts "$@" | ||||
| # switch to project root path, which contains clang-format config file '.clang-format' | # 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 | if [[ "X${result}" == "X0" ]]; then | ||||
| echo "Check PASS: specified files are well formated!" | echo "Check PASS: specified files are well formated!" | ||||
| fi | 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 | #!/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"); | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| # you may not use this file except in compliance with 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 | exit 1 | ||||
| fi | fi | ||||
| CURRENT_PATH=$(pwd) | CURRENT_PATH=$(pwd) | ||||
| SCRIPTS_PATH=$(dirname "$0") | |||||
| PROJECT_HOME=${PROJECT_HOME:-$(dirname "$0")/../../} | |||||
| echo "CURRENT_PATH=${CURRENT_PATH}" | echo "CURRENT_PATH=${CURRENT_PATH}" | ||||
| echo "SCRIPTS_PATH=${SCRIPTS_PATH}" | |||||
| echo "PROJECT_HOME=${PROJECT_HOME}" | |||||
| # print usage message | # print usage message | ||||
| function usage() | function usage() | ||||
| @@ -81,27 +82,28 @@ function checkopts() | |||||
| checkopts "$@" | checkopts "$@" | ||||
| # switch to project root path, which contains clang-format config file '.clang-format' | # 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." | 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 | |||||