<div dir="ltr">This patch broke building Clang out-of-tree for me. Exactly for the reason the commit says, CMake now errors because of a missing intrinsics_gen target.<div>Is this behavior expected? Is there a plan to fix this?</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br><span style="font-size:12.8px">@@ -645,9 +647,11 @@ endmacro(add_llvm_loadable_</span><wbr style="font-size:12.8px"><span style="font-size:12.8px">module name)</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px"> macro(add_llvm_executable name)<br></span><span style="font-size:12.8px">-  cmake_parse_arguments(ARG "DISABLE_LLVM_LINK_LLVM_DYLIB;</span><wbr style="font-size:12.8px"><span style="font-size:12.8px">IGNORE_EXTERNALIZE_DEBUGINFO;</span><wbr style="font-size:12.8px"><span style="font-size:12.8px">NO_INSTALL_RPATH" "" "" ${ARGN})<br></span><span style="font-size:12.8px">+  cmake_parse_arguments(ARG "DISABLE_LLVM_LINK_LLVM_DYLIB;</span><wbr style="font-size:12.8px"><span style="font-size:12.8px">IGNORE_EXTERNALIZE_DEBUGINFO;</span><wbr style="font-size:12.8px"><span style="font-size:12.8px">NO_INSTALL_RPATH" "" "DEPENDS" ${ARGN})<br></span><span style="font-size:12.8px">   llvm_process_sources( ALL_FILES ${ARG_UNPARSED_ARGUMENTS} )</span><br style="font-size:12.8px"><span style="font-size:12.8px">+  list(APPEND LLVM_COMMON_DEPENDS ${ARG_DEPENDS})</span></blockquote><div> </div><div>FYI this is the line that causes the breakage.</div><div> </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Nov 16, 2016 at 9:36 PM, Chris Bieneman via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: cbieneman<br>
Date: Wed Nov 16 22:36:59 2016<br>
New Revision: 287207<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=287207&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=287207&view=rev</a><br>
Log:<br>
[CMake] [Darwin] Add support for debugging tablegen dependencies<br>
<br>
This patch adds an option to the build system LLVM_DEPENDENCY_DEBUGGING. Over time I plan to extend this to do more complex verifications, but the initial patch causes compile errors wherever there is missing a dependency on intrinsics_gen.<br>
<br>
Because intrinsics_gen is a compile-time dependency not a link-time dependency, everything that relies on the headers generated in intrinsics_gen needs an explicit dependency.<br>
<br>
Modified:<br>
    llvm/trunk/CMakeLists.txt<br>
    llvm/trunk/cmake/modules/<wbr>AddLLVM.cmake<br>
<br>
Modified: llvm/trunk/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=287207&r1=287206&r2=287207&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/CMakeLists.<wbr>txt?rev=287207&r1=287206&r2=<wbr>287207&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/CMakeLists.txt (original)<br>
+++ llvm/trunk/CMakeLists.txt Wed Nov 16 22:36:59 2016<br>
@@ -151,6 +151,20 @@ if(LLVM_CCACHE_BUILD)<br>
   endif()<br>
 endif()<br>
<br>
+option(LLVM_DEPENDENCY_<wbr>DEBUGGING "Dependency debugging mode to verify correctly expressed library dependencies (Darwin only)" OFF)<br>
+<br>
+# Some features of the LLVM build may be disallowed when dependency debugging is<br>
+# enabled. In particular you cannot use ccache because we want to force compile<br>
+# operations to always happen.<br>
+if(LLVM_DEPENDENCY_DEBUGGING)<br>
+  if(NOT CMAKE_HOST_APPLE)<br>
+    message(FATAL_ERROR "Dependency debugging is only currently supported on Darwin hosts.")<br>
+  endif()<br>
+  if(LLVM_CCACHE_BUILD)<br>
+    message(FATAL_ERROR "Cannot enable dependency debugging while using ccache.")<br>
+  endif()<br>
+endif()<br>
+<br>
 option(LLVM_BUILD_GLOBAL_ISEL "Experimental: Build GlobalISel" OFF)<br>
 if(LLVM_BUILD_GLOBAL_ISEL)<br>
   add_definitions(-DLLVM_BUILD_<wbr>GLOBAL_ISEL)<br>
