[all-commits] [llvm/llvm-project] f1edee: [llvm][CMake] Improve error message for unknown or...

David Spickett via All-commits all-commits at lists.llvm.org
Thu Aug 17 06:34:52 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: f1edee437b6b0964ce893363479f35c6bbb4a1f0
      https://github.com/llvm/llvm-project/commit/f1edee437b6b0964ce893363479f35c6bbb4a1f0
  Author: David Spickett <david.spickett at linaro.org>
  Date:   2023-08-17 (Thu, 17 Aug 2023)

  Changed paths:
    M llvm/CMakeLists.txt

  Log Message:
  -----------
  [llvm][CMake] Improve error message for unknown or experimental targets

Previously you would get this error when passing an experimental target
via LLVM_TARGETS_TO_BUILD:
```
cmake ../llvm-project/llvm -DLLVM_TARGETS_TO_BUILD=M68k -DCMAKE_BU
ILD_TYPE=Release -GNinja

CMake Error at CMakeLists.txt:929 (message):
  The target `M68k' is experimental and must be passed via
  LLVM_EXPERIMENTAL_TARGETS_TO_BUILD
```

Since M68k is a known experimental target, this is helpful. However,
any made up target name would give you the same error.
```
cmake ../llvm-project/llvm -DLLVM_TARGETS_TO_BUILD=NotATarget -DCMAKE_BUILD_TYPE=Release -GNinja

CMake Error at CMakeLists.txt:929 (message):
  The target `NotATarget' is experimental and must be passed via
  LLVM_EXPERIMENTAL_TARGETS_TO_BUILD.
```

We know the set of default targets and in tree experimental targets,
so let's be more specific if we know that it is not an in tree experimental
target:
```
CMake Error at CMakeLists.txt:934 (message):
  The target `NotATarget' is not a default target.  It may be experimental,
  if so it must be passed via LLVM_EXPERIMENTAL_TARGETS_TO_BUILD.

  Core tier targets:
  AArch64;AMDGPU;ARM;AVR;BPF;Hexagon;Lanai;LoongArch;Mips;MSP430;NVPTX;PowerPC;RISCV;Sparc;SystemZ;VE;WebAssembly;X86;XCore

  Known experimental targets: ARC;CSKY;DirectX;M68k;SPIRV;Xtensa
```

It "may" be an experimental target because we do allow users to specify
targets that are not in LLVM_ALL_EXPERIMENTAL_TARGETS, and they will work
as long as lib/Target/<target> exists.

Maybe that could be made more strict but it would break a bunch of
forks for not much gain.

The known target names are listed to help users trying to configure
architectures with confusing naming schemes, for example Arm. Which is
variously called ARM/Arm/Armv7/AArch32 across llvm and other software.

Reviewed By: beanz

Differential Revision: https://reviews.llvm.org/D157844




More information about the All-commits mailing list