<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[195009] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/195009">195009</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2016-01-13 23:34:09 -0800 (Wed, 13 Jan 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[CMake] Do not use LLVM static libraries for FTL JIT
https://bugs.webkit.org/show_bug.cgi?id=151559

Reviewed by Michael Catanzaro.

.:

Also export LLVM_LIBRARIES variable that can be used to prefer
linking to the llvm dynamic libraries.

* Source/cmake/FindLLVM.cmake:

Source/JavaScriptCore:

Allow ports decide whether to prefer linking to llvm static or
dynamic libraries. This patch only changes the behavior of the GTK
port, other ports can change the default behavior by setting
llvmForJSC_LIBRARIES in their platform specific cmake files.

* CMakeLists.txt: Move llvmForJSC library definition after the
WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS, to allow platform specific
files to set their own llvmForJSC_LIBRARIES. When not set, it
defaults to LLVM_STATIC_LIBRARIES. The command to create
WebKitLLVMLibraryToken.h no longer depends on the static
libraries, since we are going to make the build fail anyway when
not found in case of linking to the static libraries. If platform
specific file defined llvmForJSC_INSTALL_DIR llvmForJSC is also
installed to the given destination.
* PlatformGTK.cmake: Set llvmForJSC_LIBRARIES and
llvmForJSC_INSTALL_DIR.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkChangeLog">trunk/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreCMakeListstxt">trunk/Source/JavaScriptCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorePlatformGTKcmake">trunk/Source/JavaScriptCore/PlatformGTK.cmake</a></li>
<li><a href="#trunkSourcecmakeFindLLVMcmake">trunk/Source/cmake/FindLLVM.cmake</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/ChangeLog (195008 => 195009)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/ChangeLog        2016-01-14 07:00:06 UTC (rev 195008)
+++ trunk/ChangeLog        2016-01-14 07:34:09 UTC (rev 195009)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2016-01-13  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [CMake] Do not use LLVM static libraries for FTL JIT
+        https://bugs.webkit.org/show_bug.cgi?id=151559
+
+        Reviewed by Michael Catanzaro.
+
+        Also export LLVM_LIBRARIES variable that can be used to prefer
+        linking to the llvm dynamic libraries.
+
+        * Source/cmake/FindLLVM.cmake:
+
</ins><span class="cx"> 2016-01-13  Michael Catanzaro  &lt;mcatanzaro@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] Add comments above options declarations in OptionsGTK.cmake
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/CMakeLists.txt (195008 => 195009)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/CMakeLists.txt        2016-01-14 07:00:06 UTC (rev 195008)
+++ trunk/Source/JavaScriptCore/CMakeLists.txt        2016-01-14 07:34:09 UTC (rev 195009)
</span><span class="lines">@@ -972,10 +972,6 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> if (ENABLE_FTL_JIT)
</span><del>-    if (NOT LLVM_STATIC_LIBRARIES)
-        message(FATAL_ERROR &quot;No LLVM libs found, but FTL is enabled. Stopping build.&quot;)
-    endif ()
-
</del><span class="cx">     # Configure llvmForJSC.so
</span><span class="cx">     set(llvmForJSC_SOURCES
</span><span class="cx">         llvm/library/LLVMAnchor.cpp
</span><span class="lines">@@ -989,17 +985,9 @@
</span><span class="cx"> 
</span><span class="cx">     add_custom_command(
</span><span class="cx">         OUTPUT ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h
</span><del>-        DEPENDS ${LLVM_STATIC_LIBRARIES}
</del><span class="cx">         COMMAND ${CMAKE_COMMAND} -E touch ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h
</span><span class="cx">         VERBATIM)
</span><span class="cx"> 
</span><del>-    WEBKIT_WRAP_SOURCELIST(${llvmForJSC_SOURCES})
-    add_library(llvmForJSC SHARED ${llvmForJSC_SOURCES} ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h)
-    target_link_libraries(llvmForJSC ${LLVM_STATIC_LIBRARIES} ${LLVM_SYSTEM_LIBRARIES})
-    if (NOT CMAKE_SYSTEM_NAME MATCHES &quot;Darwin&quot;)
-        ADD_TARGET_PROPERTIES(llvmForJSC LINK_FLAGS &quot;-Wl,--version-script=${JAVASCRIPTCORE_DIR}/llvm/library/libllvmForJSC.version&quot;)
-    endif ()
-
</del><span class="cx">     # Added extra items for JavaScriptCore
</span><span class="cx">     list(APPEND JavaScriptCore_SYSTEM_INCLUDE_DIRECTORIES
</span><span class="cx">         ${LLVM_INCLUDE_DIRS}
</span><span class="lines">@@ -1346,6 +1334,25 @@
</span><span class="cx"> 
</span><span class="cx"> WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS()
</span><span class="cx"> 
</span><ins>+if (ENABLE_FTL_JIT)
+    if (NOT llvmForJSC_LIBRARIES)
+        set(llvmForJSC_LIBRARIES ${LLVM_STATIC_LIBRARIES})
+    endif ()
+    if (NOT llvmForJSC_LIBRARIES)
+        message(FATAL_ERROR &quot;No LLVM libs found, but FTL is enabled. Stopping build.&quot;)
+    endif ()
+
+    WEBKIT_WRAP_SOURCELIST(${llvmForJSC_SOURCES})
+    add_library(llvmForJSC SHARED ${llvmForJSC_SOURCES} ${DERIVED_SOURCES_JAVASCRIPTCORE_DIR}/WebKitLLVMLibraryToken.h)
+    target_link_libraries(llvmForJSC ${llvmForJSC_LIBRARIES} ${LLVM_SYSTEM_LIBRARIES})
+    if (NOT CMAKE_SYSTEM_NAME MATCHES &quot;Darwin&quot;)
+        ADD_TARGET_PROPERTIES(llvmForJSC LINK_FLAGS &quot;-Wl,--version-script=${JAVASCRIPTCORE_DIR}/llvm/library/libllvmForJSC.version&quot;)
+    endif ()
+    if (llvmForJSC_INSTALL_DIR)
+        install(TARGETS llvmForJSC DESTINATION &quot;${llvmForJSC_INSTALL_DIR}&quot;)
+    endif ()
+endif ()
+
</ins><span class="cx"> WEBKIT_CREATE_FORWARDING_HEADERS(JavaScriptCore DIRECTORIES ${JavaScriptCore_FORWARDING_HEADERS_DIRECTORIES} FILES ${JavaScriptCore_FORWARDING_HEADERS_FILES})
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (195008 => 195009)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-01-14 07:00:06 UTC (rev 195008)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-01-14 07:34:09 UTC (rev 195009)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2016-01-13  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [CMake] Do not use LLVM static libraries for FTL JIT
+        https://bugs.webkit.org/show_bug.cgi?id=151559
+
+        Reviewed by Michael Catanzaro.
+
+        Allow ports decide whether to prefer linking to llvm static or
+        dynamic libraries. This patch only changes the behavior of the GTK
+        port, other ports can change the default behavior by setting
+        llvmForJSC_LIBRARIES in their platform specific cmake files.
+
+        * CMakeLists.txt: Move llvmForJSC library definition after the
+        WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS, to allow platform specific
+        files to set their own llvmForJSC_LIBRARIES. When not set, it
+        defaults to LLVM_STATIC_LIBRARIES. The command to create
+        WebKitLLVMLibraryToken.h no longer depends on the static
+        libraries, since we are going to make the build fail anyway when
+        not found in case of linking to the static libraries. If platform
+        specific file defined llvmForJSC_INSTALL_DIR llvmForJSC is also
+        installed to the given destination.
+        * PlatformGTK.cmake: Set llvmForJSC_LIBRARIES and
+        llvmForJSC_INSTALL_DIR.
+
</ins><span class="cx"> 2016-01-13  Saam barati  &lt;sbarati@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         NativeExecutable should have a name field
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorePlatformGTKcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/PlatformGTK.cmake (195008 => 195009)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/PlatformGTK.cmake        2016-01-14 07:00:06 UTC (rev 195008)
+++ trunk/Source/JavaScriptCore/PlatformGTK.cmake        2016-01-14 07:34:09 UTC (rev 195009)
</span><span class="lines">@@ -39,9 +39,8 @@
</span><span class="cx"> endif ()
</span><span class="cx"> 
</span><span class="cx"> if (ENABLE_FTL_JIT)
</span><del>-    install(TARGETS llvmForJSC
-            DESTINATION &quot;${LIB_INSTALL_DIR}/javascriptcoregtk-${WEBKITGTK_API_VERSION}&quot;
-    )
</del><ins>+    set(llvmForJSC_LIBRARIES ${LLVM_LIBRARIES})
+    set(llvmForJSC_INSTALL_DIR &quot;${LIB_INSTALL_DIR}/javascriptcoregtk-${WEBKITGTK_API_VERSION}&quot;)
</ins><span class="cx"> endif ()
</span><span class="cx"> 
</span><span class="cx"> add_definitions(-DSTATICALLY_LINKED_WITH_WTF)
</span></span></pre></div>
<a id="trunkSourcecmakeFindLLVMcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/cmake/FindLLVM.cmake (195008 => 195009)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/cmake/FindLLVM.cmake        2016-01-14 07:00:06 UTC (rev 195008)
+++ trunk/Source/cmake/FindLLVM.cmake        2016-01-14 07:34:09 UTC (rev 195009)
</span><span class="lines">@@ -23,13 +23,27 @@
</span><span class="cx"> execute_process(COMMAND ${LLVM_CONFIG_EXE} --includedir OUTPUT_VARIABLE LLVM_INCLUDE_DIRS OUTPUT_STRIP_TRAILING_WHITESPACE)
</span><span class="cx"> execute_process(COMMAND ${LLVM_CONFIG_EXE} --libfiles OUTPUT_VARIABLE LLVM_STATIC_LIBRARIES OUTPUT_STRIP_TRAILING_WHITESPACE)
</span><span class="cx"> execute_process(COMMAND ${LLVM_CONFIG_EXE} --system-libs OUTPUT_VARIABLE LLVM_SYSTEM_LIBRARIES OUTPUT_STRIP_TRAILING_WHITESPACE)
</span><ins>+execute_process(COMMAND ${LLVM_CONFIG_EXE} --libdir OUTPUT_VARIABLE LLVM_LIBS_DIRECTORY OUTPUT_STRIP_TRAILING_WHITESPACE)
+execute_process(COMMAND ${LLVM_CONFIG_EXE} --libs OUTPUT_VARIABLE LLVM_LIBS OUTPUT_STRIP_TRAILING_WHITESPACE)
+execute_process(COMMAND ${LLVM_CONFIG_EXE} --ldflags OUTPUT_VARIABLE LLVM_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
</ins><span class="cx"> 
</span><ins>+# Depending on how llvm was built, we could have either a global .so file when built using autotools,
+# or multiple .so files for each static library when built using CMake. So, we set the LLVM_LIBS_DIRECTORY
+# variable here accordingly for each case.
+# We need to build the soname manually in any case, since there's currently no way to get it from llvm-config.
+set(LLVM_SONAME &quot;LLVM-${LLVM_VERSION}&quot;)
+if (EXISTS &quot;${LLVM_LIBS_DIRECTORY}/lib${LLVM_SONAME}.so&quot;)
+    set(LLVM_LIBRARIES &quot;${LLVM_LDFLAGS} -l${LLVM_SONAME}&quot;)
+else ()
+    set(LLVM_LIBRARIES &quot;${LLVM_LDFLAGS} ${LLVM_LIBS}&quot;)
+endif ()
+
</ins><span class="cx"> # convert the list of paths into a cmake list
</span><span class="cx"> separate_arguments(LLVM_STATIC_LIBRARIES)
</span><span class="cx"> 
</span><span class="cx"> include(FindPackageHandleStandardArgs)
</span><span class="cx"> find_package_handle_standard_args(LLVM
</span><del>-                                  REQUIRED_VARS LLVM_VERSION LLVM_INCLUDE_DIRS LLVM_STATIC_LIBRARIES
</del><ins>+                                  REQUIRED_VARS LLVM_VERSION LLVM_INCLUDE_DIRS LLVM_LIBRARIES LLVM_STATIC_LIBRARIES
</ins><span class="cx">                                   VERSION_VAR LLVM_VERSION)
</span><span class="cx"> 
</span><del>-mark_as_advanced(LLVM_VERSION LLVM_INCLUDE_DIRS LLVM_STATIC_LIBRARIES)
</del><ins>+mark_as_advanced(LLVM_VERSION LLVM_INCLUDE_DIRS LLVM_LIBRARIES LLVM_STATIC_LIBRARIES)
</ins></span></pre>
</div>
</div>

</body>
</html>