• 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/static_core/ark_config.gni")
15import("//build/ohos.gni")
16import("$ark_root/plugins/plugins.gni")
17import("irtoc.gni")
18
19if (enable_irtoc) {
20  config("irtoc_public_config") {
21    include_dirs = [
22      "$root_build_dir/generated",
23      "$target_gen_dir",
24      "$ark_root/irtoc",
25      "$ark_third_party_root/elfio",
26    ]
27
28    cflags_cc = [
29      "-isystem",
30      rebase_path("$ark_third_party_root/elfio", root_build_dir),
31    ]
32  }
33
34  irtoc_scripts = [
35    "scripts/allocation.irt",
36    "scripts/resolvers.irt",
37    "scripts/interpreter.irt",
38    "scripts/monitors.irt",
39    "scripts/check_cast.irt",
40    "scripts/gc.irt",
41    "scripts/strings.irt",
42    "scripts/string_builder.irt",
43    "scripts/arrays.irt",
44    "scripts/memcopy.irt",
45  ]
46  irtoc_scripts += plugin_irtoc_scripts
47
48  generated_file("irtoc_plugins_file") {
49    outputs = [ irtoc_plugins_file ]
50    inputs = plugin_irtoc_plugins
51    output_conversion = "list lines"
52    contents = rebase_path(inputs, ark_root)
53  }
54
55  action("irtoc_compile") {
56    script = "$ark_root/irtoc/lang/irtoc.rb"
57    outputs = [
58      "$target_gen_dir/generated/irtoc_code.cpp",
59      "$target_gen_dir/generated/irtoc_code_llvm.cpp",
60    ]
61
62    sources = irtoc_scripts + [ irtoc_plugins_file ]
63    irt_args = rebase_path(irtoc_scripts, root_build_dir)
64    irt_outputs = rebase_path(outputs, root_build_dir)
65
66    args = [
67      "--input",
68      string_join(":", irt_args),
69      "--output",
70      string_join(":", irt_outputs),
71      "--ark_source_dir",
72      rebase_path("$ark_root", root_build_dir),
73      "--isa",
74      rebase_path("$ark_isa_yaml", root_build_dir),
75    ]
76
77    if (!is_debug) {
78      args += [
79        "--definitions",
80        "NDEBUG",
81      ]
82    }
83
84    args += [
85      "--arch",
86      target_cpu,
87      "--ir-api",
88      "ir-constructor",
89      "--plugins",
90      rebase_path(irtoc_plugins_file, root_build_dir),
91    ]
92
93    deps = [
94      ":irtoc_plugins_file",
95      "$ark_root/isa:isa_combine",
96    ]
97  }
98
99  ark_gen_file("irtoc_options_h") {
100    template_file = "$ark_root/templates/options/options.h.erb"
101    data_file = "backend/options.yaml"
102    requires = [ "$ark_root/templates/common.rb" ]
103    output_file = "$target_gen_dir/generated/irtoc_options_gen.h"
104  }
105
106  ohos_executable("irtoc") {
107    sources = [
108      "$target_gen_dir/generated/irtoc_code.cpp",
109      "$target_gen_dir/generated/irtoc_code_llvm.cpp",
110      "backend/compilation.cpp",
111      "backend/compiler/codegen_boundary.cpp",
112      "backend/compiler/codegen_fastpath.cpp",
113      "backend/compiler/dangling_pointers_checker.cpp",
114      "backend/function.cpp",
115      "backend/irtoc.cpp",
116      "backend/irtoc_options.cpp",
117    ]
118    configs = [
119      ":irtoc_public_config",
120      "$ark_root:ark_config",
121      "$ark_root/libpandabase:arkbase_public_config",
122      "$ark_root/libpandafile:arkfile_public_config",
123      "$ark_root/compiler:arkcompiler_public_config",
124      "$ark_root/compiler/optimizer/code_generator:arkencoder_config",
125      "$ark_root/runtime/asm_defines:asmdefines_public_config",
126      "$ark_root/runtime:arkruntime_public_config",
127      "$ark_third_party_root/vixl:vixl_public_config",
128      sdk_libc_secshared_config,
129    ]
130
131    deps = [
132      ":irtoc_options_h",
133      "$ark_root/compiler:irtoc_interface_extensions_includes_inl_h",
134      "$ark_root/compiler:libarktscompiler",
135      "$ark_root/compiler/optimizer/code_generator:libarkencoder",
136      "$ark_root/cross_values:cross_values_getters_generate(${default_toolchain})",
137      "$ark_root/irtoc:irtoc_compile",
138      "$ark_root/libpandabase:libarktsbase",
139      "$ark_root/runtime/asm_defines:asm_defines_generator",
140      sdk_libc_secshared_dep,
141    ]
142
143    if (is_llvmbackend) {
144      configs += [ "$ark_root/libllvmbackend:libllvmbackend_public_config" ]
145      deps += [ "$ark_root/libllvmbackend:libllvmbackend" ]
146    }
147
148    libs = platform_libs
149    ldflags = platform_ldflags
150
151    install_enable = true
152    part_name = ark_part_name
153    subsystem_name = "$ark_subsystem_name"
154  }
155
156  action("irtoc_generate") {
157    irtoc_root_out_dir =
158        get_label_info("$ark_root/irtoc:irtoc(${host_toolchain})",
159                       "root_out_dir")
160    if (ark_standalone_build) {
161      irtoc_cmd = irtoc_root_out_dir + "/bin/irtoc"
162    } else {
163      irtoc_cmd =
164          irtoc_root_out_dir + "/$ark_subsystem_name/$ark_part_name/irtoc"
165    }
166    script = irtoc_cmd
167
168    outputs = [ "$ark_root_gen_dir/generated/irtoc_lib.o" ]
169    args = [
170      "--irtoc-output",
171      rebase_path("$ark_root_gen_dir/generated/irtoc_lib.o", root_build_dir),
172      "--compiler-cross-arch",
173      current_cpu,
174    ]
175    deps = [ ":irtoc(${host_toolchain})" ]
176
177    if (is_llvmbackend) {
178      outputs += [ "$ark_root_gen_dir/generated/irtoc_llvm_lib.o" ]
179      args += [
180        "--irtoc-output-llvm",
181        rebase_path("$ark_root_gen_dir/generated/irtoc_llvm_lib.o"),
182        "--llvm-inline-module",
183        rebase_path("$root_gen_dir/libllvmbackend/interpreter_inline.bc"),
184      ]
185      deps += [ "$ark_root/libllvmbackend:irtoc_int_llvm_inl_module" ]
186    }
187  }
188}
189