• 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/ets_frontend/ets_frontend_config.gni")
15import("//arkcompiler/runtime_core/ark_config.gni")
16
17es2panda_src = [
18  "es2panda.cpp",
19  "binder/binder.cpp",
20  "binder/declaration.cpp",
21  "binder/scope.cpp",
22  "binder/variable.cpp",
23  "compiler/base/catchTable.cpp",
24  "compiler/base/condition.cpp",
25  "compiler/base/destructuring.cpp",
26  "compiler/base/hoisting.cpp",
27  "compiler/base/iterators.cpp",
28  "compiler/base/lexenv.cpp",
29  "compiler/base/literals.cpp",
30  "compiler/base/lreference.cpp",
31  "compiler/base/optionalChain.cpp",
32  "compiler/core/compileQueue.cpp",
33  "compiler/core/compilerContext.cpp",
34  "compiler/core/compilerImpl.cpp",
35  "compiler/core/dynamicContext.cpp",
36  "compiler/core/emitter/commonjs.cpp",
37  "compiler/core/emitter/emitter.cpp",
38  "compiler/core/emitter/moduleRecordEmitter.cpp",
39  "compiler/core/emitter/typeExtractorEmitter.cpp",
40  "compiler/core/envScope.cpp",
41  "compiler/core/function.cpp",
42  "compiler/core/inlineCache.cpp",
43  "compiler/core/labelTarget.cpp",
44  "compiler/core/pandagen.cpp",
45  "compiler/core/regAllocator.cpp",
46  "compiler/core/regScope.cpp",
47  "compiler/core/switchBuilder.cpp",
48  "compiler/debugger/debuginfoDumper.cpp",
49  "compiler/function/asyncFunctionBuilder.cpp",
50  "compiler/function/asyncGeneratorFunctionBuilder.cpp",
51  "compiler/function/functionBuilder.cpp",
52  "compiler/function/generatorFunctionBuilder.cpp",
53  "ir/astDump.cpp",
54  "ir/base/catchClause.cpp",
55  "ir/base/classDefinition.cpp",
56  "ir/base/classProperty.cpp",
57  "ir/base/decorator.cpp",
58  "ir/base/metaProperty.cpp",
59  "ir/base/methodDefinition.cpp",
60  "ir/base/property.cpp",
61  "ir/base/scriptFunction.cpp",
62  "ir/base/spreadElement.cpp",
63  "ir/base/templateElement.cpp",
64  "ir/expression.cpp",
65  "ir/expressions/arrayExpression.cpp",
66  "ir/expressions/arrowFunctionExpression.cpp",
67  "ir/expressions/assignmentExpression.cpp",
68  "ir/expressions/awaitExpression.cpp",
69  "ir/expressions/binaryExpression.cpp",
70  "ir/expressions/callExpression.cpp",
71  "ir/expressions/chainExpression.cpp",
72  "ir/expressions/classExpression.cpp",
73  "ir/expressions/conditionalExpression.cpp",
74  "ir/expressions/functionExpression.cpp",
75  "ir/expressions/identifier.cpp",
76  "ir/expressions/importExpression.cpp",
77  "ir/expressions/literal.cpp",
78  "ir/expressions/literals/bigIntLiteral.cpp",
79  "ir/expressions/literals/booleanLiteral.cpp",
80  "ir/expressions/literals/nullLiteral.cpp",
81  "ir/expressions/literals/numberLiteral.cpp",
82  "ir/expressions/literals/regExpLiteral.cpp",
83  "ir/expressions/literals/stringLiteral.cpp",
84  "ir/expressions/literals/taggedLiteral.cpp",
85  "ir/expressions/memberExpression.cpp",
86  "ir/expressions/newExpression.cpp",
87  "ir/expressions/objectExpression.cpp",
88  "ir/expressions/omittedExpression.cpp",
89  "ir/expressions/sequenceExpression.cpp",
90  "ir/expressions/superExpression.cpp",
91  "ir/expressions/taggedTemplateExpression.cpp",
92  "ir/expressions/templateLiteral.cpp",
93  "ir/expressions/thisExpression.cpp",
94  "ir/expressions/unaryExpression.cpp",
95  "ir/expressions/updateExpression.cpp",
96  "ir/expressions/yieldExpression.cpp",
97  "ir/module/exportAllDeclaration.cpp",
98  "ir/module/exportDefaultDeclaration.cpp",
99  "ir/module/exportNamedDeclaration.cpp",
100  "ir/module/exportSpecifier.cpp",
101  "ir/module/importDeclaration.cpp",
102  "ir/module/importDefaultSpecifier.cpp",
103  "ir/module/importNamespaceSpecifier.cpp",
104  "ir/module/importSpecifier.cpp",
105  "ir/statement.cpp",
106  "ir/statements/blockStatement.cpp",
107  "ir/statements/breakStatement.cpp",
108  "ir/statements/classDeclaration.cpp",
109  "ir/statements/continueStatement.cpp",
110  "ir/statements/debuggerStatement.cpp",
111  "ir/statements/doWhileStatement.cpp",
112  "ir/statements/emptyStatement.cpp",
113  "ir/statements/expressionStatement.cpp",
114  "ir/statements/forInStatement.cpp",
115  "ir/statements/forOfStatement.cpp",
116  "ir/statements/forUpdateStatement.cpp",
117  "ir/statements/functionDeclaration.cpp",
118  "ir/statements/ifStatement.cpp",
119  "ir/statements/labelledStatement.cpp",
120  "ir/statements/loopStatement.cpp",
121  "ir/statements/returnStatement.cpp",
122  "ir/statements/switchCaseStatement.cpp",
123  "ir/statements/switchStatement.cpp",
124  "ir/statements/throwStatement.cpp",
125  "ir/statements/tryStatement.cpp",
126  "ir/statements/variableDeclaration.cpp",
127  "ir/statements/variableDeclarator.cpp",
128  "ir/statements/whileStatement.cpp",
129  "ir/ts/tsAnyKeyword.cpp",
130  "ir/ts/tsArrayType.cpp",
131  "ir/ts/tsAsExpression.cpp",
132  "ir/ts/tsBigintKeyword.cpp",
133  "ir/ts/tsBooleanKeyword.cpp",
134  "ir/ts/tsClassImplements.cpp",
135  "ir/ts/tsConditionalType.cpp",
136  "ir/ts/tsConstructorType.cpp",
137  "ir/ts/tsEnumDeclaration.cpp",
138  "ir/ts/tsEnumMember.cpp",
139  "ir/ts/tsExternalModuleReference.cpp",
140  "ir/ts/tsFunctionType.cpp",
141  "ir/ts/tsImportEqualsDeclaration.cpp",
142  "ir/ts/tsImportType.cpp",
143  "ir/ts/tsIndexSignature.cpp",
144  "ir/ts/tsIndexedAccessType.cpp",
145  "ir/ts/tsInferType.cpp",
146  "ir/ts/tsInterfaceBody.cpp",
147  "ir/ts/tsInterfaceDeclaration.cpp",
148  "ir/ts/tsInterfaceHeritage.cpp",
149  "ir/ts/tsIntersectionType.cpp",
150  "ir/ts/tsLiteralType.cpp",
151  "ir/ts/tsMappedType.cpp",
152  "ir/ts/tsMethodSignature.cpp",
153  "ir/ts/tsModuleBlock.cpp",
154  "ir/ts/tsModuleDeclaration.cpp",
155  "ir/ts/tsNamedTupleMember.cpp",
156  "ir/ts/tsNeverKeyword.cpp",
157  "ir/ts/tsNonNullExpression.cpp",
158  "ir/ts/tsNullKeyword.cpp",
159  "ir/ts/tsNumberKeyword.cpp",
160  "ir/ts/tsObjectKeyword.cpp",
161  "ir/ts/tsOptionalType.cpp",
162  "ir/ts/tsParameterProperty.cpp",
163  "ir/ts/tsParenthesizedType.cpp",
164  "ir/ts/tsPrivateIdentifier.cpp",
165  "ir/ts/tsPropertySignature.cpp",
166  "ir/ts/tsQualifiedName.cpp",
167  "ir/ts/tsRestType.cpp",
168  "ir/ts/tsSignatureDeclaration.cpp",
169  "ir/ts/tsStringKeyword.cpp",
170  "ir/ts/tsSymbolKeyword.cpp",
171  "ir/ts/tsTemplateLiteralType.cpp",
172  "ir/ts/tsThisType.cpp",
173  "ir/ts/tsTupleType.cpp",
174  "ir/ts/tsTypeAliasDeclaration.cpp",
175  "ir/ts/tsTypeAssertion.cpp",
176  "ir/ts/tsTypeLiteral.cpp",
177  "ir/ts/tsTypeOperator.cpp",
178  "ir/ts/tsTypeParameter.cpp",
179  "ir/ts/tsTypeParameterDeclaration.cpp",
180  "ir/ts/tsTypeParameterInstantiation.cpp",
181  "ir/ts/tsTypePredicate.cpp",
182  "ir/ts/tsTypeQuery.cpp",
183  "ir/ts/tsTypeReference.cpp",
184  "ir/ts/tsUndefinedKeyword.cpp",
185  "ir/ts/tsUnionType.cpp",
186  "ir/ts/tsUnknownKeyword.cpp",
187  "ir/ts/tsVoidKeyword.cpp",
188  "lexer/keywordsUtil.cpp",
189  "lexer/lexer.cpp",
190  "lexer/regexp/regexp.cpp",
191  "lexer/token/sourceLocation.cpp",
192  "lexer/token/token.cpp",
193  "parser/commonjs.cpp",
194  "parser/context/parserContext.cpp",
195  "parser/expressionParser.cpp",
196  "parser/module/sourceTextModuleRecord.cpp",
197  "parser/parserImpl.cpp",
198  "parser/program/program.cpp",
199  "parser/statementParser.cpp",
200  "parser/transformer/transformer.cpp",
201  "typescript/checker.cpp",
202  "typescript/core/binaryLikeExpression.cpp",
203  "typescript/core/destructuringContext.cpp",
204  "typescript/core/function.cpp",
205  "typescript/core/helpers.cpp",
206  "typescript/core/object.cpp",
207  "typescript/core/typeCreation.cpp",
208  "typescript/core/typeElaborationContext.cpp",
209  "typescript/core/typeRelation.cpp",
210  "typescript/core/util.cpp",
211  "typescript/extractor/typeExtractor.cpp",
212  "typescript/extractor/typeRecorder.cpp",
213  "typescript/types/anyType.cpp",
214  "typescript/types/arrayType.cpp",
215  "typescript/types/bigintLiteralType.cpp",
216  "typescript/types/bigintType.cpp",
217  "typescript/types/booleanLiteralType.cpp",
218  "typescript/types/booleanType.cpp",
219  "typescript/types/constructorType.cpp",
220  "typescript/types/enumLiteralType.cpp",
221  "typescript/types/enumType.cpp",
222  "typescript/types/functionType.cpp",
223  "typescript/types/globalTypesHolder.cpp",
224  "typescript/types/indexInfo.cpp",
225  "typescript/types/interfaceType.cpp",
226  "typescript/types/neverType.cpp",
227  "typescript/types/nonPrimitiveType.cpp",
228  "typescript/types/nullType.cpp",
229  "typescript/types/numberLiteralType.cpp",
230  "typescript/types/numberType.cpp",
231  "typescript/types/objectDescriptor.cpp",
232  "typescript/types/objectLiteralType.cpp",
233  "typescript/types/objectType.cpp",
234  "typescript/types/signature.cpp",
235  "typescript/types/stringLiteralType.cpp",
236  "typescript/types/stringType.cpp",
237  "typescript/types/symbolType.cpp",
238  "typescript/types/tupleType.cpp",
239  "typescript/types/type.cpp",
240  "typescript/types/typeParameter.cpp",
241  "typescript/types/typeReference.cpp",
242  "typescript/types/typeRelation.cpp",
243  "typescript/types/undefinedType.cpp",
244  "typescript/types/unionType.cpp",
245  "typescript/types/unknownType.cpp",
246  "typescript/types/voidType.cpp",
247  "util/base64.cpp",
248  "util/bitset.cpp",
249  "util/concurrent.cpp",
250  "util/dumper.cpp",
251  "util/helpers.cpp",
252  "util/hotfix.cpp",
253  "util/moduleHelpers.cpp",
254  "util/symbolTable.cpp",
255  "util/ustring.cpp",
256  "util/workerQueue.cpp",
257]
258
259config("es2abc_config_src") {
260  include_dirs = [
261    "./",
262    "./binder",
263    "./util",
264    "./compiler/base",
265    "./compiler/core",
266    "./compiler/debugger",
267    "./compiler/function",
268    "./ir",
269    "./ir/base",
270    "./ir/expressions",
271    "./ir/module",
272    "./ir/statements",
273    "./ir/ts",
274    "./parser",
275    "./parser/context",
276    "./lexer",
277    "./lexer/token",
278    "./lexer/regexp",
279    "./typescript",
280    "./typescript/types",
281    "./typescript/types/extractor",
282  ]
283
284  cflags = [ "-fexceptions" ]
285}
286
287config("es2abc_config_common") {
288  configs = [
289    "$ark_root:ark_config",
290    "$sdk_libc_secshared_config",
291    "$ark_root/libpandafile:arkfile_public_config",
292    "$ark_root/libpandabase:arkbase_public_config",
293    "$ark_root/runtime:arkruntime_public_config",
294    "$ark_root/assembler:arkassembler_public_config",
295    ":es2abc_config_src",
296  ]
297
298  if (enable_bytecode_optimizer) {
299    defines = [ "ENABLE_BYTECODE_OPT" ]
300    configs += [
301      "$ark_root/compiler:arkcompiler_public_config",
302      "$ark_root/bytecode_optimizer:bytecodeopt_public_config",
303    ]
304  }
305}
306
307# generate headers for es2panda parser
308generated_header_dir = "${target_out_dir}/gen"
309action_foreach("gen_keywords_headers") {
310  template_files = [
311    "keywords.h.erb",
312    "keywordsMap.h.erb",
313  ]
314  keywords_templates_dir = "./lexer/templates"
315  keywords_generator = "./lexer/scripts/keywords.rb"
316
317  sources = []
318  foreach(file, template_files) {
319    sources += [ rebase_path("${keywords_templates_dir}/${file}") ]
320  }
321  outputs = [ "${generated_header_dir}/{{source_name_part}}" ]
322
323  script = "scripts/gen_keywords.sh"
324  inputs = [ "${keywords_generator}" ]
325  args = [
326    "-g",
327    rebase_path("${keywords_generator}"),
328    "-t",
329    "{{source}}",
330    "-o",
331    "{{source_name_part}}",
332    "-d",
333    rebase_path("${generated_header_dir}"),
334  ]
335}
336
337# generate headers for es2panda compiler
338isa_gen = "${ark_root}/isa/gen.rb"
339isa_gen_data = "$root_gen_dir/isa/isa.yaml"
340isa_gen_require = "${ark_root}/isa/isapi.rb"
341action_foreach("gen_isa_headers") {
342  deps = [ "//arkcompiler/runtime_core/isa:isa_combine" ]
343
344  template_files = [
345    "isa.h.erb",
346    "formats.h.erb",
347  ]
348  keywords_templates_dir = "./compiler/templates"
349
350  sources = []
351  foreach(file, template_files) {
352    sources += [ rebase_path("${keywords_templates_dir}/${file}") ]
353  }
354  outputs = [ "${generated_header_dir}/{{source_name_part}}" ]
355
356  script = "scripts/gen_isa.sh"
357  inputs = [
358    "${isa_gen}",
359    "${isa_gen_data}",
360    "${isa_gen_require}",
361  ]
362  args = [
363    "-g",
364    rebase_path("${isa_gen}"),
365    "-t",
366    "{{source}}",
367    "-a",
368    rebase_path("${isa_gen_data}"),
369    "-o",
370    "{{source_name_part}}",
371    "-d",
372    rebase_path("${generated_header_dir}"),
373    "-r",
374    rebase_path("${isa_gen_require}"),
375  ]
376}
377
378ohos_static_library("es2panda_lib") {
379  sources = es2panda_src
380  use_exceptions = true
381  if (is_mac && current_cpu == "arm64") {
382    use_rtti = true
383  }
384
385  configs = [
386    ":es2abc_config_common",
387    "../merge_abc:panda_assembly_proto_public_config",
388  ]
389
390  include_dirs = [
391    "${target_out_dir}",
392    "//third_party/icu/icu4c/source/common",
393    "//third_party/icu/icu4c/source/i18n",
394    "//third_party/icu/icu4c/source ",
395  ]
396
397  deps = [
398    ":gen_isa_headers",
399    ":gen_keywords_headers",
400    "$ark_root/assembler:libarkassembler_frontend_static",
401    "$ark_root/libpandabase:libarkbase_frontend_static",
402    "$ark_root/libpandafile:libarkfile_frontend_static",
403    "$ark_root/libziparchive:libarkziparchive_frontend_static",
404    "$ark_third_party_root/icu/icu4c:static_icuuc",
405    "../merge_abc:panda_assembly_proto_static",
406  ]
407
408  if (enable_bytecode_optimizer) {
409    deps += [
410      "$ark_root/bytecode_optimizer:libarkbytecodeopt_frontend_static",
411      "$ark_root/compiler:libarkcompiler_frontend_static",
412    ]
413  }
414
415  cflags = [
416    "-Wno-c++20-designator",
417    "-Wno-implicit-fallthrough",
418  ]
419}
420
421ohos_executable("es2panda") {
422  use_exceptions = true
423  if (is_mac && current_cpu == "arm64") {
424    use_rtti = true
425  }
426
427  sources = [
428    "aot/emitFiles.cpp",
429    "aot/main.cpp",
430    "aot/options.cpp",
431  ]
432
433  include_dirs = [ "./aot" ]
434
435  configs = [
436    ":es2abc_config_common",
437    "//arkcompiler/ets_frontend/merge_abc:panda_assembly_proto_public_config",
438  ]
439
440  deps = [
441    ":es2panda_lib",
442    "//arkcompiler/ets_frontend/merge_abc:panda_assembly_proto_static",
443  ]
444
445  ldflags = []
446  if (is_linux) {
447    if (build_public_version) {
448      ldflags += [ "-static-libstdc++" ]
449    } else {
450      libs = [ libcpp_static_lib ]
451    }
452  }
453
454  if (!use_musl) {
455    ldflags += [ "-lc++" ]
456  }
457
458  output_name = "es2abc"
459  install_enable = false
460  part_name = "ets_frontend"
461  subsystem_name = "arkcompiler"
462}
463
464if (is_linux) {
465  ohos_copy("es2abc_build") {
466    deps = [ ":es2panda" ]
467    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/es2abc" ]
468    outputs = [ "${target_out_dir}/es2abc-tmp" ]
469    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
470    module_install_name = "es2abc"
471  }
472
473  ohos_copy("es2abc_build_ets") {
474    deps = [ ":es2panda" ]
475    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/es2abc" ]
476    outputs = [ "${root_out_dir}/arkcompiler/ets_frontend/es2abc-ets" ]
477    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
478    module_install_name = "es2abc"
479  }
480}
481
482if (is_mingw) {
483  ohos_copy("es2abc_build_win") {
484    deps = [ ":es2panda" ]
485    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/es2abc.exe" ]
486    outputs = [ "${target_out_dir}/es2abc-tmp" ]
487    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
488    module_install_name = "es2abc.exe"
489  }
490
491  ohos_copy("es2abc_build_win_ets") {
492    deps = [ ":es2panda" ]
493    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/es2abc.exe" ]
494    outputs = [ "${root_out_dir}/arkcompiler/ets_frontend/es2abc-win-ets" ]
495    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
496    module_install_name = "es2abc.exe"
497  }
498}
499
500if (is_mac) {
501  ohos_copy("es2abc_build_mac") {
502    deps = [ ":es2panda" ]
503    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/es2abc" ]
504    outputs = [ "${target_out_dir}/es2abc-tmp" ]
505    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
506    module_install_name = "es2abc"
507  }
508
509  ohos_copy("es2abc_build_mac_ets") {
510    deps = [ ":es2panda" ]
511    sources = [ "${root_out_dir}/arkcompiler/ets_frontend/es2abc" ]
512    outputs = [ "${root_out_dir}/arkcompiler/ets_frontend/es2abc-mac-ets" ]
513    module_source_dir = "${root_out_dir}/arkcompiler/ets_frontend"
514    module_install_name = "es2abc"
515  }
516}
517
518if (is_linux) {
519  ohos_copy("build_es2abc_for_hap") {
520    deps = [ ":es2panda(${host_toolchain})" ]
521    es2abc_root_out_dir =
522        get_label_info(":es2panda_build($host_toolchain)", "root_out_dir")
523    es2abc_target_out_dir =
524        get_label_info(":es2panda_build($host_toolchain)", "target_out_dir")
525
526    sources = [ "${es2abc_root_out_dir}/arkcompiler/ets_frontend/es2abc" ]
527    outputs = [ "${es2abc_target_out_dir}/build/bin/es2abc" ]
528  }
529} else if (is_mac) {
530  ohos_copy("build_es2abc_for_hap") {
531    deps = [ ":es2panda(${host_toolchain})" ]
532    es2abc_root_out_dir =
533        get_label_info(":es2panda_build($host_toolchain)", "root_out_dir")
534    es2abc_target_out_dir =
535        get_label_info(":es2panda_build($host_toolchain)", "target_out_dir")
536
537    sources = [ "${es2abc_root_out_dir}/arkcompiler/ets_frontend/es2abc" ]
538    outputs = [ "${es2abc_target_out_dir}/build-mac/bin/es2abc" ]
539  }
540}
541
542group("es2panda_build") {
543  if (host_os == "linux") {
544    deps = [ ":es2panda(${toolchain_linux})" ]
545  }
546
547  if (host_os == "mac") {
548    deps = [ ":es2panda(${toolchain_mac})" ]
549  }
550}
551
552group("es2panda_build_win") {
553  deps = [ ":es2panda(${toolchain_win})" ]
554}
555
556group("es2abc_tests") {
557  deps = [ "./test:es2abc_base64_tests" ]
558  deps += [ "./test:es2abc_compiler_tests" ]
559  deps += [ "./test:es2abc_parser_tests" ]
560  deps += [ "./test:es2abc_parser_tsc_tests" ]
561  deps += [ "./test:es2abc_patch_tests" ]
562}
563