<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p dir="ltr">> -DCROSS_TOOLCHAIN_FLAGS_NATIVE=-DCMAKE_TOOLCHAIN_FILE=/path/to/NATIVE.cmake</p>
<p dir="ltr">Brilliant. That worked, and was apparently all I was missing. I could have sworn I tried something like this, but apparently not.</p>
<p dir="ltr">For completeness, my NATIVE.cmake toolchain file is just:</p>
<p dir="ltr">set(CMAKE_C_COMPILER cc)<br>
set(CMAKE_CXX_COMPILER c++)</p>
<p dir="ltr">Thanks Justin!</p>
<br>
<br>
<br>
<div class="gmail_quote">On Thu, Feb 11, 2016 at 11:55 AM -0800, "Justin Bogner" <span dir="ltr">
<<a href="mailto:mail@justinbogner.com" target="_blank">mail@justinbogner.com</a>></span> wrote:<br>
<br>
</div>
<div class="BodyFragment">
<div class="PlainText">Tony Kelman via llvm-dev <llvm-dev@lists.llvm.org> writes:<br>
> I need to build libLLVM (individual static libraries are fine at the<br>
> moment) using mingw-w64 cross compilers, i686-w64-mingw32-gcc and<br>
> (separately) x86_64-w64-mingw32-gcc. I'd like this to work from both<br>
> Linux and Cygwin build environments. With autotools, this worked fine:<br>
> ../configure --host=i686-w64-mingw32 and that's it (with mingw32-gcc-c++<br>
> installed on Fedora 23, also works fine on Ubuntu, Cygwin, etc).<br>
> I'm trying to recreate this with cmake so we don't get stuck on 3.8<br>
> indefinitely. Here's what I've got so far:<br>
><br>
> cmake .. -DCMAKE_C_COMPILER=/usr/bin/i686-w64-mingw32-gcc \<br>
>   -DCMAKE_CXX_COMPILER=/usr/bin/i686-w64-mingw32-g++ \<br>
>   -DCMAKE_SYSTEM_NAME=Windows \<br>
>   -DCMAKE_RC_COMPILER=/usr/bin/i686-w64-mingw32-windres<br>
> # (some older versions of cmake have issues if you don't<br>
> # specify an absolute path to windres)<br>
><br>
> When this gets to "Configuring NATIVE targets" it calls cmake again<br>
> trying to use the same mingw compilers, but without CMAKE_SYSTEM_NAME<br>
> set so it doesn't succeed in configuring. During the build I then get<br>
> a "No rule to make target 'LLVMSupport'.  Stop." Full build log is at<br>
> <a href="http://sprunge.us/bCUU">http://sprunge.us/bCUU</a><br>
><br>
> I'd like to go with the default behavior of building a native version<br>
> of TableGen, but the way that's currently set up in cmake isn't working<br>
> here. I'm looking at cmake/modules/CrossCompile.cmake (and I think<br>
> "toochain" on the first line is a typo?) and trying to figure out how<br>
> to make its call to execute_process(COMMAND ${CMAKE_COMMAND} ...) not<br>
> inherit the top-level settings for CMAKE_C_COMPILER etc from the cross<br>
> build. Any ideas? I've tried moving my mingw settings from the command<br>
> line to a toolchain file but that hasn't done anything different so far.<br>
> I've also tried specifically creating a native toolchain file and<br>
> tweaking the call to llvm_create_cross_target_internal at the end of<br>
> CrossCompile.cmake to use it, but that hasn't worked either - keeps giving<br>
> Could not find toolchain file: "/home/llvm/cmake/platforms/NATIVE.cmake"<br>
<br>
Looks like the (unreachable due to the toochain typo) cmake code to set<br>
the native toolchain file is buggy - it's failing to find the file<br>
because it thinks the quotes are part of the file name. This:<br>
<br>
    set(CROSS_TOOLCHAIN_FLAGS_${target_name} <br>
        -DCMAKE_TOOLCHAIN_FILE=\"${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake\"<br>
<br>
should probably say this:<br>
<br>
    set(CROSS_TOOLCHAIN_FLAGS_${target_name} <br>
        -DCMAKE_TOOLCHAIN_FILE=${LLVM_MAIN_SRC_DIR}/cmake/platforms/${toolchain}.cmake<br>
<br>
You could probably also try out your native toolchain file without<br>
changing CrossCompile.cmake by setting CROSS_TOOLCHAIN_FLAGS_NATIVE on<br>
your cmake command line:<br>
<br>
  cmake .. -DCMAKE_C_COMPILER=/usr/bin/i686-w64-mingw32-gcc \<br>
    -DCMAKE_CXX_COMPILER=/usr/bin/i686-w64-mingw32-g++ \<br>
    -DCMAKE_SYSTEM_NAME=Windows \<br>
    -DCMAKE_RC_COMPILER=/usr/bin/i686-w64-mingw32-windres \<br>
    -DCROSS_TOOLCHAIN_FLAGS_NATIVE=-DCMAKE_TOOLCHAIN_FILE=/path/to/NATIVE.cmake<br>
<br>
If that helps, we should probably figure out a more general way to pass<br>
in or find the native toolchain - it's kind of haphazard right now.<br>
<br>
Finally, if you need a workaround to get things going you can probably<br>
configure and build tablegen in another build directory (just run cmake<br>
like you're building for the host and build the llvm-tblgen target).<br>
This can then be passed in with -DLLVM_NATIVE_BUILD=/path/to/builddir<br>
and the cross build *should* pick up the tablegen from there.<br>
<br>
> Is this a configuration anyone else has gotten working with cmake?<br>
> Thanks,<br>
> Tony<br>
><br>
><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> llvm-dev@lists.llvm.org<br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</div>
</div>
</body>
</html>