<div dir="ltr"><div><div><div>After a lot of wasted effort I’ve found that for some reason only the SPM is capable of linking Swift code with Linux’s system libraries which are all compiled with gcc, which apparently doesn’t get along too well with clang. <br><br>All I want is to be able to import a system library without making an empty git repository…<br><br></div>What I want to do:<br><br></div><div><span style="font-family:monospace,monospace">main.swift:</span><br></div><span style="font-family:monospace,monospace">    import &lt;zlib.h&gt;</span><br><br></div>What I have to do instead:<br><span style="font-family:monospace,monospace"><br></span><div><span style="font-family:monospace,monospace">    ~$ cd ../CZlib<br></span></div><div><span style="font-family:monospace,monospace">    ~$ git add -A<br></span></div><div><span style="font-family:monospace,monospace">    ~$ git commit -m &quot;who cares&quot;<br></span></div><div><span style="font-family:monospace,monospace">    ~$ git tag 1.0.0<br></span></div><div><span style="font-family:monospace,monospace">    ~$ cd </span><span style="font-family:monospace,monospace">../My_actual_project<br></span></div><div><span style="font-family:monospace,monospace">    ~$ rm .build -r<br></span></div><div><span style="font-family:monospace,monospace">    ~$ swift build<br></span></div><div><span style="font-family:monospace,monospace">    ~$ cd ../</span><span style="font-family:monospace,monospace">CZlib</span><span style="font-family:monospace,monospace"><span style="font-family:monospace,monospace"><br></span>    ~$ </span><span style="font-family:monospace,monospace">git tag 1.0.0 --force<br></span></div><div><span style="font-family:monospace,monospace">    ~$ cd ../My_actual_project<br></span></div><div><span style="font-family:monospace,monospace">    ~$ rm .build -r<br></span></div><div><span style="font-family:monospace,monospace">    ~$ swift build</span></div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 28, 2017 at 7:36 PM, Michael Ilseman <span dir="ltr">&lt;<a href="mailto:milseman@apple.com" target="_blank">milseman@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">This is into uncharted territory for me, but it seems you’re building with SwiftPM. You’ll probably want to configure extra compiler flags if that’s possible. You could also bite the bullet and build your C libraries with SwiftPM as well. Hopefully someone on swift-build-dev can help you out.<div><br></div><div>CC-ing Ankit<div><br></div><div><br><div><blockquote type="cite"><span class=""><div>On Mar 28, 2017, at 5:09 PM, Kelvin Ma &lt;<a href="mailto:kelvinsthirteen@gmail.com" target="_blank">kelvinsthirteen@gmail.com</a>&gt; wrote:</div><br class="m_-4968516960302902883Apple-interchange-newline"></span><div><div dir="ltr"><span class="">How do I compile a project with many modules? My tree looks like this:<br><br></span><span id="m_-4968516960302902883cid:ii_j0u7s58g0_15b1765689e74dba">&lt;Selection_001.png&gt;</span><br>​<br></div><span class=""><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 28, 2017 at 12:47 PM, Michael Ilseman <span dir="ltr">&lt;<a href="mailto:milseman@apple.com" target="_blank">milseman@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>Sure! In this example, I have built libgit2. I have a directory called Git, and inside that I have the following module map:</div><div><br></div><div>module Git [system] {<br>       header &quot;&lt;my path&gt;/libgit2/include/git2.h&quot;<br>       export *<br>}<br><br></div><div>When I run, I use:</div><div><br></div><div>swift -I &lt;path-to-“Git”-directory&gt; -L &lt;path-to-built-libgit2&gt; -lgit2 foo.swift</div><div><br></div><div>inside foo.swift I can:</div><div><br></div><div>import Git</div><div>// … use libGit2</div><div><br></div><div><br></div><div>Read more about how to write a more appropriate module.map file for your purposes at <a href="https://clang.llvm.org/docs/Modules.html" target="_blank">https://clang.llvm.org/docs<wbr>/Modules.html</a>. For example, you might be able to define link flags inside the module.map, use umbrella directories, submodules, etc.</div><div><div class="m_-4968516960302902883h5"><div><br></div><div><br></div><br><div><blockquote type="cite"><div>On Mar 28, 2017, at 6:27 AM, Kelvin Ma &lt;<a href="mailto:kelvinsthirteen@gmail.com" target="_blank">kelvinsthirteen@gmail.com</a>&gt; wrote:</div><br class="m_-4968516960302902883m_8432716316639870101Apple-interchange-newline"><div><div dir="ltr">Can you give an example?<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Mar 27, 2017 at 3:59 PM, Michael Ilseman <span dir="ltr">&lt;<a href="mailto:milseman@apple.com" target="_blank">milseman@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Sure. At a low level, you can create a module.map file and use -L/-l flags in your invocation of Swift. If you want to do so at a higher level, then perhaps SwiftPM can. CCing swift-build-dev for the SwiftPM part.<br>
<span class="m_-4968516960302902883m_8432716316639870101im m_-4968516960302902883m_8432716316639870101HOEnZb"><br>
<br>
&gt; On Mar 26, 2017, at 3:20 PM, Kelvin Ma via swift-users &lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; Idk if this has been asked before, but is there a way to import C libraries into a Swift project without creating a local git repo? Preferably something similar to C where you can just `#include` headers and then specify the link flags (in Package.swift?)<br>
&gt;<br>
&gt; It’s getting very cumbersome to make a bunch of empty git repos just to use libglfw or libcairo.<br>
</span><div class="m_-4968516960302902883m_8432716316639870101HOEnZb"><div class="m_-4968516960302902883m_8432716316639870101h5">&gt; ______________________________<wbr>_________________<br>
&gt; swift-users mailing list<br>
&gt; <a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-users</a><br>
<br>
</div></div></blockquote></div><br></div>
</div></blockquote></div><br></div></div></div></blockquote></div><br></div>
</span></div></blockquote></div><br></div></div></div></blockquote></div><br></div>