[cfe-dev] Not setting -fms-compatibility-version= when -fno-ms-compatibility is set
Martin Storsjö via cfe-dev
cfe-dev at lists.llvm.org
Fri Feb 7 14:26:24 PST 2020
On Fri, 7 Feb 2020, Petr Hosek via cfe-dev wrote:
> I'm trying to use Clang to cross-compile runtimes for Fuchsia on Windows.
> The problem I'm hitting is that CMake checks the existence of _MSC_VER
> macro, and if set it detects the compiler as "Clang with GNU-like command
> line" which is a special mode in which CMake treats clang as clang-cl. This
> breaks cross-compilation for runtimes because CMake no longer passes
> --target= flag even if CMAKE_*_COMPILER_TARGET is set, etc. because of thislogic: https://github.com/Kitware/CMake/blob/master/Modules/Compiler/Clang.
> cmake#L13
> This is IMHO a bug in CMake: it shouldn't blindly assume that Clang is
> clang-cl without first consulting other variables
> like CMAKE_*_COMPILER_TARGET or CMAKE_SYSTEM_NAME, but I'm not sure how easy
> or difficult would it be to change CMake, and even then we would have a
> problem with rolling out new CMake version everywhere.
This sounds like an issue with how CMake does compiler identification in
mode advanced setups; I've often run into issues where I'd like to
configure with something like CMAKE_C_COMPILER=clang
CMAKE_C_FLAGS="-target <other-system-tuple>", but it first does all the
compiler identification steps only with ${CMAKE_C_COMPILER} in isolation.
This is much more straightforward with GCC like cross compilers, where one
would have CMAKE_C_COMPILER=<other-system-tuple>-gcc. For that case iirc I
managed it to behave correctly by using CMAKE_C_FLAGS_INIT="-target
<other-system-tuple>", which ensures that the flag is used along with
CMAKE_C_COMPILER even for the very first compiler identification steps.
However, I'm not very proficient with CMake, I'm just fumblingly trying to
make things work for me.
// Martin
More information about the cfe-dev
mailing list