1set(JavaScriptCore_INCLUDE_DIRECTORIES
2    "${CMAKE_BINARY_DIR}"
3    "${JAVASCRIPTCORE_DIR}"
4    "${JAVASCRIPTCORE_DIR}/API"
5    "${JAVASCRIPTCORE_DIR}/ForwardingHeaders"
6    "${JAVASCRIPTCORE_DIR}/assembler"
7    "${JAVASCRIPTCORE_DIR}/bytecode"
8    "${JAVASCRIPTCORE_DIR}/bytecompiler"
9    "${JAVASCRIPTCORE_DIR}/dfg"
10    "${JAVASCRIPTCORE_DIR}/disassembler"
11    "${JAVASCRIPTCORE_DIR}/heap"
12    "${JAVASCRIPTCORE_DIR}/debugger"
13    "${JAVASCRIPTCORE_DIR}/interpreter"
14    "${JAVASCRIPTCORE_DIR}/jit"
15    "${JAVASCRIPTCORE_DIR}/llint"
16    "${JAVASCRIPTCORE_DIR}/parser"
17    "${JAVASCRIPTCORE_DIR}/profiler"
18    "${JAVASCRIPTCORE_DIR}/runtime"
19    "${JAVASCRIPTCORE_DIR}/tools"
20    "${JAVASCRIPTCORE_DIR}/yarr"
21    "${WTF_DIR}"
22    "${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}"
23    "${CMAKE_SOURCE_DIR}/Source"
24)
25
26set(JavaScriptCore_SOURCES
27    API/JSBase.cpp
28    API/JSCallbackConstructor.cpp
29    API/JSCallbackFunction.cpp
30    API/JSCallbackObject.cpp
31    API/JSClassRef.cpp
32    API/JSContextRef.cpp
33    API/JSObjectRef.cpp
34    API/JSProfilerPrivate.cpp
35    API/JSScriptRef.cpp
36    API/JSStringRef.cpp
37    API/JSValueRef.cpp
38    API/JSWeakObjectMapRefPrivate.cpp
39    API/OpaqueJSString.cpp
40
41    assembler/MacroAssembler.cpp
42    assembler/LinkBuffer.cpp
43
44    bytecode/ArrayAllocationProfile.cpp
45    bytecode/ArrayProfile.cpp
46    bytecode/CallLinkInfo.cpp
47    bytecode/CallLinkStatus.cpp
48    bytecode/CodeBlock.cpp
49    bytecode/CodeBlockHash.cpp
50    bytecode/CodeOrigin.cpp
51    bytecode/CodeType.cpp
52    bytecode/DFGExitProfile.cpp
53    bytecode/ExecutionCounter.cpp
54    bytecode/ExitKind.cpp
55    bytecode/GetByIdStatus.cpp
56    bytecode/JumpTable.cpp
57    bytecode/LazyOperandValueProfile.cpp
58    bytecode/MethodOfGettingAValueProfile.cpp
59    bytecode/Opcode.cpp
60    bytecode/PolymorphicPutByIdList.cpp
61    bytecode/PreciseJumpTargets.cpp
62    bytecode/PutByIdStatus.cpp
63    bytecode/SpeculatedType.cpp
64    bytecode/ReduceWhitespace.cpp
65    bytecode/ResolveGlobalStatus.cpp
66    bytecode/SamplingTool.cpp
67    bytecode/SpecialPointer.cpp
68    bytecode/StructureStubClearingWatchpoint.cpp
69    bytecode/StructureStubInfo.cpp
70    bytecode/UnlinkedCodeBlock.cpp
71    bytecode/Watchpoint.cpp
72
73    bytecompiler/BytecodeGenerator.cpp
74    bytecompiler/NodesCodegen.cpp
75
76    dfg/DFGAbstractState.cpp
77    dfg/DFGArgumentsSimplificationPhase.cpp
78    dfg/DFGArrayMode.cpp
79    dfg/DFGAssemblyHelpers.cpp
80    dfg/DFGBackwardsPropagationPhase.cpp
81    dfg/DFGByteCodeParser.cpp
82    dfg/DFGCapabilities.cpp
83    dfg/DFGCommon.cpp
84    dfg/DFGCFAPhase.cpp
85    dfg/DFGCFGSimplificationPhase.cpp
86    dfg/DFGCPSRethreadingPhase.cpp
87    dfg/DFGConstantFoldingPhase.cpp
88    dfg/DFGCSEPhase.cpp
89    dfg/DFGDCEPhase.cpp
90    dfg/DFGDisassembler.cpp
91    dfg/DFGDominators.cpp
92    dfg/DFGDriver.cpp
93    dfg/DFGEdge.cpp
94    dfg/DFGFixupPhase.cpp
95    dfg/DFGGraph.cpp
96    dfg/DFGJITCompiler.cpp
97    dfg/DFGLongLivedState.cpp
98    dfg/DFGMinifiedNode.cpp
99    dfg/DFGNode.cpp
100    dfg/DFGNodeFlags.cpp
101    dfg/DFGOSREntry.cpp
102    dfg/DFGOSRExit.cpp
103    dfg/DFGOSRExitCompiler.cpp
104    dfg/DFGOSRExitCompiler32_64.cpp
105    dfg/DFGOSRExitCompiler64.cpp
106    dfg/DFGOSRExitJumpPlaceholder.cpp
107    dfg/DFGOperations.cpp
108    dfg/DFGPhase.cpp
109    dfg/DFGPredictionPropagationPhase.cpp
110    dfg/DFGPredictionInjectionPhase.cpp
111    dfg/DFGRepatch.cpp
112    dfg/DFGSpeculativeJIT.cpp
113    dfg/DFGSpeculativeJIT32_64.cpp
114    dfg/DFGSpeculativeJIT64.cpp
115    dfg/DFGTypeCheckHoistingPhase.cpp
116    dfg/DFGThunks.cpp
117    dfg/DFGUnificationPhase.cpp
118    dfg/DFGUseKind.cpp
119    dfg/DFGValueSource.cpp
120    dfg/DFGVariableAccessDataDump.cpp
121    dfg/DFGVariableEvent.cpp
122    dfg/DFGVariableEventStream.cpp
123    dfg/DFGValidate.cpp
124    dfg/DFGVirtualRegisterAllocationPhase.cpp
125
126    disassembler/Disassembler.cpp
127
128    heap/BlockAllocator.cpp
129    heap/CopiedSpace.cpp
130    heap/CopyVisitor.cpp
131    heap/ConservativeRoots.cpp
132    heap/DFGCodeBlocks.cpp
133    heap/GCThread.cpp
134    heap/GCThreadSharedData.cpp
135    heap/HandleSet.cpp
136    heap/HandleStack.cpp
137    heap/Heap.cpp
138    heap/HeapStatistics.cpp
139    heap/HeapTimer.cpp
140    heap/IncrementalSweeper.cpp
141    heap/JITStubRoutineSet.cpp
142    heap/MachineStackMarker.cpp
143
144    heap/MarkedAllocator.cpp
145    heap/MarkedBlock.cpp
146    heap/MarkedSpace.cpp
147    heap/MarkStack.cpp
148    heap/SlotVisitor.cpp
149    heap/SuperRegion.cpp
150    heap/Weak.cpp
151    heap/WeakBlock.cpp
152    heap/WeakHandleOwner.cpp
153    heap/WeakSet.cpp
154
155    debugger/Debugger.cpp
156    debugger/DebuggerActivation.cpp
157    debugger/DebuggerCallFrame.cpp
158
159    interpreter/AbstractPC.cpp
160    interpreter/CallFrame.cpp
161    interpreter/Interpreter.cpp
162    interpreter/JSStack.cpp
163    interpreter/VMInspector.cpp
164
165    jit/ClosureCallStubRoutine.cpp
166    jit/ExecutableAllocator.cpp
167    jit/ExecutableAllocatorFixedVMPool.cpp
168    jit/HostCallReturnValue.cpp
169    jit/GCAwareJITStubRoutine.cpp
170    jit/JITArithmetic32_64.cpp
171    jit/JITArithmetic.cpp
172    jit/JITCall32_64.cpp
173    jit/JITCall.cpp
174    jit/JITCode.cpp
175    jit/JIT.cpp
176    jit/JITDisassembler.cpp
177    jit/JITExceptions.cpp
178    jit/JITOpcodes32_64.cpp
179    jit/JITOpcodes.cpp
180    jit/JITPropertyAccess32_64.cpp
181    jit/JITPropertyAccess.cpp
182    jit/JITStubRoutine.cpp
183    jit/JITStubs.cpp
184    jit/JITThunks.cpp
185    jit/JumpReplacementWatchpoint.cpp
186    jit/ThunkGenerators.cpp
187
188    parser/Lexer.cpp
189    parser/Nodes.cpp
190    parser/Parser.cpp
191    parser/ParserArena.cpp
192    parser/SourceProvider.cpp
193    parser/SourceProviderCache.cpp
194
195    profiler/ProfilerBytecode.cpp
196    profiler/ProfilerBytecodeSequence.cpp
197    profiler/ProfilerBytecodes.cpp
198    profiler/ProfilerCompilation.cpp
199    profiler/ProfilerCompilationKind.cpp
200    profiler/ProfilerCompiledBytecode.cpp
201    profiler/ProfilerDatabase.cpp
202    profiler/ProfilerOrigin.cpp
203    profiler/ProfilerOriginStack.cpp
204    profiler/ProfilerOSRExit.cpp
205    profiler/ProfilerOSRExitSite.cpp
206    profiler/ProfilerProfiledBytecodes.cpp
207    profiler/Profile.cpp
208    profiler/ProfileGenerator.cpp
209    profiler/ProfileNode.cpp
210    profiler/LegacyProfiler.cpp
211
212    runtime/ArgList.cpp
213    runtime/Arguments.cpp
214    runtime/ArrayConstructor.cpp
215    runtime/ArrayPrototype.cpp
216    runtime/BooleanConstructor.cpp
217    runtime/BooleanObject.cpp
218    runtime/BooleanPrototype.cpp
219    runtime/CallData.cpp
220    runtime/CodeCache.cpp
221    runtime/CodeSpecializationKind.cpp
222    runtime/CommonIdentifiers.cpp
223    runtime/Completion.cpp
224    runtime/ConstructData.cpp
225    runtime/DateConstructor.cpp
226    runtime/DateConversion.cpp
227    runtime/DateInstance.cpp
228    runtime/DatePrototype.cpp
229    runtime/Error.cpp
230    runtime/ErrorConstructor.cpp
231    runtime/ErrorInstance.cpp
232    runtime/ErrorPrototype.cpp
233    runtime/ExceptionHelpers.cpp
234    runtime/Executable.cpp
235    runtime/FunctionConstructor.cpp
236    runtime/FunctionExecutableDump.cpp
237    runtime/FunctionPrototype.cpp
238    runtime/GCActivityCallback.cpp
239    runtime/GetterSetter.cpp
240    runtime/Identifier.cpp
241    runtime/IndexingType.cpp
242    runtime/InitializeThreading.cpp
243    runtime/InternalFunction.cpp
244    runtime/JSActivation.cpp
245    runtime/JSAPIValueWrapper.cpp
246    runtime/JSArray.cpp
247    runtime/JSCell.cpp
248    runtime/JSDateMath.cpp
249    runtime/JSFunction.cpp
250    runtime/JSBoundFunction.cpp
251    runtime/VM.cpp
252    runtime/JSGlobalObject.cpp
253    runtime/JSGlobalObjectFunctions.cpp
254    runtime/JSProxy.cpp
255    runtime/JSLock.cpp
256    runtime/JSNotAnObject.cpp
257    runtime/JSObject.cpp
258    runtime/JSONObject.cpp
259    runtime/JSPropertyNameIterator.cpp
260    runtime/JSSegmentedVariableObject.cpp
261    runtime/JSNameScope.cpp
262    runtime/JSWithScope.cpp
263    runtime/JSScope.cpp
264    runtime/JSString.cpp
265    runtime/JSStringJoiner.cpp
266    runtime/JSSymbolTableObject.cpp
267    runtime/JSCJSValue.cpp
268    runtime/JSVariableObject.cpp
269    runtime/JSWrapperObject.cpp
270    runtime/LiteralParser.cpp
271    runtime/Lookup.cpp
272    runtime/MathObject.cpp
273    runtime/MemoryStatistics.cpp
274    runtime/NameConstructor.cpp
275    runtime/NameInstance.cpp
276    runtime/NamePrototype.cpp
277    runtime/NativeErrorConstructor.cpp
278    runtime/NativeErrorPrototype.cpp
279    runtime/NumberConstructor.cpp
280    runtime/NumberObject.cpp
281    runtime/NumberPrototype.cpp
282    runtime/ObjectConstructor.cpp
283    runtime/ObjectPrototype.cpp
284    runtime/Operations.cpp
285    runtime/Options.cpp
286    runtime/PropertyDescriptor.cpp
287    runtime/PropertyNameArray.cpp
288    runtime/PropertySlot.cpp
289    runtime/PropertyTable.cpp
290    runtime/PrototypeMap.cpp
291    runtime/RegExp.cpp
292    runtime/RegExpCache.cpp
293    runtime/RegExpConstructor.cpp
294    runtime/RegExpCachedResult.cpp
295    runtime/RegExpMatchesArray.cpp
296    runtime/RegExpObject.cpp
297    runtime/RegExpPrototype.cpp
298    runtime/SmallStrings.cpp
299    runtime/SparseArrayValueMap.cpp
300    runtime/StrictEvalActivation.cpp
301    runtime/StringConstructor.cpp
302    runtime/StringObject.cpp
303    runtime/StringPrototype.cpp
304    runtime/StringRecursionChecker.cpp
305    runtime/Structure.cpp
306    runtime/StructureRareData.cpp
307    runtime/StructureChain.cpp
308    runtime/SymbolTable.cpp
309    runtime/Watchdog.cpp
310    runtime/WatchdogNone.cpp
311
312    tools/CodeProfile.cpp
313    tools/CodeProfiling.cpp
314
315    yarr/YarrCanonicalizeUCS2.cpp
316    yarr/YarrPattern.cpp
317    yarr/YarrInterpreter.cpp
318    yarr/YarrJIT.cpp
319    yarr/YarrSyntaxChecker.cpp
320)
321
322set(JavaScriptCore_LUT_FILES
323    runtime/ArrayConstructor.cpp
324    runtime/ArrayPrototype.cpp
325    runtime/BooleanPrototype.cpp
326    runtime/DateConstructor.cpp
327    runtime/DatePrototype.cpp
328    runtime/ErrorPrototype.cpp
329    runtime/JSGlobalObject.cpp
330    runtime/JSONObject.cpp
331    runtime/MathObject.cpp
332    runtime/NamePrototype.cpp
333    runtime/NumberConstructor.cpp
334    runtime/NumberPrototype.cpp
335    runtime/ObjectConstructor.cpp
336    runtime/RegExpConstructor.cpp
337    runtime/RegExpObject.cpp
338    runtime/RegExpPrototype.cpp
339    runtime/StringConstructor.cpp
340)
341
342set(JavaScriptCore_LIBRARIES
343    WTF
344)
345
346if (WTF_USE_ICU_UNICODE)
347    list(APPEND JavaScriptCore_INCLUDE_DIRECTORIES
348        ${ICU_INCLUDE_DIRS}
349    )
350    list(APPEND JavaScriptCore_LIBRARIES
351        ${ICU_I18N_LIBRARIES}
352    )
353endif ()
354
355if (ENABLE_LLINT)
356    # We cannot check for RUBY_FOUND because it is set only when the full package is installed and
357    # the only thing we need is the interpreter. Unlike Python, cmake does not provide a macro
358    # for finding the only Ruby interpreter.
359    if (NOT RUBY_EXECUTABLE)
360        message(FATAL_ERROR "The Ruby interpreter is needed to generate LLInt files.")
361    endif ()
362
363    set(LLINT_ASM
364        llint/LowLevelInterpreter.asm
365        llint/LowLevelInterpreter32_64.asm
366        llint/LowLevelInterpreter64.asm
367    )
368
369    set(OFFLINE_ASM
370        offlineasm/arm.rb
371        offlineasm/ast.rb
372        offlineasm/backends.rb
373        offlineasm/cloop.rb
374        offlineasm/config.rb
375        offlineasm/instructions.rb
376        offlineasm/offsets.rb
377        offlineasm/opt.rb
378        offlineasm/parser.rb
379        offlineasm/registers.rb
380        offlineasm/risc.rb
381        offlineasm/self_hash.rb
382        offlineasm/settings.rb
383        offlineasm/transform.rb
384        offlineasm/x86.rb
385    )
386
387    add_custom_command(
388        OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
389        MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb
390        DEPENDS ${LLINT_ASM} ${OFFLINE_ASM}
391        COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
392        VERBATIM)
393
394    # We add the header file directly to the ADD_EXECUTABLE call instead of setting the
395    # OBJECT_DEPENDS property in LLIntOffsetsExtractor.cpp because generate_offset_extractor.rb may
396    # not regenerate it in case the hash it calculates does not change.
397    # In this case, if some of the dependencies specified in the ADD_CUSTOM_COMMAND above have
398    # changed the command will always be called because the mtime of LLIntDesiredOffsets.h will
399    # always be older than that of its dependencies.
400    # Additionally, setting the OBJECT_DEPENDS property will make LLIntDesiredOffsets.h a Makefile
401    # dependency of both LLIntOffsetsExtractor and LLIntOffsetsExtractor.cpp, so the command will
402    # actually be run twice!
403    add_executable(LLIntOffsetsExtractor
404        ${JAVASCRIPTCORE_DIR}/llint/LLIntOffsetsExtractor.cpp
405        ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
406    )
407    target_link_libraries(LLIntOffsetsExtractor WTF)
408
409    # The build system will execute asm.rb every time LLIntOffsetsExtractor's mtime is newer than
410    # LLIntAssembly.h's mtime. The problem we have here is: asm.rb has some built-in optimization
411    # that generates a checksum of the LLIntOffsetsExtractor binary, if the checksum of the new
412    # LLIntOffsetsExtractor matches, no output is generated. To make this target consistent and avoid
413    # running this command for every build, we artificially update LLIntAssembly.h's mtime (using touch)
414    # after every asm.rb run.
415    add_custom_command(
416        OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
417        MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/offlineasm/asm.rb
418        DEPENDS LLIntOffsetsExtractor ${LLINT_ASM} ${OFFLINE_ASM}
419        COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/asm.rb ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm $<TARGET_FILE:LLIntOffsetsExtractor> ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
420        COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
421        VERBATIM)
422
423    # The explanation for not making LLIntAssembly.h part of the OBJECT_DEPENDS property of some of
424    # the .cpp files below is similar to the one in the previous comment. However, since these .cpp
425    # files are used to build JavaScriptCore itself, we can just add LLIntAssembly.h to JSC_HEADERS
426    # since it is used in the add_library() call at the end of this file.
427    list(APPEND JavaScriptCore_HEADERS
428        ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
429    )
430    list(APPEND JavaScriptCore_SOURCES
431        llint/LLIntCLoop.cpp
432        llint/LLIntData.cpp
433        llint/LLIntEntrypoints.cpp
434        llint/LLIntExceptions.cpp
435        llint/LLIntSlowPaths.cpp
436        llint/LLIntThunks.cpp
437        llint/LowLevelInterpreter.cpp
438    )
439endif ()
440
441set(HASH_LUT_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/create_hash_table)
442macro(GENERATE_HASH_LUT _input _output)
443    add_custom_command(
444        OUTPUT ${_output}
445        DEPENDS ${HASH_LUT_GENERATOR} ${_input}
446        COMMAND ${PERL_EXECUTABLE} ${HASH_LUT_GENERATOR} ${_input} -i > ${_output}
447        VERBATIM)
448    list(APPEND JavaScriptCore_HEADERS ${_output})
449endmacro()
450
451# GENERATOR 1-A: LUT creator
452foreach (_file ${JavaScriptCore_LUT_FILES})
453    get_filename_component(_name ${_file} NAME_WE)
454    GENERATE_HASH_LUT(${CMAKE_CURRENT_SOURCE_DIR}/${_file} ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/${_name}.lut.h)
455endforeach ()
456
457set(JavaScriptCore_FORWARDING_HEADERS_DIRECTORIES
458    assembler
459    bytecode
460    collector/handles
461    debugger
462    heap
463    interpreter
464    jit
465    llint
466    parser
467    profiler
468    runtime
469    yarr
470)
471
472set(JavaScriptCore_FORWARDING_HEADERS_FILES
473    API/APICast.h
474    API/APIShims.h
475    API/JavaScript.h
476    API/JSBase.h
477    API/JSContextRef.h
478    API/JSContextRefPrivate.h
479    API/JSObjectRef.h
480    API/JSObjectRefPrivate.h
481    API/JSScriptRefPrivate.h
482    API/JSStringRef.h
483    API/JSStringRefCF.h
484    API/JSStringRefBSTR.h
485    API/JSValueRef.h
486    API/JavaScriptCore.h
487    API/JSRetainPtr.h
488    API/JSWeakObjectMapRefInternal.h
489    API/JSWeakObjectMapRefPrivate.h
490    API/JSRetainPtr.h
491    API/OpaqueJSString.h
492    API/WebKitAvailability.h
493)
494
495
496# GENERATOR 1-B: particular LUT creator (for 1 file only)
497GENERATE_HASH_LUT(${CMAKE_CURRENT_SOURCE_DIR}/parser/Keywords.table ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Lexer.lut.h)
498
499#GENERATOR: "RegExpJitTables.h": tables used by Yarr
500add_custom_command(
501    OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/RegExpJitTables.h
502    MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/create_regex_tables
503    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/create_regex_tables > ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/RegExpJitTables.h
504    VERBATIM)
505ADD_SOURCE_DEPENDENCIES(${CMAKE_CURRENT_SOURCE_DIR}/yarr/YarrPattern.cpp ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/RegExpJitTables.h)
506
507
508#GENERATOR: "KeywordLookup.h": keyword decision tree used by the lexer
509add_custom_command(
510    OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/KeywordLookup.h
511    MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/KeywordLookupGenerator.py
512    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/KeywordLookupGenerator.py ${CMAKE_CURRENT_SOURCE_DIR}/parser/Keywords.table > ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/KeywordLookup.h
513    VERBATIM)
514ADD_SOURCE_DEPENDENCIES(${CMAKE_CURRENT_SOURCE_DIR}/parser/Lexer.cpp ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/KeywordLookup.h)
515
516if (WTF_CPU_ARM)
517    list(APPEND JavaScriptCore_SOURCES
518        assembler/ARMAssembler.cpp
519        assembler/ARMv7Assembler.cpp
520        assembler/MacroAssemblerARM.cpp
521    )
522elseif (WTF_CPU_MIPS)
523elseif (WTF_CPU_X86)
524elseif (WTF_CPU_X86_64)
525else ()
526    message(FATAL_ERROR "Unknown CPU")
527endif ()
528
529
530WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS()
531
532WEBKIT_CREATE_FORWARDING_HEADERS(JavaScriptCore DIRECTORIES ${JavaScriptCore_FORWARDING_HEADERS_DIRECTORIES} FILES ${JavaScriptCore_FORWARDING_HEADERS_FILES})
533
534
535add_subdirectory(shell)
536
537WEBKIT_WRAP_SOURCELIST(${JavaScriptCore_SOURCES})
538include_directories(${JavaScriptCore_INCLUDE_DIRECTORIES})
539add_definitions(-DBUILDING_JavaScriptCore)
540add_library(JavaScriptCore ${JavaScriptCore_LIBRARY_TYPE} ${JavaScriptCore_HEADERS} ${JavaScriptCore_SOURCES})
541target_link_libraries(JavaScriptCore ${JavaScriptCore_LIBRARIES})
542set_target_properties(JavaScriptCore PROPERTIES FOLDER "JavaScriptCore")
543set_target_properties(JavaScriptCore PROPERTIES LINK_INTERFACE_LIBRARIES "")
544
545if (JavaScriptCore_OUTPUT_NAME)
546    set_target_properties(JavaScriptCore PROPERTIES OUTPUT_NAME ${JavaScriptCore_OUTPUT_NAME})
547endif ()
548
549if (SHARED_CORE)
550    set_target_properties(JavaScriptCore PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR})
551    install(TARGETS JavaScriptCore DESTINATION "${LIB_INSTALL_DIR}")
552endif ()
553