<div dir="ltr">This was probably fixed by <span style="white-space:pre-wrap">r242746.</span></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 21, 2015 at 8:10 AM, Reid Kleckner <span dir="ltr"><<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">After reconfiguring LLVM this morning, it no longer builds compiler-rt. The CMakeCache.txt has LLVM_TOOL_COMPILER_RT_BUILD:BOOL=ON, but it evaluates to false at runtime.<div><br></div><div>Any idea what's up?</div></div><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Mon, Jul 20, 2015 at 1:36 PM, Chris Bieneman <span dir="ltr"><<a href="mailto:beanz@apple.com" target="_blank">beanz@apple.com</a>></span> wrote:<br></span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">Author: cbieneman<br>
Date: Mon Jul 20 15:36:06 2015<br>
New Revision: 242705<br>
<br></span>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D242705-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=VTO5lRuNsBRu3aC2zdAmWsLBSkpb1RBsjrtqr-5cQp0&s=snztPTM4pz2_ISsrYxsiFp1kZsYLLgBpwABzP4Y0Bbk&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=242705&view=rev</a><span class=""><br>
Log:<br>
[CMake] Cleanup tools/CMakeLists.txt to take advantage of the auto-registration that was already partially working.<br>
<br>
Re-landing r242059 which re-landed r241621... I'm really bad at this.<br>
<br>
Summary (r242059):<br>
This change re-lands r241621, with an additional fix that was required to allow tool sources to live outside the llvm checkout. It also no longer renames LLVM_EXTERNAL_*_SOURCE_DIR. This change was reverted in r241663, because it renamed several variables of the format LLVM_EXTERNAL_*_* to LLVM_TOOL_*_*.<br>
<br>
Summary (r241621):<br>
The tools CMakeLists file already had implicit tool registration, but there were a few things off about it that needed to be altered to make it work. This change addresses all that. The changes in this patch are:<br>
<br>
* factored out canonicalizing tool names from paths to CMake variables * removed the LLVM_IMPLICIT_PROJECT_IGNORE mechanism in favor of LLVM_EXTERNAL_${nameUPPER}_BUILD which I renamed to LLVM_TOOL_${nameUPPER}_BUILD because it applies to internal and external tools<br>
* removed ignore_llvm_tool_subdirectory() in favor of just setting LLVM_TOOL_${nameUPPER}_BUILD to Off<br>
* Added create_llvm_tool_options() to resolve a bug in add_llvm_external_project() - the old LLVM_EXTERNAL_${nameUPPER}_BUILD would not work on a clean CMake directory because the option could be created after it was set in code.<br>
* Removed all but the minimum required calls to add_llvm_external_project from tools/CMakeLists.txt<br>
<br></span>
Differential Revision: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D10665&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=VTO5lRuNsBRu3aC2zdAmWsLBSkpb1RBsjrtqr-5cQp0&s=Qg08h3YWPObRnycEIMQWCXXcqwYrzgGWvgtE1CpwOsg&e=" rel="noreferrer" target="_blank">http://reviews.llvm.org/D10665</a><span class=""><br>
<br>
Modified:<br>
    llvm/trunk/cmake/modules/AddLLVM.cmake<br>
    llvm/trunk/tools/CMakeLists.txt<br>
<br>
Modified: llvm/trunk/cmake/modules/AddLLVM.cmake<br></span>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_cmake_modules_AddLLVM.cmake-3Frev-3D242705-26r1-3D242704-26r2-3D242705-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=VTO5lRuNsBRu3aC2zdAmWsLBSkpb1RBsjrtqr-5cQp0&s=mPEx5b_2K2nNbYeCeJfK1cuESsm4jvWZlQu1MKgxjxI&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=242705&r1=242704&r2=242705&view=diff</a><div><div class="h5"><br>
==============================================================================<br>
--- llvm/trunk/cmake/modules/AddLLVM.cmake (original)<br>
+++ llvm/trunk/cmake/modules/AddLLVM.cmake Mon Jul 20 15:36:06 2015<br>
@@ -676,6 +676,13 @@ macro(add_llvm_target target_name)<br>
   set( CURRENT_LLVM_TARGET LLVM${target_name} )<br>
 endmacro(add_llvm_target)<br>
