<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Title" content="">
<meta name="Keywords" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Menlo;
        panose-1:2 11 6 9 3 8 4 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Menlo",sans-serif;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Menlo",sans-serif;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body bgcolor="white" lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">To follow up on this, I converted all uses of target_link_libraries for executable targets to explicitly use PRIVATE in r319840 (along with a bunch of follow-ups to cover cases that I'd
 missed initially). There are still lots of uses of target_link_libraries missing an explicit INTERFACE/PRIVATE/PUBLIC, and I'm looking into those (they're mostly for static libraries, I believe); it just requires a bit more thought since using PRIVATE everywhere
 may not be correct.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">On 12/1/17, 2:40 PM, "Chris Bieneman" <chris.bieneman@me.com> wrote:<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    Ultimately we do need to migrate to the new interface for `target_link_libarires` because some day CMake could (and probably should) deprecate the old syntax. If you're willing to take
 that task on that seems like the right solution and the best way to move forward.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    <o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    -Chris<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    <o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > On Dec 1, 2017, at 1:41 PM, Shoaib Meenai via llvm-dev <llvm-dev@lists.llvm.org> wrote:<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > I discovered that I can hack around my particular problem by placing<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > set_property(TARGET clang PROPERTY INTERFACE_LINK_LIBRARIES)<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > at the end of tools/driver/CMakeLists.txt. I'd prefer to fix this properly though,<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > of course.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > On 12/1/17, 4:18 PM, "llvm-dev on behalf of Shoaib Meenai via llvm-dev" <llvm-dev-bounces@lists.llvm.org on behalf of llvm-dev@lists.llvm.org> wrote:<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    (accidentally sent the previous one to llvm-commits instead of llvm-dev, sigh)<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    Hi all (CC beanz for CMake advice),<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    I stumbled into an issue with LLVM_DISTRIBUTION_COMPONENTS. The simplest way<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    to reproduce is to run a configure with `-DLLVM_DISTRIBUTION_COMPONENTS=clang`.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    This should show lots of errors of the following form:<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    CMake Error: install(EXPORT "ClangTargets" ...) includes target "clang" which requires target "LLVMAArch64CodeGen" that is not in the export set.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    The issue is that we add dependencies to executables using the legacy<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    target_link_libraries signature, which marks the dependencies as public (i.e.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    they apply to both the target and any other targets linking against it, or in<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    other words they're interface dependencies). CMake requires install(EXPORT) to<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    also export all interface dependencies, which seems like a reasonable<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    requirement.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    I wasn't running into this previously since I was using LLVM_INSTALL_TOOLCHAIN_ONLY,<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    but I need to install some non-tools. I definitely don't want to install all<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    of them, however, and I'm building with the default (static library)<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    configuration, which makes installing most libraries pretty unnecessary<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    for my use case.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    My preferred solution would be to mark all dependencies of an executable<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    target as PRIVATE, since I don't think interface dependencies make much sense<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    for an executable. I hacked this in locally for clang and confirmed that it<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    made the install(EXPORT) CMake errors go away. Unfortunately, cmake also<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    requires all instances of target_link_libraries for a particular target to use<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    either the legacy or the non-legacy signature, and it turns out all our uses<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    of target_link_library for executables are using the legacy signature right<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    now, so this would have to be a substantial cross-repository change in order<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    to avoid breaking the world. I'm fine with taking the work on, but I wanted to<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    confirm my approach before putting that work in.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    Thanks,<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    Shoaib<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    _______________________________________________<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    LLVM Developers mailing list<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    llvm-dev@lists.llvm.org<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    >    https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Ddev&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=f6-g5HvD04ut7NY1NTQwMMELINjT5njGhoVCW_nK8sQ&s=cPS_l2TQRkE92HA_YgTcHxl4Jm1FJnAfpdZXATwUrhw&e=<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > <o:p>
</o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > _______________________________________________<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > LLVM Developers mailing list<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > llvm-dev@lists.llvm.org<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    > https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_llvm-2Ddev&d=DwIFAg&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=Ra77APGFFcw-9zjkZ_HI9ahxtfia2dubjzYiIab5thY&s=29DgoCHoB8p_8VnpPNkKsJoHUKa5nQuxFU_hbLiJ_rU&e=<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    <o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-family:"Calibri",sans-serif">    <o:p></o:p></span></p>
</div>
</body>
</html>