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 14cmake_minimum_required (VERSION 3.5.0) 15 16project (es2panda) 17set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 18 19set(OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/out) 20set(GENERATED_DIR ${OUTPUT_DIR}/gen) 21set(GENERATED_STAMP ${OUTPUT_DIR}/gen_dir.stamp) 22add_custom_target(es2panda-gen) 23 24add_custom_command( 25 OUTPUT ${GENERATED_STAMP} 26 COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_DIR} 27 COMMAND ${CMAKE_COMMAND} -E make_directory ${GENERATED_DIR} 28 COMMAND ${CMAKE_COMMAND} -E touch ${GENERATED_STAMP} 29) 30 31set(TEMPLATES 32 isa.h.erb 33 formats.h.erb 34) 35 36panda_isa_gen( 37 TEMPLATES ${TEMPLATES} 38 SOURCE ${CMAKE_CURRENT_LIST_DIR}/compiler/templates 39 DESTINATION ${GENERATED_DIR} 40 EXTRA_DEPENDENCIES ${GENERATED_STAMP} 41) 42 43add_dependencies(es2panda-gen isa_gen_es2panda) 44 45function(gen_keywords TEMPLATE OUT_DIR) 46 set(TEMPLATE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/lexer/templates/${TEMPLATE}) 47 48 string(REGEX REPLACE "\.erb$" "" NAME ${TEMPLATE}) 49 string(REPLACE "\." "_" CUSTOM_TARGET ${NAME}) 50 string(REPLACE "/" "_" CUSTOM_TARGET ${CUSTOM_TARGET}) 51 set(CUSTOM_TARGET "panda_es2panda_parser_gen_${CUSTOM_TARGET}") 52 53 set(OUT_FILE ${OUT_DIR}/${NAME}) 54 set(GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/lexer/scripts/keywords.rb) 55 56 add_custom_command(OUTPUT ${OUT_FILE} 57 COMMAND ruby ${GENERATOR} ${TEMPLATE_FILE} ${OUT_FILE} 58 DEPENDS ${GENERATED_STAMP} ${GENERATOR} ${TEMPLATE_FILE} 59 ) 60 61 add_custom_target(${CUSTOM_TARGET} DEPENDS ${OUT_FILE}) 62 add_dependencies(es2panda-gen ${CUSTOM_TARGET}) 63endfunction() 64 65gen_keywords(keywords.h.erb ${GENERATED_DIR}) 66gen_keywords(keywordsMap.h.erb ${GENERATED_DIR}) 67 68set(ES2PANDA_LIB_SRC 69 es2panda.cpp 70 binder/binder.cpp 71 binder/declaration.cpp 72 binder/scope.cpp 73 binder/variable.cpp 74 compiler/base/catchTable.cpp 75 compiler/base/condition.cpp 76 compiler/base/destructuring.cpp 77 compiler/base/hoisting.cpp 78 compiler/base/iterators.cpp 79 compiler/base/lexenv.cpp 80 compiler/base/literals.cpp 81 compiler/base/lreference.cpp 82 compiler/core/compileQueue.cpp 83 compiler/core/compilerContext.cpp 84 compiler/core/compilerImpl.cpp 85 compiler/core/dynamicContext.cpp 86 compiler/core/emitter.cpp 87 compiler/core/envScope.cpp 88 compiler/core/function.cpp 89 compiler/core/inlineCache.cpp 90 compiler/core/labelTarget.cpp 91 compiler/core/moduleContext.cpp 92 compiler/core/pandagen.cpp 93 compiler/core/regAllocator.cpp 94 compiler/core/regScope.cpp 95 compiler/core/switchBuilder.cpp 96 compiler/debugger/debuginfoDumper.cpp 97 compiler/function/asyncFunctionBuilder.cpp 98 compiler/function/asyncGeneratorFunctionBuilder.cpp 99 compiler/function/functionBuilder.cpp 100 compiler/function/generatorFunctionBuilder.cpp 101 ir/astDump.cpp 102 ir/base/catchClause.cpp 103 ir/base/classDefinition.cpp 104 ir/base/classProperty.cpp 105 ir/base/decorator.cpp 106 ir/base/metaProperty.cpp 107 ir/base/methodDefinition.cpp 108 ir/base/property.cpp 109 ir/base/scriptFunction.cpp 110 ir/base/spreadElement.cpp 111 ir/base/templateElement.cpp 112 ir/expression.cpp 113 ir/expressions/arrayExpression.cpp 114 ir/expressions/arrowFunctionExpression.cpp 115 ir/expressions/assignmentExpression.cpp 116 ir/expressions/awaitExpression.cpp 117 ir/expressions/binaryExpression.cpp 118 ir/expressions/callExpression.cpp 119 ir/expressions/chainExpression.cpp 120 ir/expressions/classExpression.cpp 121 ir/expressions/conditionalExpression.cpp 122 ir/expressions/functionExpression.cpp 123 ir/expressions/identifier.cpp 124 ir/expressions/importExpression.cpp 125 ir/expressions/literal.cpp 126 ir/expressions/literals/bigIntLiteral.cpp 127 ir/expressions/literals/booleanLiteral.cpp 128 ir/expressions/literals/nullLiteral.cpp 129 ir/expressions/literals/numberLiteral.cpp 130 ir/expressions/literals/regExpLiteral.cpp 131 ir/expressions/literals/stringLiteral.cpp 132 ir/expressions/literals/taggedLiteral.cpp 133 ir/expressions/memberExpression.cpp 134 ir/expressions/newExpression.cpp 135 ir/expressions/objectExpression.cpp 136 ir/expressions/omittedExpression.cpp 137 ir/expressions/sequenceExpression.cpp 138 ir/expressions/superExpression.cpp 139 ir/expressions/taggedTemplateExpression.cpp 140 ir/expressions/templateLiteral.cpp 141 ir/expressions/thisExpression.cpp 142 ir/expressions/unaryExpression.cpp 143 ir/expressions/updateExpression.cpp 144 ir/expressions/yieldExpression.cpp 145 ir/module/exportAllDeclaration.cpp 146 ir/module/exportDefaultDeclaration.cpp 147 ir/module/exportNamedDeclaration.cpp 148 ir/module/exportSpecifier.cpp 149 ir/module/importDeclaration.cpp 150 ir/module/importDefaultSpecifier.cpp 151 ir/module/importNamespaceSpecifier.cpp 152 ir/module/importSpecifier.cpp 153 ir/statement.cpp 154 ir/statements/blockStatement.cpp 155 ir/statements/breakStatement.cpp 156 ir/statements/classDeclaration.cpp 157 ir/statements/continueStatement.cpp 158 ir/statements/debuggerStatement.cpp 159 ir/statements/doWhileStatement.cpp 160 ir/statements/emptyStatement.cpp 161 ir/statements/expressionStatement.cpp 162 ir/statements/forInStatement.cpp 163 ir/statements/forOfStatement.cpp 164 ir/statements/forUpdateStatement.cpp 165 ir/statements/functionDeclaration.cpp 166 ir/statements/ifStatement.cpp 167 ir/statements/labelledStatement.cpp 168 ir/statements/loopStatement.cpp 169 ir/statements/returnStatement.cpp 170 ir/statements/switchCaseStatement.cpp 171 ir/statements/switchStatement.cpp 172 ir/statements/throwStatement.cpp 173 ir/statements/tryStatement.cpp 174 ir/statements/variableDeclaration.cpp 175 ir/statements/variableDeclarator.cpp 176 ir/statements/whileStatement.cpp 177 ir/ts/tsAnyKeyword.cpp 178 ir/ts/tsArrayType.cpp 179 ir/ts/tsAsExpression.cpp 180 ir/ts/tsBigintKeyword.cpp 181 ir/ts/tsBooleanKeyword.cpp 182 ir/ts/tsClassImplements.cpp 183 ir/ts/tsConditionalType.cpp 184 ir/ts/tsConstructorType.cpp 185 ir/ts/tsEnumDeclaration.cpp 186 ir/ts/tsEnumMember.cpp 187 ir/ts/tsExternalModuleReference.cpp 188 ir/ts/tsFunctionType.cpp 189 ir/ts/tsImportEqualsDeclaration.cpp 190 ir/ts/tsImportType.cpp 191 ir/ts/tsIndexSignature.cpp 192 ir/ts/tsIndexedAccessType.cpp 193 ir/ts/tsInferType.cpp 194 ir/ts/tsInterfaceBody.cpp 195 ir/ts/tsInterfaceDeclaration.cpp 196 ir/ts/tsInterfaceHeritage.cpp 197 ir/ts/tsIntersectionType.cpp 198 ir/ts/tsLiteralType.cpp 199 ir/ts/tsMappedType.cpp 200 ir/ts/tsMethodSignature.cpp 201 ir/ts/tsModuleBlock.cpp 202 ir/ts/tsModuleDeclaration.cpp 203 ir/ts/tsNamedTupleMember.cpp 204 ir/ts/tsNeverKeyword.cpp 205 ir/ts/tsNonNullExpression.cpp 206 ir/ts/tsNullKeyword.cpp 207 ir/ts/tsNumberKeyword.cpp 208 ir/ts/tsObjectKeyword.cpp 209 ir/ts/tsOptionalType.cpp 210 ir/ts/tsParameterProperty.cpp 211 ir/ts/tsParenthesizedType.cpp 212 ir/ts/tsPrivateIdentifier.cpp 213 ir/ts/tsPropertySignature.cpp 214 ir/ts/tsQualifiedName.cpp 215 ir/ts/tsRestType.cpp 216 ir/ts/tsSignatureDeclaration.cpp 217 ir/ts/tsStringKeyword.cpp 218 ir/ts/tsSymbolKeyword.cpp 219 ir/ts/tsTemplateLiteralType.cpp 220 ir/ts/tsThisType.cpp 221 ir/ts/tsTupleType.cpp 222 ir/ts/tsTypeAliasDeclaration.cpp 223 ir/ts/tsTypeAssertion.cpp 224 ir/ts/tsTypeLiteral.cpp 225 ir/ts/tsTypeOperator.cpp 226 ir/ts/tsTypeParameter.cpp 227 ir/ts/tsTypeParameterDeclaration.cpp 228 ir/ts/tsTypeParameterInstantiation.cpp 229 ir/ts/tsTypePredicate.cpp 230 ir/ts/tsTypeQuery.cpp 231 ir/ts/tsTypeReference.cpp 232 ir/ts/tsUndefinedKeyword.cpp 233 ir/ts/tsUnionType.cpp 234 ir/ts/tsUnknownKeyword.cpp 235 ir/ts/tsVoidKeyword.cpp 236 lexer/keywordsUtil.cpp 237 lexer/lexer.cpp 238 lexer/regexp/regexp.cpp 239 lexer/token/sourceLocation.cpp 240 lexer/token/token.cpp 241 parser/context/parserContext.cpp 242 parser/expressionParser.cpp 243 parser/parserImpl.cpp 244 parser/program/program.cpp 245 parser/statementParser.cpp 246 parser/transformer/transformer.cpp 247 typescript/checker.cpp 248 typescript/core/binaryLikeExpression.cpp 249 typescript/core/destructuringContext.cpp 250 typescript/core/function.cpp 251 typescript/core/helpers.cpp 252 typescript/core/object.cpp 253 typescript/core/typeCreation.cpp 254 typescript/core/typeElaborationContext.cpp 255 typescript/core/typeRelation.cpp 256 typescript/core/util.cpp 257 typescript/types/anyType.cpp 258 typescript/types/arrayType.cpp 259 typescript/types/bigintLiteralType.cpp 260 typescript/types/bigintType.cpp 261 typescript/types/booleanLiteralType.cpp 262 typescript/types/booleanType.cpp 263 typescript/types/constructorType.cpp 264 typescript/types/enumLiteralType.cpp 265 typescript/types/enumType.cpp 266 typescript/types/functionType.cpp 267 typescript/types/globalTypesHolder.cpp 268 typescript/types/indexInfo.cpp 269 typescript/types/interfaceType.cpp 270 typescript/types/neverType.cpp 271 typescript/types/nonPrimitiveType.cpp 272 typescript/types/nullType.cpp 273 typescript/types/numberLiteralType.cpp 274 typescript/types/numberType.cpp 275 typescript/types/objectDescriptor.cpp 276 typescript/types/objectLiteralType.cpp 277 typescript/types/objectType.cpp 278 typescript/types/signature.cpp 279 typescript/types/stringLiteralType.cpp 280 typescript/types/stringType.cpp 281 typescript/types/symbolType.cpp 282 typescript/types/tupleType.cpp 283 typescript/types/type.cpp 284 typescript/types/typeParameter.cpp 285 typescript/types/typeReference.cpp 286 typescript/types/typeRelation.cpp 287 typescript/types/undefinedType.cpp 288 typescript/types/unionType.cpp 289 typescript/types/unknownType.cpp 290 typescript/types/voidType.cpp 291 util/bitset.cpp 292 util/helpers.cpp 293 util/ustring.cpp 294) 295 296add_library(es2panda-lib ${PANDA_DEFAULT_LIB_TYPE} ${ES2PANDA_LIB_SRC}) 297add_dependencies(es2panda-lib es2panda-gen) 298 299set(ICU_INCLUDE_DIRS 300 ${PANDA_THIRD_PARTY_SOURCES_DIR}/icu/icu4c/source/common 301 ${PANDA_THIRD_PARTY_SOURCES_DIR}/icu/icu4c/source/i18n 302 ${PANDA_THIRD_PARTY_SOURCES_DIR}/icu/icu4c/source 303) 304 305target_include_directories(es2panda-lib 306 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} 307 PRIVATE ${OUTPUT_DIR} 308 PRIVATE ${ICU_INCLUDE_DIRS} 309) 310 311target_compile_options(es2panda-lib 312 PRIVATE -fexceptions -Werror=shadow 313) 314 315target_link_libraries(es2panda-lib 316 PUBLIC arkbase hmicuuc.z 317 PRIVATE arkassembler 318) 319 320if (PANDA_FUZZILLI) 321 target_compile_options(es2panda-lib 322 PRIVATE -fPIC 323 ) 324endif() 325 326panda_add_sanitizers(TARGET es2panda-lib SANITIZERS ${PANDA_SANITIZERS_LIST}) 327panda_add_to_clang_tidy(TARGET es2panda-lib CHECKS 328 "-modernize-use-trailing-return-type" 329 "-llvmlibc-restrict-system-libc-headers" 330 "-llvmlibc-callee-namespace" 331 "-cert-dcl21-cpp" 332 "-cppcoreguidelines-macro-usage" 333 "-cppcoreguidelines-pro-bounds-pointer-arithmetic" 334 "-fuchsia-default-arguments-calls" 335 "-fuchsia-default-arguments-declarations" 336 "-readability-implicit-bool-conversion" 337 "-misc-non-private-member-variables-in-classes" 338 "-hicpp-signed-bitwise" 339 "-altera-struct-pack-align" 340) 341 342add_subdirectory(aot) 343