forked from qt-creator/qt-creator
CMake: copy clang and resource files only if necessary
Uses a timestamp file in the build directory to detect when the input changes using DEPENDS from add_custom_command. Total copied files size sum up to more than 260 MB. This was copied at every incremental build, even if nothing changed. This leads to faster build, especially when the copied files are not cached in RAM or when not using a SSD. Change-Id: I3a0b691b961e1d8591068bacf40ae2467c8637cf Reviewed-by: Eike Ziller <eike.ziller@qt.io> Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
@@ -1155,3 +1155,49 @@ function(qtc_glob_resources)
|
||||
string(APPEND qrcData "</qresource></RCC>")
|
||||
file(WRITE "${_arg_QRC_FILE}" "${qrcData}")
|
||||
endfunction()
|
||||
|
||||
function(qtc_copy_to_builddir custom_target_name)
|
||||
cmake_parse_arguments(_arg "CREATE_SUBDIRS" "DESTINATION" "FILES;DIRECTORIES" ${ARGN})
|
||||
set(timestampFiles)
|
||||
|
||||
qtc_output_binary_dir(_output_binary_dir)
|
||||
|
||||
foreach(srcFile ${_arg_FILES})
|
||||
string(MAKE_C_IDENTIFIER "${srcFile}" destinationTimestampFilePart)
|
||||
set(destinationTimestampFileName "${CMAKE_CURRENT_BINARY_DIR}/.${destinationTimestampFilePart}_timestamp")
|
||||
list(APPEND timestampFiles "${destinationTimestampFileName}")
|
||||
|
||||
add_custom_command(OUTPUT "${destinationTimestampFileName}"
|
||||
COMMAND "${CMAKE_COMMAND}" -E make_directory "${_output_binary_dir}/${_arg_DESTINATION}"
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy "${srcFile}" "${_output_binary_dir}/${_arg_DESTINATION}"
|
||||
COMMAND "${CMAKE_COMMAND}" -E touch "${destinationTimestampFileName}"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
COMMENT "Copy ${srcFile} into build directory"
|
||||
DEPENDS "${srcFile}"
|
||||
VERBATIM
|
||||
)
|
||||
endforeach()
|
||||
|
||||
foreach(srcDirectory ${_arg_DIRECTORIES})
|
||||
string(MAKE_C_IDENTIFIER "${srcDirectory}" destinationTimestampFilePart)
|
||||
set(destinationTimestampFileName "${CMAKE_CURRENT_BINARY_DIR}/.${destinationTimestampFilePart}_timestamp")
|
||||
list(APPEND timestampFiles "${destinationTimestampFileName}")
|
||||
set(destinationDirectory "${_output_binary_dir}/${_arg_DESTINATION}")
|
||||
|
||||
if(_arg_CREATE_SUBDIRS)
|
||||
set(destinationDirectory "${destinationDirectory}/${srcDirectory}")
|
||||
endif()
|
||||
|
||||
file(GLOB_RECURSE filesToCopy "${srcDirectory}/*")
|
||||
add_custom_command(OUTPUT "${destinationTimestampFileName}"
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_directory "${srcDirectory}" "${destinationDirectory}"
|
||||
COMMAND "${CMAKE_COMMAND}" -E touch "${destinationTimestampFileName}"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
COMMENT "Copy ${srcDirectory}/ into build directory"
|
||||
DEPENDS ${filesToCopy}
|
||||
VERBATIM
|
||||
)
|
||||
endforeach()
|
||||
|
||||
add_custom_target("${custom_target_name}" ALL DEPENDS ${timestampFiles})
|
||||
endfunction()
|
||||
|
@@ -20,21 +20,12 @@ if (APPLE)
|
||||
set(resource_directories ${resource_directories} scripts)
|
||||
endif()
|
||||
|
||||
add_custom_target(copy_share_to_builddir ALL
|
||||
COMMENT Copy files into build directory
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
# copy resource directories during build
|
||||
foreach(dir IN ITEMS ${resource_directories})
|
||||
add_custom_command(TARGET copy_share_to_builddir POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_directory "${dir}"
|
||||
"${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}/${dir}"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
COMMENT Copy resource directories into build directory
|
||||
VERBATIM
|
||||
qtc_copy_to_builddir(copy_share_to_builddir
|
||||
DIRECTORIES ${resource_directories}
|
||||
DESTINATION "${IDE_DATA_PATH}"
|
||||
CREATE_SUBDIRS
|
||||
)
|
||||
endforeach()
|
||||
|
||||
# create install rule for resource directories
|
||||
install(DIRECTORY ${resource_directories} DESTINATION "${IDE_DATA_PATH}")
|
||||
|
@@ -37,11 +37,8 @@ install(
|
||||
DESTINATION "${IDE_DATA_PATH}/generic-highlighter/"
|
||||
)
|
||||
|
||||
add_custom_target(copy_generic_highligher_to_builddir ALL VERBATIM)
|
||||
add_custom_command(TARGET copy_generic_highligher_to_builddir POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_directory data/syntax
|
||||
"${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}/generic-highlighter/syntax"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
COMMENT Copy files into build directory
|
||||
VERBATIM
|
||||
# copy resource directories during build
|
||||
qtc_copy_to_builddir(copy_generic_highligher_to_builddir
|
||||
DIRECTORIES data/syntax
|
||||
DESTINATION "${IDE_DATA_PATH}/generic-highlighter/syntax"
|
||||
)
|
||||
|
@@ -147,32 +147,18 @@ if (NOT TARGET libclang)
|
||||
return()
|
||||
endif()
|
||||
|
||||
add_custom_target(copy_clang_to_builddir ALL
|
||||
COMMENT Copy Clang files into build directory
|
||||
)
|
||||
|
||||
# For the developer build directory
|
||||
add_custom_command(TARGET copy_clang_to_builddir POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
-E copy_directory
|
||||
"${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}/include"
|
||||
"${PROJECT_BINARY_DIR}/${IDE_LIBEXEC_PATH}/clang/lib/clang/${CLANG_VERSION}/include"
|
||||
VERBATIM
|
||||
qtc_copy_to_builddir(copy_clang_to_builddir
|
||||
DIRECTORIES "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}/include"
|
||||
DESTINATION "${IDE_LIBEXEC_PATH}/clang/lib/clang/${CLANG_VERSION}/include"
|
||||
)
|
||||
|
||||
foreach(executable clang clang-cl clangd clang-tidy clazy-standalone)
|
||||
if (EXISTS "${LLVM_TOOLS_BINARY_DIR}/${executable}${CMAKE_EXECUTABLE_SUFFIX}")
|
||||
add_custom_command(TARGET copy_clang_to_builddir PRE_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
-E make_directory
|
||||
"${PROJECT_BINARY_DIR}/${IDE_LIBEXEC_PATH}/clang/bin/"
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
-E copy
|
||||
"${LLVM_TOOLS_BINARY_DIR}/${executable}${CMAKE_EXECUTABLE_SUFFIX}"
|
||||
"${PROJECT_BINARY_DIR}/${IDE_LIBEXEC_PATH}/clang/bin/"
|
||||
VERBATIM
|
||||
qtc_copy_to_builddir(copy_clang_${executable}_to_builddir
|
||||
FILES "${LLVM_TOOLS_BINARY_DIR}/${executable}${CMAKE_EXECUTABLE_SUFFIX}"
|
||||
DESTINATION "${IDE_LIBEXEC_PATH}/clang/bin/"
|
||||
)
|
||||
|
||||
# For the install directory
|
||||
install(PROGRAMS
|
||||
"${LLVM_TOOLS_BINARY_DIR}/${executable}${CMAKE_EXECUTABLE_SUFFIX}"
|
||||
|
10
src/share/3rdparty/CMakeLists.txt
vendored
10
src/share/3rdparty/CMakeLists.txt
vendored
@@ -3,11 +3,7 @@ install(
|
||||
DESTINATION "${IDE_DATA_PATH}"
|
||||
)
|
||||
|
||||
add_custom_target(copy_fonts_to_builddir ALL VERBATIM)
|
||||
add_custom_command(TARGET copy_fonts_to_builddir POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E copy_directory fonts
|
||||
"${PROJECT_BINARY_DIR}/${IDE_DATA_PATH}/fonts"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
COMMENT Copy files into build directory
|
||||
VERBATIM
|
||||
qtc_copy_to_builddir(copy_fonts_to_builddir
|
||||
DIRECTORIES fonts
|
||||
DESTINATION "${IDE_DATA_PATH}/fonts"
|
||||
)
|
||||
|
Reference in New Issue
Block a user