[cfe-dev] Distinguishing between clang Window versions

Alp Toker alp at nuanti.com
Wed Jul 9 18:11:07 PDT 2014


On 10/07/2014 01:22, Nico Weber wrote:
> On Wed, Jul 9, 2014 at 3:01 PM, Edward Diener 
> <eldlistmailingz at tropicsoft.com 
> <mailto:eldlistmailingz at tropicsoft.com>> wrote:
>
>     On 7/9/2014 2:40 PM, Reid Kleckner wrote:
>
>         On Wed, Jul 9, 2014 at 7:09 AM, Edward Diener
>         <eldlistmailingz at tropicsoft.com
>         <mailto:eldlistmailingz at tropicsoft.com>
>         <mailto:eldlistmailingz at tropicsoft.com
>         <mailto:eldlistmailingz at tropicsoft.com>>> wrote:
>
>             I see where a build of clang on Windows using VC++
>         produces both
>             clang.exe and clang-cl.exe and that they are both the same
>             executables. Nonetheless depending on the -target ( or default
>             -target ) passed to the clang driver we have different build
>             expectations in Boost Build. In Windows When the target
>         mode is VC++
>             clang emulates VC++ in various ways and when the target
>         mode is
>             mingw/gcc clang emulates mingw/gcc. Even with the latter
>         on Windows
>             there are a few subtle differences from clang on Linux.
>         That is why
>             Boost Build needs to treat them differently from within
>         its .jam files.
>
>
>         What kinds of properties of a compiler do you normally check
>         in Boost
>         Build?  If you're willing to do a test compile, you can look
>         for '#if
>         defined(__clang__) && defined(_MSC_VER)' or '#if
>         defined(__clang__) &&
>         defined(__GNUC__)'.
>
>
>     That is another possibility which I will bring up in Boost Build.
>
>     Essentially we need to find out as easily as possible whether a
>     clang executable on Windows targets vc++ or gcc/mingw,
>
>
> I think going forward, the idea is that "clang" will try to be 
> gcc-compatible (i.e. target minw), while "clang-cl" will try to be 
> cl-compatible and targes vc++.

That's not quite right. The only difference between 'clang' and 
'clang-cl' is in the way they parse the command-line and how they invoke 
tools, but either should be able to target any supported triple, 
cross-compile to Linux etc.

'clang-cl' currently falls short of that and is hard-coded to target 
VC++ but 'clang' is already more or less able to do everything 
'clang-cl' does.

Then there's the question of the *default* target triple. We know for 
sure what it has to be for the cl driver mode -- no problem there, but 
there's still uncertainty around what the default triple should be for 
the standard clang.exe driver mode..

Basically we need to pick a sane default target triple for 'clang.exe' 
on Windows and make sure all native Windows builds of clang default to 
that triple (regardless of whether they were produced by MSVC, MinGW or 
whatever). The fact we have binaries that differ only in default target 
triple is a leftover from when MSVC and MinGW produced functionally 
different clang binaries, which I fixed a couple of weeks ago in r211461:


commit 2c57a610f4b339283f5e4f171bf0d5b6b95f2b5a
Author: Alp Toker <alp at nuanti.com>
Date:   Sun Jun 22 04:31:15 2014 +0000

     Enable WindowsToolChain on all native Windows builds

     Make binaries built by MSVC, mingw and clang functionally 
equivalent. The
     checks are trivially performed at runtime to eliminate functional 
differences
     between supported configurations that used to be hard-coded.

     git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211461 
91177308-0d34-0410-b5e6-96231b3b80d8


So yes, we should avoid this awkward situation where we're ending up 
with 'clang.exe' binaries in the wild that differ *only* by their 
default target triple. Which default we choose doesn't matter much as 
long as there's consistency between all native Windows builds of clang.

Alp.




>     while also taking into account the -target option on the command line.
>
>     BTW I could not find in the latest clang 3.5 documentation any
>     mention of the -target option. Likewise, and I am sure you have
>     heard it before, an alphabetical list of all clang options in the
>     documentation, with explanations for each one, would be greatly
>     appreciated.
>
>
> clang --help prints a list of all driver options, with at least some 
> help text.
>
>
>
>     _______________________________________________
>     cfe-dev mailing list
>     cfe-dev at cs.uiuc.edu <mailto:cfe-dev at cs.uiuc.edu>
>     http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

-- 
http://www.nuanti.com
the browser experts




More information about the cfe-dev mailing list