[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
Tue May 30 19:06:13 PDT 2017
chapuni created this revision.
Herald added a subscriber: mgorny.
CMake emits build targets as relative paths (from build.ninja) but Ninja doesn't identify absolute path (in *.d) as relative path (in build.ninja).
So, let file names, in the command line, relative from ${CMAKE_BINARY_DIR}, where build.ninja is.
Note that tblgen is executed on ${CMAKE_BINARY_DIR} as working directory.
Not tested on msvc/ninja yet, due to avoiding reinstallation of newer CMake.
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})
@@ -35,7 +58,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.100815.patch
Type: text/x-patch
Size: 1966 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170531/08a36051/attachment.bin>
More information about the llvm-commits
mailing list