10826e83eSopenharmony_ci#!/bin/bash
20826e83eSopenharmony_ci# Copyright (c) 2024 Huawei Device Co., Ltd.
30826e83eSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
40826e83eSopenharmony_ci# you may not use this file except in compliance with the License.
50826e83eSopenharmony_ci# You may obtain a copy of the License at
60826e83eSopenharmony_ci#
70826e83eSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
80826e83eSopenharmony_ci#
90826e83eSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
100826e83eSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
110826e83eSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120826e83eSopenharmony_ci# See the License for the specific language governing permissions and
130826e83eSopenharmony_ci# limitations under the License.
140826e83eSopenharmony_ci
150826e83eSopenharmony_ciset -e
160826e83eSopenharmony_ci
170826e83eSopenharmony_ciWORK_SPACE=$(cd $(dirname $0); pwd)
180826e83eSopenharmony_ci
190826e83eSopenharmony_ciCOMMOND_TYPE=$1
200826e83eSopenharmony_ciOHOS_GLUE_DIR=$2
210826e83eSopenharmony_ciOHOS_GLUE_LOG_DIR=$3
220826e83eSopenharmony_ci
230826e83eSopenharmony_ciINTERFACE_DIR=${WORK_SPACE}/ohos_interface
240826e83eSopenharmony_ciINTERFACE_INCLUDE_DIR=${INTERFACE_DIR}/include
250826e83eSopenharmony_ciINTERFACE_OHOS_GLUE_DIR=${INTERFACE_DIR}/ohos_glue
260826e83eSopenharmony_ci
270826e83eSopenharmony_cios_type=$(uname)
280826e83eSopenharmony_ciarch_type=$(uname -m)
290826e83eSopenharmony_ciif [ "$os_type" == "Darwin" ]; then
300826e83eSopenharmony_ci  if [ "$arch_type" == "x86_64" ]; then
310826e83eSopenharmony_ci    CLANG_FORMAT_DIR=${WORK_SPACE}/../../../prebuilts/clang/ohos/darwin-x86_64/llvm/bin
320826e83eSopenharmony_ci  else
330826e83eSopenharmony_ci    CLANG_FORMAT_DIR=${WORK_SPACE}/../../../prebuilts/clang/ohos/darwin-arm64/llvm/bin
340826e83eSopenharmony_ci  fi
350826e83eSopenharmony_cielse
360826e83eSopenharmony_ci  CLANG_FORMAT_DIR=${WORK_SPACE}/../../../prebuilts/clang/ohos/linux-${arch_type}/llvm/bin
370826e83eSopenharmony_cifi
380826e83eSopenharmony_ci
390826e83eSopenharmony_cihandle_copy_dir() {
400826e83eSopenharmony_ci  local src_dir=$1
410826e83eSopenharmony_ci  local dst_dir=$2
420826e83eSopenharmony_ci
430826e83eSopenharmony_ci  local parent_dir=$(dirname ${dst_dir})
440826e83eSopenharmony_ci  [ -n "${dst_dir}" ] && rm -rf ${dst_dir} && mkdir -p ${parent_dir}
450826e83eSopenharmony_ci
460826e83eSopenharmony_ci  if [ -d ${src_dir} ] && [ "$(ls -A ${src_dir})" ]; then
470826e83eSopenharmony_ci    cp -rf ${src_dir} ${dst_dir}
480826e83eSopenharmony_ci  else
490826e83eSopenharmony_ci    echo "${src_dir} is not exist or empty" >> ${OHOS_GLUE_LOG_DIR}/prepare.log
500826e83eSopenharmony_ci  fi
510826e83eSopenharmony_ci}
520826e83eSopenharmony_ci
530826e83eSopenharmony_cihandle_copy_files() {
540826e83eSopenharmony_ci  echo "begin to copy ohos glue files,module name is $1" >> ${OHOS_GLUE_LOG_DIR}/prepare.log
550826e83eSopenharmony_ci
560826e83eSopenharmony_ci  if [ "$1" = "base" ]; then
570826e83eSopenharmony_ci    handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/base ${OHOS_GLUE_DIR}/base
580826e83eSopenharmony_ci    handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/scripts ${OHOS_GLUE_DIR}/scripts
590826e83eSopenharmony_ci    return
600826e83eSopenharmony_ci  fi
610826e83eSopenharmony_ci
620826e83eSopenharmony_ci  local dir_name=ohos_$1
630826e83eSopenharmony_ci  rm -rf ${OHOS_GLUE_DIR}/${dir_name} && mkdir -p ${OHOS_GLUE_DIR}/${dir_name}
640826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/${dir_name}/include ${OHOS_GLUE_DIR}/${dir_name}/include
650826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/${dir_name}/bridge/webview ${OHOS_GLUE_DIR}/${dir_name}/bridge
660826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/${dir_name}/cpptoc/webview ${OHOS_GLUE_DIR}/${dir_name}/cpptoc
670826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/${dir_name}/ctocpp/webview ${OHOS_GLUE_DIR}/${dir_name}/ctocpp
680826e83eSopenharmony_ci}
690826e83eSopenharmony_ci
700826e83eSopenharmony_cihandle_copy_include() {
710826e83eSopenharmony_ci  echo "begin to copy ohos interface files" >> ${OHOS_GLUE_LOG_DIR}/prepare.log
720826e83eSopenharmony_ci
730826e83eSopenharmony_ci  cp ${INTERFACE_INCLUDE_DIR}/ohos_nweb/* ${WORK_SPACE}/ohos_nweb/include
740826e83eSopenharmony_ci
750826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_INCLUDE_DIR}/ohos_adapter ${WORK_SPACE}/ohos_adapter/interfaces
760826e83eSopenharmony_ci}
770826e83eSopenharmony_ci
780826e83eSopenharmony_cihandle_copy_commond() {
790826e83eSopenharmony_ci  local curr_time=$(date +"%Y-%m-%d %H:%M:%S")
800826e83eSopenharmony_ci  echo "start time is ${curr_time}" >> ${OHOS_GLUE_LOG_DIR}/prepare.log
810826e83eSopenharmony_ci  echo "work space is ${WORK_SPACE}" >> ${OHOS_GLUE_LOG_DIR}/prepare.log
820826e83eSopenharmony_ci  echo "ohos glue dir is ${OHOS_GLUE_DIR}" >> ${OHOS_GLUE_LOG_DIR}/prepare.log
830826e83eSopenharmony_ci
840826e83eSopenharmony_ci  handle_copy_include
850826e83eSopenharmony_ci
860826e83eSopenharmony_ci  handle_copy_files base
870826e83eSopenharmony_ci  handle_copy_files nweb
880826e83eSopenharmony_ci  handle_copy_files adapter
890826e83eSopenharmony_ci}
900826e83eSopenharmony_ci
910826e83eSopenharmony_cihandle_develop_commond() {
920826e83eSopenharmony_ci  local ohos_glue_dir=${1}/${2}
930826e83eSopenharmony_ci  [ -n "${ohos_glue_dir}" ] && rm -rf ${ohos_glue_dir} && mkdir -p ${ohos_glue_dir}
940826e83eSopenharmony_ci
950826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/base ${ohos_glue_dir}/base
960826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/scripts ${ohos_glue_dir}/scripts
970826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/ohos_nweb/include ${ohos_glue_dir}/ohos_nweb/include
980826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/ohos_nweb/bridge/${2} ${ohos_glue_dir}/ohos_nweb/bridge
990826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/ohos_nweb/cpptoc/${2} ${ohos_glue_dir}/ohos_nweb/cpptoc
1000826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/ohos_nweb/ctocpp/${2} ${ohos_glue_dir}/ohos_nweb/ctocpp
1010826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/ohos_adapter/include ${ohos_glue_dir}/ohos_adapter/include
1020826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/ohos_adapter/bridge/${2} ${ohos_glue_dir}/ohos_adapter/bridge
1030826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/ohos_adapter/cpptoc/${2} ${ohos_glue_dir}/ohos_adapter/cpptoc
1040826e83eSopenharmony_ci  handle_copy_dir ${INTERFACE_OHOS_GLUE_DIR}/ohos_adapter/ctocpp/${2} ${ohos_glue_dir}/ohos_adapter/ctocpp
1050826e83eSopenharmony_ci
1060826e83eSopenharmony_ci  local file_list=$(find ${ohos_glue_dir}/ohos_*/include -name "*.h")
1070826e83eSopenharmony_ci  for file in $file_list
1080826e83eSopenharmony_ci  do
1090826e83eSopenharmony_ci    clang-format -style="{PointerAlignment: Right}" -i $file
1100826e83eSopenharmony_ci  done
1110826e83eSopenharmony_ci
1120826e83eSopenharmony_ci  python3 ${ohos_glue_dir}/scripts/translator.py ${2}
1130826e83eSopenharmony_ci
1140826e83eSopenharmony_ci  file_list=$(find ${ohos_glue_dir} -type f \( -name "*.h" -o -name "*.cpp" \))
1150826e83eSopenharmony_ci  for file in $file_list
1160826e83eSopenharmony_ci  do
1170826e83eSopenharmony_ci    clang-format -style=file -i $file
1180826e83eSopenharmony_ci  done
1190826e83eSopenharmony_ci}
1200826e83eSopenharmony_ci
1210826e83eSopenharmony_cihandle_translate_commond() {
1220826e83eSopenharmony_ci  OHOS_GLUE_MODULE=$1
1230826e83eSopenharmony_ci  if [ "${OHOS_GLUE_MODULE}" = "base" ]; then
1240826e83eSopenharmony_ci    return
1250826e83eSopenharmony_ci  fi
1260826e83eSopenharmony_ci
1270826e83eSopenharmony_ci  local curr_time=$(date +"%Y-%m-%d %H:%M:%S")
1280826e83eSopenharmony_ci  echo "start time is ${curr_time}" >> ${OHOS_GLUE_LOG_DIR}/prepare.log
1290826e83eSopenharmony_ci  echo "begin to translate ohos glue file,module name is ${OHOS_GLUE_MODULE}" >> ${OHOS_GLUE_LOG_DIR}/prepare.log
1300826e83eSopenharmony_ci
1310826e83eSopenharmony_ci  local dir_name=ohos_${OHOS_GLUE_MODULE}
1320826e83eSopenharmony_ci  local file_list=$(find ${OHOS_GLUE_DIR}/${dir_name}/include -name "*.h")
1330826e83eSopenharmony_ci  for file in $file_list
1340826e83eSopenharmony_ci  do
1350826e83eSopenharmony_ci    ${CLANG_FORMAT_DIR}/clang-format -style="{PointerAlignment: Right}" -i $file
1360826e83eSopenharmony_ci  done
1370826e83eSopenharmony_ci
1380826e83eSopenharmony_ci  python3 ${OHOS_GLUE_DIR}/scripts/translator.py webview $dir_name >> ${OHOS_GLUE_LOG_DIR}/prepare.log
1390826e83eSopenharmony_ci}
1400826e83eSopenharmony_ci
1410826e83eSopenharmony_cicase "${COMMOND_TYPE}" in
1420826e83eSopenharmony_ci  "copy")
1430826e83eSopenharmony_ci    handle_copy_commond
1440826e83eSopenharmony_ci    ;;
1450826e83eSopenharmony_ci  "develop")
1460826e83eSopenharmony_ci    OHOS_GLUE_LOG_DIR=./
1470826e83eSopenharmony_ci    dir_name=$(date +"%Y%m%d%H%M%S")
1480826e83eSopenharmony_ci    handle_develop_commond ${dir_name} webcore
1490826e83eSopenharmony_ci    handle_develop_commond ${dir_name} webview
1500826e83eSopenharmony_ci    ;;
1510826e83eSopenharmony_ci  "translate")
1520826e83eSopenharmony_ci    args=${@:4}
1530826e83eSopenharmony_ci    handle_translate_commond $args
1540826e83eSopenharmony_ci    ;;
1550826e83eSopenharmony_ci  *)
1560826e83eSopenharmony_ci    echo "commond ${COMMOND_TYPE} is invalid" >> ${OHOS_GLUE_LOG_DIR}/prepare.log
1570826e83eSopenharmony_ciesac
158