15f9996aaSopenharmony_ci#!/bin/bash 25f9996aaSopenharmony_ci# Copyright (c) 2021 Huawei Device Co., Ltd. 35f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 45f9996aaSopenharmony_ci# you may not use this file except in compliance with the License. 55f9996aaSopenharmony_ci# You may obtain a copy of the License at 65f9996aaSopenharmony_ci# 75f9996aaSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 85f9996aaSopenharmony_ci# 95f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 105f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 115f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 125f9996aaSopenharmony_ci# See the License for the specific language governing permissions and 135f9996aaSopenharmony_ci# limitations under the License. 145f9996aaSopenharmony_ciset -e 155f9996aaSopenharmony_ci 165f9996aaSopenharmony_ciscript_path=$(cd $(dirname $0);pwd) 175f9996aaSopenharmony_cicode_dir=$(dirname ${script_path}) 185f9996aaSopenharmony_ci 195f9996aaSopenharmony_ciif [[ "${@}" =~ "--tool-repo" && -f "${code_dir}/prebuilts.sh" ]]; then 205f9996aaSopenharmony_ci # prebuilts.sh should be a symbolic link to a prebuilts_download.sh created by oneself. 215f9996aaSopenharmony_ci bash ${code_dir}/prebuilts.sh $@ 225f9996aaSopenharmony_cielse 235f9996aaSopenharmony_ciwhile [ $# -gt 0 ]; do 245f9996aaSopenharmony_ci case "$1" in 255f9996aaSopenharmony_ci -skip-ssl|--skip-ssl) # wget、npm skip ssl check, which will allow 265f9996aaSopenharmony_ci # hacker to get and modify data stream between server and client! 275f9996aaSopenharmony_ci SKIP_SSL=YES 285f9996aaSopenharmony_ci ;; 295f9996aaSopenharmony_ci -h|--help) 305f9996aaSopenharmony_ci HELP=YES 315f9996aaSopenharmony_ci ;; 325f9996aaSopenharmony_ci --disable-rich) # disable the rich module of python 335f9996aaSopenharmony_ci DISABLE_RICH=YES 345f9996aaSopenharmony_ci ;; 355f9996aaSopenharmony_ci --enable-symlink) # enable symlink while copying node_modules 365f9996aaSopenharmony_ci ENABLE_SYMLINK=YES 375f9996aaSopenharmony_ci ;; 385f9996aaSopenharmony_ci --build-arkuix) 395f9996aaSopenharmony_ci BUILD_ARKUIX=YES 405f9996aaSopenharmony_ci ;; 415f9996aaSopenharmony_ci --tool-repo) 425f9996aaSopenharmony_ci TOOL_REPO="$2" 435f9996aaSopenharmony_ci shift 445f9996aaSopenharmony_ci ;; 455f9996aaSopenharmony_ci --tool-repo=*) 465f9996aaSopenharmony_ci TOOL_REPO="${1#--tool-repo=}" 475f9996aaSopenharmony_ci ;; 485f9996aaSopenharmony_ci --npm-registry) 495f9996aaSopenharmony_ci NPM_REGISTRY="$2" 505f9996aaSopenharmony_ci shift 515f9996aaSopenharmony_ci ;; 525f9996aaSopenharmony_ci --npm-registry=*) 535f9996aaSopenharmony_ci NPM_REGISTRY="${1#--npm-registry=}" 545f9996aaSopenharmony_ci ;; 555f9996aaSopenharmony_ci --trusted-host) 565f9996aaSopenharmony_ci TRUSTED_HOST="$2" 575f9996aaSopenharmony_ci shift 585f9996aaSopenharmony_ci ;; 595f9996aaSopenharmony_ci --trusted-host=*) 605f9996aaSopenharmony_ci TRUSTED_HOST="${1#--trusted-host=}" 615f9996aaSopenharmony_ci ;; 625f9996aaSopenharmony_ci --pypi-url) # python package index url 635f9996aaSopenharmony_ci PYPI_URL="$2" 645f9996aaSopenharmony_ci shift 655f9996aaSopenharmony_ci ;; 665f9996aaSopenharmony_ci --pypi-url=*) 675f9996aaSopenharmony_ci PYPI_URL="${1#--pypi-url=}" 685f9996aaSopenharmony_ci ;; 695f9996aaSopenharmony_ci --download-sdk) # Download the SDK if this flag is set 705f9996aaSopenharmony_ci DOWNLOAD_SDK=YES 715f9996aaSopenharmony_ci ;; 725f9996aaSopenharmony_ci *) 735f9996aaSopenharmony_ci echo "$0: Warning: unsupported parameter: $1" >&2 745f9996aaSopenharmony_ci ;; 755f9996aaSopenharmony_ci esac 765f9996aaSopenharmony_ci shift 775f9996aaSopenharmony_cidone 785f9996aaSopenharmony_ci 795f9996aaSopenharmony_cicase $(uname -s) in 805f9996aaSopenharmony_ci Linux) 815f9996aaSopenharmony_ci 825f9996aaSopenharmony_ci host_platform=linux 835f9996aaSopenharmony_ci glibc_version=$(getconf GNU_LIBC_VERSION | grep -oE '[0-9].[0-9]{2}') 845f9996aaSopenharmony_ci ;; 855f9996aaSopenharmony_ci Darwin) 865f9996aaSopenharmony_ci host_platform=darwin 875f9996aaSopenharmony_ci ;; 885f9996aaSopenharmony_ci *) 895f9996aaSopenharmony_ci echo "Unsupported host platform: $(uname -s)" 905f9996aaSopenharmony_ci exit 1 915f9996aaSopenharmony_ciesac 925f9996aaSopenharmony_ci 935f9996aaSopenharmony_cicase $(uname -m) in 945f9996aaSopenharmony_ci arm64) 955f9996aaSopenharmony_ci 965f9996aaSopenharmony_ci host_cpu=arm64 975f9996aaSopenharmony_ci host_cpu_prefix=arm64 985f9996aaSopenharmony_ci ;; 995f9996aaSopenharmony_ci *) 1005f9996aaSopenharmony_ci host_cpu=x86_64 1015f9996aaSopenharmony_ci host_cpu_prefix=x86 1025f9996aaSopenharmony_ciesac 1035f9996aaSopenharmony_ci 1045f9996aaSopenharmony_ciif [ "X${SKIP_SSL}" == "XYES" ];then 1055f9996aaSopenharmony_ci wget_ssl_check="--skip-ssl" 1065f9996aaSopenharmony_cielse 1075f9996aaSopenharmony_ci wget_ssl_check='' 1085f9996aaSopenharmony_cifi 1095f9996aaSopenharmony_ci 1105f9996aaSopenharmony_ciif [ "X${HELP}" == "XYES" ];then 1115f9996aaSopenharmony_ci help="-h" 1125f9996aaSopenharmony_cielse 1135f9996aaSopenharmony_ci help='' 1145f9996aaSopenharmony_cifi 1155f9996aaSopenharmony_ci 1165f9996aaSopenharmony_ciif [ "X${ENABLE_SYMLINK}" == "XYES" ];then 1175f9996aaSopenharmony_ci enable_symlink="--enable-symlink" 1185f9996aaSopenharmony_cielse 1195f9996aaSopenharmony_ci enable_symlink='' 1205f9996aaSopenharmony_cifi 1215f9996aaSopenharmony_ci 1225f9996aaSopenharmony_ciif [ ! -z "$TOOL_REPO" ];then 1235f9996aaSopenharmony_ci tool_repo="--tool-repo $TOOL_REPO" 1245f9996aaSopenharmony_cielse 1255f9996aaSopenharmony_ci tool_repo='' 1265f9996aaSopenharmony_cifi 1275f9996aaSopenharmony_ci 1285f9996aaSopenharmony_ciif [ ! -z "$NPM_REGISTRY" ];then 1295f9996aaSopenharmony_ci npm_registry="--npm-registry $NPM_REGISTRY" 1305f9996aaSopenharmony_cielse 1315f9996aaSopenharmony_ci npm_registry='' 1325f9996aaSopenharmony_cifi 1335f9996aaSopenharmony_ci 1345f9996aaSopenharmony_ciif [ ! -z "$TRUSTED_HOST" ];then 1355f9996aaSopenharmony_ci trusted_host=$TRUSTED_HOST 1365f9996aaSopenharmony_cielif [ ! -z "$PYPI_URL" ];then 1375f9996aaSopenharmony_ci trusted_host=${PYPI_URL/#*:\/\//} # remove prefix part such as http:// https:// etc. 1385f9996aaSopenharmony_ci trusted_host=${trusted_host/%[:\/]*/} # remove suffix part including the port number 1395f9996aaSopenharmony_cielse 1405f9996aaSopenharmony_ci trusted_host='repo.huaweicloud.com' 1415f9996aaSopenharmony_cifi 1425f9996aaSopenharmony_ci 1435f9996aaSopenharmony_ciif [ ! -z "$PYPI_URL" ];then 1445f9996aaSopenharmony_ci pypi_url=$PYPI_URL 1455f9996aaSopenharmony_cielse 1465f9996aaSopenharmony_ci pypi_url='http://repo.huaweicloud.com/repository/pypi/simple' 1475f9996aaSopenharmony_cifi 1485f9996aaSopenharmony_ci 1495f9996aaSopenharmony_ciif [ $UID -ne 0 ]; then 1505f9996aaSopenharmony_ci npm_para='' 1515f9996aaSopenharmony_cielse 1525f9996aaSopenharmony_ci npm_para='--unsafe-perm' 1535f9996aaSopenharmony_cifi 1545f9996aaSopenharmony_ci 1555f9996aaSopenharmony_ciif [ "X${BUILD_ARKUIX}" == "XYES" ];then 1565f9996aaSopenharmony_ci build_arkuix="--build-arkuix" 1575f9996aaSopenharmony_cielse 1585f9996aaSopenharmony_ci build_arkuix='' 1595f9996aaSopenharmony_cifi 1605f9996aaSopenharmony_ci 1615f9996aaSopenharmony_ciif [ "X${DISABLE_RICH}" == "XYES" ];then 1625f9996aaSopenharmony_ci disable_rich='--disable-rich' 1635f9996aaSopenharmony_cielse 1645f9996aaSopenharmony_ci set +e 1655f9996aaSopenharmony_ci pip3 install --trusted-host $trusted_host -i $pypi_url rich; 1665f9996aaSopenharmony_ci if [ $? -eq 0 ];then 1675f9996aaSopenharmony_ci echo "rich installed successfully" 1685f9996aaSopenharmony_ci else 1695f9996aaSopenharmony_ci disable_rich='--disable-rich' 1705f9996aaSopenharmony_ci fi 1715f9996aaSopenharmony_ci set -e 1725f9996aaSopenharmony_cifi 1735f9996aaSopenharmony_ci 1745f9996aaSopenharmony_cicpu="--host-cpu $host_cpu" 1755f9996aaSopenharmony_ciplatform="--host-platform $host_platform" 1765f9996aaSopenharmony_ciif [[ "${glibc_version}" < "2.35" ]]; then 1775f9996aaSopenharmony_ci glibc_version="--glibc-version GLIBC2.27" 1785f9996aaSopenharmony_cielse 1795f9996aaSopenharmony_ci glibc_version="--glibc-version GLIBC2.35" 1805f9996aaSopenharmony_cifi 1815f9996aaSopenharmony_ciecho "prebuilts_download start" 1825f9996aaSopenharmony_ciif [ -d "${code_dir}/prebuilts/build-tools/common/nodejs" ];then 1835f9996aaSopenharmony_ci rm -rf "${code_dir}/prebuilts/build-tools/common/nodejs" 1845f9996aaSopenharmony_ci echo "remove nodejs" 1855f9996aaSopenharmony_cifi 1865f9996aaSopenharmony_cipython3 "${code_dir}/build/prebuilts_download.py" $wget_ssl_check $tool_repo $npm_registry $help $cpu $platform $npm_para $disable_rich $enable_symlink $build_arkuix $glibc_version 1875f9996aaSopenharmony_ciif [ -f "${code_dir}/prebuilts/cmake/linux-x86/bin/ninja" ];then 1885f9996aaSopenharmony_ci rm -rf "${code_dir}/prebuilts/cmake/linux-x86/bin/ninja" 1895f9996aaSopenharmony_cifi 1905f9996aaSopenharmony_ciif [ -f "${code_dir}/prebuilts/cmake/windows-x86/bin/ninja.exe" ];then 1915f9996aaSopenharmony_ci rm -rf "${code_dir}/prebuilts/cmake/windows-x86/bin/ninja.exe" 1925f9996aaSopenharmony_cifi 1935f9996aaSopenharmony_ciif [ -f "${code_dir}/prebuilts/cmake/darwin-universal/bin/ninja" ];then 1945f9996aaSopenharmony_ci rm -rf "${code_dir}/prebuilts/cmake/darwin-universal/bin/ninja" 1955f9996aaSopenharmony_cifi 1965f9996aaSopenharmony_ciecho "remove ninja in cmake" 1975f9996aaSopenharmony_ciecho "prebuilts_download end" 1985f9996aaSopenharmony_ci 1995f9996aaSopenharmony_ciPYTHON_PATH=$(realpath $code_dir/prebuilts/python/${host_platform}-${host_cpu_prefix}/*/bin | tail -1) 2005f9996aaSopenharmony_ci 2015f9996aaSopenharmony_ciif [[ "${host_platform}" == "linux" ]]; then 2025f9996aaSopenharmony_ci sed -i "1s%.*%#!/usr/bin/env python3%" "${PYTHON_PATH}/pip3" 2035f9996aaSopenharmony_cielif [[ "${host_platform}" == "darwin" ]]; then 2045f9996aaSopenharmony_ci sed -i "" "1s%.*%#!/usr/bin/env python3%" "${PYTHON_PATH}/pip3" 2055f9996aaSopenharmony_cifi 2065f9996aaSopenharmony_ciprebuild_python3_path="${PYTHON_PATH}/python3" 2075f9996aaSopenharmony_ciprebuild_pip3_path="${PYTHON_PATH}/pip3" 2085f9996aaSopenharmony_ci$prebuild_python3_path $prebuild_pip3_path install --trusted-host $trusted_host -i $pypi_url idna\>\=3.7 urllib3\>\=1.26.29 pyyaml requests\>\=2.32.1 prompt_toolkit\=\=1.0.14 asn1crypto cryptography json5\=\=0.9.6 2095f9996aaSopenharmony_ciif [[ "$DOWNLOAD_SDK" == "YES" ]] && [[ ! -d "${code_dir}/prebuilts/ohos-sdk-12" && ! -d "${code_dir}/prebuilts/ohos-sdk/12" ]]; then 2105f9996aaSopenharmony_ci $prebuild_python3_path ${code_dir}/build/scripts/download_sdk.py --branch master --product-name ohos-sdk-full-api --api-version 12 2115f9996aaSopenharmony_ci mkdir -p ${code_dir}/prebuilts/ohos-sdk-12 2125f9996aaSopenharmony_ci mv ${code_dir}/prebuilts/ohos-sdk ${code_dir}/prebuilts/ohos-sdk-12 2135f9996aaSopenharmony_cifi 2145f9996aaSopenharmony_ci 2155f9996aaSopenharmony_ci# llvm_ndk is merged form llvm and libcxx-ndk for compiling the native of hap 2165f9996aaSopenharmony_cillvm_dir="${code_dir}/prebuilts/clang/ohos/linux-x86_64" 2175f9996aaSopenharmony_cillvm_dir_win="${code_dir}/prebuilts/clang/ohos/windows-x86_64" 2185f9996aaSopenharmony_cillvm_dir_mac_x86="${code_dir}/prebuilts/clang/ohos/darwin-x86_64" 2195f9996aaSopenharmony_cillvm_dir_mac_arm64="${code_dir}/prebuilts/clang/ohos/darwin-arm64" 2205f9996aaSopenharmony_cillvm_dir_ohos_arm64="${code_dir}/prebuilts/clang/ohos/ohos-arm64" 2215f9996aaSopenharmony_cillvm_dir_list=($llvm_dir $llvm_dir_win $llvm_dir_mac_x86 $llvm_dir_mac_arm64 $llvm_dir_ohos_arm64) 2225f9996aaSopenharmony_ci 2235f9996aaSopenharmony_ci# copy libcxx-ndk library outside c++ 2245f9996aaSopenharmony_cifunction copy_inside_cxx(){ 2255f9996aaSopenharmony_cifor i in ${llvm_dir_list[@]} 2265f9996aaSopenharmony_cido 2275f9996aaSopenharmony_ci libcxx_dir="${i}/libcxx-ndk/lib" 2285f9996aaSopenharmony_ci if [[ -d "${i}/libcxx-ndk" ]]; then 2295f9996aaSopenharmony_ci for file in $(ls ${libcxx_dir}) 2305f9996aaSopenharmony_ci do 2315f9996aaSopenharmony_ci if [ ! -d "${libcxx_dir}/${file}/c++" ];then 2325f9996aaSopenharmony_ci $(mkdir -p ${libcxx_dir}/c++) 2335f9996aaSopenharmony_ci $(cp -r ${libcxx_dir}/${file}/* ${libcxx_dir}/c++) 2345f9996aaSopenharmony_ci $(mv ${libcxx_dir}/c++ ${libcxx_dir}/${file}/c++) 2355f9996aaSopenharmony_ci fi 2365f9996aaSopenharmony_ci done 2375f9996aaSopenharmony_ci fi 2385f9996aaSopenharmony_cidone 2395f9996aaSopenharmony_ci} 2405f9996aaSopenharmony_ci 2415f9996aaSopenharmony_cifunction update_llvm_ndk(){ 2425f9996aaSopenharmony_ciif [[ -e "${llvm_dir}/llvm_ndk" ]];then 2435f9996aaSopenharmony_ci rm -rf "${llvm_dir}/llvm_ndk" 2445f9996aaSopenharmony_cifi 2455f9996aaSopenharmony_cimkdir -p "${llvm_dir}/llvm_ndk" 2465f9996aaSopenharmony_cicp -af "${llvm_dir}/llvm/include" "${llvm_dir}/llvm_ndk" 2475f9996aaSopenharmony_cicp -rfp "${llvm_dir}/libcxx-ndk/include" "${llvm_dir}/llvm_ndk" 2485f9996aaSopenharmony_ci} 2495f9996aaSopenharmony_ci 2505f9996aaSopenharmony_ciif [[ "${BUILD_ARKUIX}" != "YES" ]]; then 2515f9996aaSopenharmony_ci copy_inside_cxx 2525f9996aaSopenharmony_ci echo "======copy inside cxx finished!======" 2535f9996aaSopenharmony_ci if [[ "${host_platform}" == "linux" ]]; then 2545f9996aaSopenharmony_ci update_llvm_ndk 2555f9996aaSopenharmony_ci echo "======update llvm ndk finished!======" 2565f9996aaSopenharmony_ci fi 2575f9996aaSopenharmony_cifi 2585f9996aaSopenharmony_ciecho -e "\n" 2595f9996aaSopenharmony_cifi 260