1#!/bin/bash 2# Copyright (c) 2021 Huawei Device Co., Ltd. 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15set -e 16set +e 17echo "++++++++++++++++++++++++++++++++++++++++" 18function check_shell_environment() { 19 case $(uname -s) in 20 Linux) 21 shell_result=$(/bin/sh -c 'echo ${BASH_VERSION}') 22 if [ -n "${shell_result}" ]; then 23 echo "The system shell is bash ${shell_result}" 24 else 25 echo -e "\033[33m Your system shell isn't bash, we recommend you to use bash, because some commands may not be supported in other shells, such as pushd and shopt are not supported in dash. \n You can follow these tips to modify the system shell to bash on Ubuntu: \033[0m" 26 echo -e "\033[33m [1]:Open the Terminal tool and execute the following command: sudo dpkg-reconfigure dash \n [2]:Enter the password and select <no> \033[0m" 27 fi 28 ;; 29 Darwin) 30 echo "Darwin system is not supported yet" 31 ;; 32 *) 33 echo "Unsupported this system: $(uname -s)" 34 exit 1 35 esac 36} 37 38check_shell_environment 39 40echo "++++++++++++++++++++++++++++++++++++++++" 41date +%F' '%H:%M:%S 42echo $@ 43 44export SOURCE_ROOT_DIR=$(cd $(dirname $0);pwd) 45 46while [[ ! -f "${SOURCE_ROOT_DIR}/.gn" ]]; do 47 SOURCE_ROOT_DIR="$(dirname "${SOURCE_ROOT_DIR}")" 48 if [[ "${SOURCE_ROOT_DIR}" == "/" ]]; then 49 echo "Cannot find source tree containing $(pwd)" 50 exit 1 51 fi 52done 53 54if [[ "${SOURCE_ROOT_DIR}x" == "x" ]]; then 55 echo "Error: SOURCE_ROOT_DIR cannot be empty." 56 exit 1 57fi 58 59case $(uname -s) in 60 Darwin) 61 HOST_DIR="darwin-x86" 62 HOST_OS="mac" 63 NODE_PLATFORM="darwin-x64" 64 ;; 65 Linux) 66 HOST_DIR="linux-x86" 67 HOST_OS="linux" 68 NODE_PLATFORM="linux-x64" 69 ;; 70 *) 71 echo "Unsupported host platform: $(uname -s)" 72 RET=1 73 exit $RET 74esac 75 76# set python3 77PYTHON3_DIR=${SOURCE_ROOT_DIR}/prebuilts/python/${HOST_DIR}/current/ 78PYTHON3=${PYTHON3_DIR}/bin/python3 79PYTHON=${PYTHON3_DIR}/bin/python 80if [[ ! -f "${PYTHON3}" ]]; then 81 echo -e "\033[33m Please execute the build/prebuilts_download.sh \033[0m" 82 exit 1 83else 84 if [[ ! -f "${PYTHON}" ]]; then 85 ln -sf "${PYTHON3}" "${PYTHON}" 86 fi 87fi 88 89export PATH=${SOURCE_ROOT_DIR}/prebuilts/build-tools/${HOST_DIR}/bin:${PYTHON3_DIR}/bin:$PATH 90 91# set nodejs and ohpm 92EXPECTED_NODE_VERSION="14.21.1" 93export PATH=${SOURCE_ROOT_DIR}/prebuilts/build-tools/common/nodejs/node-v${EXPECTED_NODE_VERSION}-${NODE_PLATFORM}/bin:$PATH 94export NODE_HOME=${SOURCE_ROOT_DIR}/prebuilts/build-tools/common/nodejs/node-v${EXPECTED_NODE_VERSION}-${NODE_PLATFORM} 95export PATH=${SOURCE_ROOT_DIR}/prebuilts/build-tools/common/oh-command-line-tools/ohpm/bin:$PATH 96echo "Current Node.js version is $(node -v)" 97NODE_VERSION=$(node -v) 98if [ "$NODE_VERSION" != "v$EXPECTED_NODE_VERSION" ]; then 99 echo "Node.js version mismatch. Expected $EXPECTED_NODE_VERSION but found $NODE_VERSION" >&2 100 exit 1 101fi 102echo "Node.js version check passed" 103npm config set registry https://repo.huaweicloud.com/repository/npm/ 104npm config set @ohos:registry https://repo.harmonyos.com/npm/ 105npm config set strict-ssl false 106npm config set lockfile false 107cat $HOME/.npmrc | grep 'lockfile=false' || echo 'lockfile=false' >> $HOME/.npmrc 108 109function init_ohpm() { 110 TOOLS_INSTALL_DIR="${SOURCE_ROOT_DIR}/prebuilts/build-tools/common" 111 cd ${TOOLS_INSTALL_DIR} 112 #command_line_version=2.0.1.0 113 if [[ ! -f "${SOURCE_ROOT_DIR}/prebuilts/build-tools/common/oh-command-line-tools/ohpm/bin/ohpm" ]]; then 114 echo "download oh-command-line-tools" 115 wget https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_package_901_9/a6/v3/cXARnGbKTt-4sPEi3GcnJA/ohcommandline-tools-linux-2.0.0.1.zip\?HW-CC-KV\=V1\&HW-CC-Date\=20230512T075353Z\&HW-CC-Expire\=315360000\&HW-CC-Sign\=C82B51F3C9F107AB460EC26392E25B2E20EF1A6CAD10A26929769B21B8C8D5B6 -O ohcommandline-tools-linux.zip 116 unzip ohcommandline-tools-linux.zip 117 fi 118 OHPM_HOME=${TOOLS_INSTALL_DIR}/oh-command-line-tools/ohpm 119 chmod +x ${OHPM_HOME}/bin/init 120 echo "init ohpm" 121 ${OHPM_HOME}/bin/init 122 echo "ohpm version is $(ohpm -v)" 123 ohpm config set registry https://repo.harmonyos.com/ohpm/ 124 ohpm config set strict_ssl false 125 ohpm config set log_level debug 126 cd ${SOURCE_ROOT_DIR} 127 if [[ -d "$HOME/.hvigor" ]]; then 128 echo "remove $HOME/.hvigor" 129 rm -rf $HOME/.hvigor/daemon $HOME/.hvigor/wrapper 130 fi 131 mkdir -p $HOME/.hvigor/wrapper/tools 132 echo '{"dependencies": {"pnpm": "7.30.0"}}' > $HOME/.hvigor/wrapper/tools/package.json 133 pushd $HOME/.hvigor/wrapper/tools 134 echo "install pnpm" 135 npm install 136 popd 137} 138 139if [[ "$*" != *ohos-sdk* ]]; then 140 echo "start set ohpm" 141 init_ohpm 142 if [[ "$?" -ne 0 ]]; then 143 echo "ohpm init failed!" 144 exit 1 145 fi 146fi 147 148function build_sdk() { 149 ROOT_PATH=${SOURCE_ROOT_DIR} 150 if [ -d ${ROOT_PATH}/out/sdk/packages/ohos-sdk/linux ]; then 151 echo "ohos-sdk exists." 152 return 0 153 fi 154 pushd ${ROOT_PATH} 155 echo "building the latest ohos-sdk..." 156 ./build.py --product-name ohos-sdk --get-warning-list=false --stat-ccache=false --compute-overlap-rate=false --deps-guard=false --generate-ninja-trace=false --gn-args skip_generate_module_list_file=true --gn-args sdk_platform=linux 157 if [[ "$?" -ne 0 ]]; then 158 echo "ohos-sdk build failed!" 159 exit 1 160 fi 161 162 if [ -d ${ROOT_PATH}/out/sdk/packages/ohos-sdk/linux ]; then 163 pushd ${ROOT_PATH}/out/sdk/packages/ohos-sdk/linux 164 mv ${ROOT_PATH}/out/sdk/ohos-sdk/linux/* . 165 echo "extracting ohos-sdk package..." 166 unzip -q "$(find . -name "native-linux*.zip")" 167 api_version=$(grep apiVersion toolchains/oh-uni-package.json | awk '{print $2}' | sed -r 's/\",?//g') || api_version="10" 168 mkdir -p $api_version 169 for i in */; do 170 if [ -d "$i" ] && [ "$i" != "$api_version/" ]; then 171 mv $i $api_version 172 fi 173 done 174 popd 175 fi 176 if [ -d "${ROOT_PATH}/prebuilts/ohos-sdk/linux" ]; then 177 rm -rf ${ROOT_PATH}/prebuilts/ohos-sdk/linux 178 fi 179 mkdir -p ${ROOT_PATH}/prebuilts/ohos-sdk/ 180 cp -af ${ROOT_PATH}/out/sdk/packages/ohos-sdk/linux ${ROOT_PATH}/prebuilts/ohos-sdk/ 181 popd 182} 183if [[ ! -d "${SOURCE_ROOT_DIR}/prebuilts/ohos-sdk/linux" && "$*" != *ohos-sdk* && "$*" != *"--no-prebuilt-sdk"* || "${@}" =~ "--prebuilt-sdk" ]]; then 184 echo "start build ohos-sdk" 185 build_sdk 186 if [[ "$?" -ne 0 ]]; then 187 echo "ohos-sdk build failed, please remove the out/sdk directory and try again!" 188 exit 1 189 fi 190fi 191 192${PYTHON3} ${SOURCE_ROOT_DIR}/build/scripts/tools_checker.py 193 194flag=true 195args_list=$@ 196for var in $@ 197do 198 OPTIONS=${var%%=*} 199 PARAM=${var#*=} 200 if [[ "$OPTIONS" == "using_hb_new" && "$PARAM" == "false" ]]; then 201 flag=false 202 ${PYTHON3} ${SOURCE_ROOT_DIR}/build/scripts/entry.py --source-root-dir ${SOURCE_ROOT_DIR} $args_list 203 break 204 fi 205done 206if [[ ${flag} == "true" ]]; then 207 ${PYTHON3} ${SOURCE_ROOT_DIR}/build/hb/main.py build $args_list 208fi 209 210if [[ "$?" -ne 0 ]]; then 211 echo -e "\033[31m=====build ${product_name} error=====\033[0m" 212 exit 1 213fi 214echo -e "\033[32m=====build ${product_name} successful=====\033[0m" 215 216date +%F' '%H:%M:%S 217echo "++++++++++++++++++++++++++++++++++++++++" 218