cross-rs / cross-toolchains

Additional Dockerfiles and crosstool-ng config files to build additional toolchains.
Apache License 2.0
88 stars 16 forks source link

Add support for `mipsel-unknown-linux-uclibc` #16

Open CuckooEXE opened 1 year ago

CuckooEXE commented 1 year ago

There is built-in support for mipsel-unknown-linux-{gnu,musl} in cross, however, this adds uclibc as an additional stdlib.

I generated the mipsel-unknown-linux-uclibc.config.in file by running ct-ng mips-unknown-linux-uclibc (which is a pre-configured sample), and changed the endian-ness to little.

The Dockerfile.mipsel-unknown-linux-uclibc file is largely based on the docker/Dockerfile.arm-unknown-linux-gnueabihf from the cross project.

CuckooEXE commented 1 year ago

The container builds just fine, but testing doesn't work completely work. @Alexhuszagh gave me the snippet

test() {
  DYLIB=1 STD=1 RUN=1 TARGET=$target \
    CROSS_TARGET_AARCH64_LINUX_ANDROID_IMAGE="ghcr.io/cross-rs/$target:local" \
    ci/test.sh
}

to test with, and this doesn't work. Neither does cross +nightly run --target mipsel-unknown-linux-uclibc on a fresh cargo new project.

The test function gives this output:

+ cargo metadata --format-version 1 --filter-platform mipsel-unknown-linux-uclibc
[cross] warning: `cross` does not provide a Docker image for target mipsel-unknown-linux-uclibc, specify a custom image in `Cross.toml`.
[cross] note: Falling back to `cargo` on the host.

Not sure why it's not finding my local image

Alexhuszagh commented 1 year ago
CROSS_TARGET_AARCH64_LINUX_ANDROID_IMAGE

This part is wrong: CROSS_TARGET_AARCH64_LINUX_ANDROID_IMAGE. It should be CROSS_TARGET_MIPSEL_UNKNOWN_LINUX_UCLIBC_IMAGE. Also, just generally we tend to add a -cross suffix to all our images, just to avoid any conflicts with those in the main repository, since sometimes we have overlap for people who want to use older glibc versions, etc.

Alexhuszagh commented 1 year ago

Once everything works, also please add an entry to the README so people know your target is now supported. Something like

| Target Name                           | Image Name                                  |
|:-------------------------------------:|:-------------------------------------------:|
| aarch64-apple-darwin                  | aarch64-apple-darwin-cross                  |
| aarch64-apple-ios                     | aarch64-apple-ios-cross                     |
| aarch64-pc-windows-msvc               | aarch64-pc-windows-msvc-cross               |
| mipsel-unknown-linux-uclibc           | /mipsel-unknown-linux-uclibc-cross          |

Where the added line is | mipsel-unknown-linux-uclibc | /mipsel-unknown-linux-uclibc-cross |.

CuckooEXE commented 1 year ago

Updated the Dockerfile name, but still not getting the test to run properly

Alexhuszagh commented 1 year ago

Updated the Dockerfile name, but still not getting the test to run properly

I've been busy today, getting to this shortly. I can try to run the tests and build the image myself and see how it goes from there.

Alexhuszagh commented 1 year ago

Fix the above environment variables, update the README to mention the new target, and this is ready for merging. Nice work, thank you.

Alexhuszagh commented 1 year ago

Do you mind if I make some changes directly to this PR? I can fix up some of the stuff with the template file, so it uses the correct placeholders and uses the Rust mirrors instead of relying on third-party broken mirrors (or unreliable ones).

CuckooEXE commented 1 year ago

Apologies for the late response, please make any changes you see fit! I'll be updating based on your earlier comment right now

Alexhuszagh commented 1 year ago

Apologies for the late response, please make any changes you see fit! I'll be updating based on your earlier comment right now

No worries, you're doing us a favor. Also, I'm currently waiting on https://github.com/cross-rs/cross/pull/1087 to merge, which will make full configuration support for this possible. I've added a sample target for big-endian MIPS uclibc to test this and it fully works:

https://github.com/Alexhuszagh/cross-toolchains/blob/uclibc/crosstool-ng/mips-unknown-linux-uclibc-cross.config.in

