This is an archive of the discontinued LLVM Phabricator instance.

[CUDA] correctly install cuda_wrappers/bits/shared_ptr_base.h
ClosedPublic

Authored by tra on May 25 2023, 2:24 PM.

Details

Summary

The file must go under cuda_wrappers/bits/, but was copied
directly into cuda_wrappers/ during installation.

https://github.com/llvm/llvm-project/issues/62939

Diff Detail

Event Timeline

tra created this revision.May 25 2023, 2:24 PM
Herald added a project: Restricted Project. · View Herald TranscriptMay 25 2023, 2:24 PM
tra published this revision for review.May 25 2023, 2:30 PM
tra edited the summary of this revision. (Show Details)
tra edited the summary of this revision. (Show Details)
tra added reviewers: qiongsiwu1, jlebar.
Herald added a project: Restricted Project. · View Herald Transcript
jlebar accepted this revision.May 25 2023, 4:18 PM
This revision is now accepted and ready to land.May 25 2023, 4:18 PM
qiongsiwu1 added inline comments.May 26 2023, 1:06 PM
clang/lib/Headers/CMakeLists.txt
516

Do we need an install target for ${cuda_wrapper_bits_files} for the cuda-resource-headers component as well? It seems to be the case because this patch is treating ${cuda_wrapper_bits_files} as part of cuda-resource-headers.

add_header_target("cuda-resource-headers" "${cuda_files};${cuda_wrapper_files};${cuda_wrapper_bits_files}")
tra added inline comments.May 26 2023, 2:16 PM
clang/lib/Headers/CMakeLists.txt
516

I'm not sure I understand the question. Are you saying that a separate install() for the 'bits' is not necessary and we could just install all headers with a single install above?

If that's the case, then, AFAICT, the answer is that we do need a separate install.
install(FILES) does not preserve the directory structure and dumps all files listed in FILES, regardless if they are in different directories into the same DESTINATION directory.
That is exactly the problem this patch is intended to fix. We do need to place the file under cuda_wrappers/bits/ directory and that's why we have separate install(DESTINATION ${header_install_dir}/cuda_wrappers/bits) here.

install(DIRECTORY) would presumably preserve the source directory structure, but we lose per-file granularity. It may work for the files under cuda_wrappers for now, but I think there's some merit in explicitly controlling which headers we ship and where we put them. While we do have 1:1 mapping between the source tree and install tree, it may not always be the case.

qiongsiwu1 added inline comments.May 26 2023, 4:37 PM
clang/lib/Headers/CMakeLists.txt
516

Ah sorry for the confusion.

Are you saying that a separate install() for the 'bits' is not necessary and we could just install all headers with a single install above?

No I am trying to say the opposite. I am suggesting we add the separate install target as a component of clang-resource-headers and as a component of cuda-resource-headers, as shown in the code change suggested in the comment above. I am not suggesting any code form this patch to be removed. The cuda-resource-headers can be used to install the cuda related headers only, in the case when a user do not want to install all the headers (e.g. if a user only want to install support for Intel and Nvidia headers, but not the PowerPC headers, the user can select core-resource-headers, x86_files and cuda-resource-headers during a distribution build/install). I think without the code change suggested above, if a user select to install cuda-resource-headers only without specifying clang-resource-headers, we will miss the file cuda_wrappers/bits/shared_ptr_base.h.

qiongsiwu1 added inline comments.May 26 2023, 4:40 PM
clang/lib/Headers/CMakeLists.txt
516

Sorry I made a typo in the previous comment. I meant x86-resource-headers when I said x86_files.

tra updated this revision to Diff 526227.May 26 2023, 5:59 PM

Verified that install works correctly with
individual component installations:

cmake -DCOMPONENT=cuda-resource-headers -P ./cmake_install.cmake
cmake -DCOMPONENT=clang-resource-headers -P ./cmake_install.cmake
tra added inline comments.May 26 2023, 6:00 PM
clang/lib/Headers/CMakeLists.txt
516

I think understand now.
cmake -DCOMPONENT=cuda-resource-headers -P ./cmake_install.cmake indeed does not install the bits component.

I've added the install with COMPONENT clang-resource-headers and verified that the bits header is installed during individual component installation.

qiongsiwu1 added inline comments.May 29 2023, 6:27 AM
clang/lib/Headers/CMakeLists.txt
516

Thanks for the changes! One thing I realized after seeing the most recent update is that I mixed up the term "install target" with "install rules" in my previous comments. Apologies for the confusion.

I think we will need the following new target code only if we intend to specify cuda-resource-bits-headers as a separate installation target (e.g. if we do cmake -DCOMPONENT=cuda-resource-bits-headers -P ./cmake_install.cmake).

add_header_target("cuda-resource-bits-headers" "${cuda_wrapper_bits_files}")
add_dependencies("clang-resource-headers"
                  ... 
                  "cuda-resource-bits-headers"
                 ...
add_llvm_install_targets(install-cuda-resource-bits-headers
                         DEPENDS cuda-resource-bits-headers
                        COMPONENT cuda-resource-headers)

In other words, we do not need these three code changes above if we do not intend to install cuda-resource-bits-headers as a standalone target. If our intention is to always use it as a component of cuda-resource-headers, adding install rule

install(
   FILES ${cuda_wrapper_bits_files}
   DESTINATION ${header_install_dir}/cuda_wrappers/bits
   EXCLUDE_FROM_ALL
   COMPONENT cuda-resource-headers)

should be sufficient when installing cuda-resource-headers by itself. We still need the install rule for clang-resource-headers which was initially added and is still necessary. I tested the installation without the extra targets but with the rule and it seems to work as intended.

My suggestion is that we can remove the new targets if we do not intend to install cuda-resource-bits-headers as a standalone component.

tra updated this revision to Diff 526697.May 30 2023, 10:13 AM

Updated according to comments.

tra added a comment.May 30 2023, 10:16 AM

@qiongsiwu1 : I've updated the patch. PTAL.

qiongsiwu1 accepted this revision.May 30 2023, 10:31 AM

@qiongsiwu1 : I've updated the patch. PTAL.

LGTM! Thank you!

This revision was landed with ongoing or failed builds.May 30 2023, 10:45 AM
This revision was automatically updated to reflect the committed changes.