the script won't create another file (run-nonroot previously)
and instead carry out environment setup itself for the binary
links pointing at it - it's more readable and smaller this way
rework mips32r2.py file copy def - may be useful in other files,
eventually transport this functionality to base.py (!?) later
on, after this branch is merged to master
The following applies to mips32r2_uclibc_glibcxx_dyn target,
only:
- libstdc++.so* tc libs are copied to INSTALL/lib/<full-arch>
- i.e. there is an example showing how to copy other libs from
the toolchain to supplement the installation files (in case
they are found to be missing on a target machine)
- if target already supplies libstdc++.so*, copied ones will be
preferred for kiwix-tools binaries (when run from a non-std
installation directory on the target), drawback in this case
is extra space occupied by the lib, but the gain is less
hazzle on target boxes that lack libstdc++.so*
- comment or modify the lines in mips32r2.py accordingly to the
setup of your mips target
added
mips32r2_uclibc_gclibcxx_dyn, (preferred atm, tested on prod hw)
mips32r2_uclibc_gclibcxx_static
targets (shared) and renamed previous uclibc ones to
mips32r2_uclibc_uclibcxx_dyn,
mips32r2_uclibc_uclibcxx_static
for clarity (i.e. non-shared, pure ones)
reworked builder classes to use inheritance of properties and
methods (instead of copying boiler plate code)
mips32r2_uclibc_gclibcxx_dyn target compiles and tested to run on
production targets such as avm routers modified with a freetz env.
See cm8/freetz@41d97c3789 for one of
many possible projects to build a working toolchain with. In short
- git clone
- umask 0022
- make menuconfig (choose expert, disable toolchain download and
let the toolchain/make scripts built a gcc-5.x one, do not forget
to set FREETZ_LIB_libuClibc__WITH_WCHAR=y)
- read the commit message for further info on long double math
peculiarities
- tested here with 0.9.33.2
Remember that swap will need to be running on the box, or else
kiwix-serve is likely to quit with "invalid lzma stream in cluster"
errors (if memory is too low).
If the box lacks library support such as libstdc++.so*, you can
copy them from the target toolchain libdir over to
BUILD_mips32r2_uclibc_gclibcxx_dyn/INSTALL/lib if there are
unsatisfied dependencies at runtime. (Which libraries need to be
supplemented this way depends on your firmware and/or freetz
configuration).
Another issue is the execution in non-standard installation
directories. LD_LIBRARY_PATH env needs to point to "our" lib
directory. If you tar INSTALL/ dir, transport the result to
an embedded device, untar and wan't to run from there, it is
best to wrap all the elf binaries with a shell script that
correctly sets LD_LIBRARY_PATH. This step has been automated,
but needs testing, see
kiwixbuild/patches/fixenv-run-in-nonstd-installdir.sh
for details.
This fixenv script is copied to INSTALL/bin during the
build and it should be run on the box, if kiwix-tools is to
reside in nonstd location (i.e. if files are not installed
or installable to /bin, /lib or their usr/ pendants).
Feel free to improve on automation of the necessary setup
steps to make mips port build and deployment easier.
ATM the uclibc toolchain buildable by freetz (see
https://github.com/freetz/freetz) is used. When
configuring freetz make sure
FREETZ_LIB_libuClibc__WITH_WCHAR=y
FREETZ_BUILD_TOOLCHAIN=y
are set, so uClibc++ as part of the toolchain is built with wchar_t
support. Eventually root_path definition in mips32r2.py (hardcoded
for now) needs to be adjusted. Some (all?) prebuilt, downloadable
tcs of the freetz project do not have wchar support in uClibc++ (but
uclibc does).
KNOWN PROBLEMS:
xapian-core currently does not compile with uClibc++
The target mips32r2_dyn is tested to fully compile, but untested to
run. Target mips32r2_static reaches kiwix-lib and fails linking
pthread. For further details see the comments in #48.
Some known problems:
* hardcoded values of icudt58l in some dependent packages
unnoticable during compile, but will affect runtimes
* the libdir name problem
x86_64-linux-gnu <> mips-linux-gnu
* pthread linking problem when compiling kiwix-lib statically
may be a meson issue, since it somewhat claims to properly
handle pthread linking in cross-compile situations; there
are some url links in #48 laying out a proper workaround.
The deps will be build only if we are in a cron.
In this case, we can directly build only the target.
But in other case, we have to build the target and its dependencies.
The CI is using ubuntu artful and the deb package is compiled with another
compiler that gcc-4.8 (used in other project CI).
As we compile everything with gcc-4.8, we must compile our own ctpp2.
We build with gcc-5 because of zimSplit using ofstream.swap method.
Latest version of zimSplit doesn't use it anymore so let's compile
everything with default gcc.
See openzim/zim-tools@a959609839
We also explicitly set the list of package to install per job, so
less packages are installed.
If the `dep` is a two char string (as "qt"), the `platform, name = dep`
will split the string and search for 't' dependency in 'q' platform.
So, we have to be sure that the dep is a tuple before splitting it.
- Disable icuio and layoutex.
- Hardcode UTF8 as charset (we always use utf8 and hardcoding him improve
performances)
- Do not include default utf headers
- Do not use `using namespace icu`
See http://source.icu-project.org/repos/icu/trunk/icu4c/readme.html#RecBuild
for more information about options.
Increment base dependencies version as we are compiling icu differently.
As we want to use qt and packages are available only since ubuntu artful, we
need to use docker because travis-ci is ubuntu trusty.
We could also build qt, but it takes too many time and travis timeout.
Enable `--no-daemon` : Using the daemon make gradle keep "configuration"
(like plugin path). If gradle installation path change, it will break
kiwix-android build.
Enable `--build-cache` : This is not the case by default :/
This should greatly improve compilation speed.