I will be giving you co-author credit for that file btw. Once I make my commits, feel free to squash the commits to remove my commits from the history (you don't need to credit me).

CuckooEXE commented 1 year ago

What changes are you making to the configuration file? I already encountered an issue with my own use-case; the embedded device I'm developing for is running libuClibc-0.9.33.2.so, however in my configuration file it's stuck on libuClibc-1.0.31.so.

Do we want to add a configuration variable for changing the version of uClibc that gets compiled?

Alexhuszagh commented 1 year ago

What changes are you making to the configuration file? I already encountered an issue with my own use-case; the embedded device I'm developing for is running libuClibc-0.9.33.2.so, however in my configuration file it's stuck on libuClibc-1.0.31.so.

Do we want to add a configuration variable for changing the version of uClibc that gets compiled?

Only major change is to use the Rust CI mirrors for ISL, rather than another third part source.

Alexhuszagh commented 1 year ago

The other is allowing you to change the uclibc, gcc, and other versions when configuring using placeholders. That needs the above PR to merge the though before uclibc configuration works. But it should then work with pre-1.0 uclibc.

CuckooEXE commented 1 year ago

Ah perfect! Thank you so much for all the assistance with this. I'm looking forward to contributing more at some point :)

Alexhuszagh commented 1 year ago

#1087 is getting merged now, so I'll post the diff for my config file and yours (and show you how to configure it for an older uclibc version):

cargo xtask configure-crosstool mips-unknown-linux-uclibc-cross --uclibc-version "0.9.33.2"

The diff is below. You should just be able to apply it (I think you have to do it in reverse), move it to the crosstool-ng directory, configure it once https://github.com/cross-rs/cross/actions/runs/3291170840 merges, and then it will apply all the necessary changes.

49a51
> CT_BUILD_DIR="${CT_BUILD_TOP_DIR}/build"
< %CT_LINUX_V%
---
> CT_LINUX_V_4_20=y
> # CT_LINUX_V_4_19 is not set
> # CT_LINUX_V_4_18 is not set
> # CT_LINUX_V_4_17 is not set
> # CT_LINUX_V_4_16 is not set
> # CT_LINUX_V_4_15 is not set
> # CT_LINUX_V_4_14 is not set
> # CT_LINUX_V_4_13 is not set
> # CT_LINUX_V_4_12 is not set
> # CT_LINUX_V_4_11 is not set
> # CT_LINUX_V_4_10 is not set
> # CT_LINUX_V_4_9 is not set
> # CT_LINUX_V_4_4 is not set
> # CT_LINUX_V_4_1 is not set
> # CT_LINUX_V_3_16 is not set
> # CT_LINUX_V_3_13 is not set
> # CT_LINUX_V_3_12 is not set
> # CT_LINUX_V_3_10 is not set
> # CT_LINUX_V_3_4 is not set
> # CT_LINUX_V_3_2 is not set
> # CT_LINUX_V_2_6_32 is not set
> # CT_LINUX_NO_VERSIONS is not set
> CT_LINUX_VERSION="4.20.8"
250c274,279
< %CT_LINUX%
---
> CT_LINUX_later_than_4_8=y
> CT_LINUX_4_8_or_later=y
> CT_LINUX_later_than_3_7=y
> CT_LINUX_3_7_or_later=y
> CT_LINUX_later_than_3_2=y
> CT_LINUX_3_2_or_later=y
341c370,378
< %CT_UCLIBC_V%
---
> CT_UCLIBC_NG_V_1_0_31=y
> # CT_UCLIBC_NG_V_1_0_30 is not set
> # CT_UCLIBC_NG_V_1_0_29 is not set
> # CT_UCLIBC_NG_V_1_0_28 is not set
> # CT_UCLIBC_NG_V_1_0_27 is not set
> # CT_UCLIBC_NG_V_1_0_26 is not set
> # CT_UCLIBC_NG_V_1_0_25 is not set
> # CT_UCLIBC_NG_NO_VERSIONS is not set
> CT_UCLIBC_NG_VERSION="1.0.31"
347c384,393
< %CT_UCLIBC%
---
> CT_UCLIBC_later_than_1_0_23=y
> CT_UCLIBC_1_0_23_or_later=y
> CT_UCLIBC_later_than_1_0_21=y
> CT_UCLIBC_1_0_21_or_later=y
> CT_UCLIBC_later_than_1_0_15=y
> CT_UCLIBC_1_0_15_or_later=y
> CT_UCLIBC_later_than_1_0_0=y
> CT_UCLIBC_1_0_0_or_later=y
> CT_UCLIBC_later_than_0_9_33_2=y
> CT_UCLIBC_0_9_33_2_or_later=y
412c458,464
< %CT_GCC_V%
---
> CT_GCC_V_8=y
> # CT_GCC_V_7 is not set
> # CT_GCC_V_6 is not set
> # CT_GCC_V_5 is not set
> # CT_GCC_V_4_9 is not set
> # CT_GCC_NO_VERSIONS is not set
> CT_GCC_VERSION="8.3.0"
418c470,479
< %CT_GCC%
---
> CT_GCC_later_than_7=y
> CT_GCC_7_or_later=y
> CT_GCC_later_than_6=y
> CT_GCC_6_or_later=y
> CT_GCC_later_than_5=y
> CT_GCC_5_or_later=y
> CT_GCC_later_than_4_9=y
> CT_GCC_4_9_or_later=y
> CT_GCC_later_than_4_8=y
> CT_GCC_4_8_or_later=y
463c524
< # architecture-specific options
---
> # archictecture-specific options
592c653
< CT_ISL_MIRRORS="https://ci-mirrors.rust-lang.org/rustc"
---
> CT_ISL_MIRRORS="https://libisl.sourceforge.io"
713a775
> 

If you notice, there's a few differences: rather than hard-code the versions, we use placeholders (using Windows-style environment variables, since they aren't valid here). For example, we use %CT_UCLIBC_V% and%CT_UCLIBC%rather than the hard-coded versions. This allows us to customize the uclibc, GCC, and Linux versions when configuring. The items indocker/crosstool-configwill use the defaults, but it means you can use a uclibc version of0.9.33.2` just by configuring the above script.

The other is using the Rust CI mirrors for ISL, just to guarantee availability.

So if you can provide a value like that in crosstool-ng and then configure it with the default values, it's ready for merging ^_^.

Alexhuszagh commented 1 year ago

We might also need to provide a config for the mirrors, actually, since uclibc-ng only supports 1.0+, and the original uclibc is pre-1.0. I can do this by auto-detecting the version and determining which mirror to use.

We'll see if this commit https://github.com/crosstool-ng/crosstool-ng/commit/dab2d8011ea67118348a6bd28ae3583960c1b5c3 gets in the way however. We're using 1.24.0, so this shouldn't be an issue. We'll need to modify the following lines I believe:

CT_UCLIBC_NG_PKG_NAME="uClibc-ng"
CT_UCLIBC_NG_SRC_RELEASE=y
CT_UCLIBC_NG_PATCH_ORDER="global"
%CT_UCLIBC_V%
CT_UCLIBC_NG_MIRRORS="http://downloads.uclibc-ng.org/releases/${CT_UCLIBC_NG_VERSION}"
CT_UCLIBC_NG_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
CT_UCLIBC_NG_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
CT_UCLIBC_NG_ARCHIVE_FORMATS=".tar.xz .tar.lz .tar.bz2 .tar.gz"
CT_UCLIBC_NG_SIGNATURE_FORMAT="packed/.asc"

These should remove the _NG part, so for example, CT_UCLIBC_NG_PKG_NAME becomes CT_UCLIBC_PKG_NAME if using pre-1.0 versions.

Alexhuszagh commented 1 year ago

I'm running into a bug when pushing to this repository. If you apply the following patch then squash the commit history, this is ready for merging. Since the upstream configuration in cross has merged, this works out-of-the-box now. There's still issues with pre-1.0 uclibc, but those are due to sysnum.h issues and the libgcc toolchain for more recent GCC versions, not due to the config files themselves.

diff --git a/crosstool-ng/mips-unknown-linux-uclibc-cross.config.in b/crosstool-ng/mips-unknown-linux-uclibc-cross.config.in
new file mode 100644
index 0000000..e81b06b
--- /dev/null
+++ b/crosstool-ng/mips-unknown-linux-uclibc-cross.config.in
@@ -0,0 +1,704 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# crosstool-NG  Configuration
+#
+# This file was adapted from the crosstool-ng mips-unknown-linux-uclibc sample.
+CT_CONFIGURE_has_static_link=y
+CT_CONFIGURE_has_cxx11=y
+CT_CONFIGURE_has_wget=y
+CT_CONFIGURE_has_curl=y
+CT_CONFIGURE_has_make_3_81_or_newer=y
+CT_CONFIGURE_has_make_4_0_or_newer=y
+CT_CONFIGURE_has_libtool_2_4_or_newer=y
+CT_CONFIGURE_has_libtoolize_2_4_or_newer=y
+CT_CONFIGURE_has_autoconf_2_65_or_newer=y
+CT_CONFIGURE_has_autoreconf_2_65_or_newer=y
+CT_CONFIGURE_has_automake_1_15_or_newer=y
+CT_CONFIGURE_has_gnu_m4_1_4_12_or_newer=y
+CT_CONFIGURE_has_python_3_4_or_newer=y
+CT_CONFIGURE_has_bison_2_7_or_newer=y
+CT_CONFIGURE_has_python=y
+CT_CONFIGURE_has_git=y
+CT_CONFIGURE_has_md5sum=y
+CT_CONFIGURE_has_sha1sum=y
+CT_CONFIGURE_has_sha256sum=y
+CT_CONFIGURE_has_sha512sum=y
+CT_CONFIGURE_has_install_with_strip_program=y
+CT_CONFIG_VERSION_CURRENT="3"
+CT_CONFIG_VERSION="3"
+CT_MODULES=y
+
+#
+# Paths and misc options
+#
+
+#
+# crosstool-NG behavior
+#
+# CT_OBSOLETE is not set
+# CT_EXPERIMENTAL is not set
+# CT_DEBUG_CT is not set
+
+#
+# Paths
+#
+CT_LOCAL_TARBALLS_DIR="${HOME}/src"
+CT_SAVE_TARBALLS=y
+# CT_TARBALLS_BUILDROOT_LAYOUT is not set
+CT_WORK_DIR="${CT_TOP_DIR}/.build"
+CT_BUILD_TOP_DIR="${CT_WORK_DIR:-${CT_TOP_DIR}/.build}/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}"
+CT_PREFIX_DIR="/x-tools/${CT_TARGET}"
+CT_RM_RF_PREFIX_DIR=y
+CT_REMOVE_DOCS=y
+CT_INSTALL_LICENSES=y
+CT_PREFIX_DIR_RO=y
+CT_STRIP_HOST_TOOLCHAIN_EXECUTABLES=y
+# CT_STRIP_TARGET_TOOLCHAIN_EXECUTABLES is not set
+
+#
+# Downloading
+#
+CT_DOWNLOAD_AGENT_WGET=y
+# CT_DOWNLOAD_AGENT_CURL is not set
+# CT_DOWNLOAD_AGENT_NONE is not set
+# CT_FORBID_DOWNLOAD is not set
+# CT_FORCE_DOWNLOAD is not set
+CT_CONNECT_TIMEOUT=10
+CT_DOWNLOAD_WGET_OPTIONS="--passive-ftp --tries=3 -nc --progress=dot:binary"
+# CT_ONLY_DOWNLOAD is not set
+# CT_USE_MIRROR is not set
+CT_VERIFY_DOWNLOAD_DIGEST=y
+CT_VERIFY_DOWNLOAD_DIGEST_SHA512=y
+# CT_VERIFY_DOWNLOAD_DIGEST_SHA256 is not set
+# CT_VERIFY_DOWNLOAD_DIGEST_SHA1 is not set
+# CT_VERIFY_DOWNLOAD_DIGEST_MD5 is not set
+CT_VERIFY_DOWNLOAD_DIGEST_ALG="sha512"
+# CT_VERIFY_DOWNLOAD_SIGNATURE is not set
+
+#
+# Extracting
+#
+# CT_FORCE_EXTRACT is not set
+CT_OVERRIDE_CONFIG_GUESS_SUB=y
+# CT_ONLY_EXTRACT is not set
+CT_PATCH_BUNDLED=y
+# CT_PATCH_BUNDLED_LOCAL is not set
+CT_PATCH_ORDER="bundled"
+
+#
+# Build behavior
+#
+CT_PARALLEL_JOBS=0
+CT_LOAD=""
+CT_USE_PIPES=y
+CT_EXTRA_CFLAGS_FOR_BUILD=""
+CT_EXTRA_LDFLAGS_FOR_BUILD=""
+CT_EXTRA_CFLAGS_FOR_HOST=""
+CT_EXTRA_LDFLAGS_FOR_HOST=""
+# CT_CONFIG_SHELL_SH is not set
+# CT_CONFIG_SHELL_ASH is not set
+CT_CONFIG_SHELL_BASH=y
+# CT_CONFIG_SHELL_CUSTOM is not set
+CT_CONFIG_SHELL="${bash}"
+
+#
+# Logging
+#
+# CT_LOG_ERROR is not set
+# CT_LOG_WARN is not set
+# CT_LOG_INFO is not set
+CT_LOG_EXTRA=y
+# CT_LOG_ALL is not set
+# CT_LOG_DEBUG is not set
+CT_LOG_LEVEL_MAX="EXTRA"
+# CT_LOG_SEE_TOOLS_WARN is not set
+CT_LOG_PROGRESS_BAR=y
+CT_LOG_TO_FILE=y
+CT_LOG_FILE_COMPRESS=y
+
+#
+# Target options
+#
+# CT_ARCH_ALPHA is not set
+# CT_ARCH_ARC is not set
+# CT_ARCH_ARM is not set
+# CT_ARCH_AVR is not set
+# CT_ARCH_M68K is not set
+CT_ARCH_MIPS=y
+# CT_ARCH_NIOS2 is not set
+# CT_ARCH_POWERPC is not set
+# CT_ARCH_S390 is not set
+# CT_ARCH_SH is not set
+# CT_ARCH_SPARC is not set
+# CT_ARCH_X86 is not set
+# CT_ARCH_XTENSA is not set
+CT_ARCH="mips"
+CT_ARCH_CHOICE_KSYM="MIPS"
+CT_ARCH_TUNE=""
+CT_ARCH_MIPS_SHOW=y
+
+#
+# Options for mips
+#
+CT_ARCH_MIPS_PKG_KSYM=""
+CT_ARCH_mips_o32=y
+CT_ARCH_mips_ABI="32"
+CT_ALL_ARCH_CHOICES="ALPHA ARC ARM AVR M68K MICROBLAZE MIPS MOXIE MSP430 NIOS2 POWERPC RISCV S390 SH SPARC X86 XTENSA"
+CT_ARCH_SUFFIX=""
+# CT_OMIT_TARGET_VENDOR is not set
+
+#
+# Generic target options
+#
+# CT_MULTILIB is not set
+CT_DEMULTILIB=y
+CT_ARCH_USE_MMU=y
+CT_ARCH_SUPPORTS_EITHER_ENDIAN=y
+CT_ARCH_DEFAULT_BE=y
+CT_ARCH_BE=y
+# CT_ARCH_LE is not set
+CT_ARCH_ENDIAN="big"
+CT_ARCH_SUPPORTS_32=y
+CT_ARCH_SUPPORTS_64=y
+CT_ARCH_DEFAULT_32=y
+CT_ARCH_BITNESS=32
+CT_ARCH_32=y
+# CT_ARCH_64 is not set
+
+#
+# Target optimisations
+#
+CT_ARCH_SUPPORTS_WITH_ARCH=y
+CT_ARCH_SUPPORTS_WITH_TUNE=y
+CT_ARCH_SUPPORTS_WITH_FLOAT=y
+CT_ARCH_ARCH="mips1"
+# CT_ARCH_FLOAT_AUTO is not set
+# CT_ARCH_FLOAT_HW is not set
+CT_ARCH_FLOAT_SW=y
+CT_TARGET_CFLAGS=""
+CT_TARGET_LDFLAGS=""
+CT_ARCH_FLOAT="soft"
+
+#
+# Toolchain options
+#
+
+#
+# General toolchain options
+#
+CT_FORCE_SYSROOT=y
+CT_USE_SYSROOT=y
+CT_SYSROOT_NAME="sysroot"
+CT_SYSROOT_DIR_PREFIX=""
+CT_WANTS_STATIC_LINK=y
+CT_WANTS_STATIC_LINK_CXX=y
+# CT_STATIC_TOOLCHAIN is not set
+CT_SHOW_CT_VERSION=y
+CT_TOOLCHAIN_PKGVERSION=""
+CT_TOOLCHAIN_BUGURL=""
+
+#
+# Tuple completion and aliasing
+#
+CT_TARGET_VENDOR="unknown"
+CT_TARGET_ALIAS_SED_EXPR=""
+CT_TARGET_ALIAS=""
+
+#
+# Toolchain type
+#
+CT_CROSS=y
+# CT_CANADIAN is not set
+CT_TOOLCHAIN_TYPE="cross"
+
+#
+# Build system
+#
+CT_BUILD=""
+CT_BUILD_PREFIX=""
+CT_BUILD_SUFFIX=""
+
+#
+# Misc options
+#
+# CT_TOOLCHAIN_ENABLE_NLS is not set
+
+#
+# Operating System
+#
+CT_KERNEL_SUPPORTS_SHARED_LIBS=y
+# CT_KERNEL_BARE_METAL is not set
+CT_KERNEL_LINUX=y
+CT_KERNEL="linux"
+CT_KERNEL_CHOICE_KSYM="LINUX"
+CT_KERNEL_LINUX_SHOW=y
+
+#
+# Options for linux
+#
+CT_KERNEL_LINUX_PKG_KSYM="LINUX"
+CT_LINUX_DIR_NAME="linux"
+CT_LINUX_PKG_NAME="linux"
+CT_LINUX_SRC_RELEASE=y
+CT_LINUX_PATCH_ORDER="global"
+%CT_LINUX_V%
+CT_LINUX_MIRRORS="$(CT_Mirrors kernel.org linux ${CT_LINUX_VERSION})"
+CT_LINUX_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_LINUX_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_LINUX_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_LINUX_SIGNATURE_FORMAT="unpacked/.sign"
+%CT_LINUX%
+CT_KERNEL_LINUX_VERBOSITY_0=y
+# CT_KERNEL_LINUX_VERBOSITY_1 is not set
+# CT_KERNEL_LINUX_VERBOSITY_2 is not set
+CT_KERNEL_LINUX_VERBOSE_LEVEL=0
+CT_KERNEL_LINUX_INSTALL_CHECK=y
+CT_ALL_KERNEL_CHOICES="BARE_METAL LINUX WINDOWS"
+
+#
+# Common kernel options
+#
+CT_SHARED_LIBS=y
+
+#
+# Binary utilities
+#
+CT_ARCH_BINFMT_ELF=y
+CT_BINUTILS_BINUTILS=y
+CT_BINUTILS="binutils"
+CT_BINUTILS_CHOICE_KSYM="BINUTILS"
+CT_BINUTILS_BINUTILS_SHOW=y
+
+#
+# Options for binutils
+#
+CT_BINUTILS_BINUTILS_PKG_KSYM="BINUTILS"
+CT_BINUTILS_DIR_NAME="binutils"
+CT_BINUTILS_USE_GNU=y
+CT_BINUTILS_USE="BINUTILS"
+CT_BINUTILS_PKG_NAME="binutils"
+CT_BINUTILS_SRC_RELEASE=y
+CT_BINUTILS_PATCH_ORDER="global"
+CT_BINUTILS_V_2_32=y
+# CT_BINUTILS_V_2_31 is not set
+# CT_BINUTILS_V_2_30 is not set
+# CT_BINUTILS_V_2_29 is not set
+# CT_BINUTILS_V_2_28 is not set
+# CT_BINUTILS_V_2_27 is not set
+# CT_BINUTILS_V_2_26 is not set
+# CT_BINUTILS_NO_VERSIONS is not set
+CT_BINUTILS_VERSION="2.32"
+CT_BINUTILS_MIRRORS="$(CT_Mirrors GNU binutils) $(CT_Mirrors sourceware binutils/releases)"
+CT_BINUTILS_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_BINUTILS_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_BINUTILS_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz"
+CT_BINUTILS_SIGNATURE_FORMAT="packed/.sig"
+CT_BINUTILS_later_than_2_30=y
+CT_BINUTILS_2_30_or_later=y
+CT_BINUTILS_later_than_2_27=y
+CT_BINUTILS_2_27_or_later=y
+CT_BINUTILS_later_than_2_25=y
+CT_BINUTILS_2_25_or_later=y
+CT_BINUTILS_later_than_2_23=y
+CT_BINUTILS_2_23_or_later=y
+
+#
+# GNU binutils
+#
+CT_BINUTILS_HAS_HASH_STYLE=y
+CT_BINUTILS_HAS_GOLD=y
+CT_BINUTILS_HAS_PLUGINS=y
+CT_BINUTILS_HAS_PKGVERSION_BUGURL=y
+CT_BINUTILS_LINKER_LD=y
+CT_BINUTILS_LINKERS_LIST="ld"
+CT_BINUTILS_LINKER_DEFAULT="bfd"
+CT_BINUTILS_PLUGINS=y
+CT_BINUTILS_RELRO=m
+CT_BINUTILS_EXTRA_CONFIG_ARRAY=""
+# CT_BINUTILS_FOR_TARGET is not set
+CT_ALL_BINUTILS_CHOICES="BINUTILS"
+
+#
+# C-library
+#
+# CT_LIBC_GLIBC is not set
+CT_LIBC_UCLIBC=y
+CT_LIBC="uClibc"
+CT_LIBC_CHOICE_KSYM="UCLIBC"
+CT_THREADS="nptl"
+CT_LIBC_UCLIBC_SHOW=y
+
+#
+# Options for uClibc
+#
+CT_LIBC_UCLIBC_PKG_KSYM="UCLIBC"
+CT_UCLIBC_DIR_NAME="uClibc"
+%CT_UCLIBC_EXTRAS%
+%CT_UCLIBC_V%
+%CT_UCLIBC%
+CT_LIBC_UCLIBC_HAS_LIBICONV=y
+CT_LIBC_UCLIBC_PARALLEL=y
+CT_LIBC_UCLIBC_NG=y
+CT_UCLIBC_MERGED_LINUXTHREADS=y
+CT_LIBC_UCLIBC_VERBOSITY_0=y
+# CT_LIBC_UCLIBC_VERBOSITY_1 is not set
+# CT_LIBC_UCLIBC_VERBOSITY_2 is not set
+CT_LIBC_UCLIBC_VERBOSITY=""
+CT_LIBC_UCLIBC_DEBUG_LEVEL_0=y
+# CT_LIBC_UCLIBC_DEBUG_LEVEL_1 is not set
+# CT_LIBC_UCLIBC_DEBUG_LEVEL_2 is not set
+# CT_LIBC_UCLIBC_DEBUG_LEVEL_3 is not set
+CT_LIBC_UCLIBC_DEBUG_LEVEL=0
+CT_LIBC_UCLIBC_CONFIG_FILE=""
+CT_LIBC_UCLIBC_LNXTHRD=""
+# CT_LIBC_UCLIBC_LOCALES is not set
+# CT_LIBC_UCLIBC_LIBICONV is not set
+# CT_LIBC_UCLIBC_IPV6 is not set
+CT_LIBC_UCLIBC_WCHAR=y
+# CT_LIBC_UCLIBC_FENV is not set
+CT_LIBC_UCLIBC_HAS_SSP=y
+# CT_LIBC_UCLIBC_BUILD_SSP is not set
+CT_ALL_LIBC_CHOICES="AVR_LIBC BIONIC GLIBC MINGW_W64 MOXIEBOX MUSL NEWLIB NONE UCLIBC"
+CT_LIBC_SUPPORT_THREADS_ANY=y
+CT_LIBC_SUPPORT_THREADS_NATIVE=y
+CT_LIBC_SUPPORT_THREADS_LT=y
+CT_LIBC_SUPPORT_THREADS_NONE=y
+
+#
+# Common C library options
+#
+CT_THREADS_NATIVE=y
+# CT_THREADS_LT is not set
+# CT_THREADS_NONE is not set
+# CT_CREATE_LDSO_CONF is not set
+CT_LIBC_XLDD=y
+
+#
+# C compiler
+#
+CT_CC_CORE_PASSES_NEEDED=y
+CT_CC_CORE_PASS_1_NEEDED=y
+CT_CC_CORE_PASS_2_NEEDED=y
+CT_CC_SUPPORT_CXX=y
+CT_CC_SUPPORT_FORTRAN=y
+CT_CC_SUPPORT_ADA=y
+CT_CC_SUPPORT_OBJC=y
+CT_CC_SUPPORT_OBJCXX=y
+CT_CC_SUPPORT_GOLANG=y
+CT_CC_GCC=y
+CT_CC="gcc"
+CT_CC_CHOICE_KSYM="GCC"
+CT_CC_GCC_SHOW=y
+
+#
+# Options for gcc
+#
+CT_CC_GCC_PKG_KSYM="GCC"
+CT_GCC_DIR_NAME="gcc"
+CT_GCC_USE_GNU=y
+CT_GCC_USE="GCC"
+CT_GCC_PKG_NAME="gcc"
+CT_GCC_SRC_RELEASE=y
+CT_GCC_PATCH_ORDER="global"
+%CT_GCC_V%
+CT_GCC_MIRRORS="$(CT_Mirrors GNU gcc/gcc-${CT_GCC_VERSION}) $(CT_Mirrors sourceware gcc/releases/gcc-${CT_GCC_VERSION})"
+CT_GCC_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_GCC_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_GCC_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_GCC_SIGNATURE_FORMAT=""
+%CT_GCC%
+CT_CC_GCC_ENABLE_PLUGINS=y
+CT_CC_GCC_HAS_LIBMPX=y
+CT_CC_GCC_ENABLE_CXX_FLAGS=""
+CT_CC_GCC_CORE_EXTRA_CONFIG_ARRAY=""
+CT_CC_GCC_EXTRA_CONFIG_ARRAY=""
+CT_CC_GCC_STATIC_LIBSTDCXX=y
+# CT_CC_GCC_SYSTEM_ZLIB is not set
+CT_CC_GCC_CONFIG_TLS=m
+
+#
+# Optimisation features
+#
+CT_CC_GCC_USE_GRAPHITE=y
+CT_CC_GCC_USE_LTO=y
+
+#
+# Settings for libraries running on target
+#
+CT_CC_GCC_ENABLE_TARGET_OPTSPACE=y
+# CT_CC_GCC_LIBMUDFLAP is not set
+# CT_CC_GCC_LIBGOMP is not set
+# CT_CC_GCC_LIBSSP is not set
+# CT_CC_GCC_LIBQUADMATH is not set
+
+#
+# Misc. obscure options.
+#
+CT_CC_CXA_ATEXIT=y
+# CT_CC_GCC_DISABLE_PCH is not set
+CT_CC_GCC_SJLJ_EXCEPTIONS=m
+CT_CC_GCC_LDBL_128=m
+# CT_CC_GCC_BUILD_ID is not set
+CT_CC_GCC_LNK_HASH_STYLE_DEFAULT=y
+# CT_CC_GCC_LNK_HASH_STYLE_SYSV is not set
+# CT_CC_GCC_LNK_HASH_STYLE_GNU is not set
+# CT_CC_GCC_LNK_HASH_STYLE_BOTH is not set
+CT_CC_GCC_LNK_HASH_STYLE=""
+CT_CC_GCC_DEC_FLOAT_AUTO=y
+# CT_CC_GCC_DEC_FLOAT_BID is not set
+# CT_CC_GCC_DEC_FLOAT_DPD is not set
+# CT_CC_GCC_DEC_FLOATS_NO is not set
+CT_CC_GCC_HAS_ARCH_OPTIONS=y
+
+#
+# architecture-specific options
+#
+CT_CC_GCC_mips_llsc=m
+CT_CC_GCC_mips_synci=m
+CT_CC_GCC_mips_plt=y
+CT_ALL_CC_CHOICES="GCC"
+
+#
+# Additional supported languages:
+#
+CT_CC_LANG_CXX=y
+# CT_CC_LANG_FORTRAN is not set
+
+#
+# Debug facilities
+#
+CT_DEBUG_DUMA=y
+CT_DEBUG_DUMA_PKG_KSYM="DUMA"
+CT_DUMA_DIR_NAME="duma"
+CT_DUMA_PKG_NAME="duma"
+CT_DUMA_SRC_RELEASE=y
+CT_DUMA_PATCH_ORDER="global"
+CT_DUMA_V_2_5_15=y
+# CT_DUMA_NO_VERSIONS is not set
+CT_DUMA_VERSION="2_5_15"
+CT_DUMA_MIRRORS="http://downloads.sourceforge.net/project/duma/duma/${CT_DUMA_VERSION//_/.}"
+CT_DUMA_ARCHIVE_FILENAME="@{pkg_name}_@{version}"
+CT_DUMA_ARCHIVE_DIRNAME="@{pkg_name}_@{version}"
+CT_DUMA_ARCHIVE_FORMATS=".tar.gz .zip"
+CT_DUMA_SIGNATURE_FORMAT=""
+CT_DUMA_SO=y
+CT_DUMA_CUSTOM_WRAPPER=y
+CT_DEBUG_GDB=y
+CT_DEBUG_GDB_PKG_KSYM="GDB"
+CT_GDB_DIR_NAME="gdb"
+CT_GDB_USE_GNU=y
+CT_GDB_USE="GDB"
+CT_GDB_PKG_NAME="gdb"
+CT_GDB_SRC_RELEASE=y
+CT_GDB_PATCH_ORDER="global"
+CT_GDB_V_8_2=y
+# CT_GDB_V_8_1 is not set
+# CT_GDB_V_8_0 is not set
+# CT_GDB_V_7_12 is not set
+# CT_GDB_V_7_11 is not set
+# CT_GDB_NO_VERSIONS is not set
+CT_GDB_VERSION="8.2.1"
+CT_GDB_MIRRORS="$(CT_Mirrors GNU gdb) $(CT_Mirrors sourceware gdb/releases)"
+CT_GDB_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_GDB_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_GDB_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_GDB_SIGNATURE_FORMAT=""
+CT_GDB_later_than_8_0=y
+CT_GDB_8_0_or_later=y
+CT_GDB_later_than_7_12=y
+CT_GDB_7_12_or_later=y
+CT_GDB_later_than_7_2=y
+CT_GDB_7_2_or_later=y
+CT_GDB_later_than_7_0=y
+CT_GDB_7_0_or_later=y
+CT_GDB_CROSS=y
+# CT_GDB_CROSS_STATIC is not set
+# CT_GDB_CROSS_SIM is not set
+# CT_GDB_CROSS_PYTHON is not set
+CT_GDB_CROSS_EXTRA_CONFIG_ARRAY=""
+# CT_GDB_NATIVE is not set
+CT_GDB_GDBSERVER=y
+# CT_GDB_NATIVE_STATIC_LIBSTDCXX is not set
+CT_GDB_HAS_PKGVERSION_BUGURL=y
+CT_GDB_HAS_PYTHON=y
+CT_GDB_INSTALL_GDBINIT=y
+CT_GDB_HAS_IPA_LIB=y
+# CT_DEBUG_LTRACE is not set
+# CT_DEBUG_STRACE is not set
+CT_ALL_DEBUG_CHOICES="DUMA GDB LTRACE STRACE"
+
+#
+# Companion libraries
+#
+# CT_COMPLIBS_CHECK is not set
+# CT_COMP_LIBS_CLOOG is not set
+CT_COMP_LIBS_EXPAT=y
+CT_COMP_LIBS_EXPAT_PKG_KSYM="EXPAT"
+CT_EXPAT_DIR_NAME="expat"
+CT_EXPAT_PKG_NAME="expat"
+CT_EXPAT_SRC_RELEASE=y
+CT_EXPAT_PATCH_ORDER="global"
+CT_EXPAT_V_2_2=y
+# CT_EXPAT_NO_VERSIONS is not set
+CT_EXPAT_VERSION="2.2.6"
+CT_EXPAT_MIRRORS="http://downloads.sourceforge.net/project/expat/expat/${CT_EXPAT_VERSION} https://github.com/libexpat/libexpat/releases/download/R_${CT_EXPAT_VERSION//./_}"
+CT_EXPAT_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_EXPAT_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_EXPAT_ARCHIVE_FORMATS=".tar.xz .tar.lz .tar.bz2 .tar.gz"
+CT_EXPAT_SIGNATURE_FORMAT=""
+# CT_COMP_LIBS_GETTEXT is not set
+CT_COMP_LIBS_GMP=y
+CT_COMP_LIBS_GMP_PKG_KSYM="GMP"
+CT_GMP_DIR_NAME="gmp"
+CT_GMP_PKG_NAME="gmp"
+CT_GMP_SRC_RELEASE=y
+CT_GMP_PATCH_ORDER="global"
+CT_GMP_V_6_1=y
+# CT_GMP_NO_VERSIONS is not set
+CT_GMP_VERSION="6.1.2"
+CT_GMP_MIRRORS="https://gmplib.org/download/gmp https://gmplib.org/download/gmp/archive $(CT_Mirrors GNU gmp)"
+CT_GMP_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_GMP_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_GMP_ARCHIVE_FORMATS=".tar.xz .tar.lz .tar.bz2"
+CT_GMP_SIGNATURE_FORMAT="packed/.sig"
+CT_GMP_later_than_5_1_0=y
+CT_GMP_5_1_0_or_later=y
+CT_GMP_later_than_5_0_0=y
+CT_GMP_5_0_0_or_later=y
+CT_GMP_REQUIRE_5_0_0_or_later=y
+CT_COMP_LIBS_ISL=y
+CT_COMP_LIBS_ISL_PKG_KSYM="ISL"
+CT_ISL_DIR_NAME="isl"
+CT_ISL_PKG_NAME="isl"
+CT_ISL_SRC_RELEASE=y
+CT_ISL_PATCH_ORDER="global"
+CT_ISL_V_0_20=y
+# CT_ISL_V_0_19 is not set
+# CT_ISL_V_0_18 is not set
+# CT_ISL_V_0_17 is not set
+# CT_ISL_V_0_16 is not set
+# CT_ISL_V_0_15 is not set
+# CT_ISL_NO_VERSIONS is not set
+CT_ISL_VERSION="0.20"
+CT_ISL_MIRRORS="https://ci-mirrors.rust-lang.org/rustc"
+CT_ISL_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_ISL_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_ISL_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz"
+CT_ISL_SIGNATURE_FORMAT=""
+CT_ISL_later_than_0_18=y
+CT_ISL_0_18_or_later=y
+CT_ISL_later_than_0_15=y
+CT_ISL_0_15_or_later=y
+CT_ISL_REQUIRE_0_15_or_later=y
+CT_ISL_later_than_0_14=y
+CT_ISL_0_14_or_later=y
+CT_ISL_REQUIRE_0_14_or_later=y
+CT_ISL_later_than_0_13=y
+CT_ISL_0_13_or_later=y
+CT_ISL_later_than_0_12=y
+CT_ISL_0_12_or_later=y
+CT_ISL_REQUIRE_0_12_or_later=y
+# CT_COMP_LIBS_LIBELF is not set
+# CT_COMP_LIBS_LIBICONV is not set
+CT_COMP_LIBS_MPC=y
+CT_COMP_LIBS_MPC_PKG_KSYM="MPC"
+CT_MPC_DIR_NAME="mpc"
+CT_MPC_PKG_NAME="mpc"
+CT_MPC_SRC_RELEASE=y
+CT_MPC_PATCH_ORDER="global"
+CT_MPC_V_1_1=y
+# CT_MPC_V_1_0 is not set
+# CT_MPC_NO_VERSIONS is not set
+CT_MPC_VERSION="1.1.0"
+CT_MPC_MIRRORS="http://www.multiprecision.org/downloads $(CT_Mirrors GNU mpc)"
+CT_MPC_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_MPC_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_MPC_ARCHIVE_FORMATS=".tar.gz"
+CT_MPC_SIGNATURE_FORMAT="packed/.sig"
+CT_MPC_1_1_0_or_later=y
+CT_MPC_1_1_0_or_older=y
+CT_COMP_LIBS_MPFR=y
+CT_COMP_LIBS_MPFR_PKG_KSYM="MPFR"
+CT_MPFR_DIR_NAME="mpfr"
+CT_MPFR_PKG_NAME="mpfr"
+CT_MPFR_SRC_RELEASE=y
+CT_MPFR_PATCH_ORDER="global"
+CT_MPFR_V_4_0=y
+# CT_MPFR_V_3_1 is not set
+# CT_MPFR_NO_VERSIONS is not set
+CT_MPFR_VERSION="4.0.2"
+CT_MPFR_MIRRORS="http://www.mpfr.org/mpfr-${CT_MPFR_VERSION} $(CT_Mirrors GNU mpfr)"
+CT_MPFR_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_MPFR_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_MPFR_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz .zip"
+CT_MPFR_SIGNATURE_FORMAT="packed/.asc"
+CT_MPFR_later_than_4_0_0=y
+CT_MPFR_4_0_0_or_later=y
+CT_MPFR_later_than_3_0_0=y
+CT_MPFR_3_0_0_or_later=y
+CT_MPFR_REQUIRE_3_0_0_or_later=y
+CT_COMP_LIBS_NCURSES=y
+CT_COMP_LIBS_NCURSES_PKG_KSYM="NCURSES"
+CT_NCURSES_DIR_NAME="ncurses"
+CT_NCURSES_PKG_NAME="ncurses"
+CT_NCURSES_SRC_RELEASE=y
+CT_NCURSES_PATCH_ORDER="global"
+CT_NCURSES_V_6_1=y
+# CT_NCURSES_V_6_0 is not set
+# CT_NCURSES_NO_VERSIONS is not set
+CT_NCURSES_VERSION="6.1"
+CT_NCURSES_MIRRORS="ftp://invisible-island.net/ncurses $(CT_Mirrors GNU ncurses)"
+CT_NCURSES_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_NCURSES_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_NCURSES_ARCHIVE_FORMATS=".tar.gz"
+CT_NCURSES_SIGNATURE_FORMAT="packed/.sig"
+CT_NCURSES_HOST_CONFIG_ARGS=""
+CT_NCURSES_HOST_DISABLE_DB=y
+CT_NCURSES_HOST_FALLBACKS="linux,xterm,xterm-color,xterm-256color,vt100"
+CT_NCURSES_TARGET_CONFIG_ARGS=""
+# CT_NCURSES_TARGET_DISABLE_DB is not set
+CT_NCURSES_TARGET_FALLBACKS=""
+CT_COMP_LIBS_ZLIB=y
+CT_COMP_LIBS_ZLIB_PKG_KSYM="ZLIB"
+CT_ZLIB_DIR_NAME="zlib"
+CT_ZLIB_PKG_NAME="zlib"
+CT_ZLIB_SRC_RELEASE=y
+CT_ZLIB_PATCH_ORDER="global"
+CT_ZLIB_V_1_2_11=y
+# CT_ZLIB_NO_VERSIONS is not set
+CT_ZLIB_VERSION="1.2.11"
+CT_ZLIB_MIRRORS="http://downloads.sourceforge.net/project/libpng/zlib/${CT_ZLIB_VERSION}"
+CT_ZLIB_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_ZLIB_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_ZLIB_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_ZLIB_SIGNATURE_FORMAT="packed/.asc"
+CT_ALL_COMP_LIBS_CHOICES="CLOOG EXPAT GETTEXT GMP ISL LIBELF LIBICONV MPC MPFR NCURSES ZLIB"
+# CT_LIBICONV_NEEDED is not set
+# CT_GETTEXT_NEEDED is not set
+CT_GMP_NEEDED=y
+CT_MPFR_NEEDED=y
+CT_ISL_NEEDED=y
+CT_MPC_NEEDED=y
+CT_EXPAT_NEEDED=y
+CT_NCURSES_NEEDED=y
+CT_ZLIB_NEEDED=y
+CT_GMP=y
+CT_MPFR=y
+CT_ISL=y
+CT_MPC=y
+CT_EXPAT=y
+CT_NCURSES=y
+CT_ZLIB=y
+
+#
+# Companion tools
+#
+# CT_COMP_TOOLS_FOR_HOST is not set
+# CT_COMP_TOOLS_AUTOCONF is not set
+# CT_COMP_TOOLS_AUTOMAKE is not set
+# CT_COMP_TOOLS_BISON is not set
+# CT_COMP_TOOLS_DTC is not set
+# CT_COMP_TOOLS_LIBTOOL is not set
+# CT_COMP_TOOLS_M4 is not set
+# CT_COMP_TOOLS_MAKE is not set
+CT_ALL_COMP_TOOLS_CHOICES="AUTOCONF AUTOMAKE BISON DTC LIBTOOL M4 MAKE"
diff --git a/crosstool-ng/mipsel-unknown-linux-uclibc-cross.config.in b/crosstool-ng/mipsel-unknown-linux-uclibc-cross.config.in
new file mode 100644
index 0000000..34420ba
--- /dev/null
+++ b/crosstool-ng/mipsel-unknown-linux-uclibc-cross.config.in
@@ -0,0 +1,705 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# crosstool-NG  Configuration
+#
+# This file was adapted from the crosstool-ng mips-unknown-linux-uclibc sample. The endian was
+#   swapped to little endian, and the URLs were updated to point at up-to-date mirrors.
+CT_CONFIGURE_has_static_link=y
+CT_CONFIGURE_has_cxx11=y
+CT_CONFIGURE_has_wget=y
+CT_CONFIGURE_has_curl=y
+CT_CONFIGURE_has_make_3_81_or_newer=y
+CT_CONFIGURE_has_make_4_0_or_newer=y
+CT_CONFIGURE_has_libtool_2_4_or_newer=y
+CT_CONFIGURE_has_libtoolize_2_4_or_newer=y
+CT_CONFIGURE_has_autoconf_2_65_or_newer=y
+CT_CONFIGURE_has_autoreconf_2_65_or_newer=y
+CT_CONFIGURE_has_automake_1_15_or_newer=y
+CT_CONFIGURE_has_gnu_m4_1_4_12_or_newer=y
+CT_CONFIGURE_has_python_3_4_or_newer=y
+CT_CONFIGURE_has_bison_2_7_or_newer=y
+CT_CONFIGURE_has_python=y
+CT_CONFIGURE_has_git=y
+CT_CONFIGURE_has_md5sum=y
+CT_CONFIGURE_has_sha1sum=y
+CT_CONFIGURE_has_sha256sum=y
+CT_CONFIGURE_has_sha512sum=y
+CT_CONFIGURE_has_install_with_strip_program=y
+CT_CONFIG_VERSION_CURRENT="3"
+CT_CONFIG_VERSION="3"
+CT_MODULES=y
+
+#
+# Paths and misc options
+#
+
+#
+# crosstool-NG behavior
+#
+# CT_OBSOLETE is not set
+# CT_EXPERIMENTAL is not set
+# CT_DEBUG_CT is not set
+
+#
+# Paths
+#
+CT_LOCAL_TARBALLS_DIR="${HOME}/src"
+CT_SAVE_TARBALLS=y
+# CT_TARBALLS_BUILDROOT_LAYOUT is not set
+CT_WORK_DIR="${CT_TOP_DIR}/.build"
+CT_BUILD_TOP_DIR="${CT_WORK_DIR:-${CT_TOP_DIR}/.build}/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}"
+CT_PREFIX_DIR="/x-tools/${CT_TARGET}"
+CT_RM_RF_PREFIX_DIR=y
+CT_REMOVE_DOCS=y
+CT_INSTALL_LICENSES=y
+CT_PREFIX_DIR_RO=y
+CT_STRIP_HOST_TOOLCHAIN_EXECUTABLES=y
+# CT_STRIP_TARGET_TOOLCHAIN_EXECUTABLES is not set
+
+#
+# Downloading
+#
+CT_DOWNLOAD_AGENT_WGET=y
+# CT_DOWNLOAD_AGENT_CURL is not set
+# CT_DOWNLOAD_AGENT_NONE is not set
+# CT_FORBID_DOWNLOAD is not set
+# CT_FORCE_DOWNLOAD is not set
+CT_CONNECT_TIMEOUT=10
+CT_DOWNLOAD_WGET_OPTIONS="--passive-ftp --tries=3 -nc --progress=dot:binary"
+# CT_ONLY_DOWNLOAD is not set
+# CT_USE_MIRROR is not set
+CT_VERIFY_DOWNLOAD_DIGEST=y
+CT_VERIFY_DOWNLOAD_DIGEST_SHA512=y
+# CT_VERIFY_DOWNLOAD_DIGEST_SHA256 is not set
+# CT_VERIFY_DOWNLOAD_DIGEST_SHA1 is not set
+# CT_VERIFY_DOWNLOAD_DIGEST_MD5 is not set
+CT_VERIFY_DOWNLOAD_DIGEST_ALG="sha512"
+# CT_VERIFY_DOWNLOAD_SIGNATURE is not set
+
+#
+# Extracting
+#
+# CT_FORCE_EXTRACT is not set
+CT_OVERRIDE_CONFIG_GUESS_SUB=y
+# CT_ONLY_EXTRACT is not set
+CT_PATCH_BUNDLED=y
+# CT_PATCH_BUNDLED_LOCAL is not set
+CT_PATCH_ORDER="bundled"
+
+#
+# Build behavior
+#
+CT_PARALLEL_JOBS=0
+CT_LOAD=""
+CT_USE_PIPES=y
+CT_EXTRA_CFLAGS_FOR_BUILD=""
+CT_EXTRA_LDFLAGS_FOR_BUILD=""
+CT_EXTRA_CFLAGS_FOR_HOST=""
+CT_EXTRA_LDFLAGS_FOR_HOST=""
+# CT_CONFIG_SHELL_SH is not set
+# CT_CONFIG_SHELL_ASH is not set
+CT_CONFIG_SHELL_BASH=y
+# CT_CONFIG_SHELL_CUSTOM is not set
+CT_CONFIG_SHELL="${bash}"
+
+#
+# Logging
+#
+# CT_LOG_ERROR is not set
+# CT_LOG_WARN is not set
+# CT_LOG_INFO is not set
+CT_LOG_EXTRA=y
+# CT_LOG_ALL is not set
+# CT_LOG_DEBUG is not set
+CT_LOG_LEVEL_MAX="EXTRA"
+# CT_LOG_SEE_TOOLS_WARN is not set
+CT_LOG_PROGRESS_BAR=y
+CT_LOG_TO_FILE=y
+CT_LOG_FILE_COMPRESS=y
+
+#
+# Target options
+#
+# CT_ARCH_ALPHA is not set
+# CT_ARCH_ARC is not set
+# CT_ARCH_ARM is not set
+# CT_ARCH_AVR is not set
+# CT_ARCH_M68K is not set
+CT_ARCH_MIPS=y
+# CT_ARCH_NIOS2 is not set
+# CT_ARCH_POWERPC is not set
+# CT_ARCH_S390 is not set
+# CT_ARCH_SH is not set
+# CT_ARCH_SPARC is not set
+# CT_ARCH_X86 is not set
+# CT_ARCH_XTENSA is not set
+CT_ARCH="mips"
+CT_ARCH_CHOICE_KSYM="MIPS"
+CT_ARCH_TUNE=""
+CT_ARCH_MIPS_SHOW=y
+
+#
+# Options for mips
+#
+CT_ARCH_MIPS_PKG_KSYM=""
+CT_ARCH_mips_o32=y
+CT_ARCH_mips_ABI="32"
+CT_ALL_ARCH_CHOICES="ALPHA ARC ARM AVR M68K MICROBLAZE MIPS MOXIE MSP430 NIOS2 POWERPC RISCV S390 SH SPARC X86 XTENSA"
+CT_ARCH_SUFFIX=""
+# CT_OMIT_TARGET_VENDOR is not set
+
+#
+# Generic target options
+#
+# CT_MULTILIB is not set
+CT_DEMULTILIB=y
+CT_ARCH_USE_MMU=y
+CT_ARCH_SUPPORTS_EITHER_ENDIAN=y
+CT_ARCH_DEFAULT_BE=y
+# CT_ARCH_BE is not set
+CT_ARCH_LE=y
+CT_ARCH_ENDIAN="little"
+CT_ARCH_SUPPORTS_32=y
+CT_ARCH_SUPPORTS_64=y
+CT_ARCH_DEFAULT_32=y
+CT_ARCH_BITNESS=32
+CT_ARCH_32=y
+# CT_ARCH_64 is not set
+
+#
+# Target optimisations
+#
+CT_ARCH_SUPPORTS_WITH_ARCH=y
+CT_ARCH_SUPPORTS_WITH_TUNE=y
+CT_ARCH_SUPPORTS_WITH_FLOAT=y
+CT_ARCH_ARCH="mips1"
+# CT_ARCH_FLOAT_AUTO is not set
+# CT_ARCH_FLOAT_HW is not set
+CT_ARCH_FLOAT_SW=y
+CT_TARGET_CFLAGS=""
+CT_TARGET_LDFLAGS=""
+CT_ARCH_FLOAT="soft"
+
+#
+# Toolchain options
+#
+
+#
+# General toolchain options
+#
+CT_FORCE_SYSROOT=y
+CT_USE_SYSROOT=y
+CT_SYSROOT_NAME="sysroot"
+CT_SYSROOT_DIR_PREFIX=""
+CT_WANTS_STATIC_LINK=y
+CT_WANTS_STATIC_LINK_CXX=y
+# CT_STATIC_TOOLCHAIN is not set
+CT_SHOW_CT_VERSION=y
+CT_TOOLCHAIN_PKGVERSION=""
+CT_TOOLCHAIN_BUGURL=""
+
+#
+# Tuple completion and aliasing
+#
+CT_TARGET_VENDOR="unknown"
+CT_TARGET_ALIAS_SED_EXPR=""
+CT_TARGET_ALIAS=""
+
+#
+# Toolchain type
+#
+CT_CROSS=y
+# CT_CANADIAN is not set
+CT_TOOLCHAIN_TYPE="cross"
+
+#
+# Build system
+#
+CT_BUILD=""
+CT_BUILD_PREFIX=""
+CT_BUILD_SUFFIX=""
+
+#
+# Misc options
+#
+# CT_TOOLCHAIN_ENABLE_NLS is not set
+
+#
+# Operating System
+#
+CT_KERNEL_SUPPORTS_SHARED_LIBS=y
+# CT_KERNEL_BARE_METAL is not set
+CT_KERNEL_LINUX=y
+CT_KERNEL="linux"
+CT_KERNEL_CHOICE_KSYM="LINUX"
+CT_KERNEL_LINUX_SHOW=y
+
+#
+# Options for linux
+#
+CT_KERNEL_LINUX_PKG_KSYM="LINUX"
+CT_LINUX_DIR_NAME="linux"
+CT_LINUX_PKG_NAME="linux"
+CT_LINUX_SRC_RELEASE=y
+CT_LINUX_PATCH_ORDER="global"
+%CT_LINUX_V%
+CT_LINUX_MIRRORS="$(CT_Mirrors kernel.org linux ${CT_LINUX_VERSION})"
+CT_LINUX_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_LINUX_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_LINUX_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_LINUX_SIGNATURE_FORMAT="unpacked/.sign"
+%CT_LINUX%
+CT_KERNEL_LINUX_VERBOSITY_0=y
+# CT_KERNEL_LINUX_VERBOSITY_1 is not set
+# CT_KERNEL_LINUX_VERBOSITY_2 is not set
+CT_KERNEL_LINUX_VERBOSE_LEVEL=0
+CT_KERNEL_LINUX_INSTALL_CHECK=y
+CT_ALL_KERNEL_CHOICES="BARE_METAL LINUX WINDOWS"
+
+#
+# Common kernel options
+#
+CT_SHARED_LIBS=y
+
+#
+# Binary utilities
+#
+CT_ARCH_BINFMT_ELF=y
+CT_BINUTILS_BINUTILS=y
+CT_BINUTILS="binutils"
+CT_BINUTILS_CHOICE_KSYM="BINUTILS"
+CT_BINUTILS_BINUTILS_SHOW=y
+
+#
+# Options for binutils
+#
+CT_BINUTILS_BINUTILS_PKG_KSYM="BINUTILS"
+CT_BINUTILS_DIR_NAME="binutils"
+CT_BINUTILS_USE_GNU=y
+CT_BINUTILS_USE="BINUTILS"
+CT_BINUTILS_PKG_NAME="binutils"
+CT_BINUTILS_SRC_RELEASE=y
+CT_BINUTILS_PATCH_ORDER="global"
+CT_BINUTILS_V_2_32=y
+# CT_BINUTILS_V_2_31 is not set
+# CT_BINUTILS_V_2_30 is not set
+# CT_BINUTILS_V_2_29 is not set
+# CT_BINUTILS_V_2_28 is not set
+# CT_BINUTILS_V_2_27 is not set
+# CT_BINUTILS_V_2_26 is not set
+# CT_BINUTILS_NO_VERSIONS is not set
+CT_BINUTILS_VERSION="2.32"
+CT_BINUTILS_MIRRORS="$(CT_Mirrors GNU binutils) $(CT_Mirrors sourceware binutils/releases)"
+CT_BINUTILS_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_BINUTILS_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_BINUTILS_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz"
+CT_BINUTILS_SIGNATURE_FORMAT="packed/.sig"
+CT_BINUTILS_later_than_2_30=y
+CT_BINUTILS_2_30_or_later=y
+CT_BINUTILS_later_than_2_27=y
+CT_BINUTILS_2_27_or_later=y
+CT_BINUTILS_later_than_2_25=y
+CT_BINUTILS_2_25_or_later=y
+CT_BINUTILS_later_than_2_23=y
+CT_BINUTILS_2_23_or_later=y
+
+#
+# GNU binutils
+#
+CT_BINUTILS_HAS_HASH_STYLE=y
+CT_BINUTILS_HAS_GOLD=y
+CT_BINUTILS_HAS_PLUGINS=y
+CT_BINUTILS_HAS_PKGVERSION_BUGURL=y
+CT_BINUTILS_LINKER_LD=y
+CT_BINUTILS_LINKERS_LIST="ld"
+CT_BINUTILS_LINKER_DEFAULT="bfd"
+CT_BINUTILS_PLUGINS=y
+CT_BINUTILS_RELRO=m
+CT_BINUTILS_EXTRA_CONFIG_ARRAY=""
+# CT_BINUTILS_FOR_TARGET is not set
+CT_ALL_BINUTILS_CHOICES="BINUTILS"
+
+#
+# C-library
+#
+# CT_LIBC_GLIBC is not set
+CT_LIBC_UCLIBC=y
+CT_LIBC="uClibc"
+CT_LIBC_CHOICE_KSYM="UCLIBC"
+CT_THREADS="nptl"
+CT_LIBC_UCLIBC_SHOW=y
+
+#
+# Options for uClibc
+#
+CT_LIBC_UCLIBC_PKG_KSYM="UCLIBC"
+CT_UCLIBC_DIR_NAME="uClibc"
+%CT_UCLIBC_EXTRAS%
+%CT_UCLIBC_V%
+%CT_UCLIBC%
+CT_LIBC_UCLIBC_HAS_LIBICONV=y
+CT_LIBC_UCLIBC_PARALLEL=y
+CT_LIBC_UCLIBC_NG=y
+CT_UCLIBC_MERGED_LINUXTHREADS=y
+CT_LIBC_UCLIBC_VERBOSITY_0=y
+# CT_LIBC_UCLIBC_VERBOSITY_1 is not set
+# CT_LIBC_UCLIBC_VERBOSITY_2 is not set
+CT_LIBC_UCLIBC_VERBOSITY=""
+CT_LIBC_UCLIBC_DEBUG_LEVEL_0=y
+# CT_LIBC_UCLIBC_DEBUG_LEVEL_1 is not set
+# CT_LIBC_UCLIBC_DEBUG_LEVEL_2 is not set
+# CT_LIBC_UCLIBC_DEBUG_LEVEL_3 is not set
+CT_LIBC_UCLIBC_DEBUG_LEVEL=0
+CT_LIBC_UCLIBC_CONFIG_FILE=""
+CT_LIBC_UCLIBC_LNXTHRD=""
+# CT_LIBC_UCLIBC_LOCALES is not set
+# CT_LIBC_UCLIBC_LIBICONV is not set
+# CT_LIBC_UCLIBC_IPV6 is not set
+CT_LIBC_UCLIBC_WCHAR=y
+# CT_LIBC_UCLIBC_FENV is not set
+CT_LIBC_UCLIBC_HAS_SSP=y
+# CT_LIBC_UCLIBC_BUILD_SSP is not set
+CT_ALL_LIBC_CHOICES="AVR_LIBC BIONIC GLIBC MINGW_W64 MOXIEBOX MUSL NEWLIB NONE UCLIBC"
+CT_LIBC_SUPPORT_THREADS_ANY=y
+CT_LIBC_SUPPORT_THREADS_NATIVE=y
+CT_LIBC_SUPPORT_THREADS_LT=y
+CT_LIBC_SUPPORT_THREADS_NONE=y
+
+#
+# Common C library options
+#
+CT_THREADS_NATIVE=y
+# CT_THREADS_LT is not set
+# CT_THREADS_NONE is not set
+# CT_CREATE_LDSO_CONF is not set
+CT_LIBC_XLDD=y
+
+#
+# C compiler
+#
+CT_CC_CORE_PASSES_NEEDED=y
+CT_CC_CORE_PASS_1_NEEDED=y
+CT_CC_CORE_PASS_2_NEEDED=y
+CT_CC_SUPPORT_CXX=y
+CT_CC_SUPPORT_FORTRAN=y
+CT_CC_SUPPORT_ADA=y
+CT_CC_SUPPORT_OBJC=y
+CT_CC_SUPPORT_OBJCXX=y
+CT_CC_SUPPORT_GOLANG=y
+CT_CC_GCC=y
+CT_CC="gcc"
+CT_CC_CHOICE_KSYM="GCC"
+CT_CC_GCC_SHOW=y
+
+#
+# Options for gcc
+#
+CT_CC_GCC_PKG_KSYM="GCC"
+CT_GCC_DIR_NAME="gcc"
+CT_GCC_USE_GNU=y
+CT_GCC_USE="GCC"
+CT_GCC_PKG_NAME="gcc"
+CT_GCC_SRC_RELEASE=y
+CT_GCC_PATCH_ORDER="global"
+%CT_GCC_V%
+CT_GCC_MIRRORS="$(CT_Mirrors GNU gcc/gcc-${CT_GCC_VERSION}) $(CT_Mirrors sourceware gcc/releases/gcc-${CT_GCC_VERSION})"
+CT_GCC_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_GCC_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_GCC_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_GCC_SIGNATURE_FORMAT=""
+%CT_GCC%
+CT_CC_GCC_ENABLE_PLUGINS=y
+CT_CC_GCC_HAS_LIBMPX=y
+CT_CC_GCC_ENABLE_CXX_FLAGS=""
+CT_CC_GCC_CORE_EXTRA_CONFIG_ARRAY=""
+CT_CC_GCC_EXTRA_CONFIG_ARRAY=""
+CT_CC_GCC_STATIC_LIBSTDCXX=y
+# CT_CC_GCC_SYSTEM_ZLIB is not set
+CT_CC_GCC_CONFIG_TLS=m
+
+#
+# Optimisation features
+#
+CT_CC_GCC_USE_GRAPHITE=y
+CT_CC_GCC_USE_LTO=y
+
+#
+# Settings for libraries running on target
+#
+CT_CC_GCC_ENABLE_TARGET_OPTSPACE=y
+# CT_CC_GCC_LIBMUDFLAP is not set
+# CT_CC_GCC_LIBGOMP is not set
+# CT_CC_GCC_LIBSSP is not set
+# CT_CC_GCC_LIBQUADMATH is not set
+
+#
+# Misc. obscure options.
+#
+CT_CC_CXA_ATEXIT=y
+# CT_CC_GCC_DISABLE_PCH is not set
+CT_CC_GCC_SJLJ_EXCEPTIONS=m
+CT_CC_GCC_LDBL_128=m
+# CT_CC_GCC_BUILD_ID is not set
+CT_CC_GCC_LNK_HASH_STYLE_DEFAULT=y
+# CT_CC_GCC_LNK_HASH_STYLE_SYSV is not set
+# CT_CC_GCC_LNK_HASH_STYLE_GNU is not set
+# CT_CC_GCC_LNK_HASH_STYLE_BOTH is not set
+CT_CC_GCC_LNK_HASH_STYLE=""
+CT_CC_GCC_DEC_FLOAT_AUTO=y
+# CT_CC_GCC_DEC_FLOAT_BID is not set
+# CT_CC_GCC_DEC_FLOAT_DPD is not set
+# CT_CC_GCC_DEC_FLOATS_NO is not set
+CT_CC_GCC_HAS_ARCH_OPTIONS=y
+
+#
+# architecture-specific options
+#
+CT_CC_GCC_mips_llsc=m
+CT_CC_GCC_mips_synci=m
+CT_CC_GCC_mips_plt=y
+CT_ALL_CC_CHOICES="GCC"
+
+#
+# Additional supported languages:
+#
+CT_CC_LANG_CXX=y
+# CT_CC_LANG_FORTRAN is not set
+
+#
+# Debug facilities
+#
+CT_DEBUG_DUMA=y
+CT_DEBUG_DUMA_PKG_KSYM="DUMA"
+CT_DUMA_DIR_NAME="duma"
+CT_DUMA_PKG_NAME="duma"
+CT_DUMA_SRC_RELEASE=y
+CT_DUMA_PATCH_ORDER="global"
+CT_DUMA_V_2_5_15=y
+# CT_DUMA_NO_VERSIONS is not set
+CT_DUMA_VERSION="2_5_15"
+CT_DUMA_MIRRORS="http://downloads.sourceforge.net/project/duma/duma/${CT_DUMA_VERSION//_/.}"
+CT_DUMA_ARCHIVE_FILENAME="@{pkg_name}_@{version}"
+CT_DUMA_ARCHIVE_DIRNAME="@{pkg_name}_@{version}"
+CT_DUMA_ARCHIVE_FORMATS=".tar.gz .zip"
+CT_DUMA_SIGNATURE_FORMAT=""
+CT_DUMA_SO=y
+CT_DUMA_CUSTOM_WRAPPER=y
+CT_DEBUG_GDB=y
+CT_DEBUG_GDB_PKG_KSYM="GDB"
+CT_GDB_DIR_NAME="gdb"
+CT_GDB_USE_GNU=y
+CT_GDB_USE="GDB"
+CT_GDB_PKG_NAME="gdb"
+CT_GDB_SRC_RELEASE=y
+CT_GDB_PATCH_ORDER="global"
+CT_GDB_V_8_2=y
+# CT_GDB_V_8_1 is not set
+# CT_GDB_V_8_0 is not set
+# CT_GDB_V_7_12 is not set
+# CT_GDB_V_7_11 is not set
+# CT_GDB_NO_VERSIONS is not set
+CT_GDB_VERSION="8.2.1"
+CT_GDB_MIRRORS="$(CT_Mirrors GNU gdb) $(CT_Mirrors sourceware gdb/releases)"
+CT_GDB_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_GDB_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_GDB_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_GDB_SIGNATURE_FORMAT=""
+CT_GDB_later_than_8_0=y
+CT_GDB_8_0_or_later=y
+CT_GDB_later_than_7_12=y
+CT_GDB_7_12_or_later=y
+CT_GDB_later_than_7_2=y
+CT_GDB_7_2_or_later=y
+CT_GDB_later_than_7_0=y
+CT_GDB_7_0_or_later=y
+CT_GDB_CROSS=y
+# CT_GDB_CROSS_STATIC is not set
+# CT_GDB_CROSS_SIM is not set
+# CT_GDB_CROSS_PYTHON is not set
+CT_GDB_CROSS_EXTRA_CONFIG_ARRAY=""
+# CT_GDB_NATIVE is not set
+CT_GDB_GDBSERVER=y
+# CT_GDB_NATIVE_STATIC_LIBSTDCXX is not set
+CT_GDB_HAS_PKGVERSION_BUGURL=y
+CT_GDB_HAS_PYTHON=y
+CT_GDB_INSTALL_GDBINIT=y
+CT_GDB_HAS_IPA_LIB=y
+# CT_DEBUG_LTRACE is not set
+# CT_DEBUG_STRACE is not set
+CT_ALL_DEBUG_CHOICES="DUMA GDB LTRACE STRACE"
+
+#
+# Companion libraries
+#
+# CT_COMPLIBS_CHECK is not set
+# CT_COMP_LIBS_CLOOG is not set
+CT_COMP_LIBS_EXPAT=y
+CT_COMP_LIBS_EXPAT_PKG_KSYM="EXPAT"
+CT_EXPAT_DIR_NAME="expat"
+CT_EXPAT_PKG_NAME="expat"
+CT_EXPAT_SRC_RELEASE=y
+CT_EXPAT_PATCH_ORDER="global"
+CT_EXPAT_V_2_2=y
+# CT_EXPAT_NO_VERSIONS is not set
+CT_EXPAT_VERSION="2.2.6"
+CT_EXPAT_MIRRORS="http://downloads.sourceforge.net/project/expat/expat/${CT_EXPAT_VERSION} https://github.com/libexpat/libexpat/releases/download/R_${CT_EXPAT_VERSION//./_}"
+CT_EXPAT_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_EXPAT_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_EXPAT_ARCHIVE_FORMATS=".tar.xz .tar.lz .tar.bz2 .tar.gz"
+CT_EXPAT_SIGNATURE_FORMAT=""
+# CT_COMP_LIBS_GETTEXT is not set
+CT_COMP_LIBS_GMP=y
+CT_COMP_LIBS_GMP_PKG_KSYM="GMP"
+CT_GMP_DIR_NAME="gmp"
+CT_GMP_PKG_NAME="gmp"
+CT_GMP_SRC_RELEASE=y
+CT_GMP_PATCH_ORDER="global"
+CT_GMP_V_6_1=y
+# CT_GMP_NO_VERSIONS is not set
+CT_GMP_VERSION="6.1.2"
+CT_GMP_MIRRORS="https://gmplib.org/download/gmp https://gmplib.org/download/gmp/archive $(CT_Mirrors GNU gmp)"
+CT_GMP_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_GMP_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_GMP_ARCHIVE_FORMATS=".tar.xz .tar.lz .tar.bz2"
+CT_GMP_SIGNATURE_FORMAT="packed/.sig"
+CT_GMP_later_than_5_1_0=y
+CT_GMP_5_1_0_or_later=y
+CT_GMP_later_than_5_0_0=y
+CT_GMP_5_0_0_or_later=y
+CT_GMP_REQUIRE_5_0_0_or_later=y
+CT_COMP_LIBS_ISL=y
+CT_COMP_LIBS_ISL_PKG_KSYM="ISL"
+CT_ISL_DIR_NAME="isl"
+CT_ISL_PKG_NAME="isl"
+CT_ISL_SRC_RELEASE=y
+CT_ISL_PATCH_ORDER="global"
+CT_ISL_V_0_20=y
+# CT_ISL_V_0_19 is not set
+# CT_ISL_V_0_18 is not set
+# CT_ISL_V_0_17 is not set
+# CT_ISL_V_0_16 is not set
+# CT_ISL_V_0_15 is not set
+# CT_ISL_NO_VERSIONS is not set
+CT_ISL_VERSION="0.20"
+CT_ISL_MIRRORS="https://ci-mirrors.rust-lang.org/rustc"
+CT_ISL_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_ISL_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_ISL_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz"
+CT_ISL_SIGNATURE_FORMAT=""
+CT_ISL_later_than_0_18=y
+CT_ISL_0_18_or_later=y
+CT_ISL_later_than_0_15=y
+CT_ISL_0_15_or_later=y
+CT_ISL_REQUIRE_0_15_or_later=y
+CT_ISL_later_than_0_14=y
+CT_ISL_0_14_or_later=y
+CT_ISL_REQUIRE_0_14_or_later=y
+CT_ISL_later_than_0_13=y
+CT_ISL_0_13_or_later=y
+CT_ISL_later_than_0_12=y
+CT_ISL_0_12_or_later=y
+CT_ISL_REQUIRE_0_12_or_later=y
+# CT_COMP_LIBS_LIBELF is not set
+# CT_COMP_LIBS_LIBICONV is not set
+CT_COMP_LIBS_MPC=y
+CT_COMP_LIBS_MPC_PKG_KSYM="MPC"
+CT_MPC_DIR_NAME="mpc"
+CT_MPC_PKG_NAME="mpc"
+CT_MPC_SRC_RELEASE=y
+CT_MPC_PATCH_ORDER="global"
+CT_MPC_V_1_1=y
+# CT_MPC_V_1_0 is not set
+# CT_MPC_NO_VERSIONS is not set
+CT_MPC_VERSION="1.1.0"
+CT_MPC_MIRRORS="http://www.multiprecision.org/downloads $(CT_Mirrors GNU mpc)"
+CT_MPC_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_MPC_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_MPC_ARCHIVE_FORMATS=".tar.gz"
+CT_MPC_SIGNATURE_FORMAT="packed/.sig"
+CT_MPC_1_1_0_or_later=y
+CT_MPC_1_1_0_or_older=y
+CT_COMP_LIBS_MPFR=y
+CT_COMP_LIBS_MPFR_PKG_KSYM="MPFR"
+CT_MPFR_DIR_NAME="mpfr"
+CT_MPFR_PKG_NAME="mpfr"
+CT_MPFR_SRC_RELEASE=y
+CT_MPFR_PATCH_ORDER="global"
+CT_MPFR_V_4_0=y
+# CT_MPFR_V_3_1 is not set
+# CT_MPFR_NO_VERSIONS is not set
+CT_MPFR_VERSION="4.0.2"
+CT_MPFR_MIRRORS="http://www.mpfr.org/mpfr-${CT_MPFR_VERSION} $(CT_Mirrors GNU mpfr)"
+CT_MPFR_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_MPFR_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_MPFR_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz .zip"
+CT_MPFR_SIGNATURE_FORMAT="packed/.asc"
+CT_MPFR_later_than_4_0_0=y
+CT_MPFR_4_0_0_or_later=y
+CT_MPFR_later_than_3_0_0=y
+CT_MPFR_3_0_0_or_later=y
+CT_MPFR_REQUIRE_3_0_0_or_later=y
+CT_COMP_LIBS_NCURSES=y
+CT_COMP_LIBS_NCURSES_PKG_KSYM="NCURSES"
+CT_NCURSES_DIR_NAME="ncurses"
+CT_NCURSES_PKG_NAME="ncurses"
+CT_NCURSES_SRC_RELEASE=y
+CT_NCURSES_PATCH_ORDER="global"
+CT_NCURSES_V_6_1=y
+# CT_NCURSES_V_6_0 is not set
+# CT_NCURSES_NO_VERSIONS is not set
+CT_NCURSES_VERSION="6.1"
+CT_NCURSES_MIRRORS="ftp://invisible-island.net/ncurses $(CT_Mirrors GNU ncurses)"
+CT_NCURSES_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_NCURSES_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_NCURSES_ARCHIVE_FORMATS=".tar.gz"
+CT_NCURSES_SIGNATURE_FORMAT="packed/.sig"
+CT_NCURSES_HOST_CONFIG_ARGS=""
+CT_NCURSES_HOST_DISABLE_DB=y
+CT_NCURSES_HOST_FALLBACKS="linux,xterm,xterm-color,xterm-256color,vt100"
+CT_NCURSES_TARGET_CONFIG_ARGS=""
+# CT_NCURSES_TARGET_DISABLE_DB is not set
+CT_NCURSES_TARGET_FALLBACKS=""
+CT_COMP_LIBS_ZLIB=y
+CT_COMP_LIBS_ZLIB_PKG_KSYM="ZLIB"
+CT_ZLIB_DIR_NAME="zlib"
+CT_ZLIB_PKG_NAME="zlib"
+CT_ZLIB_SRC_RELEASE=y
+CT_ZLIB_PATCH_ORDER="global"
+CT_ZLIB_V_1_2_11=y
+# CT_ZLIB_NO_VERSIONS is not set
+CT_ZLIB_VERSION="1.2.11"
+CT_ZLIB_MIRRORS="http://downloads.sourceforge.net/project/libpng/zlib/${CT_ZLIB_VERSION}"
+CT_ZLIB_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
+CT_ZLIB_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
+CT_ZLIB_ARCHIVE_FORMATS=".tar.xz .tar.gz"
+CT_ZLIB_SIGNATURE_FORMAT="packed/.asc"
+CT_ALL_COMP_LIBS_CHOICES="CLOOG EXPAT GETTEXT GMP ISL LIBELF LIBICONV MPC MPFR NCURSES ZLIB"
+# CT_LIBICONV_NEEDED is not set
+# CT_GETTEXT_NEEDED is not set
+CT_GMP_NEEDED=y
+CT_MPFR_NEEDED=y
+CT_ISL_NEEDED=y
+CT_MPC_NEEDED=y
+CT_EXPAT_NEEDED=y
+CT_NCURSES_NEEDED=y
+CT_ZLIB_NEEDED=y
+CT_GMP=y
+CT_MPFR=y
+CT_ISL=y
+CT_MPC=y
+CT_EXPAT=y
+CT_NCURSES=y
+CT_ZLIB=y
+
+#
+# Companion tools
+#
+# CT_COMP_TOOLS_FOR_HOST is not set
+# CT_COMP_TOOLS_AUTOCONF is not set
+# CT_COMP_TOOLS_AUTOMAKE is not set
+# CT_COMP_TOOLS_BISON is not set
+# CT_COMP_TOOLS_DTC is not set
+# CT_COMP_TOOLS_LIBTOOL is not set
+# CT_COMP_TOOLS_M4 is not set
+# CT_COMP_TOOLS_MAKE is not set
+CT_ALL_COMP_TOOLS_CHOICES="AUTOCONF AUTOMAKE BISON DTC LIBTOOL M4 MAKE"
diff --git a/docker/Dockerfile.mips-unknown-linux-uclibc-cross b/docker/Dockerfile.mips-unknown-linux-uclibc-cross
new file mode 100644
index 0000000..f8ca260
--- /dev/null
+++ b/docker/Dockerfile.mips-unknown-linux-uclibc-cross
@@ -0,0 +1,36 @@
+FROM ubuntu:20.04
+ARG DEBIAN_FRONTEND=noninteractive
+
+COPY common.sh lib.sh /
+RUN /common.sh
+
+COPY cmake.sh /
+RUN /cmake.sh
+
+COPY xargo.sh /
+RUN /xargo.sh
+
+ARG VERBOSE
+COPY crosstool-ng.sh /
+COPY cross-toolchains/docker/crosstool-config/mips-unknown-linux-uclibc-cross.config /
+RUN /crosstool-ng.sh mips-unknown-linux-uclibc-cross.config 5
+
+ENV PATH /x-tools/mips-unknown-linux-uclibc/bin/:$PATH
+
+COPY deny-debian-packages.sh /
+RUN TARGET_ARCH=mips /deny-debian-packages.sh
+
+COPY qemu.sh /
+RUN /qemu.sh mips
+
+COPY qemu-runner base-runner.sh /
+
+ENV CROSS_SYSROOT=/x-tools/mips-unknown-linux-uclibc/mips-unknown-linux-uclibc/sysroot/
+ENV CARGO_TARGET_MIPS_UNKNOWN_LINUX_UCLIBC_LINKER=mips-unknown-linux-uclibc-gcc \
+    CARGO_TARGET_MIPS_UNKNOWN_LINUX_UCLIBC_RUNNER="/qemu-runner mips" \
+    CC_mips_unknown_linux_uclibc=mips-unknown-linux-uclibc-gcc \
+    CXX_mips_unknown_linux_uclibc=mips-unknown-linux-uclibc-g++ \
+    BINDGEN_EXTRA_CLANG_ARGS_mips_unknown_linux_uclibc="--sysroot=$CROSS_SYSROOT" \
+    QEMU_LD_PREFIX="$CROSS_SYSROOT" \
+    RUST_TEST_THREADS=1 \
+    PKG_CONFIG_PATH="/usr/lib/mips-unknown-linux-uclibc/pkgconfig/:${PKG_CONFIG_PATH}"
diff --git a/docker/Dockerfile.mipsel-unknown-linux-uclibc-cross b/docker/Dockerfile.mipsel-unknown-linux-uclibc-cross
index 69f2ac0..9692376 100644
--- a/docker/Dockerfile.mipsel-unknown-linux-uclibc-cross
+++ b/docker/Dockerfile.mipsel-unknown-linux-uclibc-cross
@@ -12,15 +12,13 @@ RUN /xargo.sh

 ARG VERBOSE
 COPY crosstool-ng.sh /
-COPY cross-toolchains/docker/crosstool-config/mipsel-unknown-linux-uclibc.config /
-RUN /crosstool-ng.sh mipsel-unknown-linux-uclibc.config 5
+COPY cross-toolchains/docker/crosstool-config/mipsel-unknown-linux-uclibc-cross.config /
+RUN /crosstool-ng.sh mipsel-unknown-linux-uclibc-cross.config 5

 ENV PATH /x-tools/mipsel-unknown-linux-uclibc/bin/:$PATH

 COPY deny-debian-packages.sh /
-RUN TARGET_ARCH=mipsel /deny-debian-packages.sh \
-    binutils \
-    binutils-mipsel-linux-gnu
+RUN TARGET_ARCH=mipsel /deny-debian-packages.sh

 COPY qemu.sh /
 RUN /qemu.sh mipsel
diff --git a/docker/crosstool-config/mipsel-unknown-linux-uclibc.config b/docker/crosstool-config/mips-unknown-linux-uclibc-cross.config
similarity index 93%
rename from docker/crosstool-config/mipsel-unknown-linux-uclibc.config
rename to docker/crosstool-config/mips-unknown-linux-uclibc-cross.config
index e8a468d..b1cf6fa 100644
--- a/docker/crosstool-config/mipsel-unknown-linux-uclibc.config
+++ b/docker/crosstool-config/mips-unknown-linux-uclibc-cross.config
@@ -2,8 +2,7 @@
 # Automatically generated file; DO NOT EDIT.
 # crosstool-NG  Configuration
 #
-# This file was adapted from the crosstool-ng mips-unknown-linux-uclibc sample. The endian was
-#   swapped to little endian, and the URLs were updated to point at up-to-date mirrors.
+# This file was adapted from the crosstool-ng mips-unknown-linux-uclibc sample.
 CT_CONFIGURE_has_static_link=y
 CT_CONFIGURE_has_cxx11=y
 CT_CONFIGURE_has_wget=y
@@ -48,7 +47,6 @@ CT_SAVE_TARBALLS=y
 # CT_TARBALLS_BUILDROOT_LAYOUT is not set
 CT_WORK_DIR="${CT_TOP_DIR}/.build"
 CT_BUILD_TOP_DIR="${CT_WORK_DIR:-${CT_TOP_DIR}/.build}/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}"
-CT_BUILD_DIR="${CT_BUILD_TOP_DIR}/build"
 CT_PREFIX_DIR="/x-tools/${CT_TARGET}"
 CT_RM_RF_PREFIX_DIR=y
 CT_REMOVE_DOCS=y
@@ -157,9 +155,9 @@ CT_DEMULTILIB=y
 CT_ARCH_USE_MMU=y
 CT_ARCH_SUPPORTS_EITHER_ENDIAN=y
 CT_ARCH_DEFAULT_BE=y
-# CT_ARCH_BE is not set
-CT_ARCH_LE=y
-CT_ARCH_ENDIAN="little"
+CT_ARCH_BE=y
+# CT_ARCH_LE is not set
+CT_ARCH_ENDIAN="big"
 CT_ARCH_SUPPORTS_32=y
 CT_ARCH_SUPPORTS_64=y
 CT_ARCH_DEFAULT_32=y
@@ -243,29 +241,9 @@ CT_LINUX_DIR_NAME="linux"
 CT_LINUX_PKG_NAME="linux"
 CT_LINUX_SRC_RELEASE=y
 CT_LINUX_PATCH_ORDER="global"
-CT_LINUX_V_4_20=y
-# CT_LINUX_V_4_19 is not set
-# CT_LINUX_V_4_18 is not set
-# CT_LINUX_V_4_17 is not set
-# CT_LINUX_V_4_16 is not set
-# CT_LINUX_V_4_15 is not set
-# CT_LINUX_V_4_14 is not set
-# CT_LINUX_V_4_13 is not set
-# CT_LINUX_V_4_12 is not set
-# CT_LINUX_V_4_11 is not set
-# CT_LINUX_V_4_10 is not set
-# CT_LINUX_V_4_9 is not set
-# CT_LINUX_V_4_4 is not set
-# CT_LINUX_V_4_1 is not set
-# CT_LINUX_V_3_16 is not set
-# CT_LINUX_V_3_13 is not set
-# CT_LINUX_V_3_12 is not set
-# CT_LINUX_V_3_10 is not set
-# CT_LINUX_V_3_4 is not set
-# CT_LINUX_V_3_2 is not set
-# CT_LINUX_V_2_6_32 is not set
+CT_LINUX_V_4_19=y
 # CT_LINUX_NO_VERSIONS is not set
-CT_LINUX_VERSION="4.20.8"
+CT_LINUX_VERSION="4.19.21"
 CT_LINUX_MIRRORS="$(CT_Mirrors kernel.org linux ${CT_LINUX_VERSION})"
 CT_LINUX_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
 CT_LINUX_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
@@ -367,30 +345,24 @@ CT_UCLIBC_USE="UCLIBC_NG"
 CT_UCLIBC_NG_PKG_NAME="uClibc-ng"
 CT_UCLIBC_NG_SRC_RELEASE=y
 CT_UCLIBC_NG_PATCH_ORDER="global"
-CT_UCLIBC_NG_V_1_0_31=y
-# CT_UCLIBC_NG_V_1_0_30 is not set
-# CT_UCLIBC_NG_V_1_0_29 is not set
-# CT_UCLIBC_NG_V_1_0_28 is not set
-# CT_UCLIBC_NG_V_1_0_27 is not set
-# CT_UCLIBC_NG_V_1_0_26 is not set
-# CT_UCLIBC_NG_V_1_0_25 is not set
-# CT_UCLIBC_NG_NO_VERSIONS is not set
-CT_UCLIBC_NG_VERSION="1.0.31"
 CT_UCLIBC_NG_MIRRORS="http://downloads.uclibc-ng.org/releases/${CT_UCLIBC_NG_VERSION}"
 CT_UCLIBC_NG_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
 CT_UCLIBC_NG_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
 CT_UCLIBC_NG_ARCHIVE_FORMATS=".tar.xz .tar.lz .tar.bz2 .tar.gz"
 CT_UCLIBC_NG_SIGNATURE_FORMAT="packed/.asc"
-CT_UCLIBC_later_than_1_0_23=y
+CT_UCLIBC_NG_V_1_0_31=y
+# CT_UCLIBC_NG_NO_VERSIONS is not set
+CT_UCLIBC_NG_VERSION="1.0.31"
 CT_UCLIBC_1_0_23_or_later=y
-CT_UCLIBC_later_than_1_0_21=y
+CT_UCLIBC_later_than_1_0_23=y
 CT_UCLIBC_1_0_21_or_later=y
-CT_UCLIBC_later_than_1_0_15=y
+CT_UCLIBC_later_than_1_0_21=y
 CT_UCLIBC_1_0_15_or_later=y
-CT_UCLIBC_later_than_1_0_0=y
+CT_UCLIBC_later_than_1_0_15=y
 CT_UCLIBC_1_0_0_or_later=y
-CT_UCLIBC_later_than_0_9_33_2=y
+CT_UCLIBC_later_than_1_0_0=y
 CT_UCLIBC_0_9_33_2_or_later=y
+CT_UCLIBC_later_than_0_9_33_2=y
 CT_LIBC_UCLIBC_HAS_LIBICONV=y
 CT_LIBC_UCLIBC_PARALLEL=y
 CT_LIBC_UCLIBC_NG=y
@@ -456,10 +428,6 @@ CT_GCC_PKG_NAME="gcc"
 CT_GCC_SRC_RELEASE=y
 CT_GCC_PATCH_ORDER="global"
 CT_GCC_V_8=y
-# CT_GCC_V_7 is not set
-# CT_GCC_V_6 is not set
-# CT_GCC_V_5 is not set
-# CT_GCC_V_4_9 is not set
 # CT_GCC_NO_VERSIONS is not set
 CT_GCC_VERSION="8.3.0"
 CT_GCC_MIRRORS="$(CT_Mirrors GNU gcc/gcc-${CT_GCC_VERSION}) $(CT_Mirrors sourceware gcc/releases/gcc-${CT_GCC_VERSION})"
@@ -521,7 +489,7 @@ CT_CC_GCC_DEC_FLOAT_AUTO=y
 CT_CC_GCC_HAS_ARCH_OPTIONS=y

 #
-# archictecture-specific options
+# architecture-specific options
 #
 CT_CC_GCC_mips_llsc=m
 CT_CC_GCC_mips_synci=m
@@ -650,7 +618,7 @@ CT_ISL_V_0_20=y
 # CT_ISL_V_0_15 is not set
 # CT_ISL_NO_VERSIONS is not set
 CT_ISL_VERSION="0.20"
-CT_ISL_MIRRORS="https://libisl.sourceforge.io"
+CT_ISL_MIRRORS="https://ci-mirrors.rust-lang.org/rustc"
 CT_ISL_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
 CT_ISL_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
 CT_ISL_ARCHIVE_FORMATS=".tar.xz .tar.bz2 .tar.gz"
diff --git a/crosstool-ng/mipsel-unknown-linux-uclibc.config.in b/docker/crosstool-config/mipsel-unknown-linux-uclibc-cross.config
similarity index 95%
rename from crosstool-ng/mipsel-unknown-linux-uclibc.config.in
rename to docker/crosstool-config/mipsel-unknown-linux-uclibc-cross.config
index 561b2f6..4e2f604 100644
--- a/crosstool-ng/mipsel-unknown-linux-uclibc.config.in
+++ b/docker/crosstool-config/mipsel-unknown-linux-uclibc-cross.config
@@ -243,29 +243,9 @@ CT_LINUX_DIR_NAME="linux"
 CT_LINUX_PKG_NAME="linux"
 CT_LINUX_SRC_RELEASE=y
 CT_LINUX_PATCH_ORDER="global"
-CT_LINUX_V_4_20=y
-# CT_LINUX_V_4_19 is not set
-# CT_LINUX_V_4_18 is not set
-# CT_LINUX_V_4_17 is not set
-# CT_LINUX_V_4_16 is not set
-# CT_LINUX_V_4_15 is not set
-# CT_LINUX_V_4_14 is not set
-# CT_LINUX_V_4_13 is not set
-# CT_LINUX_V_4_12 is not set
-# CT_LINUX_V_4_11 is not set
-# CT_LINUX_V_4_10 is not set
-# CT_LINUX_V_4_9 is not set
-# CT_LINUX_V_4_4 is not set
-# CT_LINUX_V_4_1 is not set
-# CT_LINUX_V_3_16 is not set
-# CT_LINUX_V_3_13 is not set
-# CT_LINUX_V_3_12 is not set
-# CT_LINUX_V_3_10 is not set
-# CT_LINUX_V_3_4 is not set
-# CT_LINUX_V_3_2 is not set
-# CT_LINUX_V_2_6_32 is not set
+CT_LINUX_V_4_19=y
 # CT_LINUX_NO_VERSIONS is not set
-CT_LINUX_VERSION="4.20.8"
+CT_LINUX_VERSION="4.19.21"
 CT_LINUX_MIRRORS="$(CT_Mirrors kernel.org linux ${CT_LINUX_VERSION})"
 CT_LINUX_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
 CT_LINUX_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
@@ -367,30 +347,24 @@ CT_UCLIBC_USE="UCLIBC_NG"
 CT_UCLIBC_NG_PKG_NAME="uClibc-ng"
 CT_UCLIBC_NG_SRC_RELEASE=y
 CT_UCLIBC_NG_PATCH_ORDER="global"
-CT_UCLIBC_NG_V_1_0_31=y
-# CT_UCLIBC_NG_V_1_0_30 is not set
-# CT_UCLIBC_NG_V_1_0_29 is not set
-# CT_UCLIBC_NG_V_1_0_28 is not set
-# CT_UCLIBC_NG_V_1_0_27 is not set
-# CT_UCLIBC_NG_V_1_0_26 is not set
-# CT_UCLIBC_NG_V_1_0_25 is not set
-# CT_UCLIBC_NG_NO_VERSIONS is not set
-CT_UCLIBC_NG_VERSION="1.0.31"
 CT_UCLIBC_NG_MIRRORS="http://downloads.uclibc-ng.org/releases/${CT_UCLIBC_NG_VERSION}"
 CT_UCLIBC_NG_ARCHIVE_FILENAME="@{pkg_name}-@{version}"
 CT_UCLIBC_NG_ARCHIVE_DIRNAME="@{pkg_name}-@{version}"
 CT_UCLIBC_NG_ARCHIVE_FORMATS=".tar.xz .tar.lz .tar.bz2 .tar.gz"
 CT_UCLIBC_NG_SIGNATURE_FORMAT="packed/.asc"
-CT_UCLIBC_later_than_1_0_23=y
+CT_UCLIBC_NG_V_1_0_31=y
+# CT_UCLIBC_NG_NO_VERSIONS is not set
+CT_UCLIBC_NG_VERSION="1.0.31"
 CT_UCLIBC_1_0_23_or_later=y
-CT_UCLIBC_later_than_1_0_21=y
+CT_UCLIBC_later_than_1_0_23=y
 CT_UCLIBC_1_0_21_or_later=y
-CT_UCLIBC_later_than_1_0_15=y
+CT_UCLIBC_later_than_1_0_21=y
 CT_UCLIBC_1_0_15_or_later=y
-CT_UCLIBC_later_than_1_0_0=y
+CT_UCLIBC_later_than_1_0_15=y
 CT_UCLIBC_1_0_0_or_later=y
-CT_UCLIBC_later_than_0_9_33_2=y
+CT_UCLIBC_later_than_1_0_0=y
 CT_UCLIBC_0_9_33_2_or_later=y
+CT_UCLIBC_later_than_0_9_33_2=y
 CT_LIBC_UCLIBC_HAS_LIBICONV=y
 CT_LIBC_UCLIBC_PARALLEL=y
 CT_LIBC_UCLIBC_NG=y
@@ -456,10 +430,6 @@ CT_GCC_PKG_NAME="gcc"
 CT_GCC_SRC_RELEASE=y
 CT_GCC_PATCH_ORDER="global"
 CT_GCC_V_8=y
-# CT_GCC_V_7 is not set
-# CT_GCC_V_6 is not set
-# CT_GCC_V_5 is not set
-# CT_GCC_V_4_9 is not set
 # CT_GCC_NO_VERSIONS is not set
 CT_GCC_VERSION="8.3.0"
 CT_GCC_MIRRORS="$(CT_Mirrors GNU gcc/gcc-${CT_GCC_VERSION}) $(CT_Mirrors sourceware gcc/releases/gcc-${CT_GCC_VERSION})"
@@ -772,3 +742,4 @@ CT_ZLIB=y
 # CT_COMP_TOOLS_M4 is not set
 # CT_COMP_TOOLS_MAKE is not set
 CT_ALL_COMP_TOOLS_CHOICES="AUTOCONF AUTOMAKE BISON DTC LIBTOOL M4 MAKE"
+
CuckooEXE commented 1 year ago

Hi! Sorry for the delay, life got a bit busy. I was also waiting for this issue to resolve. Do we still want to have uClibc < 1.0 support considering it might take significant developer effort to actually get it to work?

I'm not sure if we want to adopt the "We support it but it's up to you to get it working" or "We won't support it unless it's (basically) plug-and-play". I guess we could get a single uClibc < 1.0 .config version working and have that be the plug-and-play?

Alexhuszagh commented 1 year ago

For the pre-1.0 uclibc, I think it's fine as-is (that is, it can be configured to work but only post-1.0 is tested), since the original uclibc has been hard-forked and mostly replaced, but I also understand there are cases where you need to use an older libc. I think having a default config file is fine, but a very handy addition would be a README entry for what GCC/uclibc/Linux versions work with pre-1.0 uclibc. We've documented some caveats with some of our crosstool-ng images, but also additional features or working examples would be quite nice as well.

Alexhuszagh commented 1 year ago

Any update on this? If no, I can merge the changes myself and then squash the commit history, give you the co-author, and merge. Is that fine?

CuckooEXE commented 1 year ago

Hi @Alexhuszagh, sorry about the big delay. Unfortunately, some work stuff came up so I'm not sure if I'll have the cycles to do this in the near future. I'd very much appreciate it if you could finish the PR, but if not, I can do it when I'm free again.

Thank you!

Alexhuszagh commented 1 year ago

Hi @Alexhuszagh, sorry about the big delay. Unfortunately, some work stuff came up so I'm not sure if I'll have the cycles to do this in the near future. I'd very much appreciate it if you could finish the PR, but if not, I can do it when I'm free again.

Thank you!

No worries, you're making contributions on your own time: thanks for all your work.

CuckooEXE commented 1 year ago

@Alexhuszagh Sorry for the mega delay! Committed the diff, let me know if anything else needs to be done :)

Alexhuszagh commented 1 year ago

@Alexhuszagh Sorry for the mega delay! Committed the diff, let me know if anything else needs to be done :)

Can you squash the commit history? Other than that, everything looks great. To do so (just need to squash it to a single commit on top of 971e8bb), run:

$ git reset 971e8bb
$ git add crosstool-ng docker README.md
$ git commit ...
$ git push --force

This looks incredible.