13af6ab5fSopenharmony_ci# Copyright (c) 2022 Huawei Device Co., Ltd.
23af6ab5fSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
33af6ab5fSopenharmony_ci# you may not use this file except in compliance with the License.
43af6ab5fSopenharmony_ci# You may obtain a copy of the License at
53af6ab5fSopenharmony_ci#
63af6ab5fSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
73af6ab5fSopenharmony_ci#
83af6ab5fSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
93af6ab5fSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
103af6ab5fSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
113af6ab5fSopenharmony_ci# See the License for the specific language governing permissions and
123af6ab5fSopenharmony_ci# limitations under the License.
133af6ab5fSopenharmony_ci
143af6ab5fSopenharmony_ciimport("//arkcompiler/ets_frontend/ets_frontend_config.gni")
153af6ab5fSopenharmony_ciimport("//arkcompiler/runtime_core/ark_config.gni")
163af6ab5fSopenharmony_ci
173af6ab5fSopenharmony_ciTHIRDPARTY_PROTOBUF_SUBSYS_NAME = "thirdparty"
183af6ab5fSopenharmony_ciTHIRDPARTY_PROTOBUF_PART_NAME = "protobuf"
193af6ab5fSopenharmony_ci
203af6ab5fSopenharmony_ciproto_base_dir = "protos"
213af6ab5fSopenharmony_ciproto_out_dir = "$target_gen_dir" + "/protos_generated"
223af6ab5fSopenharmony_ci
233af6ab5fSopenharmony_ciprotobuf_snapshot_generator_sources = [
243af6ab5fSopenharmony_ci  "src/annotationProto.cpp",
253af6ab5fSopenharmony_ci  "src/assemblyDebugProto.cpp",
263af6ab5fSopenharmony_ci  "src/assemblyFieldProto.cpp",
273af6ab5fSopenharmony_ci  "src/assemblyFileLocationProto.cpp",
283af6ab5fSopenharmony_ci  "src/assemblyFunctionProto.cpp",
293af6ab5fSopenharmony_ci  "src/assemblyInsProto.cpp",
303af6ab5fSopenharmony_ci  "src/assemblyLabelProto.cpp",
313af6ab5fSopenharmony_ci  "src/assemblyLiteralsProto.cpp",
323af6ab5fSopenharmony_ci  "src/assemblyProgramProto.cpp",
333af6ab5fSopenharmony_ci  "src/assemblyRecordProto.cpp",
343af6ab5fSopenharmony_ci  "src/assemblyTypeProto.cpp",
353af6ab5fSopenharmony_ci  "src/ideHelpersProto.cpp",
363af6ab5fSopenharmony_ci  "src/mergeProgram.cpp",
373af6ab5fSopenharmony_ci  "src/metaProto.cpp",
383af6ab5fSopenharmony_ci  "src/protobufSnapshotGenerator.cpp",
393af6ab5fSopenharmony_ci]
403af6ab5fSopenharmony_ci
413af6ab5fSopenharmony_ciconfig("panda_assembly_proto_public_config") {
423af6ab5fSopenharmony_ci  include_dirs = [
433af6ab5fSopenharmony_ci    "$ark_root/assembler",
443af6ab5fSopenharmony_ci    "$ark_root/libpandabase",
453af6ab5fSopenharmony_ci    "$ark_root/libpandabase/mem",
463af6ab5fSopenharmony_ci    "$ark_root",
473af6ab5fSopenharmony_ci    "src",
483af6ab5fSopenharmony_ci    "$proto_out_dir",
493af6ab5fSopenharmony_ci    "//third_party/protobuf/src",
503af6ab5fSopenharmony_ci    "//third_party/protobuf/src/google",
513af6ab5fSopenharmony_ci    "//third_party/protobuf/src/google/protobuf",
523af6ab5fSopenharmony_ci    "../es2panda",
533af6ab5fSopenharmony_ci    "../es2panda/util",
543af6ab5fSopenharmony_ci  ]
553af6ab5fSopenharmony_ci}
563af6ab5fSopenharmony_ci
573af6ab5fSopenharmony_ciassembly_proto_configs = [
583af6ab5fSopenharmony_ci  sdk_libc_secshared_config,
593af6ab5fSopenharmony_ci  "$ark_root:ark_config",
603af6ab5fSopenharmony_ci  ":panda_assembly_proto_public_config",
613af6ab5fSopenharmony_ci  "$ark_root/assembler:arkassembler_public_config",
623af6ab5fSopenharmony_ci  "$ark_root/libpandabase:arkbase_public_config",
633af6ab5fSopenharmony_ci  "$ark_root/libpandafile:arkfile_public_config",
643af6ab5fSopenharmony_ci]
653af6ab5fSopenharmony_ci
663af6ab5fSopenharmony_ciproto_file_defines = [
673af6ab5fSopenharmony_ci  # add your proto file here
683af6ab5fSopenharmony_ci  "annotation",
693af6ab5fSopenharmony_ci  "assemblyDebug",
703af6ab5fSopenharmony_ci  "assemblyField",
713af6ab5fSopenharmony_ci  "assemblyFileLocation",
723af6ab5fSopenharmony_ci  "assemblyFunction",
733af6ab5fSopenharmony_ci  "assemblyIns",
743af6ab5fSopenharmony_ci  "assemblyLabel",
753af6ab5fSopenharmony_ci  "assemblyLiterals",
763af6ab5fSopenharmony_ci  "assemblyProgram",
773af6ab5fSopenharmony_ci  "assemblyRecord",
783af6ab5fSopenharmony_ci  "assemblyType",
793af6ab5fSopenharmony_ci  "compositeProgram",
803af6ab5fSopenharmony_ci  "ideHelpers",
813af6ab5fSopenharmony_ci  "meta",
823af6ab5fSopenharmony_ci]
833af6ab5fSopenharmony_ci
843af6ab5fSopenharmony_ciproto_file_sources = []
853af6ab5fSopenharmony_ciproto_generated_header = []
863af6ab5fSopenharmony_ciproto_generated_source = []
873af6ab5fSopenharmony_ci
883af6ab5fSopenharmony_ciforeach(proto_file, proto_file_defines) {
893af6ab5fSopenharmony_ci  proto_generated_header += [ "$proto_out_dir" + "/" + "$proto_file.pb.h" ]
903af6ab5fSopenharmony_ci  proto_generated_source += [ "$proto_out_dir" + "/" + "$proto_file.pb.cc" ]
913af6ab5fSopenharmony_ci  proto_file_sources += [ "$proto_base_dir" + "/" + "$proto_file.proto" ]
923af6ab5fSopenharmony_ci}
933af6ab5fSopenharmony_ci
943af6ab5fSopenharmony_ciprotoc_binary_out_path =
953af6ab5fSopenharmony_ci    "${THIRDPARTY_PROTOBUF_SUBSYS_NAME}/${THIRDPARTY_PROTOBUF_PART_NAME}"
963af6ab5fSopenharmony_ci
973af6ab5fSopenharmony_ciif (!ark_standalone_build) {
983af6ab5fSopenharmony_ci  if (default_toolchain == current_toolchain) {
993af6ab5fSopenharmony_ci    #if target build
1003af6ab5fSopenharmony_ci    host_out_path = "/" + get_label_info(host_toolchain, "name")
1013af6ab5fSopenharmony_ci  } else {
1023af6ab5fSopenharmony_ci    #if host build (for some linke mingw)
1033af6ab5fSopenharmony_ci    host_out_path = "/../" + get_label_info(host_toolchain, "name")
1043af6ab5fSopenharmony_ci  }
1053af6ab5fSopenharmony_ci
1063af6ab5fSopenharmony_ci  host_protoc_path =
1073af6ab5fSopenharmony_ci      root_out_dir + host_out_path + "/" + protoc_binary_out_path + "/protoc"
1083af6ab5fSopenharmony_ci} else {
1093af6ab5fSopenharmony_ci  host_protoc_path =
1103af6ab5fSopenharmony_ci      get_label_info(
1113af6ab5fSopenharmony_ci          "${ets_frontend_root}/merge_abc:merge_abc(${host_toolchain})",
1123af6ab5fSopenharmony_ci          "root_out_dir") + "/" + protoc_binary_out_path + "/protoc"
1133af6ab5fSopenharmony_ci}
1143af6ab5fSopenharmony_ci
1153af6ab5fSopenharmony_ciaction("arkcompiler_generate_proto") {
1163af6ab5fSopenharmony_ci  deps = [ "$ark_third_party_root/protobuf:protoc($host_toolchain)" ]
1173af6ab5fSopenharmony_ci  args = []
1183af6ab5fSopenharmony_ci  sources = []
1193af6ab5fSopenharmony_ci  outputs = proto_generated_header + proto_generated_source
1203af6ab5fSopenharmony_ci  script = "./script/build_proto.sh"
1213af6ab5fSopenharmony_ci
1223af6ab5fSopenharmony_ci  args += [ rebase_path(host_protoc_path) ]
1233af6ab5fSopenharmony_ci  args += [
1243af6ab5fSopenharmony_ci    "--proto_path",
1253af6ab5fSopenharmony_ci    rebase_path(proto_base_dir),
1263af6ab5fSopenharmony_ci    "--cpp_out",
1273af6ab5fSopenharmony_ci    rebase_path(proto_out_dir),
1283af6ab5fSopenharmony_ci    "--experimental_allow_proto3_optional",
1293af6ab5fSopenharmony_ci  ]
1303af6ab5fSopenharmony_ci
1313af6ab5fSopenharmony_ci  foreach(proto_file_source, proto_file_sources) {
1323af6ab5fSopenharmony_ci    #tell gn to check which files as source time
1333af6ab5fSopenharmony_ci    sources += [ rebase_path(proto_file_source) ]
1343af6ab5fSopenharmony_ci    args += [ rebase_path(proto_file_source) ]
1353af6ab5fSopenharmony_ci  }
1363af6ab5fSopenharmony_ci}
1373af6ab5fSopenharmony_ci
1383af6ab5fSopenharmony_ciconfig("proto_file_cpp_config") {
1393af6ab5fSopenharmony_ci  include_dirs = [ proto_out_dir ]
1403af6ab5fSopenharmony_ci}
1413af6ab5fSopenharmony_ci
1423af6ab5fSopenharmony_ciohos_source_set("assembly_proto_static") {
1433af6ab5fSopenharmony_ci  cflags = [ "-Wno-error=zero-length-array" ]
1443af6ab5fSopenharmony_ci
1453af6ab5fSopenharmony_ci  deps = [
1463af6ab5fSopenharmony_ci    ":arkcompiler_generate_proto",
1473af6ab5fSopenharmony_ci    "$ark_third_party_root/protobuf:protobuf_lite_static",
1483af6ab5fSopenharmony_ci    "$ark_third_party_root/protobuf:protobuf_static",
1493af6ab5fSopenharmony_ci  ]
1503af6ab5fSopenharmony_ci
1513af6ab5fSopenharmony_ci  external_deps = []
1523af6ab5fSopenharmony_ci  if (!is_arkui_x) {
1533af6ab5fSopenharmony_ci    external_deps += [
1543af6ab5fSopenharmony_ci      "runtime_core:libarkassembler_frontend_static",
1553af6ab5fSopenharmony_ci      "runtime_core:libarkbase_frontend_static",
1563af6ab5fSopenharmony_ci      "runtime_core:libarkfile_frontend_static",
1573af6ab5fSopenharmony_ci    ]
1583af6ab5fSopenharmony_ci  } else {
1593af6ab5fSopenharmony_ci    deps += [
1603af6ab5fSopenharmony_ci      "$ark_root/assembler:libarkassembler_frontend_static",
1613af6ab5fSopenharmony_ci      "$ark_root/libpandabase:libarkbase_frontend_static",
1623af6ab5fSopenharmony_ci      "$ark_root/libpandafile:libarkfile_frontend_static",
1633af6ab5fSopenharmony_ci    ]
1643af6ab5fSopenharmony_ci  }
1653af6ab5fSopenharmony_ci
1663af6ab5fSopenharmony_ci  sources = proto_generated_header + proto_generated_source +
1673af6ab5fSopenharmony_ci            protobuf_snapshot_generator_sources
1683af6ab5fSopenharmony_ci  public_configs = assembly_proto_configs
1693af6ab5fSopenharmony_ci  public_configs += [ ":proto_file_cpp_config" ]
1703af6ab5fSopenharmony_ci
1713af6ab5fSopenharmony_ci  part_name = "ets_frontend"
1723af6ab5fSopenharmony_ci  subsystem_name = "arkcompiler"
1733af6ab5fSopenharmony_ci}
1743af6ab5fSopenharmony_ci
1753af6ab5fSopenharmony_ciohos_static_library("panda_assembly_proto_static") {
1763af6ab5fSopenharmony_ci  deps = [ ":assembly_proto_static" ]
1773af6ab5fSopenharmony_ci
1783af6ab5fSopenharmony_ci  part_name = "ets_frontend"
1793af6ab5fSopenharmony_ci  subsystem_name = "arkcompiler"
1803af6ab5fSopenharmony_ci}
1813af6ab5fSopenharmony_ci
1823af6ab5fSopenharmony_ciohos_executable("merge_abc") {
1833af6ab5fSopenharmony_ci  use_exceptions = true
1843af6ab5fSopenharmony_ci  sources = [
1853af6ab5fSopenharmony_ci    "src/main.cpp",
1863af6ab5fSopenharmony_ci    "src/options.cpp",
1873af6ab5fSopenharmony_ci  ]
1883af6ab5fSopenharmony_ci
1893af6ab5fSopenharmony_ci  include_dirs = [ "./src" ]
1903af6ab5fSopenharmony_ci
1913af6ab5fSopenharmony_ci  configs = [
1923af6ab5fSopenharmony_ci    sdk_libc_secshared_config,
1933af6ab5fSopenharmony_ci    "$ark_root:ark_config",
1943af6ab5fSopenharmony_ci    ":panda_assembly_proto_public_config",
1953af6ab5fSopenharmony_ci    "$ark_root/assembler:arkassembler_public_config",
1963af6ab5fSopenharmony_ci    "$ark_root/libpandabase:arkbase_public_config",
1973af6ab5fSopenharmony_ci    "$ark_root/libpandafile:arkfile_public_config",
1983af6ab5fSopenharmony_ci    ":proto_file_cpp_config",
1993af6ab5fSopenharmony_ci  ]
2003af6ab5fSopenharmony_ci
2013af6ab5fSopenharmony_ci  deps = [
2023af6ab5fSopenharmony_ci    ":panda_assembly_proto_static",
2033af6ab5fSopenharmony_ci    "$ark_third_party_root/icu/icu4c:static_icuuc",
2043af6ab5fSopenharmony_ci    "../es2panda:es2panda_lib",
2053af6ab5fSopenharmony_ci  ]
2063af6ab5fSopenharmony_ci
2073af6ab5fSopenharmony_ci  if (!is_arkui_x) {
2083af6ab5fSopenharmony_ci    external_deps = [ "runtime_core:libarkziparchive_frontend_static" ]
2093af6ab5fSopenharmony_ci  } else {
2103af6ab5fSopenharmony_ci    deps += [ "$ark_root/libziparchive:libarkziparchive_frontend_static" ]
2113af6ab5fSopenharmony_ci  }
2123af6ab5fSopenharmony_ci
2133af6ab5fSopenharmony_ci  ldflags = []
2143af6ab5fSopenharmony_ci  if (is_linux) {
2153af6ab5fSopenharmony_ci    if (build_public_version) {
2163af6ab5fSopenharmony_ci      ldflags += [ "-static-libstdc++" ]
2173af6ab5fSopenharmony_ci    } else {
2183af6ab5fSopenharmony_ci      libs = [ libcpp_static_lib ]
2193af6ab5fSopenharmony_ci    }
2203af6ab5fSopenharmony_ci
2213af6ab5fSopenharmony_ci    defines = [ "PANDA_TARGET_LINUX" ]
2223af6ab5fSopenharmony_ci  } else if (is_mac) {
2233af6ab5fSopenharmony_ci    defines = [ "PANDA_TARGET_MACOS" ]
2243af6ab5fSopenharmony_ci  } else if (is_mingw) {
2253af6ab5fSopenharmony_ci    defines = [ "PANDA_TARGET_WINDOWS" ]
2263af6ab5fSopenharmony_ci  }
2273af6ab5fSopenharmony_ci
2283af6ab5fSopenharmony_ci  if (!use_musl) {
2293af6ab5fSopenharmony_ci    ldflags += [ "-lc++" ]
2303af6ab5fSopenharmony_ci  }
2313af6ab5fSopenharmony_ci
2323af6ab5fSopenharmony_ci  output_name = "merge_abc"
2333af6ab5fSopenharmony_ci  install_enable = false
2343af6ab5fSopenharmony_ci  part_name = "ets_frontend"
2353af6ab5fSopenharmony_ci  subsystem_name = "arkcompiler"
2363af6ab5fSopenharmony_ci}
2373af6ab5fSopenharmony_ci
2383af6ab5fSopenharmony_ciif (is_linux) {
2393af6ab5fSopenharmony_ci  ohos_copy("merge_abc_build") {
2403af6ab5fSopenharmony_ci    deps = [ ":merge_abc" ]
2413af6ab5fSopenharmony_ci    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/merge_abc" ]
2423af6ab5fSopenharmony_ci    outputs = [ "${target_out_dir}/merge_abc-tmp" ]
2433af6ab5fSopenharmony_ci    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
2443af6ab5fSopenharmony_ci    module_install_name = "merge_abc"
2453af6ab5fSopenharmony_ci  }
2463af6ab5fSopenharmony_ci
2473af6ab5fSopenharmony_ci  ohos_copy("merge_abc_build_ets") {
2483af6ab5fSopenharmony_ci    deps = [ ":merge_abc" ]
2493af6ab5fSopenharmony_ci    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/merge_abc" ]
2503af6ab5fSopenharmony_ci    outputs = [ "${root_out_dir}/arkcompiler/ets_frontend/merge_abc-ets" ]
2513af6ab5fSopenharmony_ci    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
2523af6ab5fSopenharmony_ci    module_install_name = "merge_abc"
2533af6ab5fSopenharmony_ci  }
2543af6ab5fSopenharmony_ci}
2553af6ab5fSopenharmony_ci
2563af6ab5fSopenharmony_ciif (is_mingw) {
2573af6ab5fSopenharmony_ci  ohos_copy("merge_abc_build_win") {
2583af6ab5fSopenharmony_ci    deps = [ ":merge_abc" ]
2593af6ab5fSopenharmony_ci    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/merge_abc.exe" ]
2603af6ab5fSopenharmony_ci    outputs = [ "${target_out_dir}/merge_abc-tmp" ]
2613af6ab5fSopenharmony_ci    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
2623af6ab5fSopenharmony_ci    module_install_name = "merge_abc.exe"
2633af6ab5fSopenharmony_ci  }
2643af6ab5fSopenharmony_ci
2653af6ab5fSopenharmony_ci  ohos_copy("merge_abc_build_win_ets") {
2663af6ab5fSopenharmony_ci    deps = [ ":merge_abc" ]
2673af6ab5fSopenharmony_ci    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/merge_abc.exe" ]
2683af6ab5fSopenharmony_ci    outputs = [ "${root_out_dir}/arkcompiler/ets_frontend/merge_abc-win-ets" ]
2693af6ab5fSopenharmony_ci    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
2703af6ab5fSopenharmony_ci    module_install_name = "merge_abc.exe"
2713af6ab5fSopenharmony_ci  }
2723af6ab5fSopenharmony_ci}
2733af6ab5fSopenharmony_ci
2743af6ab5fSopenharmony_ciif (is_mac) {
2753af6ab5fSopenharmony_ci  ohos_copy("merge_abc_build_mac") {
2763af6ab5fSopenharmony_ci    deps = [ ":merge_abc" ]
2773af6ab5fSopenharmony_ci    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/merge_abc" ]
2783af6ab5fSopenharmony_ci    outputs = [ "${target_out_dir}/merge_abc-tmp" ]
2793af6ab5fSopenharmony_ci    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
2803af6ab5fSopenharmony_ci    module_install_name = "merge_abc"
2813af6ab5fSopenharmony_ci  }
2823af6ab5fSopenharmony_ci
2833af6ab5fSopenharmony_ci  ohos_copy("merge_abc_build_mac_ets") {
2843af6ab5fSopenharmony_ci    deps = [ ":merge_abc" ]
2853af6ab5fSopenharmony_ci    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/merge_abc" ]
2863af6ab5fSopenharmony_ci    outputs = [ "${root_out_dir}/arkcompiler/ets_frontend/merge_abc-mac-ets" ]
2873af6ab5fSopenharmony_ci    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
2883af6ab5fSopenharmony_ci    module_install_name = "merge_abc"
2893af6ab5fSopenharmony_ci  }
2903af6ab5fSopenharmony_ci}
2913af6ab5fSopenharmony_ci
2923af6ab5fSopenharmony_cigroup("merge_proto_abc_build") {
2933af6ab5fSopenharmony_ci  if (host_os == "linux") {
2943af6ab5fSopenharmony_ci    deps = [ ":merge_abc(${toolchain_linux})" ]
2953af6ab5fSopenharmony_ci  }
2963af6ab5fSopenharmony_ci
2973af6ab5fSopenharmony_ci  if (host_os == "mac") {
2983af6ab5fSopenharmony_ci    deps = [ ":merge_abc(${toolchain_mac})" ]
2993af6ab5fSopenharmony_ci  }
3003af6ab5fSopenharmony_ci}
3013af6ab5fSopenharmony_ci
3023af6ab5fSopenharmony_cigroup("merge_proto_abc_build_win") {
3033af6ab5fSopenharmony_ci  deps = [ ":merge_abc(${toolchain_win})" ]
3043af6ab5fSopenharmony_ci}
305