[cmake] Only set deps for an ExternalProject if the type is executable or library
authorNathan Lanza <nathan@lanza.io>
Tue, 31 Mar 2020 00:22:52 +0000 (20:22 -0400)
committerNathan Lanza <nathan@lanza.io>
Thu, 2 Apr 2020 03:29:01 +0000 (23:29 -0400)
commit7f5fe30a150e7e87d3fbe4da4ab0e76ec38b40b9
tree4cd1cc3b128f63ba72e72f5141db921d7da38bcb
parentbcd8009369f86be8649307692f5ba57aad5ca29b
[cmake] Only set deps for an ExternalProject if the type is executable or library

Summary:
cmake fails with an error when attempting to evaluate $<TARGET_FILE:tgt>
where `tgt` is defined via an `add_custom_target` and thus the `TYPE`
is `UTILITY`. Requesting a TARGET_FILE only works on an `EXECUTABLE`
or one of a few differetnt types of `X_LIBRARY` (e.g. added via
`add_library` or `add_executable`). The logic as implemented in cmake
is below:

  enum TargetType
  {
    EXECUTABLE,
    STATIC_LIBRARY,
    SHARED_LIBRARY,
    MODULE_LIBRARY,
    OBJECT_LIBRARY,
    UTILITY,
    GLOBAL_TARGET,
    INTERFACE_LIBRARY,
    UNKNOWN_LIBRARY
  };

  if (target->GetType() >= cmStateEnums::OBJECT_LIBRARY &&
      target->GetType() != cmStateEnums::UNKNOWN_LIBRARY) {
    ::reportError(context, content->GetOriginalExpression(),
                  "Target \"" + name +
                    "\" is not an executable or library.");
    return nullptr;
  }

This has always been the case back to at least 3.12 (furthest I
checked) but this is causing a new failure in cmake 3.17 while
evaluating ExternalProjectAdd.

Subscribers: mgorny, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D77284
llvm/cmake/modules/LLVMExternalProjectUtils.cmake