Skip to content

Commit

Permalink
Second try: [clang][cmake] Add options to pass in vcs repo and revisi…
Browse files Browse the repository at this point in the history
…on info

V2: Fix cmake error when -DLLVM_APPEND_VC_REV=OFF

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.

Differential Revision: https://reviews.llvm.org/D148262
  • Loading branch information
zhuhan0 committed Apr 17, 2023
1 parent 932d7b9 commit ee68f61
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
14 changes: 14 additions & 0 deletions clang/lib/Basic/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,31 @@ set(generate_vcs_version_script "${LLVM_CMAKE_DIR}/GenerateVersionFromVCS.cmake"
if(llvm_vc AND LLVM_APPEND_VC_REV)
set(llvm_source_dir ${LLVM_MAIN_SRC_DIR})
endif()
if (LLVM_VC_REPOSITORY AND LLVM_VC_REVISION)
set(llvm_source_dir ${LLVM_SOURCE_DIR})
set(llvm_vc_repository ${LLVM_VC_REPOSITORY})
set(llvm_vc_revision ${LLVM_VC_REVISION})
endif()
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}"
DEPENDS "${llvm_vc}" "${clang_vc}" "${generate_vcs_version_script}"
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}"
"-DLLVM_VC_REPOSITORY=${llvm_vc_repository}"
"-DLLVM_VC_REVISION=${llvm_vc_revision}"
-P "${generate_vcs_version_script}")

# Mark the generated header as being generated.
Expand Down
16 changes: 10 additions & 6 deletions llvm/cmake/modules/GenerateVersionFromVCS.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,7 @@ include(VersionFromVCS)
# Handle strange terminals
set(ENV{TERM} "dumb")

function(append_info name path)
if(path)
get_source_info("${path}" revision repository)
endif()
function(append_info name revision repository)
if(revision)
file(APPEND "${HEADER_FILE}.tmp"
"#define ${name}_REVISION \"${revision}\"\n")
Expand All @@ -39,10 +36,17 @@ function(append_info name path)
endfunction()

foreach(name IN LISTS NAMES)
if(NOT DEFINED ${name}_SOURCE_DIR)
if(${name}_VC_REPOSITORY AND ${name}_VC_REVISION)
set(revision ${${name}_VC_REVISION})
set(repository ${${name}_VC_REPOSITORY})
elseif(DEFINED ${name}_SOURCE_DIR)
if (${name}_SOURCE_DIR)
get_source_info("${${name}_SOURCE_DIR}" revision repository)
endif()
else()
message(FATAL_ERROR "${name}_SOURCE_DIR is not defined")
endif()
append_info(${name} "${${name}_SOURCE_DIR}")
append_info(${name} "${revision}" "${repository}")
endforeach()

# Copy the file only if it has changed.
Expand Down

0 comments on commit ee68f61

Please sign in to comment.