<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">On 3/20/2013 8:17 PM, Thompson, John
wrote:<br>
</div>
<blockquote
cite="mid:A98E80225E242E41AFC940ACBEBC1AF7F7C99D@USCULXMSG03.am.sony.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<meta name="Generator" content="Microsoft Word 14 (filtered
medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{mso-style-priority:99;
mso-style-link:"Balloon Text Char";
margin:0in;
margin-bottom:.0001pt;
font-size:8.0pt;
font-family:"Tahoma","sans-serif";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
span.EmailStyle18
{mso-style-type:personal;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.EmailStyle19
{mso-style-type:personal;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.EmailStyle20
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
span.BalloonTextChar
{mso-style-name:"Balloon Text Char";
mso-style-priority:99;
mso-style-link:"Balloon Text";
font-family:"Tahoma","sans-serif";}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div class="WordSection1">
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi
Matthew,<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Could
you point me to more information on how you got the plug-in
mechanism to work with clang on Windows?<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I
understand the need to add access functions for static data,
but I don’t understand how you build the plugin DLL in
general.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">How
does a clang.exe built from statically-linked libraries have
the necessary exports to satisfy the dynamic loading of the
plugin DLL?<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
</div>
</blockquote>
We made the following change to clang's tools/driver/CMakeLists.txt<br>
<br>
<blockquote><tt>diff --git a/tools/driver/CMakeLists.txt
b/tools/driver/CMakeLists.txt</tt><br>
<tt>index 2545610..a3fe292 100644</tt><br>
<tt>--- a/tools/driver/CMakeLists.txt</tt><br>
<tt>+++ b/tools/driver/CMakeLists.txt</tt><br>
<tt>@@ -10,10 +10,17 @@ set( LLVM_LINK_COMPONENTS</tt><br>
<tt> selectiondag</tt><br>
<tt> )</tt><br>
<tt> </tt><br>
<font color="#009900"><tt>+if(MSVC)</tt><br>
<tt>+ set(def_file "clang.def")</tt><br>
<tt>+else(MSVC)</tt><br>
<tt>+ set(def_file "")</tt><br>
<tt>+endif(MSVC)</tt><br>
<tt>+</tt><br>
</font><tt> add_clang_executable(clang</tt><br>
<tt> driver.cpp</tt><br>
<tt> cc1_main.cpp</tt><br>
<tt> cc1as_main.cpp</tt><br>
<font color="#009900"><tt>+ ${def_file}</tt><br>
</font><tt> )</tt><br>
<tt> </tt><br>
<tt> target_link_libraries(clang</tt><br>
<tt>@@ -40,6 +47,10 @@ target_link_libraries(clang</tt><br>
<tt> </tt><br>
<tt> set_target_properties(clang PROPERTIES VERSION
${CLANG_EXECUTABLE_VERSION})</tt><br>
<tt> </tt><br>
<font color="#009900"><tt>+if(MSVC)</tt><br>
<tt>+ set_target_properties(clang PROPERTIES ENABLE_EXPORTS
true)</tt><br>
<tt>+endif(MSVC)</tt><br>
<tt>+</tt><br>
</font><tt> add_dependencies(clang clang-headers)</tt><br>
<tt> </tt><br>
<tt> if(UNIX)</tt><br>
</blockquote>
<br>
Note that on Windows we only support CMake builds.<br>
<br>
Documentation for ENABLE_EXPORTS is here:
<a class="moz-txt-link-freetext" href="http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:ENABLE_EXPORTS">http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:ENABLE_EXPORTS</a><br>
<br>
On the plug-in side we just added 'clang' to the list of Polly's
target link libraries.<br>
<br>
<br>
<blockquote
cite="mid:A98E80225E242E41AFC940ACBEBC1AF7F7C99D@USCULXMSG03.am.sony.com"
type="cite">
<div class="WordSection1">
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">How
do you get the list of symbols to import in the plugin DLL
build? Do you manually collect it from a bare link of the
plug-in .obj’s with no library references?<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
</div>
</blockquote>
I wish I could say I did something intelligent here, but
unfortunately this was a manual process. I would attempt to link,
note any unresolved externals, add them to the def file, and then
relink. I don't consider this to be a maintainable solution in
general. However at the time we were under pressure to release and
discovered our Windows issues very late. So I did not spend much
time thinking about a better solution to managing the exports.<br>
<br>
<blockquote
cite="mid:A98E80225E242E41AFC940ACBEBC1AF7F7C99D@USCULXMSG03.am.sony.com"
type="cite">
<div class="WordSection1">
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Or
did you succeed in building a DLL-based version of clang?
(Not one big clang DLL like I was experimenting with, but
the normal libraries as DLLs.) If so, how did you do the
exports and imports in general?<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
</div>
</blockquote>
No. We're just building a stand-alone clang executable.<br>
<br>
<blockquote
cite="mid:A98E80225E242E41AFC940ACBEBC1AF7F7C99D@USCULXMSG03.am.sony.com"
type="cite">
<div class="WordSection1">
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Doing
so without declspec(import/export) seemed problematic
because of the 16K limit on the number of exports or
some-such. I know exporting everything in one big DLL would
exceed that, but I’m not sure about separate DLLs.</span></p>
</div>
</blockquote>
Hmm. We did not run into any size limitations. Perhaps because we
were exporting just what Polly needed.<br>
<br>
<blockquote
cite="mid:A98E80225E242E41AFC940ACBEBC1AF7F7C99D@USCULXMSG03.am.sony.com"
type="cite">
<div class="WordSection1">
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">How
do you register the plugin’s action? In my hack, I had to
have the plugin DLL provide a named function derived from
the plug-in name in order for clang to find it.</span></p>
</div>
</blockquote>
We didn't have to do anything special here. Static initializers in
the Polly dll run on load which register the Polly passes (see
lib/RegisterPasses.cpp in the Polly source). Is there a difference
in the way that back-end plug-ins work versus clang AST plug-ins?<br>
<br>
Hope this helps.<br>
<br>
Cheers,<br>
Matthew<br>
<br>
<br>
<blockquote
cite="mid:A98E80225E242E41AFC940ACBEBC1AF7F7C99D@USCULXMSG03.am.sony.com"
type="cite">
<div class="WordSection1">
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Thanks.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">-John<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF
1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
Gao, Yunzhong
<br>
<b>Sent:</b> Wednesday, March 20, 2013 2:42 PM<br>
<b>To:</b> Thompson, John<br>
<b>Cc:</b> 'Matthew Curtis'; '<a class="moz-txt-link-abbreviated" href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a>'<br>
<b>Subject:</b> RE: [PATCH] Implement a sane plugin API
for clang<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi
John,<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">The
other day I ran across a post by Matthew of the Polly team
and it seems that the Polly<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">team
might have made some progress regarding plug-in support on
Windows.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><a
moz-do-not-send="true"
href="http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20130311/168147.html">http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20130311/168147.html</a><o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Although
I do not fully understand their implementation, it sounds
like the Polly team was<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">not
trying to add __declspec(dllimport/dllexport) all over the
clang/llvm source base. They<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">used
a .def file to export the necessary symbols from the clang
executable, and then they<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">just
tried to use the imported symbols without
__declspec(dllimport). According to the<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">MSDN
blog entry below, dllimport is not necessary for function
calls and is only necessary<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">for
data access. I am cc’ing Matthew in case I misunderstood
Polly’s implementation.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><a
moz-do-not-send="true"
href="http://blogs.msdn.com/b/russellk/archive/2005/03/20/399465.aspx?wa=wsignin1.0">http://blogs.msdn.com/b/russellk/archive/2005/03/20/399465.aspx?wa=wsignin1.0</a><o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I
think both the Cygwin and the mingw environments on Windows
provide a dlltool<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">executable
that can automate the generation of .def files from either
the object files or a<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">static
library. I am not aware of equivalent tools in the Visual
Studio package; you may have<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">to
write some scripts to extract and package the symbols if you
are using Visual Studio.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">HTH,<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">-
Gao<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF
1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span
style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">
<a moz-do-not-send="true"
href="mailto:cfe-commits-bounces@cs.uiuc.edu">cfe-commits-bounces@cs.uiuc.edu</a>
[<a moz-do-not-send="true"
href="mailto:cfe-commits-bounces@cs.uiuc.edu">mailto:cfe-commits-bounces@cs.uiuc.edu</a>]
<b>On Behalf Of </b>Thompson, John<br>
<b>Sent:</b> Friday, March 15, 2013 6:04 PM<br>
<b>To:</b> <a moz-do-not-send="true"
href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<b>Subject:</b> RE: [PATCH] Implement a sane plugin API
for clang<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi
Sean,<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I
missed the discussion, but I saw your message and wanted to
find out where things stood on the plug-in API with respect
to Windows.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">A
year or two ago I wrote a plug-in for Clang for generating
LUA bindings, and developing on Windows, found that the
plug-in mechanism didn’t work on Windows, because it relies
on how *nix systems do DLLs. Unfortunately, in Windows
land, a plug-in DLL would have to be linked with Clang
libraries which are DLLs, and apparently building the Clang
libraries as DLLs is problematic, due to the build system
and the messy business of importing/exporting symbols.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I
managed to skirt the issue by still building the plug-in
against the static libraries, and hacking clang to look up
call an entry point function with a name based on the
plug-in name so it could hook up the objects in the
plug-in. This, of course, was kind of dangerous, because
the plugin module and the clang executable would have
totally separate static data areas, not to mention the
duplicated code segments.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Then
I did some work on making a big Clang DLL, to skirt some of
the DLL import/export issues, just exporting the symbol
references needed between the driver and the library, using
some header conventions for handling the exports. I
intended to pursue this further, and try to resolve the
clang DLL build issues, but haven’t been able to get back to
it.<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Has
anyone else worked on resolving the plugin issues for
Windows or the Clang-libraries-as-DLLs build?<o:p></o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">-John<o:p></o:p></span></p>
<div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</div>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation</pre>
</body>
</html>