<br>
+function(canonicalize_tool_name name output)<br>
+  string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" nameStrip ${name})<br>
+  string(REPLACE "-" "_" nameUNDERSCORE ${nameStrip})<br>
+  string(TOUPPER ${nameUNDERSCORE} nameUPPER)<br>
+  set(${output} "${nameUPPER}" PARENT_SCOPE)<br>
+endfunction(canonicalize_tool_name)<br>
+<br>
 # Add external project that may want to be built as part of llvm such as Clang,<br>
 # lld, and Polly. This adds two options. One for the source directory of the<br>
 # project, which defaults to ${CMAKE_CURRENT_SOURCE_DIR}/${name}. Another to<br>
@@ -686,56 +693,84 @@ macro(add_llvm_external_project name)<br>
   if("${add_llvm_external_dir}" STREQUAL "")<br>
     set(add_llvm_external_dir ${name})<br>
   endif()<br>
-  list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE "${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}")<br>
-  string(REPLACE "-" "_" nameUNDERSCORE ${name})<br>
-  string(TOUPPER ${nameUNDERSCORE} nameUPPER)<br>
-  #TODO: Remove this check in a few days once it has circulated through<br>
-  # buildbots and people's checkouts (cbieneman - July 14, 2015)<br>
-  if("${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}")<br>
-    unset(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR CACHE)<br>
-  endif()<br>
-  if(NOT LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR)<br>
-    set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}")<br>
-  else()<br>
-    set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR<br>
+  canonicalize_tool_name(${name} nameUPPER)<br>
+  if (LLVM_TOOL_${nameUPPER}_BUILD)<br>
+    if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}/CMakeLists.txt)<br>
+        add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir} ${add_llvm_external_dir})<br>
+        set(LLVM_TOOL_${nameUPPER}_BUILD Off)<br>
+    elseif(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR)<br>
+      set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR<br>
+        "${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}"<br>
         CACHE PATH "Path to ${name} source directory")<br>
-  endif()<br>
-  if (EXISTS ${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR}/CMakeLists.txt)<br>
-    option(LLVM_EXTERNAL_${nameUPPER}_BUILD<br>
-           "Whether to build ${name} as part of LLVM" ON)<br>
-    if (LLVM_EXTERNAL_${nameUPPER}_BUILD)<br>
+      mark_as_advanced(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR)<br>
       add_subdirectory(${LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR} ${add_llvm_external_dir})<br>
+      set(LLVM_TOOL_${nameUPPER}_BUILD Off)<br>
     endif()<br>
   endif()<br>
 endmacro(add_llvm_external_project)<br>
<br>
 macro(add_llvm_tool_subdirectory name)<br>
-  list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE "${CMAKE_CURRENT_SOURCE_DIR}/${name}")<br>
-  add_subdirectory(${name})<br>
+  add_llvm_external_project(${name})<br>
 endmacro(add_llvm_tool_subdirectory)<br>
<br>
-macro(ignore_llvm_tool_subdirectory name)<br>
-  list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE "${CMAKE_CURRENT_SOURCE_DIR}/${name}")<br>
-endmacro(ignore_llvm_tool_subdirectory)<br>
+function(get_project_name_from_src_var var output)<br>
+  string(REGEX MATCH "LLVM_EXTERNAL_(.*)_SOURCE_DIR"<br>
+         MACHED_TOOL "${var}")<br>
+  if(MACHED_TOOL)<br>
+    set(${output} ${CMAKE_MATCH_1} PARENT_SCOPE)<br>
+  else()<br>
+    set(${output} PARENT_SCOPE)<br>
+  endif()<br>
+endfunction()<br>
+<br>
+function(create_llvm_tool_options)<br>
+  file(GLOB sub-dirs "${CMAKE_CURRENT_SOURCE_DIR}/*")<br>
+  foreach(dir ${sub-dirs})<br>
+    if(IS_DIRECTORY "${dir}" AND EXISTS "${dir}/CMakeLists.txt")<br>
+      canonicalize_tool_name(${dir} name)<br>
+      option(LLVM_TOOL_${name}_BUILD<br>
+           "Whether to build ${name} as part of LLVM" On)<br>
+      mark_as_advanced(LLVM_TOOL_${name}_BUILD)<br>
+    endif()<br>
+  endforeach()<br>
+  get_cmake_property(variableNames VARIABLES)<br>
+  foreach (variableName ${variableNames})<br>
+    get_project_name_from_src_var(${variableName} projectName)<br>
+    if(projectName)<br>
+      option(LLVM_TOOL_${projectName}_BUILD<br>
+           "Whether to build ${name} as part of LLVM" On)<br>
+      mark_as_advanced(LLVM_TOOL_${name}_BUILD)<br>
+    endif()<br>
+  endforeach()<br>
+endfunction(create_llvm_tool_options)<br>
<br>
-function(add_llvm_implicit_external_projects)<br>
+function(add_llvm_implicit_projects)<br>
   set(list_of_implicit_subdirs "")<br>
   file(GLOB sub-dirs "${CMAKE_CURRENT_SOURCE_DIR}/*")<br>
   foreach(dir ${sub-dirs})<br>
-    if(IS_DIRECTORY "${dir}")<br>
-      list(FIND LLVM_IMPLICIT_PROJECT_IGNORE "${dir}" tool_subdir_ignore)<br>
-      if( tool_subdir_ignore EQUAL -1<br>
-          AND EXISTS "${dir}/CMakeLists.txt")<br>
+    if(IS_DIRECTORY "${dir}" AND EXISTS "${dir}/CMakeLists.txt")<br>
+      canonicalize_tool_name(${dir} name)<br>
+      if (LLVM_TOOL_${name}_BUILD)<br>
         get_filename_component(fn "${dir}" NAME)<br>
         list(APPEND list_of_implicit_subdirs "${fn}")<br>
       endif()<br>
     endif()<br>
   endforeach()<br>
<br>
+  get_cmake_property(variableNames VARIABLES)<br>
+  foreach (variableName ${variableNames})<br>
+    get_project_name_from_src_var(${variableName} projectName)<br>
+    if(projectName)<br>
+      string(TOLOWER ${projectName} projectName)<br>
+      list(APPEND list_of_implicit_subdirs ${projectName})<br>
+    endif()<br>
+  endforeach()<br>
+<br>
+  list(REMOVE_DUPLICATES list_of_implicit_subdirs)<br>
   foreach(external_proj ${list_of_implicit_subdirs})<br>
     add_llvm_external_project("${external_proj}")<br>
   endforeach()<br>
-endfunction(add_llvm_implicit_external_projects)<br>
+endfunction(add_llvm_implicit_projects)<br>
<br>
 # Generic support for adding a unittest.<br>
 function(add_unittest test_suite test_name)<br>
<br>
Modified: llvm/trunk/tools/CMakeLists.txt<br></div></div>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_tools_CMakeLists.txt-3Frev-3D242705-26r1-3D242704-26r2-3D242705-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=VTO5lRuNsBRu3aC2zdAmWsLBSkpb1RBsjrtqr-5cQp0&s=TiDkozs48rxdeDjh3QFSWD-KayXXUsUzuLJ8B8Rht8w&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/CMakeLists.txt?rev=242705&r1=242704&r2=242705&view=diff</a><div><div class="h5"><br>
==============================================================================<br>
--- llvm/trunk/tools/CMakeLists.txt (original)<br>
+++ llvm/trunk/tools/CMakeLists.txt Mon Jul 20 15:36:06 2015<br>
@@ -1,85 +1,37 @@<br>
-add_llvm_tool_subdirectory(llvm-config)<br>
+# This file will recurse into all subdirectories that contain CMakeLists.txt<br>
+# Setting variables that match the pattern LLVM_TOOL_{NAME}_BUILD to Off will<br>
+# prevent traversing into a directory.<br>
+#<br>
+# The only tools that need to be explicitly added are ones that have explicit<br>
+# ordering requirements.<br>
+<br>
+# Iterates all the subdirectories to create CMake options to enable/disable<br>
+# traversing each directory.<br>
+create_llvm_tool_options()<br>
<br>
 # Build polly before the tools: the tools link against polly when<br>
 # LINK_POLLY_INTO_TOOLS is set.<br>
 if(WITH_POLLY)<br>
   add_llvm_external_project(polly)<br>
-else(WITH_POLLY)<br>
-  list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE "${LLVM_MAIN_SRC_DIR}/tools/polly")<br>
-endif(WITH_POLLY)<br>
-<br>
-if( LLVM_BUILD_LLVM_DYLIB )<br>
-  add_llvm_tool_subdirectory(llvm-shlib)<br>
 else()<br>
-  ignore_llvm_tool_subdirectory(llvm-shlib)<br>
+  set(LLVM_TOOL_POLLY_BUILD Off)<br>
 endif()<br>
