diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 9f14561fe0a6f..f16f63c32c95f 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -2118,7 +2118,13 @@ function(find_first_existing_vc_file path out_var) get_filename_component(git_dir ${git_output} ABSOLUTE BASE_DIR ${path}) # Some branchless cases (e.g. 'repo') may not yet have .git/logs/HEAD if (NOT EXISTS "${git_dir}/logs/HEAD") - file(WRITE "${git_dir}/logs/HEAD" "") + execute_process(COMMAND ${CMAKE_COMMAND} -E touch HEAD + WORKING_DIRECTORY "${git_dir}/logs" + RESULT_VARIABLE touch_head_result + ERROR_QUIET) + if (NOT touch_head_result EQUAL 0) + return() + endif() endif() set(${out_var} "${git_dir}/logs/HEAD" PARENT_SCOPE) endif() diff --git a/llvm/include/llvm/Support/CMakeLists.txt b/llvm/include/llvm/Support/CMakeLists.txt index 680be8fdf3911..da8a4da443edf 100644 --- a/llvm/include/llvm/Support/CMakeLists.txt +++ b/llvm/include/llvm/Support/CMakeLists.txt @@ -5,12 +5,19 @@ set(version_inc "${CMAKE_CURRENT_BINARY_DIR}/VCSRevision.h") set(generate_vcs_version_script "${LLVM_CMAKE_PATH}/GenerateVersionFromVCS.cmake") -if(llvm_vc AND LLVM_APPEND_VC_REV) +if(LLVM_APPEND_VC_REV) set(llvm_source_dir ${LLVM_MAIN_SRC_DIR}) + + # A fake version file and is not expected to exist. It is being used to + # force regeneration of VCSRevision.h for source directory with no write + # permission available. + if (NOT llvm_vc) + set(fake_version_inc "${CMAKE_CURRENT_BINARY_DIR}/__FakeVCSRevision.h") + endif() endif() # Create custom target to generate the VC revision include. -add_custom_command(OUTPUT "${version_inc}" +add_custom_command(OUTPUT "${version_inc}" "${fake_version_inc}" DEPENDS "${llvm_vc}" "${generate_vcs_version_script}" COMMAND ${CMAKE_COMMAND} "-DNAMES=LLVM" "-DLLVM_SOURCE_DIR=${llvm_source_dir}" @@ -22,5 +29,5 @@ set_source_files_properties("${version_inc}" PROPERTIES GENERATED TRUE HEADER_FILE_ONLY TRUE) -add_custom_target(llvm_vcsrevision_h DEPENDS "${version_inc}") +add_custom_target(llvm_vcsrevision_h ALL DEPENDS "${version_inc}" "${fake_version_inc}") set_target_properties(llvm_vcsrevision_h PROPERTIES FOLDER "Misc")