Martin Storsjö via llvm-dev
2021-Mar-11 07:27 UTC
[llvm-dev] Should the compiler-rt builtins be configured with CMAKE_TRY_COMPILE_TARGET_TYPE?
Hi, On Thu, 11 Mar 2021, Shoaib Meenai via llvm-dev wrote:> What’s happening is that the configuration for the builtins for Android > tests for all supported architectures [1], using check_symbol_exists to > check for the architecture’s preprocessor macro [2]. check_symbol_exists > tries to link a test executable, which fails because my just-built > compiler doesn’t have compiler-rt yet (since it’s trying to build > compiler-rt). Consequently, the builtins don’t think that any > architectures are supported, and just don’t build anything as a result. > > > > Other places in the builtins’ CMake logic use custom functions like > try_compile_only to only test compilation and not linking, to avoid issues > like this. My understanding is that the builtins will never be built as > shared libraries. The build already instructs its custom test macros to > always only check compilation [3]; now that we’re on a newer CMake version, > would it be appropriate to always set CMAKE_TRY_COMPILE_TARGET_TYPE to > STATIC_LIBRARY for the builtins as well, so that all CMake checks build > static libraries (which has the same effect of only testing compilation and > not linking)? We could also probably clean up a lot of the custom logic for > only checking compilation afterwards.These kinds of chicken-and-egg problems are all over building the runtimes, and when building the initial copy of runtime libraries, there's some amount of trickery needed to pass such tests. In most of the cases where I build runtimes, I've had to add -DCMAKE_C_COMPILER_WORKS=TRUE -DCMAKE_CXX_COMPILER_WORKS=TRUE, but iirc one of such cases for compiler-rt could be removed if we'd set CMAKE_TRY_COMPILE_TARGET_TYPE to STATIC_LIBRARY. (For libunwind/libcxxabi/libcxx, things were more complicated though, I think.) I actually sent a patch to this effect a couple months ago, have a look at [1]. That one was only aimed at standalone builds of compiler-rt/lib/builtins, but maybe it could be generalized to some other location as well. For non-standalone builds, I guess the option would have to be cleared after processing the current project? // Martin [1] https://reviews.llvm.org/D91334
Petr Hosek via llvm-dev
2021-Mar-11 07:34 UTC
[llvm-dev] Should the compiler-rt builtins be configured with CMAKE_TRY_COMPILE_TARGET_TYPE?
I was actually wondering if we could go further and set this not just for builtins but also for the runtimes build. In the runtimes build, we link shared libraries like libunwind, libc++abi, libc++ and some of the sanitizers, but it's not clear to me if this would cause any issues. We have a few check_library_exists calls but most of them are checking libraries like libc, libm, libdl, librt? Even C libraries that don't provide these as separate libraries like musl typically provide linker scripts for backwards compatibility. Would any of the currently supported platforms break if we started linking those libraries unconditionally? Alternatively, we could also consider replacing the use of -nodefaultlibs with -nostdlib++ and letting the compiler driver handle this, but GCC as far as I'm aware doesn't yet support that flag so we would need a fallback (we could set CMAKE_TRY_COMPILE_TARGET_TYPE to STATIC_LIBRARY and -nostdlib++ only for Clang, and keeping the existing behavior for GCC, but it might increase the complexity). On Wed, Mar 10, 2021 at 11:27 PM Martin Storsjö via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hi, > > On Thu, 11 Mar 2021, Shoaib Meenai via llvm-dev wrote: > > > What’s happening is that the configuration for the builtins for Android > > tests for all supported architectures [1], using check_symbol_exists to > > check for the architecture’s preprocessor macro [2]. check_symbol_exists > > tries to link a test executable, which fails because my just-built > > compiler doesn’t have compiler-rt yet (since it’s trying to build > > compiler-rt). Consequently, the builtins don’t think that any > > architectures are supported, and just don’t build anything as a result. > > > > > > > > Other places in the builtins’ CMake logic use custom functions like > > try_compile_only to only test compilation and not linking, to avoid > issues > > like this. My understanding is that the builtins will never be built as > > shared libraries. The build already instructs its custom test macros to > > always only check compilation [3]; now that we’re on a newer CMake > version, > > would it be appropriate to always set CMAKE_TRY_COMPILE_TARGET_TYPE to > > STATIC_LIBRARY for the builtins as well, so that all CMake checks build > > static libraries (which has the same effect of only testing compilation > and > > not linking)? We could also probably clean up a lot of the custom logic > for > > only checking compilation afterwards. > > These kinds of chicken-and-egg problems are all over building the > runtimes, and when building the initial copy of runtime libraries, there's > some amount of trickery needed to pass such tests. > > In most of the cases where I build runtimes, I've had to add > -DCMAKE_C_COMPILER_WORKS=TRUE -DCMAKE_CXX_COMPILER_WORKS=TRUE, but iirc > one of such cases for compiler-rt could be removed if we'd set > CMAKE_TRY_COMPILE_TARGET_TYPE to STATIC_LIBRARY. (For > libunwind/libcxxabi/libcxx, things were more complicated though, I think.) > > I actually sent a patch to this effect a couple months ago, have a look at > [1]. That one was only aimed at standalone builds of > compiler-rt/lib/builtins, but maybe it could be generalized to some other > location as well. For non-standalone builds, I guess the option would have > to be cleared after processing the current project? > > // Martin > > [1] https://reviews.llvm.org/D91334 > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210310/955bb3bd/attachment.html> -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 3996 bytes Desc: S/MIME Cryptographic Signature URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210310/955bb3bd/attachment.bin>