Partiamo da una revisione del repository svn di openwrt

  mkdir ~/openwrt
  cd ~/openwrt
  svn co -r30610 svn://svn.openwrt.org/openwrt/trunk r30610
  cd r30610
  ./scripts/feeds update -a
  ./scripts/feeds install -a

Abbiamo come requisito l'uso di glibc come C library (invece di uClibc)
Applichiamo una patch che risulta essere necessaria per compilare con glibc
(https://dev.openwrt.org/ticket/9483#comment:16)

riga 61 di package/base-files/files/lib/upgrade/common.sh
- install_file /etc/resolv.conf /etc/functions.sh /lib/upgrade/*.sh $RAMFS_COPY_DATA
+ install_file /etc/resolv.conf /etc/functions.sh /lib/* /lib/upgrade/*.sh $RAMFS_COPY_DATA

Prima compilazione, configuriamo solo la piattaforma

    make menuconfig
      (per selezionare Target System (Atheros AR7xxx/AR9xxx) Subtarget (Generic) e Profile (TP-LINK TL-WR1043N/ND)
      [*] Advanced configuration options (for developers)  --->
        [*]   Toolchain Options  --->
          [*]   glibc 2.14

    make defconfig
    ln -sf ../../dl
    make download

    time ionice -c 3 nice -n 20 make (ATTENZIONE -j 2 dà problemi)
       (completa in circa 3 ore)

Seconda compilazione, configuriamo i pacchetti che ci servono:

    make menuconfig
      [*] Advanced configuration options (for developers)  --->
        [*]   Toolchain Options  --->
          [*]   Build gdb
      [*] Build the OpenWrt SDK
      [*] Build the OpenWrt based Toolchain
      Base system  --->
        --- libpthread
        <*> librt
      Libraries  --->
        <*> libffi
        <*> libgcrypt
        --- libgpg-error
        <*> libiconv-full
        <*> libintl-full
        <*> libpcre
        <*> zlib
      LuCI  --->
        Collections  --->
          <M> luci
      Network  --->
        Firewall  --->
          --- iptables  --->
            ---   iptables-mod-conntrack
            <*>   iptables-mod-conntrack-extra
            <*>   iptables-mod-ipopt
            ---   iptables-mod-nat
        Routing and Redirection  --->
          <*> ip
      Kernel modules  --->
        Netfilter Extensions  --->
          --- kmod-ipt-core
          ---   kmod-ipt-conntrack
          ---   kmod-ipt-conntrack-extra
          --- kmod-ipt-ipopt

    time ionice -c 3 nice -n 20 make -j 2
       (completa in circa 32 min)
    time ionice -c 3 nice -n 20 make toolchain/install -j 2
       (completa in circa 9 min)

cross-Compiliamo le librerie requisiti di netsukuku: pth, glib, libgee

export NTK_TOOLCHAIN=~/openwrt/r30610/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_glibc-2.14
export NTK_TARGET=~/openwrt/r30610/staging_dir/target-mips_r2_glibc-2.14
export NTK_SDK_HOST=~/openwrt/r30610/build_dir/target-mips_r2_glibc-2.14/OpenWrt-SDK-ar71xx-for-Linux-i686-gcc-4.6-linaro_glibc-2.14/staging_dir/host
export NTK_ROOT=~/openwrt/r30610/build_dir/target-mips_r2_glibc-2.14/root-ar71xx
# questo per avere accesso agli eseguibili mips-openwrt-linux-gcc
export PATH=${NTK_TOOLCHAIN}/bin:${PATH}
# Questa variabile d'ambiente sembra necessaria a questa toolchain, deve essere
#  valorizzata sia al momento del configure sia del make.
export STAGING_DIR=~/openwrt/r30610/staging_dir


Posizionarsi nella directory in cui si è scompattato pth-2.0.7


STAGING_PREFIX=~/openwrt/r30610/staging_dir/target-mips_r2_glibc-2.14/usr \
PKG_CONFIG_PATH=${NTK_TARGET}/usr/lib/pkgconfig \
PATH=${NTK_SDK_HOST}/bin:$PATH \
CPPF0="-I${NTK_TARGET}/usr/include" \
CPPF1="" \
CPPF2="" \
CPPFLAGS="-Os $CPPF0 $CPPF1 $CPPF2 $CPPFLAGS" \
CF0="-I${NTK_TARGET}/usr/include" \
CF1="" \
CF2="" \
CFLAGS="-Os $CF0 $CF1 $CF2 $CFLAGS" \
L0="-L${NTK_TARGET}/usr/lib" \
L1="" \
L2="" \
LDFLAGS="-Os $L0 $L1 $L2 $LDFLAGS" \
./configure \
     --host=mips-openwrt-linux-gnu \
     --prefix=/opt/pth-2.0.7

make &&
make install DESTDIR=~/pre-pkg/mips-glibc

export PKG_INSTALL_DIR=~/pre-pkg/mips-glibc/opt/pth-2.0.7
export FINAL_DIR=~/pkg/mips-glibc/pth-2.0.7
export FINAL_DIR_DEV=~/pkg/mips-glibc/pth-2.0.7-dev

mkdir -p ${FINAL_DIR_DEV}
cp -a ${PKG_INSTALL_DIR}/* ${FINAL_DIR_DEV}

mkdir -p ${FINAL_DIR}/lib
cp -a ${PKG_INSTALL_DIR}/lib/*.so* ${FINAL_DIR}/lib
mips-openwrt-linux-gnu-strip --strip-unneeded `file ${FINAL_DIR}/lib/* | grep ELF | cut -d: -f1`


Posizionarsi nella directory in cui si è scompattato glib-2.28.8
# applicare le patch previste
 for i in ~/openwrt/r30610/feeds/packages/libs/glib2/patches/*.patch
 do cat $i | patch -p1
 done

STAGING_PREFIX=~/openwrt/r30610/staging_dir/target-mips_r2_glibc-2.14/usr \
PKG_CONFIG_PATH=${NTK_TARGET}/usr/lib/pkgconfig \
PATH=${NTK_SDK_HOST}/bin:$PATH \
CPPF0="-I${NTK_TARGET}/usr/include" \
CPPF1="-I${NTK_TARGET}/usr/lib/libintl-full/include" \
CPPF2="-I${NTK_TARGET}/usr/lib/libiconv-full/include" \
CPPFLAGS="-Os $CPPF0 $CPPF1 $CPPF2 $CPPFLAGS" \
CF0="-I${NTK_TARGET}/usr/include" \
CF1="-I${NTK_TARGET}/usr/lib/libintl-full/include" \
CF2="-I${NTK_TARGET}/usr/lib/libiconv-full/include" \
CFLAGS="-Os $CF0 $CF1 $CF2 $CFLAGS" \
L0="-L${NTK_TARGET}/usr/lib" \
L1="-L${NTK_TARGET}/usr/lib/libintl-full/lib" \
L2="-L${NTK_TARGET}/usr/lib/libiconv-full/lib" \
LDFLAGS="-Os $L0 $L1 $L2 $LDFLAGS" \
glib_cv_stack_grows=no \
glib_cv_uscore=no \
ac_cv_func_posix_getpwuid_r=yes \
ac_cv_func_posix_getgrgid_r=yes \
./configure \
     --host=mips-openwrt-linux-gnu \
     --with-libiconv=gnu \
     --enable-shared \
     --enable-static \
     --disable-selinux \
     --disable-fam \
     --prefix=/opt/glib-2.28.8

make &&
make install DESTDIR=~/pre-pkg/mips-glibc

export PKG_INSTALL_DIR=~/pre-pkg/mips-glibc/opt/glib-2.28.8
export FINAL_DIR=~/pkg/mips-glibc/glib-2.28.8
export FINAL_DIR_DEV=~/pkg/mips-glibc/glib-2.28.8-dev

mkdir -p ${FINAL_DIR_DEV}/include/glib-2.0
cp -a ${PKG_INSTALL_DIR}/include/glib-2.0/* ${FINAL_DIR_DEV}/include
cp -a ${PKG_INSTALL_DIR}/lib/glib-2.0/include/*.h ${FINAL_DIR_DEV}/include/glib-2.0
cp -a ${PKG_INSTALL_DIR}/include/gio-unix-2.0/* ${FINAL_DIR_DEV}/include
mkdir -p ${FINAL_DIR_DEV}/lib
cp -a ${PKG_INSTALL_DIR}/lib/glib-2.0 ${FINAL_DIR_DEV}/lib
cp -a ${PKG_INSTALL_DIR}/lib/*.{so*,a,la} ${FINAL_DIR_DEV}/lib
mkdir -p ${FINAL_DIR_DEV}/lib/pkgconfig
cp -a ${PKG_INSTALL_DIR}/lib/pkgconfig/*.pc ${FINAL_DIR_DEV}/lib/pkgconfig
mkdir -p ${FINAL_DIR_DEV}/share/aclocal
cp -a ${PKG_INSTALL_DIR}/share/aclocal/*.m4 ${FINAL_DIR_DEV}/share/aclocal

mkdir -p ${FINAL_DIR}/lib
cp -a ${PKG_INSTALL_DIR}/lib/*.so* ${FINAL_DIR}/lib
mips-openwrt-linux-gnu-strip --strip-unneeded `file ${FINAL_DIR}/lib/* | grep ELF | cut -d: -f1`


Posizionarsi nella directory in cui si è scompattato libgee-0.6.1

STAGING_PREFIX=~/openwrt/r30610/staging_dir/target-mips_r2_glibc-2.14/usr \
PKG_CONFIG_PATH=/home/luca/pkg/mips-glibc/glib-2.28.8-dev/lib/pkgconfig:${NTK_TARGET}/usr/lib/pkgconfig \
PATH=${NTK_SDK_HOST}/bin:$PATH \
CPPF0="-I${NTK_TARGET}/usr/include" \
CPPF1="-I/home/luca/pkg/mips-glibc/glib-2.28.8-dev/include" \
CPPF2="-I/home/luca/pkg/mips-glibc/glib-2.28.8-dev/lib/glib-2.0/include" \
CPPFLAGS="-Os $CPPF0 $CPPF1 $CPPF2 $CPPFLAGS" \
CF0="-I${NTK_TARGET}/usr/include" \
CF1="-I/home/luca/pkg/mips-glibc/glib-2.28.8-dev/include" \
CF2="-I/home/luca/pkg/mips-glibc/glib-2.28.8-dev/lib/glib-2.0/include" \
CFLAGS="-Os $CF0 $CF1 $CF2 $CFLAGS" \
L0="-L${NTK_TARGET}/usr/lib" \
L1="-L/home/luca/pkg/mips-glibc/glib-2.28.8-dev/lib" \
L2="" \
LDFLAGS="-Os $L0 $L1 $L2 $LDFLAGS" \
./configure \
     --host=mips-openwrt-linux-gnu \
     --prefix=/opt/libgee-0.6.1

Serve che si veda la libreria glib-2 nella path assoluta in cui era stata configurata
sudo ln -s $HOME/pre-pkg/mips-glibc/opt/glib-2.28.8 /opt

make &&
make install DESTDIR=~/pre-pkg/mips-glibc

sudo rm /opt/glib-2.28.8

export PKG_INSTALL_DIR=~/pre-pkg/mips-glibc/opt/libgee-0.6.1
export FINAL_DIR=~/pkg/mips-glibc/libgee-0.6.1
export FINAL_DIR_DEV=~/pkg/mips-glibc/libgee-0.6.1-dev

mkdir -p ${FINAL_DIR_DEV}/include
cp -a ${PKG_INSTALL_DIR}/include/* ${FINAL_DIR_DEV}/include
mkdir -p ${FINAL_DIR_DEV}/lib/pkgconfig
cp -a ${PKG_INSTALL_DIR}/lib/*.{so*,a,la} ${FINAL_DIR_DEV}/lib
cp -a ${PKG_INSTALL_DIR}/lib/pkgconfig/*.pc ${FINAL_DIR_DEV}/lib/pkgconfig

mkdir -p ${FINAL_DIR}/lib
cp -a ${PKG_INSTALL_DIR}/lib/*.so* ${FINAL_DIR}/lib
mips-openwrt-linux-gnu-strip --strip-unneeded `file ${FINAL_DIR}/lib/* | grep ELF | cut -d: -f1`




Torniamo nella directory dove abbiamo compilato openwrt.
Creata una cartella "files" per mettere configurazioni e altri files
 ulteriori alla compilazione.

cd ~/openwrt/r30610
mkdir -p files/opt
cp -a /home/luca/pkg/mips-glibc/pth-2.0.7 files/opt/pth-2.0.7
cp -a /home/luca/pkg/mips-glibc/glib-2.28.8 files/opt/glib-2.28.8
cp -a /home/luca/pkg/mips-glibc/libgee-0.6.1 files/opt/libgee-0.6.1

Rifare la compilazione del firmware
    time ionice -c 3 nice -n 20 make -j 2
       (completa in circa 6 min)