• 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
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