[cfe-dev] cl.exe (MS Visual Studio) compatible driver.

Konstantin Tokarev annulen at yandex.ru
Tue Apr 12 02:38:57 PDT 2011



12.04.2011, 04:30, "Douglas Gregor" <dgregor at apple.com>:
> On Apr 3, 2011, at 7:21 PM, Michael Spencer wrote:
>
>>  I have finally gotten to the point in Windows support where the lack
>>  of a cl.exe (the C/C++ compiler included with Microsoft Visual Studio)
>>  compatible driver for clang is getting in the way.
>>
>>  The main problem currently is external library specification. With
>>  cl.exe, to compile a GUI application, your command line would be:
>>
>>  cl.exe GUIProgram.c User32.lib
>>
>>  Which would output GUIProgram.obj and GUIProgram.exe. Currently I have
>>  to have a separate compile and link stage for this to work:
>>
>>  clang -o GUIProgram.obj GUIProgram.c
>>  link -out:GUIProgram.exe GUIProgram.obj libcmt.lib User32.lib
>>
>>  Not a big deal, but annoying enough for me to get started on this.
>>
>>  We have actually discussed this quite a bit in the past, but have yet
>>  to come to a consensus on exactly how to implement it. I will
>>  summarize the current ideas I know of.
>>
>>  The simplest and lowest impact to the clang codebase solution is a
>>  simple script wrapper around clang. This would take cl.exe style
>>  commands (which can start with either '-' or '/') and covert them to
>>  unix/gcc style. This is simple, but requires adding lots of weird
>>  options to clang that duplicate the cl.exe options in a unix/gcc
>>  style. It would also have to understand the cl.exe and link.exe
>>  library search paths to be able to convert a library (such as
>>  User32.lib) into its absolute path for clang to use.
>>
>>  The second solution, and most supported from people I have talked to,
>>  is to have an actual separate driver called clang-cl (or ms, or w/e
>>  else someone feels like). This doesn't necessarily have to be a
>>  separate binary, and could simply use the same mechanism that is used
>>  to detect clang++. This would emulate the cl.exe driver and call clang
>>  -cc1 on its own. It would use as much existing driver infrastructure
>>  as possible. The issue with this method is mapping custom clang
>>  commands to the cl.exe style interface, as we would need to know which
>>  options should be replaced by cl.exe style, and which shouldn't
>>  (because there are no replacements).
>
> I, personally, like this option the best. It would also allow, e.g., libclang to have a nice entrypoint for creating a translation unit after parsing the cl.exe-style options.

Maybe it should be called "cl.exe" to be able to replace original cl.exe inside Visual Studio?

-- 
Regards,
Konstantin



More information about the cfe-dev mailing list