• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2022 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14import("//arkcompiler/runtime_core/ark_config.gni")
15import("//build/ohos.gni")
16
17config("irtoc_public_config") {
18  include_dirs = [
19    "$root_build_dir/generated",
20    "$target_gen_dir",
21    "$ark_root/irtoc",
22    "$ark_third_party_root/elfio",
23  ]
24}
25
26irtoc_scripts = [
27  rebase_path("$ark_root/irtoc/scripts/allocation.irt", root_build_dir),
28  rebase_path("$ark_root/irtoc/scripts/resolvers.irt", root_build_dir),
29  rebase_path("$ark_root/irtoc/scripts/interpreter.irt", root_build_dir),
30  rebase_path("$ark_root/irtoc/scripts/monitors.irt", root_build_dir),
31  rebase_path("$ark_root/irtoc/scripts/check_cast.irt", root_build_dir),
32]
33
34plugin_irts = []
35foreach(plugin, enabled_plugins) {
36  plugin_dir = "$ark_root/plugins/$plugin"
37  source_files = read_file("$plugin_dir/subproject_sources.gn", "scope")
38  if (defined(source_files.irtoc_scripts)) {
39    scripts = read_file("$plugin_dir/${source_files.irtoc_scripts}", "scope")
40    foreach(script, scripts.srcs) {
41      irtoc_scripts +=
42          [ rebase_path("$plugin_dir/irtoc_scripts/$script", root_build_dir) ]
43    }
44  }
45
46  if (defined(source_files.irtoc_plugins)) {
47    irtoc_plugins =
48        read_file("$plugin_dir/${source_files.irtoc_plugins}", "scope")
49    foreach(irtoc_plugin, irtoc_plugins.srcs) {
50      plugin_irts +=
51          [ rebase_path("$plugin_dir/irtoc_scripts/$irtoc_plugin", ark_root) ]
52    }
53  }
54
55  source_files = {
56  }
57}
58
59irtoc_file_plugin = "$root_gen_dir/generated/irtoc_plugin.txt"
60write_file(irtoc_file_plugin, plugin_irts)
61
62action("irtoc_compile") {
63  script = "$ark_root/irtoc/lang/irtoc.rb"
64  outputs = [ "$target_gen_dir/generated/irtoc_code.cpp" ]
65  irt_args = irtoc_scripts
66
67  args = [
68    "--input",
69    string_join(":", irt_args),
70    "--output",
71    rebase_path("$target_gen_dir/generated/irtoc_code.cpp", root_build_dir),
72    "--ark_source_dir",
73    rebase_path("$ark_root", root_build_dir),
74    "--isa",
75    rebase_path("$root_gen_dir/isa/isa.yaml", root_build_dir),
76  ]
77
78  if (!is_debug) {
79    args += [
80      "--definitions",
81      "NDEBUG",
82    ]
83  }
84
85  args += [
86    "--arch",
87    target_cpu,
88    "--ir-api",
89    "ir-constructor",
90    "--plugins",
91    rebase_path(irtoc_file_plugin, root_build_dir),
92  ]
93
94  deps = [ "$ark_root/isa:isa_combine" ]
95}
96
97ark_gen_file("irtoc_options_h") {
98  template_file = "$ark_root/templates/options/options.h.erb"
99  data_file = "backend/options.yaml"
100  requires = [ "$ark_root/templates/common.rb" ]
101  output_file = "$target_gen_dir/generated/irtoc_options_gen.h"
102}
103
104ohos_executable("irtoc") {
105  sources = [
106    "$target_gen_dir/generated/irtoc_code.cpp",
107    "backend/compilation_unit.cpp",
108    "backend/compiler/codegen_boundary.cpp",
109    "backend/compiler/codegen_fastpath.cpp",
110    "backend/irtoc.cpp",
111  ]
112  configs = [
113    ":irtoc_public_config",
114    "$ark_root:ark_config",
115    "$ark_root/libpandabase:arkbase_public_config",
116    "$ark_root/libpandafile:arkfile_public_config",
117    "$ark_root/compiler:arkcompiler_public_config",
118    "$ark_root/compiler/optimizer/code_generator:arkencoder_config",
119    "$ark_root/runtime/asm_defines:asmdefines_public_config",
120    "$ark_root/runtime:arkruntime_public_config",
121    sdk_libc_secshared_config,
122  ]
123
124  deps = [
125    ":irtoc_options_h",
126    "$ark_root/compiler:libarkcompiler_frontend_static",
127    "$ark_root/cross_values:cross_values_getters_generate(${default_toolchain})",
128    "$ark_root/irtoc:irtoc_compile",
129    "$ark_root/libpandabase:libarkbase_frontend_static",
130    "$ark_root/libpandafile:libarkfile_frontend_static",
131    "$ark_root/runtime/asm_defines:asm_defines_generator",
132    sdk_libc_secshared_dep,
133  ]
134
135  libs = platform_libs
136  ldflags = platform_ldflags
137
138  install_enable = false
139  part_name = "runtime_core"
140  subsystem_name = "arkcompiler"
141}
142
143action("irtoc_generate") {
144  script = "irtoc_runner.sh"
145  outputs = [ "$root_gen_dir/generated/irtoc_lib.o" ]
146  if (ark_standalone_build) {
147    irtoc_cmd = "./irtoc"
148  } else {
149    irtoc_cmd = "./clang_x64/arkcompiler/runtmie_core/irtoc"
150  }
151  args = [
152    "$irtoc_cmd",
153    "--irtoc-output ",
154    rebase_path("$root_gen_dir/generated/irtoc_lib.o", root_build_dir),
155    "--compiler-cross-arch",
156    current_cpu,
157  ]
158  deps = [ "$ark_root/irtoc:irtoc(${host_toolchain})" ]
159}
160