Files
2024-09-27 19:16:49 +08:00

218 lines
7.7 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) 2021 Huawei Device 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
set +e
echo "++++++++++++++++++++++++++++++++++++++++"
function check_shell_environment() {
case $(uname -s) in
Linux)
shell_result=$(/bin/sh -c 'echo ${BASH_VERSION}')
if [ -n "${shell_result}" ]; then
echo "The system shell is bash ${shell_result}"
else
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"
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"
fi
;;
Darwin)
echo "Darwin system is not supported yet"
;;
*)
echo "Unsupported this system: $(uname -s)"
exit 1
esac
}
check_shell_environment
echo "++++++++++++++++++++++++++++++++++++++++"
date +%F' '%H:%M:%S
echo $@
export SOURCE_ROOT_DIR=$(cd $(dirname $0);pwd)
while [[ ! -f "${SOURCE_ROOT_DIR}/.gn" ]]; do
SOURCE_ROOT_DIR="$(dirname "${SOURCE_ROOT_DIR}")"
if [[ "${SOURCE_ROOT_DIR}" == "/" ]]; then
echo "Cannot find source tree containing $(pwd)"
exit 1
fi
done
if [[ "${SOURCE_ROOT_DIR}x" == "x" ]]; then
echo "Error: SOURCE_ROOT_DIR cannot be empty."
exit 1
fi
case $(uname -s) in
Darwin)
HOST_DIR="darwin-x86"
HOST_OS="mac"
NODE_PLATFORM="darwin-x64"
;;
Linux)
HOST_DIR="linux-x86"
HOST_OS="linux"
NODE_PLATFORM="linux-x64"
;;
*)
echo "Unsupported host platform: $(uname -s)"
RET=1
exit $RET
esac
# set python3
PYTHON3_DIR=${SOURCE_ROOT_DIR}/prebuilts/python/${HOST_DIR}/current/
PYTHON3=${PYTHON3_DIR}/bin/python3
PYTHON=${PYTHON3_DIR}/bin/python
if [[ ! -f "${PYTHON3}" ]]; then
echo -e "\033[33m Please execute the build/prebuilts_download.sh \033[0m"
exit 1
else
if [[ ! -f "${PYTHON}" ]]; then
ln -sf "${PYTHON3}" "${PYTHON}"
fi
fi
export PATH=${SOURCE_ROOT_DIR}/prebuilts/build-tools/${HOST_DIR}/bin:${PYTHON3_DIR}/bin:$PATH
# set nodejs and ohpm
EXPECTED_NODE_VERSION="14.21.1"
export PATH=${SOURCE_ROOT_DIR}/prebuilts/build-tools/common/nodejs/node-v${EXPECTED_NODE_VERSION}-${NODE_PLATFORM}/bin:$PATH
export NODE_HOME=${SOURCE_ROOT_DIR}/prebuilts/build-tools/common/nodejs/node-v${EXPECTED_NODE_VERSION}-${NODE_PLATFORM}
export PATH=${SOURCE_ROOT_DIR}/prebuilts/build-tools/common/oh-command-line-tools/ohpm/bin:$PATH
echo "Current Node.js version is $(node -v)"
NODE_VERSION=$(node -v)
if [ "$NODE_VERSION" != "v$EXPECTED_NODE_VERSION" ]; then
echo "Node.js version mismatch. Expected $EXPECTED_NODE_VERSION but found $NODE_VERSION" >&2
exit 1
fi
echo "Node.js version check passed"
npm config set registry https://repo.huaweicloud.com/repository/npm/
npm config set @ohos:registry https://repo.harmonyos.com/npm/
npm config set strict-ssl false
npm config set lockfile false
cat $HOME/.npmrc | grep 'lockfile=false' || echo 'lockfile=false' >> $HOME/.npmrc
function init_ohpm() {
TOOLS_INSTALL_DIR="${SOURCE_ROOT_DIR}/prebuilts/build-tools/common"
cd ${TOOLS_INSTALL_DIR}
#command_line_version=2.0.1.0
if [[ ! -f "${SOURCE_ROOT_DIR}/prebuilts/build-tools/common/oh-command-line-tools/ohpm/bin/ohpm" ]]; then
echo "download oh-command-line-tools"
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
unzip ohcommandline-tools-linux.zip
fi
OHPM_HOME=${TOOLS_INSTALL_DIR}/oh-command-line-tools/ohpm
chmod +x ${OHPM_HOME}/bin/init
echo "init ohpm"
${OHPM_HOME}/bin/init
echo "ohpm version is $(ohpm -v)"
ohpm config set registry https://repo.harmonyos.com/ohpm/
ohpm config set strict_ssl false
ohpm config set log_level debug
cd ${SOURCE_ROOT_DIR}
if [[ -d "$HOME/.hvigor" ]]; then
echo "remove $HOME/.hvigor"
rm -rf $HOME/.hvigor/daemon $HOME/.hvigor/wrapper
fi
mkdir -p $HOME/.hvigor/wrapper/tools
echo '{"dependencies": {"pnpm": "7.30.0"}}' > $HOME/.hvigor/wrapper/tools/package.json
pushd $HOME/.hvigor/wrapper/tools
echo "install pnpm"
npm install
popd
}
if [[ "$*" != *ohos-sdk* ]]; then
echo "start set ohpm"
init_ohpm
if [[ "$?" -ne 0 ]]; then
echo "ohpm init failed!"
exit 1
fi
fi
function build_sdk() {
ROOT_PATH=${SOURCE_ROOT_DIR}
if [ -d ${ROOT_PATH}/out/sdk/packages/ohos-sdk/linux ]; then
echo "ohos-sdk exists."
return 0
fi
pushd ${ROOT_PATH}
echo "building the latest ohos-sdk..."
./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
if [[ "$?" -ne 0 ]]; then
echo "ohos-sdk build failed!"
exit 1
fi
if [ -d ${ROOT_PATH}/out/sdk/packages/ohos-sdk/linux ]; then
pushd ${ROOT_PATH}/out/sdk/packages/ohos-sdk/linux
mv ${ROOT_PATH}/out/sdk/ohos-sdk/linux/* .
echo "extracting ohos-sdk package..."
unzip -q "$(find . -name "native-linux*.zip")"
api_version=$(grep apiVersion toolchains/oh-uni-package.json | awk '{print $2}' | sed -r 's/\",?//g') || api_version="10"
mkdir -p $api_version
for i in */; do
if [ -d "$i" ] && [ "$i" != "$api_version/" ]; then
mv $i $api_version
fi
done
popd
fi
if [ -d "${ROOT_PATH}/prebuilts/ohos-sdk/linux" ]; then
rm -rf ${ROOT_PATH}/prebuilts/ohos-sdk/linux
fi
mkdir -p ${ROOT_PATH}/prebuilts/ohos-sdk/
cp -af ${ROOT_PATH}/out/sdk/packages/ohos-sdk/linux ${ROOT_PATH}/prebuilts/ohos-sdk/
popd
}
if [[ ! -d "${SOURCE_ROOT_DIR}/prebuilts/ohos-sdk/linux" && "$*" != *ohos-sdk* && "$*" != *"--no-prebuilt-sdk"* || "${@}" =~ "--prebuilt-sdk" ]]; then
echo "start build ohos-sdk"
build_sdk
if [[ "$?" -ne 0 ]]; then
echo "ohos-sdk build failed, please remove the out/sdk directory and try again!"
exit 1
fi
fi
${PYTHON3} ${SOURCE_ROOT_DIR}/build/scripts/tools_checker.py
flag=true
args_list=$@
for var in $@
do
OPTIONS=${var%%=*}
PARAM=${var#*=}
if [[ "$OPTIONS" == "using_hb_new" && "$PARAM" == "false" ]]; then
flag=false
${PYTHON3} ${SOURCE_ROOT_DIR}/build/scripts/entry.py --source-root-dir ${SOURCE_ROOT_DIR} $args_list
break
fi
done
if [[ ${flag} == "true" ]]; then
${PYTHON3} ${SOURCE_ROOT_DIR}/build/hb/main.py build $args_list
fi
if [[ "$?" -ne 0 ]]; then
echo -e "\033[31m=====build ${product_name} error=====\033[0m"
exit 1
fi
echo -e "\033[32m=====build ${product_name} successful=====\033[0m"
date +%F' '%H:%M:%S
echo "++++++++++++++++++++++++++++++++++++++++"