<div dir="ltr"><div><span style="line-height:1.5">Before SourceKit-related functionality can be considered for inclusion in release packages for Linux, it needs to be able to be built during &quot;normal&quot; invocation of the build script. I say normal because it&#39;s possible to build SourceKit with two (simple) invocations of the build script at the moment: </span><a href="https://github.com/apple/swift/pull/3594#issuecomment-234169759" style="line-height:1.5">https://github.com/apple/swift/pull/3594#issuecomment-234169759</a><br></div><div><br></div><div>The reason SourceKit can&#39;t currently be built in a single pass is that it depends on libdispatch, which has a dependency on Swift for its overlay and so is built _after_ Swift, but SourceKit is part of the Swift project. This is only a problem on Linux because SourceKit can use the system&#39;s libdispatch rather than the corelibs one when building on OS X.</div><div><br></div><div>Here are different ideas for addressing this circular dependency:</div><div><br></div><div>1. <span style="line-height:1.5">Break SourceKit out into a different CMake &quot;project&quot;. This way, the build script would build Swift -&gt; libdispatch -&gt; SourceKit. This is probably the most elegant solution.</span></div><div><span style="line-height:1.5">2. Build libdispatch twice: once before building Swift (without its overlay) and again with its overlay. This is probably the easiest and most naive way to solve this, but is potentially wasteful since we&#39;re building it twice. Actually probably not, assuming the build cache is reused effectively. But it&#39;s certainly not pretty.</span></div><div>3. Remove SourceKit&#39;s dependency on libdispatch. I dislike this option because rewriting the libdispatch parts of SK with libpthread or C++14 builtins would be a sizable undertaking and the codebase would suffer for it.</div><div><br></div><div>I&#39;m sure there are other approaches that could work but I&#39;m not aware of them.</div><div><br></div><div>This is being tracked as <span style="line-height:1.5">SR-1676, which is currently unassigned: </span><span style="line-height:1.5"><a href="https://bugs.swift.org/browse/SR-1676">https://bugs.swift.org/browse/SR-1676</a></span></div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, 29 Aug 2016 at 20:25 Keith Smiley via swift-dev &lt;<a href="mailto:swift-dev@swift.org">swift-dev@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Sorry to bump this thread, just wondering if anyone has any thoughts on<br>
this now that (some) of the Swift 3.0 craziness is done.<br>
<br>
--<br>
Keith Smiley<br>
<br>
On Sun, Jul 31, 2016, at 21:46, Keith Smiley via swift-dev wrote:<br>
&gt; Hey everyone,<br>
&gt;<br>
&gt; Recently I&#39;ve been working on making Swift autocomplete outside of Xcode<br>
&gt; (specifically vim). Of course to do this, I&#39;ve been using<br>
&gt; [SourceKitten][0],<br>
&gt; which is a great bridge for interacting with `sourcekitd`.<br>
&gt;<br>
&gt; While working on this, I also ran across `sourcekitd-test` and<br>
&gt; `sourcekitd-repl`<br>
&gt; from the Swift repo. These tools are also awesome for working with<br>
&gt; `sourcekitd`.<br>
&gt; `sourcekitd-test` even has practically the same command line interface as<br>
&gt; SourceKitten&#39;s complete command.<br>
&gt;<br>
&gt; With `sourcekitd-test`:<br>
&gt;<br>
&gt; ```<br>
&gt; $ sourcekitd-test -req=complete -offset=x file.swift -- [compiler args]<br>
&gt; ```<br>
&gt;<br>
&gt; With SourceKitten:<br>
&gt;<br>
&gt; ```<br>
&gt; $ sourcekitten complete --offset x --file file.swift -- [compiler args]<br>
&gt; ```<br>
&gt;<br>
&gt; These 2 commands of course call through to `sourcekitd` in the same way,<br>
&gt; so this<br>
&gt; ends up with the same output as well.<br>
&gt;<br>
&gt; All of this is just to show that I think these tools would be extremely<br>
&gt; valuable<br>
&gt; to have shipped with whichever Swift toolchains are bundled with Xcode,<br>
&gt; so users<br>
&gt; would automatically have tools for completion installed.<br>
&gt;<br>
&gt; I&#39;d love to hear some thoughts on this, and also if it&#39;s even a feasible<br>
&gt; thing<br>
&gt; to ask for. Also let me know if this post would be better suited for<br>
&gt; another<br>
&gt; list. I didn&#39;t feel like this was particularly appropriate for<br>
&gt; swift-evolution<br>
&gt; since there aren&#39;t really any implementation details in question here.<br>
&gt;<br>
&gt;<br>
&gt; [0]: <a href="https://github.com/jpsim/SourceKitten" rel="noreferrer" target="_blank">https://github.com/jpsim/SourceKitten</a><br>
&gt;<br>
&gt;<br>
&gt; Thanks for reading!<br>
&gt;<br>
&gt; --<br>
&gt; Keith Smiley<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; swift-dev mailing list<br>
&gt; <a href="mailto:swift-dev@swift.org" target="_blank">swift-dev@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-dev" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-dev</a><br>
_______________________________________________<br>
swift-dev mailing list<br>
<a href="mailto:swift-dev@swift.org" target="_blank">swift-dev@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-dev" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-dev</a><br>
</blockquote></div>