[PATCH] D33707: TableGen.cmake: Use DEPFILE for Ninja Generator with CMake>=3.7.

NAKAMURA Takumi via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 21 15:04:50 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL305961: TableGen.cmake: Use DEPFILE for Ninja Generator with CMake>=3.7. (authored by chapuni).

Changed prior to commit:
  https://reviews.llvm.org/D33707?vs=100815&id=103473#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D33707

Files:
  llvm/trunk/cmake/modules/TableGen.cmake


Index: llvm/trunk/cmake/modules/TableGen.cmake
===================================================================
--- llvm/trunk/cmake/modules/TableGen.cmake
+++ llvm/trunk/cmake/modules/TableGen.cmake
@@ -14,8 +14,31 @@
     message(FATAL_ERROR "${project}_TABLEGEN_EXE not set")
   endif()
 
-  file(GLOB local_tds "*.td")
-  file(GLOB_RECURSE global_tds "${LLVM_MAIN_INCLUDE_DIR}/llvm/*.td")
+  # Use depfile instead of globbing arbitrary *.td(s)
+  # DEPFILE is available for Ninja Generator with CMake>=3.7.
+  if(CMAKE_GENERATOR STREQUAL "Ninja" AND NOT CMAKE_VERSION VERSION_LESS 3.7)
+    # Make output path relative to build.ninja, assuming located on
+    # ${CMAKE_BINARY_DIR}.
+    # CMake emits build targets as relative paths but Ninja doesn't identify
+    # absolute path (in *.d) as relative path (in build.ninja)
+    # Note that tblgen is executed on ${CMAKE_BINARY_DIR} as working directory.
+    file(RELATIVE_PATH ofn_rel
+      ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${ofn})
+    set(additional_cmdline
+      -o ${ofn_rel}.tmp
+      -d ${ofn_rel}.d
+      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+      DEPFILE ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.d
+      )
+    set(local_tds)
+    set(global_tds)
+  else()
+    file(GLOB local_tds "*.td")
+    file(GLOB_RECURSE global_tds "${LLVM_MAIN_INCLUDE_DIR}/llvm/*.td")
+    set(additional_cmdline
+      -o ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
+      )
+  endif()
 
   if (IS_ABSOLUTE ${LLVM_TARGET_DEFINITIONS})
     set(LLVM_TARGET_DEFINITIONS_ABSOLUTE ${LLVM_TARGET_DEFINITIONS})
@@ -44,7 +67,7 @@
     COMMAND ${${project}_TABLEGEN_EXE} ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR}
     ${LLVM_TABLEGEN_FLAGS}
     ${LLVM_TARGET_DEFINITIONS_ABSOLUTE}
-    -o ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
+    ${additional_cmdline}
     # The file in LLVM_TARGET_DEFINITIONS may be not in the current
     # directory and local_tds may not contain it, so we must
     # explicitly list it here:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33707.103473.patch
Type: text/x-patch
Size: 1965 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170621/e724b116/attachment.bin>


More information about the llvm-commits mailing list