Added dependency on the TableGen executable file.

For the case when LLVM_OPTIMIZED_TABLEGEN is ON (enables LLVM_USE_HOST_TOOLS),
we need both _TABLEGEN_TARGET and _TABLEGEN_EXE in the  DEPENDS list
to have .inc files rebuilt on a tablegen change, as cmake does not propagate
file-level dependencies of custom targets.

We could always have just one dependency on both the target and
the file, but the 2 cases would produce cleaner cmake files.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@305142 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Galina Kistanova 2017-06-10 07:48:49 +00:00
parent 309f3a963a
commit 044e64c53b

View File

@ -30,19 +30,43 @@ function(tablegen project ofn)
endif() endif()
endif() endif()
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp # We need both _TABLEGEN_TARGET and _TABLEGEN_EXE in the DEPENDS list
# Generate tablegen output in a temporary file. # (both the target and the file) to have .inc files rebuilt on
COMMAND ${${project}_TABLEGEN_EXE} ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR} # a tablegen change, as cmake does not propagate file-level dependencies
${LLVM_TABLEGEN_FLAGS} # of custom targets. See the following ticket for more information:
${LLVM_TARGET_DEFINITIONS_ABSOLUTE} # https://cmake.org/Bug/view.php?id=15858
-o ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp # We could always have just one dependency on both the target and
# The file in LLVM_TARGET_DEFINITIONS may be not in the current # the file, but these 2 cases would produce cleaner cmake files.
# directory and local_tds may not contain it, so we must if (${${project}_TABLEGEN_TARGET} STREQUAL ${${project}_TABLEGEN_EXE})
# explicitly list it here: add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
DEPENDS ${${project}_TABLEGEN_TARGET} ${local_tds} ${global_tds} # Generate tablegen output in a temporary file.
${LLVM_TARGET_DEFINITIONS_ABSOLUTE} COMMAND ${${project}_TABLEGEN_EXE} ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Building ${ofn}..." ${LLVM_TABLEGEN_FLAGS}
) ${LLVM_TARGET_DEFINITIONS_ABSOLUTE}
-o ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
# 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:
DEPENDS ${${project}_TABLEGEN_TARGET} ${local_tds} ${global_tds}
${LLVM_TARGET_DEFINITIONS_ABSOLUTE}
COMMENT "Building ${ofn}..."
)
else()
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
# Generate tablegen output in a temporary file.
COMMAND ${${project}_TABLEGEN_EXE} ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR}
${LLVM_TABLEGEN_FLAGS}
${LLVM_TARGET_DEFINITIONS_ABSOLUTE}
-o ${CMAKE_CURRENT_BINARY_DIR}/${ofn}.tmp
# 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:
DEPENDS ${${project}_TABLEGEN_TARGET} ${${project}_TABLEGEN_EXE}
${local_tds} ${global_tds}
${LLVM_TARGET_DEFINITIONS_ABSOLUTE}
COMMENT "Building ${ofn}..."
)
endif()
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn} add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn}
# Only update the real output file if there are any differences. # Only update the real output file if there are any differences.
# This prevents recompilation of all the files depending on it if there # This prevents recompilation of all the files depending on it if there