Files
CoderSherlock.github.io/post/Cross-Compile-Seafile-2-ARM/index.html
T
2016-08-16 14:52:24 -04:00

362 lines
11 KiB
HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
<head>
<title>
Cross Compile Seafile 2 ARM // Mil años de solitario
</title>
<link href="http://gmpg.org/xfn/11" rel="profile">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="author" content="">
<meta name="generator" content="Hugo 0.16" />
<meta property="og:title" content="Cross Compile Seafile 2 ARM" />
<meta property="og:description" content="" />
<meta property="og:type" content="website" />
<meta property="og:locale" content="en_US" />
<meta property="og:url" content="https://codersherlock.github.io/post/Cross-Compile-Seafile-2-ARM/" />
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/base-min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/pure-min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/grids-responsive-min.css">
<link rel="stylesheet" href="https://codersherlock.github.io//css/redlounge.css">
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
<link href='//fonts.googleapis.com/css?family=Raleway:400,200,100,700,300,500,600,800' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Libre+Baskerville:400,700,400italic' rel='stylesheet' type='text/css'>
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/touch-icon-144-precomposed.png">
<link rel="shortcut icon" href="/favicon.png">
<link href="" rel="alternate" type="application/rss+xml" title="Mil años de solitario" />
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.7/styles/tomorrow-night-bright.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.7/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<link rel="stylesheet" type="text/css" href="/css/my-categories.css">
</head>
<body>
<div id="layout" class="pure-g">
<div class="sidebar pure-u-1 pure-u-md-1-4">
<div class="header">
<img src="/img/photo.jpg" class="sidebarphoto">
<h1 class="brand-title">Mil años de solitario</h1>
<h2 class="brand-tagline">A boy who can&#39;t step into academia</h2>
<nav class="nav">
<ul class="nav-list">
<li class="nav-item"><span class="nav-item-separator">//</span><a href="https://codersherlock.github.io/">Home</a></li>
<li class="nav-item"><span class="nav-item-separator">//</span><a href="/about">About</a></li>
<li class="nav-item"><span class="nav-item-separator">//</span><a href="/post">Blog</a></li>
</ul>
</nav>
<div class="social-buttons">
<a href="mailto:haopengzhan@gmail.com" target="_blank"><i class='fa fa-email'></i></a>
</div>
</div>
</div>
<div class="content pure-u-1 pure-u-md-3-4">
<a name="top"></a>
<div id="toc" class="pure-u-1 pure-u-md-1-4">
<small class="toc-label">Contents</small>
<nav id="TableOfContents">
<ul>
<li><a href="#cross-compile-seafile-to-arm-platform">Cross Compile Seafile to ARM platform</a>
<ul>
<li><a href="#motivation">Motivation</a></li>
<li><a href="#pre-work">Pre-work</a>
<ul>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#link-with-standalone-tool-chains">Link with standalone tool-chains</a></li>
<li><a href="#original-system-environment-configuration">Original System Environment Configuration</a></li>
</ul></li>
<li><a href="#compile-process">Compile Process</a>
<ul>
<li><a href="#libsearpc">libsearpc</a>
<ul>
<li><a href="#glib">glib</a>
<ul>
<li><a href="#libiconv">libiconv</a></li>
<li><a href="#libffi">libffi</a></li>
<li><a href="#gettext">gettext</a></li>
</ul></li>
<li><a href="#libjasson">libjasson</a></li>
</ul></li>
<li><a href="#ccnet">ccnet</a>
<ul>
<li><a href="#libuuid">libuuid</a></li>
</ul></li>
<li><a href="#seafile">seafile</a></li>
</ul></li>
<li><a href="#preferences">Preferences</a></li>
</ul></li>
</ul>
</nav>
</div>
<section class="post">
<h1 class="post-title">
<a href="/post/Cross-Compile-Seafile-2-ARM/">Cross Compile Seafile 2 ARM</a>
</h1>
<h3 class="post-subtitle">
</h3>
<span class="post-date">
<span class="post-date-day"><sup>30</sup></span><span class="post-date-separator">/</span><span class="post-date-month">Jul</span> <span class="post-date-year">2016</span>
</span>
<div class="post-categories">
<a class="post-category post-category-2016-07" href="https://codersherlock.github.io//categories/2016-07">2016-07</a>
</div>
<h1 id="cross-compile-seafile-to-arm-platform">Cross Compile Seafile to ARM platform</h1>
<h2 id="motivation">Motivation</h2>
<p>This project is working for delta sync from mobile to server. Currently, there&rsquo;s no mobile program/solution has supporting to delta sync(Include Dropbox/ Goggle Drive). But the truth is that almost every pc version sync program can work as delta sync properly or not. So in this article, I&rsquo;ll provide a workbench for cross compilation and evaluation. And finally come up with a reason of how to port better incremental synchronize solution on mobile platform.</p>
<h2 id="pre-work">Pre-work</h2>
<p>Basically, I used the native android compilation tool-chains, <a href="https://developer.android.com/ndk/downloads/index.html">Android NDK</a>, as working tools. Due to my working situation, I use a <a href="https://shield.nvidia.com/tablet/k1">Nvidia Shield Tablet</a> as target device. As <em>Zengwen</em> said in his <a href="http://zwyuan.github.io/2016/07/17/cross-compile-glib-for-android/">blog</a>, newest updated NDK might has some issue which can influence compilation progress. So you can find <a href="http://stackoverflow.com/questions/6849981/where-do-i-find-old-versions-of-android-ndk">other version</a> of NDK once you have some problems. Based on what <em>Zengwen&rsquo;s</em> blog mentioned, we can write following useful system environment and export in terminal.</p>
<h3 id="prerequisites">Prerequisites</h3>
<pre><code>$ sudo apt-get install build-essential
$ sudo apt-get install pkg-config automake autoconf libtool
</code></pre>
<h3 id="link-with-standalone-tool-chains">Link with standalone tool-chains</h3>
<p>In order to build standalone tool-chains, we need first to export following system environment. After doing that, we can use following command to build a standalone tool-chains from downloaded NDK.</p>
<pre><code>$ ${NDK}/build/tools/make-standalone-toolchain.sh \
--toolchain=arm-linux-androideabi-4.9 \
--stl=gnustl \
--arch=arm \
--ndk-dir=/home/moslab/Android/android-ndk-r12b \
--package-dir=/home/moslab/Android \
--install-dir=/home/moslab/Android/android-ndk-toolchain \
--platform=android-22
</code></pre>
<h3 id="original-system-environment-configuration">Original System Environment Configuration</h3>
<p>[TODO]-&gt; I will fix this part later.</p>
<pre><code># Android NDK sources and standalone toolchain is put here
export DEV=~/Android/
# All the built binaries, libs and their header will be installed here
export PREFIX=/opt/android
# Don't mix up .pc files from your host and build target
export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig
# GCC for Android version to use
# 4.9 is the only available version since NDK r11!
export GCC_VER=4.9
# The building system we are using (Linux x86_64)
export BUILD_SYS=x86_64-linux-gnu
# Set Android target API level
export ANDROID_API=22
# Set Android target arch
export ANDROID_ARCH=arm
# Set Android target name, according to Table 2 in
# https://developer.android.com/ndk/guides/standalone_toolchain.html
export ANDROID_TARGET=armv7-none-linux-androideabi
# The cross-compile toolchain we use
export TOOLCHAIN=arm-linux-androideabi
# This is a symlink pointing to the real Android NDK r12b
export NDK=${DEV}/android-ndk
# The path of standalone NDK toolchain
# Refer to https://developer.android.com/ndk/guides/standalone_toolchain.html
export NDK_TOOLCHAIN=${DEV}/android-ndk-toolchain
# this one is the absolute, prebuilt path
export SYSROOT=${NDK}/platforms/android-${ANDROID_API}/arch-${ANDROID_ARCH}
# this one is the absolute, prebuilt path
export CROSS_PREFIX=${NDK}/toolchains/${TOOLCHAIN}-${GCC_VER}/prebuilt/linux-x86_64/bin/${TOOLCHAIN}
# Non-exhaustive lists of compiler + binutils
export AR=${CROSS_PREFIX}-ar
export AS=${CROSS_PREFIX}-as
export LD=${CROSS_PREFIX}-ld
export NM=${CROSS_PREFIX}-nm
export CC=${CROSS_PREFIX}-gcc
export CXX=${CROSS_PREFIX}-g++
export CPP=${CROSS_PREFIX}-cpp
export CXXCPP=${CROSS_PREFIX}-cpp
export STRIP=${CROSS_PREFIX}-strip
export RANLIB=${CROSS_PREFIX}-ranlib
export STRINGS=${CROSS_PREFIX}-strings
# Set build flags
# Refer to https://developer.android.com/ndk/guides/standalone_toolchain.html
export PATH=$PATH:${PREFIX}/bin:${PREFIX}/lib
export CFLAGS=&quot;--sysroot=${SYSROOT} -I${SYSROOT}/usr/include -I${PREFIX}/include -fPIE -DANDROID -Wno-multichar&quot;
export CXXFLAGS=${CFLAGS}
export CPPFLAGS=&quot;--sysroot=${SYSROOT} -I${SYSROOT}/usr/include -I${NDK_TOOLCHAIN}/include/c++/ -DANDROID -DNO_XMALLOC -mandroid&quot;
export LIBS=&quot;-lc -lstdc++ -ld&quot;
export LDFLAGS=&quot;-Wl,-rpath-link=-I${SYSROOT}/usr/lib -L${SYSROOT}/usr/lib -L${PREFIX}/lib -L${NDK_TOOLCHAIN}/lib&quot;
</code></pre>
<h2 id="compile-process">Compile Process</h2>
<p>To compile seafile, we should compile ccnet and libsearpc first. As for these two projects, they all have their own dependencies, so we must follow some order to run the compilation.</p>
<h3 id="libsearpc">libsearpc</h3>
<h4 id="glib">glib</h4>
<h5 id="libiconv">libiconv</h5>
<h5 id="libffi">libffi</h5>
<h5 id="gettext">gettext</h5>
<h4 id="libjasson">libjasson</h4>
<h3 id="ccnet">ccnet</h3>
<h4 id="libuuid">libuuid</h4>
<h3 id="seafile">seafile</h3>
<h2 id="preferences">Preferences</h2>
<ul>
<li><a href="http://zwyuan.github.io/2016/07/17/cross-compile-glib-for-android/">zwyuan</a></li>
</ul>
<div class="tags-list">
<span class="dark-red">Tags</span><span class="decorative-marker">//</span>
<a class="post-tag post-tag-android" href="https://codersherlock.github.io//tags/android">android</a>,
<a class="post-tag post-tag-arm" href="https://codersherlock.github.io//tags/arm">arm</a>,
</div>
<div class="paging">
<span class="paging-label">More Reading</span>
<div class="paging-newer">
<span class="dark-red">Newer</span><span class="decorative-marker">//</span>
<a class="paging-link" href="/post/Pokemon-Go-Hack/">Pokemon Go Hack</a>
</div>
</div>
</section>
<div class="footer">
<hr class="thin" />
<div class="pure-menu pure-menu-horizontal pure-menu-open">
<ul class="footer-menu">
</ul>
</div>
<p>&copy; 2016. All rights reserved.</p>
</div>
</div>
</div>
</body>
</html>