This patch contains the initial support for building LLVM's libc as a
target for the GPU. Currently this only supports a handful of very basic
functions that can be implemented without an operating system. The GPU
code is build using the existing OpenMP toolchain. This allows us to
minimally change the existing codebase and get a functioning static
library. This patch allows users to create a static library called
libcgpu.a that contains fat binaries containing device IR.
Current limitations are the lack of test support and the fact that only
one target OS can be built at a time. That is, the user cannot get a
libc for Linux and one for the GPU simultaneously.
This introduces two new CMake variables to control the behavior
LLVM_LIBC_TARET_OS is exported so the user can now specify it to equal
"gpu". LLVM_LIBC_GPU_ARCHITECTURES is also used to configure how
many targets to build for at once.
Depends on D138607