Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mips32r2 #203

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open

Mips32r2 #203

wants to merge 8 commits into from

Commits on Jun 19, 2018

  1. 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.
    cm8 committed Jun 19, 2018
    Configuration menu
    Copy the full SHA
    c1f281e View commit details
    Browse the repository at this point in the history

Commits on Jun 21, 2018

  1. 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++
    cm8 committed Jun 21, 2018
    Configuration menu
    Copy the full SHA
    2024187 View commit details
    Browse the repository at this point in the history

Commits on Jun 23, 2018

  1. 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@41d97c3 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.
    cm8 committed Jun 23, 2018
    Configuration menu
    Copy the full SHA
    4cbbf23 View commit details
    Browse the repository at this point in the history

Commits on Jun 24, 2018

  1. 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
    cm8 committed Jun 24, 2018
    Configuration menu
    Copy the full SHA
    2751616 View commit details
    Browse the repository at this point in the history
  2. avoid heredoc expanding variables in fixenv-nonst-libdir script

    necessary to output run-nonroot script correctly
    cm8 committed Jun 24, 2018
    Configuration menu
    Copy the full SHA
    615e994 View commit details
    Browse the repository at this point in the history
  3. rework fixenv-nonstd-libdir script

    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
    cm8 committed Jun 24, 2018
    Configuration menu
    Copy the full SHA
    26e6b81 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    673a37d View commit details
    Browse the repository at this point in the history

Commits on Jun 25, 2018

  1. Configuration menu
    Copy the full SHA
    99d3c4b View commit details
    Browse the repository at this point in the history