1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"/><meta name="og:site_name" content="Navan Chauhan"/><link rel="canonical" href="https://navanchauhan.github.io/posts/2020-05-31-compiling-open-babel-on-ios"/><meta name="twitter:url" content="https://navanchauhan.github.io/posts/2020-05-31-compiling-open-babel-on-ios"/><meta name="og:url" content="https://navanchauhan.github.io/posts/2020-05-31-compiling-open-babel-on-ios"/><title>Compiling Open Babel on iOS | Navan Chauhan</title><meta name="twitter:title" content="Compiling Open Babel on iOS | Navan Chauhan"/><meta name="og:title" content="Compiling Open Babel on iOS | Navan Chauhan"/><meta name="description" content="Compiling Open Babel on iOS"/><meta name="twitter:description" content="Compiling Open Babel on iOS"/><meta name="og:description" content="Compiling Open Babel on iOS"/><meta name="twitter:card" content="summary"/><link rel="stylesheet" href="/styles.css" type="text/css"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><link rel="shortcut icon" href="/images/favicon.png" type="image/png"/><link rel="alternate" href="/feed.rss" type="application/rss+xml" title="Subscribe to Navan Chauhan"/><meta name="twitter:image" content="https://navanchauhan.github.io/images/logo.png"/><meta name="og:image" content="https://navanchauhan.github.io/images/logo.png"/></head><head><script>var _paq=window._paq=window._paq||[];_paq.push(["trackPageView"]),_paq.push(["enableLinkTracking"]),function(){_paq.push(["setTrackerUrl","https://navanchauhan.matomo.cloud/matomo.php"]),_paq.push(["setSiteId","1"]);var a=document,t=a.createElement("script"),e=a.getElementsByTagName("script")[0];t.type="text/javascript",t.async=!0,t.src="//cdn.matomo.cloud/navanchauhan.matomo.cloud/matomo.js",e.parentNode.insertBefore(t,e)}();</script></head><body class="item-page"><header><div class="wrapper"><a class="site-name" href="/">Navan Chauhan</a><nav><ul><li><a href="/about">About Me</a></li><li><a class="selected" href="/posts">Posts</a></li><li><a href="/publications">Publications</a></li><li><a href="/assets/résumé.pdf">Résumé</a></li><li><a href="https://navanchauhan.github.io/repo">Repo</a></li></ul></nav></div></header><div class="wrapper"><article><div class="content"><span class="reading-time">5 minute read</span><span class="reading-time">Created on May 31, 2020</span><span class="reading-time">Last modified on June 25, 2020</span><h1>Compiling Open Babel on iOS</h1><p>Due to the fact that my summer vacations started today, I had the brilliant idea of trying to run open babel on my iPad. To give a little background, I had tried to compile AutoDock Vina using a cross-compiler but I had miserably failed.</p><p>I am running the Checkr1n jailbreak on my iPad and the Unc0ver jailbreak on my phone.</p><h2>But Why?</h2><p>Well, just because I can. This is literally the only reason I tried compiling it and also partially because in the long run I want to compile AutoDock Vina so I can do Molecular Docking on the go.</p><h2>Let's Go!</h2><p>How hard can it be to compile open babel right? It is just a simple software with clear and concise build instructions. I just need to use <code>cmake</code> to build and the <code>make</code> to install.</p><p>It is 11 AM in the morning. I install <code>clang, cmake and make</code> from the Sam Bingner's repository, fired up ssh, downloaded the source code and ran the build command.`clang</p><h3>Fail No. 1</h3><p>I couldn't even get cmake to run, I did a little digging arond StackOverflow and founf that I needed the iOS SDK, sure no problem. I waited for Xcode to update and transfered the SDKs to my iPad</p><pre><code><div class="highlight"><span></span>scp -r /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk root@192.168.1.8:/var/sdks/
</div></code></pre><p>Them I told cmake that this is the location for my SDK 😠. Succesful! Now I just needed to use make.</p><h3>Fail No. 2</h3><p>It was giving the error that thread-local-storage was not supported on this device.</p><pre><code><div class="highlight"><span></span><span class="o">[</span> <span class="m">0</span>%<span class="o">]</span> Building CXX object src/CMakeFiles/openbabel.dir/alias.cpp.o
<span class="o">[</span> <span class="m">1</span>%<span class="o">]</span> Building CXX object src/CMakeFiles/openbabel.dir/atom.cpp.o
In file included from /var/root/obabel/ob-src/src/atom.cpp:28:
In file included from /var/root/obabel/ob-src/include/openbabel/ring.h:29:
/var/root/obabel/ob-src/include/openbabel/typer.h:70:1: error: thread-local storage is not supported <span class="k">for</span> the current target
THREAD_LOCAL OB_EXTERN OBAtomTyper atomtyper<span class="p">;</span>
^
/var/root/obabel/ob-src/include/openbabel/mol.h:35:24: note: expanded from macro <span class="s1">'THREAD_LOCAL'</span>
<span class="c1"># define THREAD_LOCAL thread_local</span>
^
In file included from /var/root/obabel/ob-src/src/atom.cpp:28:
In file included from /var/root/obabel/ob-src/include/openbabel/ring.h:29:
/var/root/obabel/ob-src/include/openbabel/typer.h:84:1: error: thread-local storage is not supported <span class="k">for</span> the current target
THREAD_LOCAL OB_EXTERN OBAromaticTyper aromtyper<span class="p">;</span>
^
/var/root/obabel/ob-src/include/openbabel/mol.h:35:24: note: expanded from macro <span class="s1">'THREAD_LOCAL'</span>
<span class="c1"># define THREAD_LOCAL thread_local</span>
^
/var/root/obabel/ob-src/src/atom.cpp:107:10: error: thread-local storage is not supported <span class="k">for</span> the current target
extern THREAD_LOCAL OBAromaticTyper aromtyper<span class="p">;</span>
^
/var/root/obabel/ob-src/include/openbabel/mol.h:35:24: note: expanded from macro <span class="s1">'THREAD_LOCAL'</span>
<span class="c1"># define THREAD_LOCAL thread_local</span>
^
/var/root/obabel/ob-src/src/atom.cpp:108:10: error: thread-local storage is not supported <span class="k">for</span> the current target
extern THREAD_LOCAL OBAtomTyper atomtyper<span class="p">;</span>
^
/var/root/obabel/ob-src/include/openbabel/mol.h:35:24: note: expanded from macro <span class="s1">'THREAD_LOCAL'</span>
<span class="c1"># define THREAD_LOCAL thread_local</span>
^
/var/root/obabel/ob-src/src/atom.cpp:109:10: error: thread-local storage is not supported <span class="k">for</span> the current target
extern THREAD_LOCAL OBPhModel phmodel<span class="p">;</span>
^
/var/root/obabel/ob-src/include/openbabel/mol.h:35:24: note: expanded from macro <span class="s1">'THREAD_LOCAL'</span>
<span class="c1"># define THREAD_LOCAL thread_local</span>
^
<span class="m">5</span> errors generated.
make<span class="o">[</span><span class="m">2</span><span class="o">]</span>: *** <span class="o">[</span>src/CMakeFiles/openbabel.dir/build.make:76: src/CMakeFiles/openbabel.dir/atom.cpp.o<span class="o">]</span> Error <span class="m">1</span>
make<span class="o">[</span><span class="m">1</span><span class="o">]</span>: *** <span class="o">[</span>CMakeFiles/Makefile2:1085: src/CMakeFiles/openbabel.dir/all<span class="o">]</span> Error <span class="m">2</span>
make: *** <span class="o">[</span>Makefile:129: all<span class="o">]</span> Error <span class="m">2</span>
</div></code></pre><p>Strange but it is alright, there is nothing that hasn't been answered on the internet.</p><p>I did a little digging around and could not find a solution 😔</p><p>As a temporary fix, I disabled multithreading by going and commenting the lines in the source code.</p><img src="/assets/posts/open-babel/s1.png" alt=""Open-Babel running on my iPad""/><h2>Packaging as a deb</h2><p>This was pretty straight forward, I tried installing it on my iPad and it was working pretty smoothly.</p><h2>Moment of Truth</h2><p>So I airdropped the .deb to my phone and tried installing it, the installation was succesful but when I tried <code>obabel</code> it just abborted.</p><img src="/assets/posts/open-babel/s2.jpg" alt=""Open Babel crashing""/><p>Turns out because I had created an install target of a seprate folder while compiling, the binaries were refferencing a non-existing dylib rather than those in the /usr/lib folder. As a quick workaround I transferred the deb folder to my laptop and used otool and install_name tool: <code>install_name_tool -change /var/root/obabel/ob-build/lib/libopenbabel.7.dylib /usr/lib/libopenbabel.7.dylib</code> for all the executables and then signed them using jtool</p><p>I then installed it and everything went smoothly, I even ran <code>obabel</code> and it executed perfectly, showing the version number 3.1.0 ✌️ Ahh, smooth victory.</p><p>Nope. When I tried converting from SMILES to pdbqt, it gave an error saying plugin not found. This was weird.</p><img src="/assets/posts/open-babel/s3.jpg" alt=""Open Babel Plugin Error""/><p>So I just copied the entire build folder from my iPad to my phone and tried runnig it. Oops, Apple Sandbox Error, Oh no!</p><p>I spent 2 hours around this problem, only to see the documentation and relaise I hadn't setup the environment variable 🤦♂️</p><h2>The Final Fix ( For Now )</h2><pre><code><div class="highlight"><span></span><span class="nb">export</span> <span class="nv">BABEL_DATADIR</span><span class="o">=</span><span class="s2">"/usr/share/openbabel/3.1.0"</span>
<span class="nb">export</span> <span class="nv">BABEL_LIBDIR</span><span class="o">=</span><span class="s2">"/usr/lib/openbabel/3.1.0"</span>
</div></code></pre><p>This was the tragedy of trying to compile something without knowing enough about compiling. It is 11:30 as of writing this. Something as trivial as this should not have taken me so long. Am I going to try to compile AutoDock Vina next? 🤔 Maybe.</p><p>Also, if you want to try Open Babel on you jailbroken iDevice, install the package from my repository ( You, need to run the above mentioned final fix :p ). This was tested on iOS 13.5, I cannot tell if it will work on others or not.</p><p>Hopefully, I add some more screenshots to this post.</p><p>Edit 1: Added Screenshots, had to replicate the errors.</p></div><span>Tagged with: </span><ul class="tag-list"><li><a href="/tags/ios">iOS</a></li><li><a href="/tags/jailbreak">Jailbreak</a></li><li><a href="/tags/cheminformatics">Cheminformatics</a></li><li><a href="/tags/openbabel">Open-Babel</a></li></ul></article></div><footer><p>Made with ❤️ using <a href="https://github.com/johnsundell/publish">Publish</a></p><p><a href="/feed.rss">RSS feed</a></p></footer></body></html>
|