zhuhan0 created this revision. Herald added subscribers: ekilmer, hoy, wenlei. Herald added a project: All. zhuhan0 requested review of this revision. Herald added projects: clang, LLVM. Herald added subscribers: llvm-commits, cfe-commits.
Clang may be built in an environment where Git is not available. In our case, Clang is part of a larger monorepo which is not Git-based, and GenerateVersionFromVCS was not able to get source info. Provide options to pass in repo and revision info from cmake. cmake \ -DCLANG_VC_REPOSITORY=abc://repo.url.com \ -DCLANG_VC_REVISION=abcd1234 \ ... This would allow us to prepare the source info beforehand and pass it to the clang binary. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D148262 Files: clang/lib/Basic/CMakeLists.txt llvm/cmake/modules/GenerateVersionFromVCS.cmake Index: llvm/cmake/modules/GenerateVersionFromVCS.cmake =================================================================== --- llvm/cmake/modules/GenerateVersionFromVCS.cmake +++ llvm/cmake/modules/GenerateVersionFromVCS.cmake @@ -18,9 +18,11 @@ # Handle strange terminals set(ENV{TERM} "dumb") -function(append_info name path) - if(path) - get_source_info("${path}" revision repository) +function(append_info name path repository revision) + if (NOT repository AND NOT revision) + if(path) + get_source_info("${path}" revision repository) + endif() endif() if(revision) file(APPEND "${HEADER_FILE}.tmp" @@ -39,10 +41,14 @@ endfunction() foreach(name IN LISTS NAMES) - if(NOT DEFINED ${name}_SOURCE_DIR) - message(FATAL_ERROR "${name}_SOURCE_DIR is not defined") + if(${name}_VC_REPOSITORY AND ${name}_VC_REVISION) + append_info(${name} "" "${${name}_VC_REPOSITORY}" "${${name}_VC_REVISION}") + else() + if(NOT DEFINED ${name}_SOURCE_DIR) + message(FATAL_ERROR "${name}_SOURCE_DIR is not defined") + endif() + append_info(${name} "${${name}_SOURCE_DIR}" "" "") endif() - append_info(${name} "${${name}_SOURCE_DIR}") endforeach() # Copy the file only if it has changed. Index: clang/lib/Basic/CMakeLists.txt =================================================================== --- clang/lib/Basic/CMakeLists.txt +++ clang/lib/Basic/CMakeLists.txt @@ -17,6 +17,11 @@ if(clang_vc AND LLVM_APPEND_VC_REV) set(clang_source_dir ${CLANG_SOURCE_DIR}) endif() +if (CLANG_VC_REPOSITORY AND CLANG_VC_REVISION) + set(clang_source_dir ${CLANG_SOURCE_DIR}) + set(clang_vc_repository ${CLANG_VC_REPOSITORY}) + set(clang_vc_revision ${CLANG_VC_REVISION}) +endif() # Create custom target to generate the VC revision include. add_custom_command(OUTPUT "${version_inc}" @@ -24,6 +29,8 @@ COMMAND ${CMAKE_COMMAND} "-DNAMES=\"LLVM;CLANG\"" "-DLLVM_SOURCE_DIR=${llvm_source_dir}" "-DCLANG_SOURCE_DIR=${clang_source_dir}" + "-DCLANG_VC_REPOSITORY=${clang_vc_repository}" + "-DCLANG_VC_REVISION=${clang_vc_revision}" "-DHEADER_FILE=${version_inc}" -P "${generate_vcs_version_script}")
Index: llvm/cmake/modules/GenerateVersionFromVCS.cmake =================================================================== --- llvm/cmake/modules/GenerateVersionFromVCS.cmake +++ llvm/cmake/modules/GenerateVersionFromVCS.cmake @@ -18,9 +18,11 @@ # Handle strange terminals set(ENV{TERM} "dumb") -function(append_info name path) - if(path) - get_source_info("${path}" revision repository) +function(append_info name path repository revision) + if (NOT repository AND NOT revision) + if(path) + get_source_info("${path}" revision repository) + endif() endif() if(revision) file(APPEND "${HEADER_FILE}.tmp" @@ -39,10 +41,14 @@ endfunction() foreach(name IN LISTS NAMES) - if(NOT DEFINED ${name}_SOURCE_DIR) - message(FATAL_ERROR "${name}_SOURCE_DIR is not defined") + if(${name}_VC_REPOSITORY AND ${name}_VC_REVISION) + append_info(${name} "" "${${name}_VC_REPOSITORY}" "${${name}_VC_REVISION}") + else() + if(NOT DEFINED ${name}_SOURCE_DIR) + message(FATAL_ERROR "${name}_SOURCE_DIR is not defined") + endif() + append_info(${name} "${${name}_SOURCE_DIR}" "" "") endif() - append_info(${name} "${${name}_SOURCE_DIR}") endforeach() # Copy the file only if it has changed. Index: clang/lib/Basic/CMakeLists.txt =================================================================== --- clang/lib/Basic/CMakeLists.txt +++ clang/lib/Basic/CMakeLists.txt @@ -17,6 +17,11 @@ if(clang_vc AND LLVM_APPEND_VC_REV) set(clang_source_dir ${CLANG_SOURCE_DIR}) endif() +if (CLANG_VC_REPOSITORY AND CLANG_VC_REVISION) + set(clang_source_dir ${CLANG_SOURCE_DIR}) + set(clang_vc_repository ${CLANG_VC_REPOSITORY}) + set(clang_vc_revision ${CLANG_VC_REVISION}) +endif() # Create custom target to generate the VC revision include. add_custom_command(OUTPUT "${version_inc}" @@ -24,6 +29,8 @@ COMMAND ${CMAKE_COMMAND} "-DNAMES=\"LLVM;CLANG\"" "-DLLVM_SOURCE_DIR=${llvm_source_dir}" "-DCLANG_SOURCE_DIR=${clang_source_dir}" + "-DCLANG_VC_REPOSITORY=${clang_vc_repository}" + "-DCLANG_VC_REVISION=${clang_vc_revision}" "-DHEADER_FILE=${version_inc}" -P "${generate_vcs_version_script}")
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits