The detection of supported platform (os) architectures for Darwin relies
on the darwin_test_archs() CMake function. This is used both for
building the builtins (builtin-config-ix.cmake) and for the rest of
the compiler-rt (config-ix.cmake).
darwin_test_archs() implements a cache, presumably to speed up CMake
re-configures. Unfortunately this caching is buggy because it depends
on external global state (i.e. the TEST_COMPILE_ONLY variable) and
this is not taken into account. For config-ix.cmake
TEST_COMPILE_ONLY is not set and for builtin-config-ix.cmake
TEST_COMPILE_ONLY is set to On. This makes the
darwin_test_archs() function racey in the sense that a call from one
calling context will poison the cache for the other calling context.
This is actually an issue George Karpenkov discovered a while back
and had an incomplete patch for (https://reviews.llvm.org/D45337)
but this was never merged.
To workaround this, this patch switches to using a different set of
variables for the platform architecture builtins, i.e.
DARWIN_<OS>_ARCHS -> DARWIN_<OS>_BUILTIN_ARCHS. This avoids the
cache poisoning problem because the cached variable names are different.
This also has the advantage that the the configured architectures for
builtins and the rest of the compiler-rt are now independent and
can be set differently if necessary.
rdar://problem/48637491