clang + managed c++...

Hi !

Happy New 2013 Year to everyone.

I’ve used cmake-gui and cross compiled llvm + clang to visual studio 2008. (Windows).

(Found one web page which recommended to use cygwin, but it has it’s own problems apparently).

Now I would like to add managed c++ support (and interfaces) with further wiring to C#.

So far I have experimented with cland.exe front end tool, but C# wiring would require dll.

I have noticed that there exists libclang.dll - but it’s interface did not opened to me (two test applications
c-arcmt-test.exe / c-index-test.exe - did not understood what they do exactly.)

(question 1) My idea is to copy clang.exe’s source codes directly to dll - but may be you can recommend me
best approach for doing this dll ? In ideal world I would like to have one front end exe (like clang.exe)
for testing compilation, and dll which is used by .exe. Dll exposes also managed C++ interfaces next to
native C++ interfaces.

(question 2) Do you know best approach of enabling managed c++ support (/clr) within dll - does cmake support this
already - preferably so that /clr support is enabled only on individual files, not on project level.

(question 3) Do you have or has anyone made support for parsing .vcproj / .vcxproj project files -
so project files could be taken as an input directly ?

Btw - to commit any change into clang trunk - do I need developer account to svn ?
I prefer to chat over skype if you have more detailed questions.

Now I would like to add managed c++ support (and interfaces) with further wiring to C#.

So you want to generate some wrappers to use the Clang C++ API from a .NET? In this case you might find useful the generator I have been working on: https://github.com/tritao/cxxi

Beware it is not fool-proof yet so you will probably need to fix some stuff in case you go down that road.

So far I have experimented with cland.exe front end tool, but C# wiring would require dll.

I have noticed that there exists libclang.dll - but it’s interface did not opened to me (two test applications
c-arcmt-test.exe / c-index-test.exe - did not understood what they do exactly.)

Using the libclang C API would be easier, and I have generated a C# binding with my own bindings generator tool before.

(question 1) My idea is to copy clang.exe’s source codes directly to dll - but may be you can recommend me
best approach for doing this dll ? In ideal world I would like to have one front end exe (like clang.exe)
for testing compilation, and dll which is used by .exe. Dll exposes also managed C++ interfaces next to
native C++ interfaces.

I would not even try to bind or make a matching .NET interface to the entire Clang C++ API. It will be a lot of work. Just create some interfaces to get the exact information you need and pass around the data to the managed side via C++/CLI. You can find an example of this here: https://github.com/tritao/cxxi/blob/master/src/Parser/Parser.cpp

(question 2) Do you know best approach of enabling managed c++ support (/clr) within dll - does cmake support this
already - preferably so that /clr support is enabled only on individual files, not on project level.

I was able to do this with CMake on an individual file level. It is a bit hacky but should work: https://github.com/tritao/clang/blob/master/lib/Sema/CMakeLists.txt#L55

(question 3) Do you have or has anyone made support for parsing .vcproj / .vcxproj project files -
so project files could be taken as an input directly ?

Yes, I have worked on this particular problem in GSoC 2010 for the Mono project. You can find code in MonoDevelop’s repo for parsing Visual Studio solutions and projects, along with open-source MSBuild support to build them.

Btw - to commit any change into clang trunk - do I need developer account to svn ?

Yes, you can use the Git mirror to have your own code under source control more easily though.