<div dir="ltr">CROSS_TOOLCHAIN_FLAGS_NATIVE can be used to pass CMake variables when building the native tools.  What I do is set up a toolchain file:<div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>set(CMAKE_C_COMPILER {host-cc})</div><div>set(CMAKE_CXX_COMPILER {host-cxx})</div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>... </div></blockquote><div><br></div><div>And pass this to the top level CMake:</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">-DCROSS_TOOLCHAIN_FLAGS_NATIVE="-DCMAKE_TOOLCHAIN_FILE=<path-to-above-file>" <br></blockquote><div><br></div><div>CMAKE_C_COMPILER etc can instead be directly set in this flag (instead of a toolchain file):</div></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">-DCROSS_TOOLCHAIN_FLAGS_NATIVE="-DCMAKE_C_COMPILER=<host-cc> ..." <br></blockquote><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 17, 2017 at 5:11 PM, Shoaib Meenai via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I'm an idiot and sent to llvm-commits instead of llvm-dev. Fixing.<br>
<div><div class="h5"><br>
On 10/17/17, 5:09 PM, "llvm-commits on behalf of Shoaib Meenai via llvm-commits" <<a href="mailto:llvm-commits-bounces@lists.llvm.org">llvm-commits-bounces@lists.<wbr>llvm.org</a> on behalf of <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
<br>
    Hi all (CC beanz for cmake advice),<br>
<br>
<br>
<br>
    I'm running into a cmake problem when I try to cross-compile a Windows-hosted<br>
<br>
    toolchain (building on Linux). I'm using clang-cl as my cross-compiler, and I<br>
<br>
    set up the compiler paths in a cmake toolchain file. Unfortunately, as part of<br>
<br>
    setting up the compiler, cmake sets the environment variables ASM, CC, CXX,<br>
<br>
    etc. to the paths it found. It's easy enough to reproduce this; just configure<br>
<br>
    the following CMakeLists.txt:<br>
<br>
<br>
<br>
    message(STATUS "CC is $ENV{CC}")<br>
<br>
    project(null C)<br>
<br>
    message(STATUS "CC is $ENV{CC}")<br>
<br>
<br>
<br>
    The first printout should be empty (assuming you don't have CC set in your<br>
<br>
    environment already, of course), and the second value should be the full path<br>
<br>
    the compiler found by cmake. Note that this will only occur on the initial<br>
<br>
    configure; subsequent configures should have the compiler setup cached, and<br>
<br>
    will therefore not set the environment variable. I've confirmed this behavior<br>
<br>
    on cmake 3.5, 3.6, and 3.9, so I'm fairly sure it's universal.<br>
<br>
<br>
<br>
    This causes problems for me because when I'm running the initial cmake<br>
<br>
    configure for my cross-compile, ASM, CC, and CXX get set to the values for my<br>
<br>
    cross-compiler (clang-cl). LLVM's build then launches the configure for the<br>
<br>
    native portions of the build (TableGen, etc.), but this configure is launched<br>
<br>
    with the aforementioned environment variables, and cmake's compiler detection<br>
<br>
    picks up on those environment variables, so it then tries to compile the<br>
<br>
    native portions with my cross-compiler, which goes about as well as you'd<br>
<br>
    expect.<br>
<br>
<br>
<br>
    My current workaround is to simply unset these environment variables before<br>
<br>
    running the native configure step:<br>
<br>
<br>
<br>
    --- a/cmake/modules/CrossCompile.<wbr>cmake<br>
<br>
    +++ b/cmake/modules/CrossCompile.<wbr>cmake<br>
<br>
    @@ -45,6 +45,9 @@ function(llvm_create_cross_<wbr>target_internal target_name toolchain buildtype)<br>
<br>
              # Propagate LLVM_EXTERNAL_CLANG_SOURCE_DIR so that clang-tblgen can be built<br>
<br>
              set(external_clang_dir "-DLLVM_EXTERNAL_CLANG_SOURCE_<wbr>DIR=${LLVM_EXTERNAL_CLANG_<wbr>SOURCE_DIR}")<br>
<br>
            endif()<br>
<br>
    +    unset(ENV{ASM})<br>
<br>
    +    unset(ENV{CC})<br>
<br>
    +    unset(ENV{CXX})<br>
<br>
         execute_process(COMMAND ${CMAKE_COMMAND} ${build_type_flags}<br>
<br>
             -G "${CMAKE_GENERATOR}" -DLLVM_TARGETS_TO_BUILD=${<wbr>LLVM_TARGETS_TO_BUILD}<br>
<br>
             ${CROSS_TOOLCHAIN_FLAGS_${<wbr>target_name}} ${CMAKE_SOURCE_DIR}<br>
<br>
<br>
<br>
    It would be more proper to save the values of these environment variables at<br>
<br>
    the start of the configure (before any project command is run) and restore<br>
<br>
    those values before starting the native configure, of course. This still feels<br>
<br>
    pretty ugly though, and I'm sure I'm not the first person to run into a<br>
<br>
    similar issue. What would be the best way to fix this?<br>
<br>
<br>
<br>
    Thanks,<br>
<br>
    Shoaib<br>
<br>
<br>
<br>
    ______________________________<wbr>_________________<br>
    llvm-commits mailing list<br>
    <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
</div></div>    <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Dcommits&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=8ELwXEfNVoGOamcM1LPnxtDt4B9cgcSOabVKJZexuuU&s=TewHIKn_JhBOwiDZuDz6rGWMoBaH2jNeGs5OM7LG6cY&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.<wbr>com/v2/url?u=http-3A__lists.<wbr>llvm.org_cgi-2Dbin_mailman_<wbr>listinfo_llvm-2Dcommits&d=<wbr>DwIGaQ&c=<wbr>5VD0RTtNlTh3ycd41b3MUw&r=<wbr>o3kDXzdBUE3ljQXKeTWOMw&m=<wbr>8ELwXEfNVoGOamcM1LPnxtDt4B9cgc<wbr>SOabVKJZexuuU&s=TewHIKn_<wbr>JhBOwiDZuDz6rGWMoBaH2jNeGs5OM7<wbr>LG6cY&e=</a><br>
<br>
<br>
______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
</blockquote></div><br></div>