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