Commit Graph

4 Commits

Author SHA1 Message Date
cm8 2751616753 fix libdir name issue, copy tc libs for production targets
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
2018-06-24 04:25:08 +02:00
cm8 4cbbf2325b cleanup mips32r2.py and use python class inheritance for flavors
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.
2018-06-23 11:44:05 +02:00
cm8 2024187891 mips uclibc target mips32r2_uclibc_dyn added
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++
2018-06-21 11:22:41 +02:00
cm8 c1f281eedf initial mips platform support, import from issue 48
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.
2018-06-19 17:56:53 +02:00