Explicitly create parent directory before creating symlink (#6808)
Ninja always creates the directories for its outputs, but apparently
Make doesn't.
Fixes https://github.com/google/iree/issues/6801
diff --git a/build_tools/cmake/iree_macros.cmake b/build_tools/cmake/iree_macros.cmake
index 52e8b6b..cacbaf1 100644
--- a/build_tools/cmake/iree_macros.cmake
+++ b/build_tools/cmake/iree_macros.cmake
@@ -255,15 +255,20 @@
iree_package_name(_PACKAGE_NAME)
set(_TARGET "${_PACKAGE_NAME}_${ARG_TARGET}")
set(_FROM_TOOL_TARGET ${ARG_FROM_TOOL_TARGET})
+ set(_TO_TOOL_PATH "${CMAKE_CURRENT_BINARY_DIR}/${ARG_TO_EXE_NAME}${CMAKE_EXECUTABLE_SUFFIX}")
+ get_filename_component(_TO_TOOL_DIR "${_TO_TOOL_PATH}" DIRECTORY)
+
add_custom_command(
TARGET "${_TARGET}"
BYPRODUCTS
"${CMAKE_CURRENT_BINARY_DIR}/${ARG_TO_EXE_NAME}${CMAKE_EXECUTABLE_SUFFIX}"
COMMAND
+ ${CMAKE_COMMAND} -E make_directory "${_TO_TOOL_DIR}"
+ COMMAND
${CMAKE_COMMAND} -E create_symlink
"$<TARGET_FILE:${_FROM_TOOL_TARGET}>"
- "${CMAKE_CURRENT_BINARY_DIR}/${ARG_TO_EXE_NAME}${CMAKE_EXECUTABLE_SUFFIX}"
+ "${_TO_TOOL_PATH}"
)
endfunction()
diff --git a/build_tools/cmake/iree_python.cmake b/build_tools/cmake/iree_python.cmake
index 6adcb34..59e1069 100644
--- a/build_tools/cmake/iree_python.cmake
+++ b/build_tools/cmake/iree_python.cmake
@@ -234,11 +234,18 @@
# Symlink each file as its own target.
foreach(SRC_FILE ${ARG_SRCS})
+ # SRC_FILE could have other path components in it, so we need to make a
+ # directory for it. Ninja does this automatically, but make doesn't. See
+ # https://github.com/google/iree/issues/6801
+ set(_SRC_BIN_PATH "${CMAKE_CURRENT_BINARY_DIR}/${SRC_FILE}")
+ get_filename_component(_SRC_BIN_DIR "${_SRC_BIN_PATH}" DIRECTORY)
add_custom_command(
TARGET ${_NAME}
+ COMMAND
+ ${CMAKE_COMMAND} -E make_directory "${_SRC_BIN_DIR}"
COMMAND ${CMAKE_COMMAND} -E create_symlink
- "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FILE}" "${CMAKE_CURRENT_BINARY_DIR}/${SRC_FILE}"
- BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/${SRC_FILE}"
+ "${CMAKE_CURRENT_SOURCE_DIR}/${SRC_FILE}" "${_SRC_BIN_PATH}"
+ BYPRODUCTS "${_SRC_BIN_PATH}"
)
endforeach()