sgraenitz added a comment.

In D56531#1352298 <https://reviews.llvm.org/D56531#1352298>, @mgorny wrote:

> Please don't risk merging this before the branching.


+1
The official branch goal is Wednesday this week.



================
Comment at: cmake/modules/LLDBStandalone.cmake:9
+  find_package(LLVM REQUIRED CONFIG
+    HINTS "${LLDB_PATH_TO_LLVM_BUILD}" NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+  find_package(Clang REQUIRED CONFIG
----------------
xiaobai wrote:
> sgraenitz wrote:
> > xiaobai wrote:
> > > mgorny wrote:
> > > > labath wrote:
> > > > > xiaobai wrote:
> > > > > > labath wrote:
> > > > > > > Why do you put `NO_DEFAULT_PATH` here? IIUC, the user will now 
> > > > > > > have to specify `LLDB_PATH_TO_LLVM_BUILD` in order to build this, 
> > > > > > > whereas previously llvm-config would be found on the path if it 
> > > > > > > happened to be there (e.g. because it was already installed).
> > > > > > > 
> > > > > > > Would it not make sense to keep this behavior?
> > > > > > In situations where you have multiple LLVM builds where each might 
> > > > > > be a different version of LLVM, I think it is better to force the 
> > > > > > user to specify which LLVM build they want to use instead of having 
> > > > > > them implicitly rely on whichever llvm-config happens to be in 
> > > > > > their path.
> > > > > > 
> > > > > > That being said, I would be willing to remove `NO_DEFAULT_PATH` 
> > > > > > here. I can understand if people find this behavior valuable or if 
> > > > > > the scenario I described is not very common.
> > > > > I don't actually use the standalone build, so I don't care about this 
> > > > > too much. I just mentioned this because this is the default behavior 
> > > > > when searching for packages (as well as the previous behavior when we 
> > > > > searched for llvm-config). However, it is true that we are 
> > > > > version-locked much more tightly with llvm than with any of the other 
> > > > > packages we search for with find_package.
> > > > > 
> > > > > The other thing that bugs me about the 
> > > > > LLDB_PATH_TO_(LLVM|CLANG)_BUILD variables is that they seem to imply 
> > > > > that you should point them to the build tree of llvm/clang. However, 
> > > > > it should be possible to build lldb against an already-installed 
> > > > > llvm, right (in which case they will likely have the same value)? In 
> > > > > either case, I think it would be nice to explicitly declare these as 
> > > > > a cache variable, if only so we can provide a docstring for them.
> > > > In situations when you have multiple versions of LLVM in PATH, you 
> > > > usually set PATH in the order you want it to be used. And you really 
> > > > don't like when projects try to second-guess you.
> > > @labath: When I wrote this I thought that it is possible to build against 
> > > an installed LLVM, but I don't think that's currently possible. For 
> > > example, `LLVM_MAIN_INCLUDE_DIR` should be set to the include directory 
> > > in the LLVM source tree. TableGen.cmake adds the path in this variable to 
> > > the include path when it invokes llvm-tablegen. This is exposed in the 
> > > LLVM CMake package as `LLVM_BUILD_MAIN_INCLUDE_DIR` but only when you're 
> > > using an LLVM build tree. The reason you need this is 
> > > `tools/driver/Options.td` includes `"llvm/Option/OptParser.td"`, which 
> > > does not get put into the include directory of your LLVM build/install.
> > > 
> > > Maybe I should rewrite part of this to make it clearer that you need a 
> > > build tree and not an llvm install? Declaring the variables as cache 
> > > variables is a good idea nonetheless.
> > > 
> > > @mgorny: It seems like you find the behavior valuable so I will remove 
> > > `NO_DEFAULT_PATH`. CMake processes the `HINTS` before searching your 
> > > `PATH` regardles, so if you set `LLDB_PATH_TO_${PROJECT}_BUILD` then it 
> > > will use that instead of using whatever it finds in your `PATH`.
> > Is it that instead of `-DLLVM_CONFIG=/path/to/llvm-build/bin/llvm-config` 
> > we would now pass `-DLLDB_PATH_TO_LLVM_BUILD=/path/to/llvm-build`?
> > 
> > > LLDB_PATH_TO_(LLVM|CLANG)_BUILD variables [...] they will likely have the 
> > > same value?
> > 
> > In my understanding this was always required. Did you try pointing 
> > `LLDB_PATH_TO_CLANG_BUILD` to a standalone build of Clang? Is there a good 
> > use-case for it? How do we detect that this Clang builds against the same 
> > LLVM build-tree?
> > 
> > When using LLVM/Clang/etc. as a dependency in external projects I usually 
> > followed the advice in 
> > https://www.llvm.org/docs/CMake.html#embedding-llvm-in-your-project:
> > > If LLVM is not installed or you wish to build directly against the LLVM 
> > > build tree you can use LLVM_DIR as previously mentioned.
> > 
> > That would be quite simple and `find_package(LLVM)` accepts `LLVM_DIR` as 
> > an input. Did you check how the other subproject do that?
> >Is it that instead of -DLLVM_CONFIG=/path/to/llvm-build/bin/llvm-config we 
> >would now pass -DLLDB_PATH_TO_LLVM_BUILD=/path/to/llvm-build?
> 
> Correct.
> 
> >In my understanding this was always required. Did you try pointing 
> >LLDB_PATH_TO_CLANG_BUILD to a standalone build of Clang? Is there a good 
> >use-case for it? How do we detect that this Clang builds against the same 
> >LLVM build-tree?
> 
> I did not try doing it with a standalone build of Clang. I'm not sure if 
> there is a good use-case for it, but if somebody knows then I'd like to hear 
> about it. I am aware that it is possible to do a standalone build of Clang 
> but I usually do integrated builds.
> 
> As for detecting whether or not the Clang builds against the same LLVM tree, 
> I'm not sure if that's possible currently with the way LLVM and Clang's CMake 
> packages are set up.
> 
> > That would be quite simple and find_package(LLVM) accepts LLVM_DIR as an 
> > input. Did you check how the other subproject do that?
> 
> The other subprojects that I have looked at (clang, lld) have the current 
> behavior of using llvm-config, which I think repeats a lot of work. Ideally 
> the other projects would use the LLVM CMake package as well imo.
> 
> As for assigning LLVM_DIR directly, that is something that you could do. Even 
> if I submitted this patch today as-is, setting LLVM_DIR directly would ignore 
> `LLDB_PATH_TO_LLVM_BUILD` entirely. I would prefer still having the `HINTS` 
> mechanism because it can take a list of directories. This is especially 
> useful on build machines where the LLVM build can be found in one of a few 
> possible locations. I also believe that the variable 
> `LLDB_PATH_TO_LLVM_BUILD` is a little easier to understand than `LLVM_DIR` 
> for people trying to figure out how to build LLDB. I see these two solutions 
> as the same in every other regard though.
Sounds good to me. It would be nice if `LLDB_PATH_TO_LLVM_BUILD` is sufficient 
for the regular case of having LLVM & Clang in one build tree.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D56531/new/

https://reviews.llvm.org/D56531



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to