]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - CMakeLists.txt
JavaScriptCore-1218.tar.gz
[apple/javascriptcore.git] / CMakeLists.txt
index bf48f970d5a315556db1dd11dca5c8145c7d0ac2..0d7299eceee78ebcadd36a72ae8610958b75bccf 100644 (file)
@@ -1,4 +1,4 @@
-SET(JavaScriptCore_INCLUDE_DIRECTORIES
+set(JavaScriptCore_INCLUDE_DIRECTORIES
     "${CMAKE_BINARY_DIR}"
     "${JAVASCRIPTCORE_DIR}"
     "${JAVASCRIPTCORE_DIR}/API"
@@ -7,6 +7,7 @@ SET(JavaScriptCore_INCLUDE_DIRECTORIES
     "${JAVASCRIPTCORE_DIR}/bytecode"
     "${JAVASCRIPTCORE_DIR}/bytecompiler"
     "${JAVASCRIPTCORE_DIR}/dfg"
+    "${JAVASCRIPTCORE_DIR}/disassembler"
     "${JAVASCRIPTCORE_DIR}/heap"
     "${JAVASCRIPTCORE_DIR}/debugger"
     "${JAVASCRIPTCORE_DIR}/interpreter"
@@ -22,7 +23,7 @@ SET(JavaScriptCore_INCLUDE_DIRECTORIES
     "${CMAKE_SOURCE_DIR}/Source"
 )
 
-SET(JavaScriptCore_SOURCES
+set(JavaScriptCore_SOURCES
     API/JSBase.cpp
     API/JSCallbackConstructor.cpp
     API/JSCallbackFunction.cpp
@@ -31,110 +32,182 @@ SET(JavaScriptCore_SOURCES
     API/JSContextRef.cpp
     API/JSObjectRef.cpp
     API/JSProfilerPrivate.cpp
+    API/JSScriptRef.cpp
     API/JSStringRef.cpp
     API/JSValueRef.cpp
     API/JSWeakObjectMapRefPrivate.cpp
     API/OpaqueJSString.cpp
 
+    assembler/MacroAssembler.cpp
+    assembler/LinkBuffer.cpp
+
+    bytecode/ArrayAllocationProfile.cpp
+    bytecode/ArrayProfile.cpp
     bytecode/CallLinkInfo.cpp
     bytecode/CallLinkStatus.cpp
     bytecode/CodeBlock.cpp
+    bytecode/CodeBlockHash.cpp
+    bytecode/CodeOrigin.cpp
+    bytecode/CodeType.cpp
     bytecode/DFGExitProfile.cpp
     bytecode/ExecutionCounter.cpp
+    bytecode/ExitKind.cpp
     bytecode/GetByIdStatus.cpp
     bytecode/JumpTable.cpp
     bytecode/LazyOperandValueProfile.cpp
-    bytecode/MethodCallLinkInfo.cpp
-    bytecode/MethodCallLinkStatus.cpp
     bytecode/MethodOfGettingAValueProfile.cpp
     bytecode/Opcode.cpp
     bytecode/PolymorphicPutByIdList.cpp
-    bytecode/PredictedType.cpp
+    bytecode/PreciseJumpTargets.cpp
     bytecode/PutByIdStatus.cpp
+    bytecode/SpeculatedType.cpp
+    bytecode/ReduceWhitespace.cpp
+    bytecode/ResolveGlobalStatus.cpp
     bytecode/SamplingTool.cpp
+    bytecode/SpecialPointer.cpp
+    bytecode/StructureStubClearingWatchpoint.cpp
     bytecode/StructureStubInfo.cpp
+    bytecode/UnlinkedCodeBlock.cpp
+    bytecode/Watchpoint.cpp
 
     bytecompiler/BytecodeGenerator.cpp
     bytecompiler/NodesCodegen.cpp
 
     dfg/DFGAbstractState.cpp
+    dfg/DFGArgumentsSimplificationPhase.cpp
+    dfg/DFGArrayMode.cpp
     dfg/DFGAssemblyHelpers.cpp
+    dfg/DFGBackwardsPropagationPhase.cpp
     dfg/DFGByteCodeParser.cpp
     dfg/DFGCapabilities.cpp
+    dfg/DFGCommon.cpp
     dfg/DFGCFAPhase.cpp
-    dfg/DFGCorrectableJumpPoint.cpp
+    dfg/DFGCFGSimplificationPhase.cpp
+    dfg/DFGCPSRethreadingPhase.cpp
+    dfg/DFGConstantFoldingPhase.cpp
     dfg/DFGCSEPhase.cpp
+    dfg/DFGDCEPhase.cpp
+    dfg/DFGDisassembler.cpp
+    dfg/DFGDominators.cpp
     dfg/DFGDriver.cpp
+    dfg/DFGEdge.cpp
     dfg/DFGFixupPhase.cpp
     dfg/DFGGraph.cpp
     dfg/DFGJITCompiler.cpp
+    dfg/DFGLongLivedState.cpp
+    dfg/DFGMinifiedNode.cpp
+    dfg/DFGNode.cpp
     dfg/DFGNodeFlags.cpp
     dfg/DFGOSREntry.cpp
     dfg/DFGOSRExit.cpp
     dfg/DFGOSRExitCompiler.cpp
     dfg/DFGOSRExitCompiler32_64.cpp
     dfg/DFGOSRExitCompiler64.cpp
+    dfg/DFGOSRExitJumpPlaceholder.cpp
     dfg/DFGOperations.cpp
     dfg/DFGPhase.cpp
     dfg/DFGPredictionPropagationPhase.cpp
-    dfg/DFGRedundantPhiEliminationPhase.cpp
+    dfg/DFGPredictionInjectionPhase.cpp
     dfg/DFGRepatch.cpp
     dfg/DFGSpeculativeJIT.cpp
     dfg/DFGSpeculativeJIT32_64.cpp
     dfg/DFGSpeculativeJIT64.cpp
+    dfg/DFGTypeCheckHoistingPhase.cpp
     dfg/DFGThunks.cpp
+    dfg/DFGUnificationPhase.cpp
+    dfg/DFGUseKind.cpp
+    dfg/DFGValueSource.cpp
+    dfg/DFGVariableAccessDataDump.cpp
+    dfg/DFGVariableEvent.cpp
+    dfg/DFGVariableEventStream.cpp
+    dfg/DFGValidate.cpp
     dfg/DFGVirtualRegisterAllocationPhase.cpp
 
+    disassembler/Disassembler.cpp
+
     heap/BlockAllocator.cpp
     heap/CopiedSpace.cpp
+    heap/CopyVisitor.cpp
     heap/ConservativeRoots.cpp
     heap/DFGCodeBlocks.cpp
+    heap/GCThread.cpp
+    heap/GCThreadSharedData.cpp
     heap/HandleSet.cpp
     heap/HandleStack.cpp
     heap/Heap.cpp
+    heap/HeapStatistics.cpp
+    heap/HeapTimer.cpp
+    heap/IncrementalSweeper.cpp
+    heap/JITStubRoutineSet.cpp
     heap/MachineStackMarker.cpp
+
     heap/MarkedAllocator.cpp
     heap/MarkedBlock.cpp
     heap/MarkedSpace.cpp
     heap/MarkStack.cpp
-    heap/WeakSet.cpp
-    heap/WeakHandleOwner.cpp
+    heap/SlotVisitor.cpp
+    heap/SuperRegion.cpp
+    heap/Weak.cpp
     heap/WeakBlock.cpp
+    heap/WeakHandleOwner.cpp
+    heap/WeakSet.cpp
 
     debugger/Debugger.cpp
     debugger/DebuggerActivation.cpp
     debugger/DebuggerCallFrame.cpp
-    
+
     interpreter/AbstractPC.cpp
     interpreter/CallFrame.cpp
     interpreter/Interpreter.cpp
-    interpreter/RegisterFile.cpp
+    interpreter/JSStack.cpp
+    interpreter/VMInspector.cpp
 
+    jit/ClosureCallStubRoutine.cpp
     jit/ExecutableAllocator.cpp
+    jit/ExecutableAllocatorFixedVMPool.cpp
     jit/HostCallReturnValue.cpp
+    jit/GCAwareJITStubRoutine.cpp
     jit/JITArithmetic32_64.cpp
     jit/JITArithmetic.cpp
     jit/JITCall32_64.cpp
     jit/JITCall.cpp
+    jit/JITCode.cpp
     jit/JIT.cpp
+    jit/JITDisassembler.cpp
     jit/JITExceptions.cpp
     jit/JITOpcodes32_64.cpp
     jit/JITOpcodes.cpp
     jit/JITPropertyAccess32_64.cpp
     jit/JITPropertyAccess.cpp
+    jit/JITStubRoutine.cpp
     jit/JITStubs.cpp
+    jit/JITThunks.cpp
+    jit/JumpReplacementWatchpoint.cpp
     jit/ThunkGenerators.cpp
 
     parser/Lexer.cpp
     parser/Nodes.cpp
     parser/Parser.cpp
     parser/ParserArena.cpp
+    parser/SourceProvider.cpp
     parser/SourceProviderCache.cpp
 
+    profiler/ProfilerBytecode.cpp
+    profiler/ProfilerBytecodeSequence.cpp
+    profiler/ProfilerBytecodes.cpp
+    profiler/ProfilerCompilation.cpp
+    profiler/ProfilerCompilationKind.cpp
+    profiler/ProfilerCompiledBytecode.cpp
+    profiler/ProfilerDatabase.cpp
+    profiler/ProfilerOrigin.cpp
+    profiler/ProfilerOriginStack.cpp
+    profiler/ProfilerOSRExit.cpp
+    profiler/ProfilerOSRExitSite.cpp
+    profiler/ProfilerProfiledBytecodes.cpp
     profiler/Profile.cpp
     profiler/ProfileGenerator.cpp
     profiler/ProfileNode.cpp
-    profiler/Profiler.cpp
+    profiler/LegacyProfiler.cpp
 
     runtime/ArgList.cpp
     runtime/Arguments.cpp
@@ -144,6 +217,8 @@ SET(JavaScriptCore_SOURCES
     runtime/BooleanObject.cpp
     runtime/BooleanPrototype.cpp
     runtime/CallData.cpp
+    runtime/CodeCache.cpp
+    runtime/CodeSpecializationKind.cpp
     runtime/CommonIdentifiers.cpp
     runtime/Completion.cpp
     runtime/ConstructData.cpp
@@ -158,10 +233,12 @@ SET(JavaScriptCore_SOURCES
     runtime/ExceptionHelpers.cpp
     runtime/Executable.cpp
     runtime/FunctionConstructor.cpp
+    runtime/FunctionExecutableDump.cpp
     runtime/FunctionPrototype.cpp
     runtime/GCActivityCallback.cpp
     runtime/GetterSetter.cpp
     runtime/Identifier.cpp
+    runtime/IndexingType.cpp
     runtime/InitializeThreading.cpp
     runtime/InternalFunction.cpp
     runtime/JSActivation.cpp
@@ -171,24 +248,32 @@ SET(JavaScriptCore_SOURCES
     runtime/JSDateMath.cpp
     runtime/JSFunction.cpp
     runtime/JSBoundFunction.cpp
-    runtime/JSGlobalData.cpp
+    runtime/VM.cpp
     runtime/JSGlobalObject.cpp
     runtime/JSGlobalObjectFunctions.cpp
-    runtime/JSGlobalThis.cpp
+    runtime/JSProxy.cpp
     runtime/JSLock.cpp
     runtime/JSNotAnObject.cpp
     runtime/JSObject.cpp
     runtime/JSONObject.cpp
     runtime/JSPropertyNameIterator.cpp
-    runtime/JSStaticScopeObject.cpp
+    runtime/JSSegmentedVariableObject.cpp
+    runtime/JSNameScope.cpp
+    runtime/JSWithScope.cpp
+    runtime/JSScope.cpp
     runtime/JSString.cpp
     runtime/JSStringJoiner.cpp
-    runtime/JSValue.cpp
+    runtime/JSSymbolTableObject.cpp
+    runtime/JSCJSValue.cpp
     runtime/JSVariableObject.cpp
     runtime/JSWrapperObject.cpp
     runtime/LiteralParser.cpp
     runtime/Lookup.cpp
     runtime/MathObject.cpp
+    runtime/MemoryStatistics.cpp
+    runtime/NameConstructor.cpp
+    runtime/NameInstance.cpp
+    runtime/NamePrototype.cpp
     runtime/NativeErrorConstructor.cpp
     runtime/NativeErrorPrototype.cpp
     runtime/NumberConstructor.cpp
@@ -201,6 +286,8 @@ SET(JavaScriptCore_SOURCES
     runtime/PropertyDescriptor.cpp
     runtime/PropertyNameArray.cpp
     runtime/PropertySlot.cpp
+    runtime/PropertyTable.cpp
+    runtime/PrototypeMap.cpp
     runtime/RegExp.cpp
     runtime/RegExpCache.cpp
     runtime/RegExpConstructor.cpp
@@ -208,17 +295,19 @@ SET(JavaScriptCore_SOURCES
     runtime/RegExpMatchesArray.cpp
     runtime/RegExpObject.cpp
     runtime/RegExpPrototype.cpp
-    runtime/ScopeChain.cpp
     runtime/SmallStrings.cpp
+    runtime/SparseArrayValueMap.cpp
     runtime/StrictEvalActivation.cpp
     runtime/StringConstructor.cpp
     runtime/StringObject.cpp
     runtime/StringPrototype.cpp
     runtime/StringRecursionChecker.cpp
     runtime/Structure.cpp
+    runtime/StructureRareData.cpp
     runtime/StructureChain.cpp
-    runtime/TimeoutChecker.cpp
-    runtime/UString.cpp
+    runtime/SymbolTable.cpp
+    runtime/Watchdog.cpp
+    runtime/WatchdogNone.cpp
 
     tools/CodeProfile.cpp
     tools/CodeProfiling.cpp
@@ -230,7 +319,7 @@ SET(JavaScriptCore_SOURCES
     yarr/YarrSyntaxChecker.cpp
 )
 
-SET(JavaScriptCore_LUT_FILES
+set(JavaScriptCore_LUT_FILES
     runtime/ArrayConstructor.cpp
     runtime/ArrayPrototype.cpp
     runtime/BooleanPrototype.cpp
@@ -240,83 +329,224 @@ SET(JavaScriptCore_LUT_FILES
     runtime/JSGlobalObject.cpp
     runtime/JSONObject.cpp
     runtime/MathObject.cpp
+    runtime/NamePrototype.cpp
     runtime/NumberConstructor.cpp
     runtime/NumberPrototype.cpp
     runtime/ObjectConstructor.cpp
-    runtime/ObjectPrototype.cpp
     runtime/RegExpConstructor.cpp
     runtime/RegExpObject.cpp
     runtime/RegExpPrototype.cpp
     runtime/StringConstructor.cpp
-    runtime/StringPrototype.cpp
 )
 
-SET(JavaScriptCore_LIBRARIES
-    ${WTF_LIBRARY_NAME}
+set(JavaScriptCore_LIBRARIES
+    WTF
 )
 
+if (WTF_USE_ICU_UNICODE)
+    list(APPEND JavaScriptCore_INCLUDE_DIRECTORIES
+        ${ICU_INCLUDE_DIRS}
+    )
+    list(APPEND JavaScriptCore_LIBRARIES
+        ${ICU_I18N_LIBRARIES}
+    )
+endif ()
+
+if (ENABLE_LLINT)
+    # We cannot check for RUBY_FOUND because it is set only when the full package is installed and
+    # the only thing we need is the interpreter. Unlike Python, cmake does not provide a macro
+    # for finding the only Ruby interpreter.
+    if (NOT RUBY_EXECUTABLE)
+        message(FATAL_ERROR "The Ruby interpreter is needed to generate LLInt files.")
+    endif ()
+
+    set(LLINT_ASM
+        llint/LowLevelInterpreter.asm
+        llint/LowLevelInterpreter32_64.asm
+        llint/LowLevelInterpreter64.asm
+    )
+
+    set(OFFLINE_ASM
+        offlineasm/arm.rb
+        offlineasm/ast.rb
+        offlineasm/backends.rb
+        offlineasm/cloop.rb
+        offlineasm/config.rb
+        offlineasm/instructions.rb
+        offlineasm/offsets.rb
+        offlineasm/opt.rb
+        offlineasm/parser.rb
+        offlineasm/registers.rb
+        offlineasm/risc.rb
+        offlineasm/self_hash.rb
+        offlineasm/settings.rb
+        offlineasm/transform.rb
+        offlineasm/x86.rb
+    )
+
+    add_custom_command(
+        OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
+        MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb
+        DEPENDS ${LLINT_ASM} ${OFFLINE_ASM}
+        COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/generate_offset_extractor.rb ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
+        VERBATIM)
+
+    # We add the header file directly to the ADD_EXECUTABLE call instead of setting the
+    # OBJECT_DEPENDS property in LLIntOffsetsExtractor.cpp because generate_offset_extractor.rb may
+    # not regenerate it in case the hash it calculates does not change.
+    # In this case, if some of the dependencies specified in the ADD_CUSTOM_COMMAND above have
+    # changed the command will always be called because the mtime of LLIntDesiredOffsets.h will
+    # always be older than that of its dependencies.
+    # Additionally, setting the OBJECT_DEPENDS property will make LLIntDesiredOffsets.h a Makefile
+    # dependency of both LLIntOffsetsExtractor and LLIntOffsetsExtractor.cpp, so the command will
+    # actually be run twice!
+    add_executable(LLIntOffsetsExtractor
+        ${JAVASCRIPTCORE_DIR}/llint/LLIntOffsetsExtractor.cpp
+        ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntDesiredOffsets.h
+    )
+    target_link_libraries(LLIntOffsetsExtractor WTF)
+
+    # The build system will execute asm.rb every time LLIntOffsetsExtractor's mtime is newer than
+    # LLIntAssembly.h's mtime. The problem we have here is: asm.rb has some built-in optimization
+    # that generates a checksum of the LLIntOffsetsExtractor binary, if the checksum of the new
+    # LLIntOffsetsExtractor matches, no output is generated. To make this target consistent and avoid
+    # running this command for every build, we artificially update LLIntAssembly.h's mtime (using touch)
+    # after every asm.rb run.
+    add_custom_command(
+        OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
+        MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/offlineasm/asm.rb
+        DEPENDS LLIntOffsetsExtractor ${LLINT_ASM} ${OFFLINE_ASM}
+        COMMAND ${RUBY_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/offlineasm/asm.rb ${JAVASCRIPTCORE_DIR}/llint/LowLevelInterpreter.asm $<TARGET_FILE:LLIntOffsetsExtractor> ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
+        COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
+        VERBATIM)
+
+    # The explanation for not making LLIntAssembly.h part of the OBJECT_DEPENDS property of some of
+    # the .cpp files below is similar to the one in the previous comment. However, since these .cpp
+    # files are used to build JavaScriptCore itself, we can just add LLIntAssembly.h to JSC_HEADERS
+    # since it is used in the add_library() call at the end of this file.
+    list(APPEND JavaScriptCore_HEADERS
+        ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/LLIntAssembly.h
+    )
+    list(APPEND JavaScriptCore_SOURCES
+        llint/LLIntCLoop.cpp
+        llint/LLIntData.cpp
+        llint/LLIntEntrypoints.cpp
+        llint/LLIntExceptions.cpp
+        llint/LLIntSlowPaths.cpp
+        llint/LLIntThunks.cpp
+        llint/LowLevelInterpreter.cpp
+    )
+endif ()
+
+set(HASH_LUT_GENERATOR ${CMAKE_CURRENT_SOURCE_DIR}/create_hash_table)
+macro(GENERATE_HASH_LUT _input _output)
+    add_custom_command(
+        OUTPUT ${_output}
+        DEPENDS ${HASH_LUT_GENERATOR} ${_input}
+        COMMAND ${PERL_EXECUTABLE} ${HASH_LUT_GENERATOR} ${_input} -i > ${_output}
+        VERBATIM)
+    list(APPEND JavaScriptCore_HEADERS ${_output})
+endmacro()
 
 # GENERATOR 1-A: LUT creator
-FOREACH (_file ${JavaScriptCore_LUT_FILES})
-    GET_FILENAME_COMPONENT(_name ${_file} NAME_WE)
-    GENERATE_HASH_LUT(${JAVASCRIPTCORE_DIR}/${_file} ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/${_name}.lut.h)
-    LIST(APPEND JavaScriptCore_HEADERS ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/${_name}.lut.h)
-ENDFOREACH ()
+foreach (_file ${JavaScriptCore_LUT_FILES})
+    get_filename_component(_name ${_file} NAME_WE)
+    GENERATE_HASH_LUT(${CMAKE_CURRENT_SOURCE_DIR}/${_file} ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/${_name}.lut.h)
+endforeach ()
+
+set(JavaScriptCore_FORWARDING_HEADERS_DIRECTORIES
+    assembler
+    bytecode
+    collector/handles
+    debugger
+    heap
+    interpreter
+    jit
+    llint
+    parser
+    profiler
+    runtime
+    yarr
+)
+
+set(JavaScriptCore_FORWARDING_HEADERS_FILES
+    API/APICast.h
+    API/APIShims.h
+    API/JavaScript.h
+    API/JSBase.h
+    API/JSContextRef.h
+    API/JSContextRefPrivate.h
+    API/JSObjectRef.h
+    API/JSObjectRefPrivate.h
+    API/JSScriptRefPrivate.h
+    API/JSStringRef.h
+    API/JSStringRefCF.h
+    API/JSStringRefBSTR.h
+    API/JSValueRef.h
+    API/JavaScriptCore.h
+    API/JSRetainPtr.h
+    API/JSWeakObjectMapRefInternal.h
+    API/JSWeakObjectMapRefPrivate.h
+    API/JSRetainPtr.h
+    API/OpaqueJSString.h
+    API/WebKitAvailability.h
+)
 
 
 # GENERATOR 1-B: particular LUT creator (for 1 file only)
-GENERATE_HASH_LUT(${JAVASCRIPTCORE_DIR}/parser/Keywords.table ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Lexer.lut.h MAIN_DEPENDENCY)
-LIST(APPEND JavaScriptCore_HEADERS ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Lexer.lut.h)
+GENERATE_HASH_LUT(${CMAKE_CURRENT_SOURCE_DIR}/parser/Keywords.table ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/Lexer.lut.h)
 
 #GENERATOR: "RegExpJitTables.h": tables used by Yarr
-ADD_CUSTOM_COMMAND(
+add_custom_command(
     OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/RegExpJitTables.h
-    MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/create_regex_tables
-    COMMAND ${PYTHON_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/create_regex_tables > ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/RegExpJitTables.h
+    MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/create_regex_tables
+    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/create_regex_tables > ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/RegExpJitTables.h
     VERBATIM)
-ADD_SOURCE_DEPENDENCIES(${JAVASCRIPTCORE_DIR}/yarr/YarrPattern.cpp ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/RegExpJitTables.h)
+ADD_SOURCE_DEPENDENCIES(${CMAKE_CURRENT_SOURCE_DIR}/yarr/YarrPattern.cpp ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/RegExpJitTables.h)
 
 
 #GENERATOR: "KeywordLookup.h": keyword decision tree used by the lexer
-ADD_CUSTOM_COMMAND(
+add_custom_command(
     OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/KeywordLookup.h
-    MAIN_DEPENDENCY ${JAVASCRIPTCORE_DIR}/KeywordLookupGenerator.py
-    COMMAND ${PYTHON_EXECUTABLE} ${JAVASCRIPTCORE_DIR}/KeywordLookupGenerator.py ${JAVASCRIPTCORE_DIR}/parser/Keywords.table > ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/KeywordLookup.h
+    MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/KeywordLookupGenerator.py
+    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/KeywordLookupGenerator.py ${CMAKE_CURRENT_SOURCE_DIR}/parser/Keywords.table > ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/KeywordLookup.h
     VERBATIM)
-ADD_SOURCE_DEPENDENCIES(${JAVASCRIPTCORE_DIR}/parser/Lexer.cpp ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/KeywordLookup.h)
+ADD_SOURCE_DEPENDENCIES(${CMAKE_CURRENT_SOURCE_DIR}/parser/Lexer.cpp ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/KeywordLookup.h)
 
-IF (WTF_CPU_ARM)
-    LIST(APPEND JavaScriptCore_SOURCES
+if (WTF_CPU_ARM)
+    list(APPEND JavaScriptCore_SOURCES
         assembler/ARMAssembler.cpp
         assembler/ARMv7Assembler.cpp
         assembler/MacroAssemblerARM.cpp
     )
-ELSEIF (WTF_CPU_MIPS)
-ELSEIF (WTF_CPU_X86)
-ELSEIF (WTF_CPU_X86_64)
-ELSE ()
-    MESSAGE(FATAL_ERROR "Unknown CPU")
-ENDIF ()
+elseif (WTF_CPU_MIPS)
+elseif (WTF_CPU_X86)
+elseif (WTF_CPU_X86_64)
+else ()
+    message(FATAL_ERROR "Unknown CPU")
+endif ()
 
 
 WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS()
 
+WEBKIT_CREATE_FORWARDING_HEADERS(JavaScriptCore DIRECTORIES ${JavaScriptCore_FORWARDING_HEADERS_DIRECTORIES} FILES ${JavaScriptCore_FORWARDING_HEADERS_FILES})
+
 
-ADD_SUBDIRECTORY(shell)
+add_subdirectory(shell)
 
 WEBKIT_WRAP_SOURCELIST(${JavaScriptCore_SOURCES})
-INCLUDE_DIRECTORIES(${JavaScriptCore_INCLUDE_DIRECTORIES})
-ADD_DEFINITIONS(-DBUILDING_JavaScriptCore)
-ADD_LIBRARY(${JavaScriptCore_LIBRARY_NAME} ${JavaScriptCore_LIBRARY_TYPE} ${JavaScriptCore_HEADERS} ${JavaScriptCore_SOURCES})
-TARGET_LINK_LIBRARIES(${JavaScriptCore_LIBRARY_NAME} ${JavaScriptCore_LIBRARIES})
-SET_TARGET_PROPERTIES(${JavaScriptCore_LIBRARY_NAME} PROPERTIES FOLDER "JavaScriptCore")
-SET_TARGET_PROPERTIES(${JavaScriptCore_LIBRARY_NAME} PROPERTIES LINK_INTERFACE_LIBRARIES "")
-
-IF (JavaScriptCore_LINK_FLAGS)
-    ADD_TARGET_PROPERTIES(${JavaScriptCore_LIBRARY_NAME} LINK_FLAGS "${JavaScriptCore_LINK_FLAGS}")
-ENDIF ()
-
-IF (SHARED_CORE)
-    SET_TARGET_PROPERTIES(${JavaScriptCore_LIBRARY_NAME} PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR})
-    INSTALL(TARGETS ${JavaScriptCore_LIBRARY_NAME} DESTINATION "${LIB_INSTALL_DIR}")
-ENDIF ()
+include_directories(${JavaScriptCore_INCLUDE_DIRECTORIES})
+add_definitions(-DBUILDING_JavaScriptCore)
+add_library(JavaScriptCore ${JavaScriptCore_LIBRARY_TYPE} ${JavaScriptCore_HEADERS} ${JavaScriptCore_SOURCES})
+target_link_libraries(JavaScriptCore ${JavaScriptCore_LIBRARIES})
+set_target_properties(JavaScriptCore PROPERTIES FOLDER "JavaScriptCore")
+set_target_properties(JavaScriptCore PROPERTIES LINK_INTERFACE_LIBRARIES "")
+
+if (JavaScriptCore_OUTPUT_NAME)
+    set_target_properties(JavaScriptCore PROPERTIES OUTPUT_NAME ${JavaScriptCore_OUTPUT_NAME})
+endif ()
+
+if (SHARED_CORE)
+    set_target_properties(JavaScriptCore PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR})
+    install(TARGETS JavaScriptCore DESTINATION "${LIB_INSTALL_DIR}")
+endif ()