<br>
-add_llvm_tool_subdirectory(opt)<br>
-add_llvm_tool_subdirectory(llvm-as)<br>
-add_llvm_tool_subdirectory(llvm-dis)<br>
-add_llvm_tool_subdirectory(llvm-mc)<br>
-<br>
-add_llvm_tool_subdirectory(llc)<br>
-add_llvm_tool_subdirectory(llvm-ar)<br>
-add_llvm_tool_subdirectory(llvm-nm)<br>
-add_llvm_tool_subdirectory(llvm-size)<br>
-<br>
-add_llvm_tool_subdirectory(llvm-cov)<br>
-add_llvm_tool_subdirectory(llvm-profdata)<br>
-add_llvm_tool_subdirectory(llvm-link)<br>
-add_llvm_tool_subdirectory(lli)<br>
-<br>
-add_llvm_tool_subdirectory(llvm-extract)<br>
-add_llvm_tool_subdirectory(llvm-diff)<br>
-add_llvm_tool_subdirectory(macho-dump)<br>
-add_llvm_tool_subdirectory(llvm-objdump)<br>
-add_llvm_tool_subdirectory(llvm-readobj)<br>
-add_llvm_tool_subdirectory(llvm-rtdyld)<br>
-add_llvm_tool_subdirectory(llvm-dwarfdump)<br>
-add_llvm_tool_subdirectory(dsymutil)<br>
-add_llvm_tool_subdirectory(llvm-cxxdump)<br>
-if( LLVM_USE_INTEL_JITEVENTS )<br>
-  add_llvm_tool_subdirectory(llvm-jitlistener)<br>
-else()<br>
-  ignore_llvm_tool_subdirectory(llvm-jitlistener)<br>
-endif( LLVM_USE_INTEL_JITEVENTS )<br>
-<br>
-add_llvm_tool_subdirectory(bugpoint)<br>
-add_llvm_tool_subdirectory(bugpoint-passes)<br>
-add_llvm_tool_subdirectory(llvm-bcanalyzer)<br>
-add_llvm_tool_subdirectory(llvm-stress)<br>
-add_llvm_tool_subdirectory(llvm-mcmarkup)<br>
-<br>
-add_llvm_tool_subdirectory(verify-uselistorder)<br>
-<br>
-add_llvm_tool_subdirectory(llvm-symbolizer)<br>
-<br>
-add_llvm_tool_subdirectory(llvm-c-test)<br>
-<br>
-add_llvm_tool_subdirectory(obj2yaml)<br>
-add_llvm_tool_subdirectory(yaml2obj)<br>
-<br>
-add_llvm_tool_subdirectory(llvm-go)<br>
-<br>
-add_llvm_tool_subdirectory(llvm-pdbdump)<br>
-<br>
-if(NOT CYGWIN AND LLVM_ENABLE_PIC)<br>
-  add_llvm_tool_subdirectory(lto)<br>
-  add_llvm_tool_subdirectory(llvm-lto)<br>
-else()<br>
-  ignore_llvm_tool_subdirectory(lto)<br>
-  ignore_llvm_tool_subdirectory(llvm-lto)<br>
+if(NOT LLVM_BUILD_LLVM_DYLIB )<br>
+  set(LLVM_TOOL_LLVM_SHLIB_BUILD Off)<br>
 endif()<br>
<br>
-add_llvm_tool_subdirectory(gold)<br>
+if(NOT LLVM_USE_INTEL_JITEVENTS )<br>
+  set(LLVM_TOOL_LLVM_JITLISTENER_BUILD Off)<br>
+endif()<br>
<br>
-add_llvm_external_project(clang)<br>
-add_llvm_external_project(llgo)<br>
-add_llvm_external_project(lld)<br>
-add_llvm_external_project(lldb)<br>
+if(CYGWIN OR NOT LLVM_ENABLE_PIC)<br>
+  set(LLVM_TOOL_LTO_BUILD Off)<br>
+  set(LLVM_TOOL_LLVM_LTO_BUILD Off)<br>
+endif()<br>
<br>
 # Automatically add remaining sub-directories containing a 'CMakeLists.txt'<br>
 # file as external projects.<br>
-add_llvm_implicit_external_projects()<br>
+add_llvm_implicit_projects()<br>
<br>
 set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} PARENT_SCOPE)<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
</div></div><span class=""><a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</span></blockquote></div><br></div>
</blockquote></div><br></div>