<br>
Modified: llvm/trunk/cmake/modules/<wbr>AddLLVM.cmake<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=287207&r1=287206&r2=287207&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/cmake/<wbr>modules/AddLLVM.cmake?rev=<wbr>287207&r1=287206&r2=287207&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/cmake/modules/<wbr>AddLLVM.cmake (original)<br>
+++ llvm/trunk/cmake/modules/<wbr>AddLLVM.cmake Wed Nov 16 22:36:59 2016<br>
@@ -377,6 +377,8 @@ function(llvm_add_library name)<br>
     endif()<br>
   endif()<br>
<br>
+  setup_dependency_debugging(${<wbr>name} ${LLVM_COMMON_DEPENDS})<br>
+<br>
   # Generate objlib<br>
   if((ARG_SHARED AND ARG_STATIC) OR ARG_OBJECT)<br>
     # Generate an obj library for both targets.<br>
@@ -645,9 +647,11 @@ endmacro(add_llvm_loadable_<wbr>module name)<br>
<br>
<br>
 macro(add_llvm_executable name)<br>
-  cmake_parse_arguments(ARG "DISABLE_LLVM_LINK_LLVM_DYLIB;<wbr>IGNORE_EXTERNALIZE_DEBUGINFO;<wbr>NO_INSTALL_RPATH" "" "" ${ARGN})<br>
+  cmake_parse_arguments(ARG "DISABLE_LLVM_LINK_LLVM_DYLIB;<wbr>IGNORE_EXTERNALIZE_DEBUGINFO;<wbr>NO_INSTALL_RPATH" "" "DEPENDS" ${ARGN})<br>
   llvm_process_sources( ALL_FILES ${ARG_UNPARSED_ARGUMENTS} )<br>
<br>
+  list(APPEND LLVM_COMMON_DEPENDS ${ARG_DEPENDS})<br>
+<br>
   # Generate objlib<br>
   if(LLVM_ENABLE_OBJLIB)<br>
     # Generate an obj library for both targets.<br>
@@ -669,6 +673,8 @@ macro(add_llvm_executable name)<br>
     list(APPEND ALL_FILES "${LLVM_MAIN_SRC_DIR}/cmake/<wbr>dummy.cpp")<br>
   endif()<br>
<br>
+  setup_dependency_debugging(${<wbr>name} ${LLVM_COMMON_DEPENDS})<br>
+<br>
   if( EXCLUDE_FROM_ALL )<br>
     add_executable(${name} EXCLUDE_FROM_ALL ${ALL_FILES})<br>
   else()<br>
@@ -1377,3 +1383,19 @@ function(llvm_setup_rpath name)<br>
                         INSTALL_RPATH "${_install_rpath}"<br>
                         ${_install_name_dir})<br>
 endfunction()<br>
+<br>
+function(setup_dependency_<wbr>debugging name)<br>
+  if(NOT LLVM_DEPENDENCY_DEBUGGING)<br>
+    return()<br>
+  endif()<br>
+<br>
+  if("intrinsics_gen" IN_LIST ARGN)<br>
+    return()<br>
+  endif()<br>
+<br>
+  set(deny_attributes_gen "(deny file* (literal \"${LLVM_BINARY_DIR}/include/<wbr>llvm/IR/Attributes.gen\"))")<br>
+  set(deny_intrinsics_gen "(deny file* (literal \"${LLVM_BINARY_DIR}/include/<wbr>llvm/IR/Intrinsics.gen\"))")<br>
+<br>
+  set(sandbox_command "sandbox-exec -p '(version 1) (allow default) ${deny_attributes_gen} ${deny_intrinsics_gen}'")<br>
+  set_property(DIRECTORY PROPERTY RULE_LAUNCH_COMPILE ${sandbox_command})<br>
+endfunction()<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>