• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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