summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Neyman <stilor@att.net>2017-07-05 02:19:42 (GMT)
committerAlexey Neyman <stilor@att.net>2017-07-08 17:57:56 (GMT)
commitff0a1a3da605ca157e3f3d0ed2d8b9acb30c2f69 (patch)
tree3866631ee0fa3fc650fd71de948f9a8b32bfc359
parent50a387afa7abd24255ef865dada5d324265e1250 (diff)
Switch gen-kconfig to new framework
Also: - Move companion_* to comp_* to match the kconfig symbols - Replace bootstrap with former gen-versions.sh - Fold *.in.2 into their respective first parts; this moves common options to the end - if it is undesirable, inclusion of *.in can be moved where *.in.2 used to be (but that will also move version selection after common options). - Retire addToolVersion.sh (may later replace with a more comprehensive script that tries to download the added tarballs, copy the patches and try to apply them, and create a version.desc). Signed-off-by: Alexey Neyman <stilor@att.net>
-rw-r--r--TODO17
-rwxr-xr-xbootstrap649
-rw-r--r--config/arch/alpha.in57
-rw-r--r--config/arch/alpha.in.256
-rw-r--r--config/arch/arm.in97
-rw-r--r--config/arch/arm.in.296
-rw-r--r--config/arch/mips.in39
-rw-r--r--config/arch/mips.in.238
-rw-r--r--config/arch/powerpc.in43
-rw-r--r--config/arch/powerpc.in.242
-rw-r--r--config/arch/sh.in24
-rw-r--r--config/arch/sh.in.225
-rw-r--r--config/arch/xtensa.in15
-rw-r--r--config/arch/xtensa.in.212
-rw-r--r--config/binutils.in1
-rw-r--r--config/cc.in2
-rw-r--r--config/cc/gcc.in419
-rw-r--r--config/cc/gcc.in.2413
-rw-r--r--config/comp_libs.in (renamed from config/companion_libs.in)22
-rw-r--r--config/comp_libs/cloog.in (renamed from config/companion_libs/cloog.in)0
-rw-r--r--config/comp_libs/expat.in (renamed from config/companion_libs/expat.in)0
-rw-r--r--config/comp_libs/gettext.in (renamed from config/companion_libs/gettext.in)0
-rw-r--r--config/comp_libs/gmp.in (renamed from config/companion_libs/gmp.in)0
-rw-r--r--config/comp_libs/isl.in (renamed from config/companion_libs/isl.in)0
-rw-r--r--config/comp_libs/libelf.in (renamed from config/companion_libs/libelf.in)0
-rw-r--r--config/comp_libs/libiconv.in (renamed from config/companion_libs/libiconv.in)0
-rw-r--r--config/comp_libs/mpc.in (renamed from config/companion_libs/mpc.in)0
-rw-r--r--config/comp_libs/mpfr.in (renamed from config/companion_libs/mpfr.in)0
-rw-r--r--config/comp_libs/ncurses.in (renamed from config/companion_libs/ncurses.in)0
-rw-r--r--config/comp_libs/zlib.in (renamed from config/companion_libs/zlib.in)0
-rw-r--r--config/comp_tools.in (renamed from config/companion_tools.in)2
-rw-r--r--config/comp_tools/autoconf.in (renamed from config/companion_tools/autoconf.in)0
-rw-r--r--config/comp_tools/automake.in (renamed from config/companion_tools/automake.in)0
-rw-r--r--config/comp_tools/libtool.in (renamed from config/companion_tools/libtool.in)0
-rw-r--r--config/comp_tools/m4.in (renamed from config/companion_tools/m4.in)0
-rw-r--r--config/comp_tools/make.in (renamed from config/companion_tools/make.in)0
-rw-r--r--config/config.in4
-rw-r--r--config/kernel.in2
-rw-r--r--config/kernel/linux.in41
-rw-r--r--config/kernel/linux.in.240
-rw-r--r--config/libc.in2
-rw-r--r--config/libc/avr-libc.in7
-rw-r--r--config/libc/avr-libc.in.28
-rw-r--r--config/libc/glibc.in276
-rw-r--r--config/libc/glibc.in.2269
-rw-r--r--config/libc/musl.in57
-rw-r--r--config/libc/musl.in.251
-rw-r--r--config/libc/newlib.in192
-rw-r--r--config/libc/newlib.in.2190
-rw-r--r--config/libc/uClibc.in95
-rw-r--r--config/libc/uClibc.in.296
-rw-r--r--config/target.in2
-rwxr-xr-xmaintainer/addToolVersion.sh238
-rwxr-xr-xmaintainer/gen-kconfig.sh160
-rwxr-xr-xmaintainer/gen-versions.sh560
-rw-r--r--maintainer/kconfig-choice.template32
-rw-r--r--maintainer/kconfig-menu.template20
57 files changed, 2055 insertions, 2356 deletions
diff --git a/TODO b/TODO
index 47c3059..f4f7ca9 100644
--- a/TODO
+++ b/TODO
@@ -1,24 +1,23 @@
TBD
packages todo
+[X] convert gen-kconfig to use templates
+[ ] some way of patching development sources - version based? or just directory with "apply-to-any-revision" patches.
[X] mention custom glibc addons are no longer handled (even though they never fully were, ct-ng would be unable to fetch them unless they were secretly placed into the download area)
[x] mention incompatibility of sample options
[X] version-locked packages
[X] make glibc-ports package for glibc <2.17 (it has its own repo)
-[ ] convert gen-kconfig to use templates
-[ ] new packages
- [ ] config.guess
- [ ] gnulib
- [ ] use gnulib in m4, gettext, libiconv, libtool
- [ ] autoconf-archive
- [ ] use to retrieve ax_pthread.m4 (gettext?)
- [ ] uclibc-locales
-[ ] some way of patching development sources - version based? or just directory with "apply-to-any-revision" patches.
[x] dependencies like cloog
A (slightly) ordered set of tasks for crosstool-NG. Written in a cryptic language; contact me if you want to help with any of these :)
-- Alexey Neyman (@stilor)
+[ ] new packages
+ [ ] config.guess
+ [ ] gnulib
+ [ ] use gnulib in m4, gettext, libiconv, libtool
+ [ ] autoconf-archive
+ [ ] use to retrieve ax_pthread.m4 (gettext?)
[ ] retire wiki-samples
[ ] Fix displaying the versions in case devel is used (custom location/repo) - display "devel" or "custom" in those cases
[ ] clean up GDB versions - no X.Y if X.Y.1 is present
diff --git a/bootstrap b/bootstrap
index 44f77a7..0347db9 100755
--- a/bootstrap
+++ b/bootstrap
@@ -1,13 +1,644 @@
-#!/bin/sh
-set -e
+#!/bin/bash
-printf "Running autoconf...\n"
-autoconf -Wall --force
+########################################
+# Common meta-language implementation. Syntax:
+#
+# The template file is processed line by line, with @@VAR@@ placeholders
+# being replaced with a value of the VAR variable.
+# Special lines start with '#!' and a keyword:
+#
+# #!//
+# Comment, the rest of the line is ignored
+# #!if COND
+# Conditional: the lines until the matching #!end-if are processed
+# only if the conditional COND evaluates to true.
+# #!foreach NAME
+# Iterate over NAME entities (the iterator must be set up first
+# using the set_iter function), processing the lines until the matching
+# #!end-foreach line.
+
+declare -A info
+
+debug()
+{
+ if [ -n "${DEBUG}" ]; then
+ echo "DEBUG :: $@" >&2
+ fi
+}
+
+msg()
+{
+ if [ -z "${QUIET}" ]; then
+ echo "INFO :: $@" >&2
+ fi
+}
+
+warn()
+{
+ echo "WARN :: $@" >&2
+}
+
+error()
+{
+ echo "ERROR :: $@" >&2
+ exit 1
+}
+
+find_end()
+{
+ local token="${1}"
+ local count=1
+
+ # Skip first line, we know it has the proper '#!' command on it
+ endline=$[l + 1]
+ while [ "${endline}" -le "${end}" ]; do
+ case "${tlines[${endline}]}" in
+ "#!${token} "*)
+ count=$[count + 1]
+ ;;
+ "#!end-${token}")
+ count=$[count - 1]
+ ;;
+ esac
+ if [ "${count}" = 0 ]; then
+ return
+ fi
+ endline=$[endline + 1]
+ done
+ error "line ${l}: '${token}' token is unpaired"
+}
+
+set_iter()
+{
+ local name="${1}"
+
+ if [ "${info[iter_${name}]+set}" = "set" ]; then
+ error "Iterator over '${name}' is already set up"
+ fi
+ shift
+ debug "Setting iterator over '${name}' to '$*'"
+ info[iter_${name}]="$*"
+}
+
+run_if()
+{
+ local cond="${1}"
+ local endline
+
+ find_end "if"
+ if eval "${cond}"; then
+ debug "True conditional '${cond}' at lines ${l}..${endline}"
+ run_lines $[l + 1] $[endline - 1]
+ else
+ debug "False conditional '${cond}' at lines ${l}..${endline}"
+ fi
+ lnext=$[endline + 1]
+ debug "Continue at line ${lnext}"
+}
+
+do_foreach()
+{
+ local var="${1}"
+ local v saveinfo
+
+ shift
+ if [ "`type -t enter_${var}`" != "function" ]; then
+ error "No parameter setup routine for iterator over '${var}'"
+ fi
+ for v in ${info[iter_${var}]}; do
+ saveinfo=`declare -p info`
+ eval "enter_${var} ${v}"
+ eval "$@"
+ eval "${saveinfo#declare -A }"
+ done
+}
+
+run_foreach()
+{
+ local var="${1}"
+ local endline
+
+ if [ "${info[iter_${var}]+set}" != "set" ]; then
+ error "line ${l}: iterator over '${var}' is not defined"
+ fi
+ find_end "foreach"
+ debug "Loop over '${var}', lines ${l}..${endline}"
+ do_foreach ${var} run_lines $[l + 1] $[endline - 1]
+ lnext=$[endline + 1]
+ debug "Continue at line ${lnext}"
+}
+
+run_lines()
+{
+ local start="${1}"
+ local end="${2}"
+ local l lnext s s1 v
+
+ debug "Running lines ${start}..${end}"
+ l=${start}
+ while [ "${l}" -le "${end}" ]; do
+ lnext=$[l+1]
+ s="${tlines[${l}]}"
+ # Expand @@foo@@ to ${info[foo]}. First escape variables/backslashes for evals below.
+ s="${s//\\/\\\\}"
+ s="${s//\$/\\\$}"
+ s1=
+ while [ -n "${s}" ]; do
+ case "${s}" in
+ *@@*@@*)
+ v="${s#*@@}"
+ v="${v%%@@*}"
+ if [ "${info[${v}]+set}" != "set" ]; then
+ error "line ${l}: reference to undefined variable '${v}'"
+ fi
+ s1="${s1}${s%%@@*}\${info[${v}]}"
+ s="${s#*@@*@@}"
+ ;;
+ *@@*)
+ error "line ${l}: non-paired @@ markers"
+ ;;
+ *)
+ s1="${s1}${s}"
+ break
+ ;;
+ esac
+ done
+ s=${s1}
+
+ debug "Evaluate: ${s}"
+ case "${s}" in
+ "#!if "*)
+ run_if "${s#* }"
+ ;;
+ "#!foreach "*)
+ run_foreach "${s#* }"
+ ;;
+ "#!//"*)
+ # Comment, do nothing
+ ;;
+ "#!"*)
+ error "line ${l}: unrecognized command"
+ ;;
+ *)
+ # Not a special command
+ eval "echo \"${s//\"/\\\"}\""
+ ;;
+ esac
+ l=${lnext}
+ done
+}
+
+run_template()
+{
+ local -a tlines
+ local src="${1}"
+
+ if [ ! -r "${src}" ]; then
+ error "Template '${src}' not found"
+ fi
+ debug "Running template ${src}"
+ mapfile -O 1 -t tlines < "${src}"
+ run_lines 1 ${#tlines[@]}
+}
+
+########################################
+
+# Convert the argument to a Kconfig-style macro
+kconfigize()
+{
+ local v="${1}"
+
+ v=${v//[^0-9A-Za-z_]/_}
+ echo "${v^^}"
+}
+
+# Helper for cmp_versions: compare an upstream/debian portion of
+# a version. Returns 0 if equal, otherwise echoes "-1" or "1" and
+# returns 1.
+equal_versions()
+{
+ local v1="${1}"
+ local v2="${2}"
+ local p1 p2
+
+ # Compare alternating non-numerical/numerical portions, until
+ # non-equal portion is found or either string is exhausted.
+ while [ -n "${v1}" -a -n "${v2}" ]; do
+ # Find non-numerical portions and compare lexicographically
+ p1="${v1%%[0-9]*}"
+ p2="${v2%%[0-9]*}"
+ v1="${v1#${p1}}"
+ v2="${v2#${p2}}"
+ #debug "lex [${p1}] v [${p2}]"
+ if [ "${p1}" \< "${p2}" ]; then
+ echo "-1"
+ return 1
+ elif [ "${p1}" \> "${p2}" ]; then
+ echo "1"
+ return 1
+ fi
+ #debug "rem [${v1}] v [${v2}]"
+ # Find numerical portions and compare numerically
+ p1="${v1%%[^0-9]*}"
+ p2="${v2%%[^0-9]*}"
+ v1="${v1#${p1}}"
+ v2="${v2#${p2}}"
+ #debug "num [${p1}] v [${p2}]"
+ if [ "${p1:-0}" -lt "${p2:-0}" ]; then
+ echo "-1"
+ return 1
+ elif [ "${p1:-0}" -gt "${p2:-0}" ]; then
+ echo "1"
+ return 1
+ fi
+ #debug "rem [${v1}] v [${v2}]"
+ done
+ if [ -n "${v1}" ]; then
+ echo "1"
+ return 1
+ elif [ -n "${v2}" ]; then
+ echo "-1"
+ return 1
+ fi
+ return 0
+}
+
+# Compare two version strings, similar to sort -V. But we don't
+# want to depend on GNU sort availability on the host.
+# See http://www.debian.org/doc/debian-policy/ch-controlfields.html
+# for description of what the version is expected to be.
+# Returns "-1", "0" or "1" if first version is earlier, same or
+# later than the second.
+cmp_versions()
+{
+ local v1="${1}"
+ local v2="${2}"
+ local e1=0 e2=0 u1 u2 d1=0 d2=0
+
+ # Case-insensitive comparison
+ v1="${v1^^}"
+ v2="${v2^^}"
+
+ # Find if the versions contain epoch part
+ case "${v1}" in
+ *:*)
+ e1="${v1%%:*}"
+ v1="${v1#*:}"
+ ;;
+ esac
+ case "${v2}" in
+ *:*)
+ e2="${v2%%:*}"
+ v2="${v2#*:}"
+ ;;
+ esac
+
+ # Compare epochs numerically
+ if [ "${e1}" -lt "${e2}" ]; then
+ echo "-1"
+ return
+ elif [ "${e1}" -gt "${e2}" ]; then
+ echo "1"
+ return
+ fi
+
+ # Find if the version contains a "debian" part.
+ # v1/v2 will now contain "upstream" part.
+ case "${v1}" in
+ *-*)
+ d1=${v1##*-}
+ v1=${v1%-*}
+ ;;
+ esac
+ case "${v2}" in
+ *-*)
+ d2=${v2##*-}
+ v2=${v2%-*}
+ ;;
+ esac
+
+ # Compare upstream
+ if equal_versions "${v1}" "${v2}" && equal_versions "${d1}" "${d2}"; then
+ echo "0"
+ fi
+}
+
+# Sort versions, descending
+sort_versions()
+{
+ local sorted
+ local remains="$*"
+ local next_remains
+ local v vx found
+
+ while [ -n "${remains}" ]; do
+ #debug "Sorting [${remains}]"
+ for v in ${remains}; do
+ found=yes
+ next_remains=
+ #debug "Candidate ${v}"
+ for vx in ${remains}; do
+ #debug "${v} vs ${vx} :: `cmp_versions ${v} ${vx}`"
+ case `cmp_versions ${v} ${vx}` in
+ 1)
+ next_remains+=" ${vx}"
+ ;;
+ 0)
+ ;;
+ -1)
+ found=no
+ #debug "Bad: earlier than ${vx}"
+ break
+ ;;
+ esac
+ done
+ if [ "${found}" = "yes" ]; then
+ # $v is less than all other members in next_remains
+ sorted+=" ${v}"
+ remains="${next_remains}"
+ #debug "Good candidate ${v} sorted [${sorted}] remains [${remains}]"
+ break
+ fi
+ done
+ done
+ echo "${sorted}"
+}
+
+read_file()
+{
+ local l p
+
+ while read l; do
+ l="${p}${l}"
+ p=
+ case "${l}" in
+ "")
+ continue
+ ;;
+ *\\)
+ p="${l%\\}"
+ continue
+ ;;
+ "#"*)
+ continue
+ ;;
+ *=*)
+ echo "info[${l%%=*}]=${l#*=}"
+ ;;
+ *)
+ error "syntax error in '${1}': '${l}'"
+ ;;
+ esac
+ done < "${1}"
+}
-printf "Generating kconfig component lists...\n"
-./maintainer/gen-kconfig.sh
+read_package_desc()
+{
+ read_file "packages/${1}/package.desc"
+}
-printf "Generating kconfig component versions...\n"
-./maintainer/gen-versions.sh
+read_version_desc()
+{
+ read_file "packages/${1}/${2}/version.desc"
+}
+
+find_forks()
+{
+ local -A info
+
+ info[preferred]=${1}
+ eval `read_package_desc ${1}`
+
+ if [ -n "${info[master]}" ]; then
+ pkg_nforks[${info[master]}]=$[pkg_nforks[${info[master]}]+1]
+ pkg_forks[${info[master]}]+=" ${1} "
+ else
+ pkg_preferred[${1}]=${info[preferred]}
+ pkg_nforks[${1}]=$[pkg_nforks[${1}]+1]
+ pkg_forks[${1}]+=" ${1} "
+ pkg_milestones[${1}]=`sort_versions ${info[milestones]}`
+ pkg_masters+=( "${1}" )
+ fi
+ # Keep sorting so that preferred fork is first
+ if [ -n "${pkg_preferred[${1}]}" ]; then
+ pkg_forks[${1}]="${pkg_preferred[${1}]} ${pkg_forks[${1}]##* ${pkg_preferred[${1}]} } ${pkg_forks[${1}]%% ${pkg_preferred[${1}]} *}"
+ fi
+}
+
+check_obsolete_experimental()
+{
+ [ -z "${info[obsolete]}" ] && only_obsolete=
+ [ -z "${info[experimental]}" ] && only_experimental=
+}
+
+enter_fork()
+{
+ local fork="${1}"
+ local versions
+ local only_obsolete only_experimental
+
+ # Set defaults
+ info[obsolete]=
+ info[experimental]=
+ info[repository]=
+ info[repository_branch]=
+ info[repository_cset]=
+ info[repository_subdir]=
+ info[bootstrap]=
+ info[fork]=${fork}
+ info[name]=${fork}
+ info[mirrors]=
+ info[archive_filename]='@{pkg_name}-@{version}'
+ info[archive_dirname]='@{pkg_name}-@{version}'
+
+ eval `read_package_desc ${fork}`
+
+ info[pfx]=`kconfigize ${fork}`
+ info[originpfx]=`kconfigize ${info[origin]}`
+ if [ -r "packages/${info[origin]}.help" ]; then
+ info[originhelp]=`sed 's/^/ /' "packages/${info[origin]}.help"`
+ else
+ info[originhelp]=" ${info[master]} from ${info[origin]}."
+ fi
+
+ if [ -n "${info[repository]}" ]; then
+ info[vcs]=${info[repository]%% *}
+ info[repository_url]=${info[repository]#* }
+ fi
+ info[versionlocked]=`kconfigize "${info[versionlocked]}"`
+
+ versions=`cd packages/${fork} && \
+ for f in */version.desc; do [ -r "${f}" ] && echo "${f%/version.desc}"; done`
+ versions=`sort_versions ${versions}`
+
+ set_iter version ${versions}
+ info[all_versions]=${versions}
+
+ # If a fork does not define any versions at all ("rolling release"), do not
+ # consider it obsolete/experimental unless it is so marked in the fork's
+ # description.
+ if [ -n "${versions}" ]; then
+ only_obsolete=yes
+ only_experimental=yes
+ do_foreach version check_obsolete_experimental
+ info[only_obsolete]=${only_obsolete}
+ info[only_experimental]=${only_experimental}
+ else
+ info[only_obsolete]=${info[obsolete]}
+ info[only_experimental]=${info[experimental]}
+ fi
+}
+
+enter_version()
+{
+ local -A ver_postfix=( \
+ [,yes,,]=" (OBSOLETE)" \
+ [,,yes,]=" (EXPERIMENTAL)" \
+ [,yes,yes,]=" (OBSOLETE,EXPERIMENTAL)" )
+ local version="${1}"
+
+ eval `read_version_desc ${info[fork]} ${version}`
+ info[ver]=${version}
+ info[kcfg]=`kconfigize ${version}`
+ info[ver_postfix]=${ver_postfix[,${info[obsolete]},${info[experimental]},]}
+}
+
+enter_milestone()
+{
+ local ms="${1}"
+ local cmp
+
+ info[ms]=${ms}
+ info[ms_kcfg]=`kconfigize ${ms}`
+ if [ -n "${info[ver]}" ]; then
+ info[version_cmp_milestone]=`cmp_versions ${info[ver]} ${info[ms]}`
+ fi
+}
+
+gen_packages()
+{
+ local -A pkg_forks pkg_milestones pkg_nforks
+ local -a pkg_masters pkg_all pkg_preferred
+
+ pkg_all=( `cd packages && \
+ ls */package.desc 2>/dev/null | \
+ while read f; do [ -r "${f}" ] && echo "${f%/package.desc}"; done | \
+ xargs echo` )
+
+ debug "Packages: ${pkg_all[@]}"
+
+ # We need to group forks of the same package into the same
+ # config file. Discover such relationships and only iterate
+ # over "master" packages at the top.
+ for p in "${pkg_all[@]}"; do
+ find_forks "${p}"
+ done
+ msg "Master packages: ${pkg_masters[@]}"
+
+ # Now for each master, create its kconfig file with version
+ # definitions.
+ for p in "${pkg_masters[@]}"; do
+ msg "Generating '${config_versions_dir}/${p}.in'"
+ exec >"${config_versions_dir}/${p}.in"
+ # Base definitions for the whole config file
+ info=( \
+ [master]=${p} \
+ [masterpfx]=`kconfigize ${p}` \
+ [nforks]=${pkg_nforks[${p}]} \
+ [all_milestones]=${pkg_milestones[${p}]} \
+ )
+ set_iter fork ${pkg_forks[${p}]}
+ set_iter milestone ${pkg_milestones[${p}]}
+
+ run_template "maintainer/kconfig-versions.template"
+ done
+}
+
+msg "*** Generating package version descriptions"
+config_versions_dir=config/versions
+rm -rf "${config_versions_dir}"
+mkdir -p "${config_versions_dir}"
+gen_packages
+
+get_components()
+{
+ local dir="${1}"
+ local f b
+
+ for f in ${dir}/*.in; do
+ b=${f#${dir}/}
+ echo ${b%.in}
+ done
+}
+
+enter_choice()
+{
+ local choice="${1}"
+ local l
+
+ # TBD generate sourcing of versions/$component.in automatically - and add a comment that versions must
+ # TBD generated first? [what to do with glibc/glibc-ports]
+ info[choice]="${choice}"
+ info[has_part2]="${p2}"
+
+ # Not local, we need these arrays be set in enter_dependency/enter_help
+ deplines=( )
+ helplines=( )
+ while read l; do
+ case "${l}" in
+ "## help "*)
+ helplines+=( "${l#* help }" )
+ ;;
+ "## depends "*|"## select "*)
+ deplines+=( "${l#* }" )
+ ;;
+ esac
+ done < "config/${info[dir]}/${choice}.in"
+ set_iter dependency "${!deplines[@]}"
+ set_iter help "${!helplines[@]}"
+}
+
+enter_dependency()
+{
+ info[depline]="${deplines[${1}]}"
+}
+
+enter_help()
+{
+ info[helpline]="${helplines[${1}]}"
+}
+
+gen_selection()
+{
+ local type="${1}"
+ local dir="${2}"
+ local label="${3}"
+
+ msg "Generating ${dir}.in and ${dir}.in.2"
+ exec >"${config_gen_dir}/${dir}.in"
+ info=( \
+ [prefix]=`kconfigize ${dir}` \
+ [dir]=${dir} \
+ [label]="${label}" \
+ )
+ set_iter choice `get_components config/${dir}`
+ run_template "maintainer/kconfig-${type}.template"
+}
+
+msg "*** Generating menu/choice selections"
+config_gen_dir=config/gen
+rm -rf "${config_gen_dir}"
+mkdir -p "${config_gen_dir}"
+
+gen_selection choice arch "Target Architecture"
+gen_selection choice kernel "Target OS"
+gen_selection choice cc "Compiler"
+gen_selection choice binutils "Binutils"
+gen_selection choice libc "C library"
+gen_selection menu debug "Debug facilities"
+gen_selection menu comp_tools "Companion tools"
+
+msg "*** Running autoconf"
+autoconf -Wall --force
-printf "Done. You may now run:\n ./configure\n"
+msg "*** Done!"
diff --git a/config/arch/alpha.in b/config/arch/alpha.in
index 1c7ec96..f0d7fe0 100644
--- a/config/arch/alpha.in
+++ b/config/arch/alpha.in
@@ -5,5 +5,60 @@
## select ARCH_USE_MMU
## select ARCH_SUPPORTS_WITH_CPU
## select ARCH_SUPPORTS_WITH_TUNE
-##
+
## help The Alpha architecture.
+
+choice
+ bool
+ prompt "Variant"
+
+config ARCH_ALPHA_EV4
+ bool
+ prompt "EV4"
+
+config ARCH_ALPHA_EV45
+ bool
+ prompt "EV45"
+
+config ARCH_ALPHA_EV5
+ bool
+ prompt "EV5"
+
+config ARCH_ALPHA_EV56
+ bool
+ prompt "EV56"
+
+config ARCH_ALPHA_EV6
+ bool
+ prompt "EV6"
+
+config ARCH_ALPHA_EV67
+ bool
+ prompt "EV67"
+
+endchoice
+
+config ARCH_ALPHA_VARIANT
+ string
+ default "ev4" if ARCH_ALPHA_EV4
+ default "ev45" if ARCH_ALPHA_EV45
+ default "ev5" if ARCH_ALPHA_EV5
+ default "ev56" if ARCH_ALPHA_EV56
+ default "ev6" if ARCH_ALPHA_EV6
+ default "ev67" if ARCH_ALPHA_EV67
+
+config ARCH_CPU
+ default "ev4" if ARCH_ALPHA_EV4
+ default "ev45" if ARCH_ALPHA_EV45
+ default "ev5" if ARCH_ALPHA_EV5
+ default "ev56" if ARCH_ALPHA_EV56
+ default "ev6" if ARCH_ALPHA_EV6
+ default "ev67" if ARCH_ALPHA_EV67
+
+config ARCH_TUNE
+ default "ev4" if ARCH_ALPHA_EV4
+ default "ev45" if ARCH_ALPHA_EV45
+ default "ev5" if ARCH_ALPHA_EV5
+ default "ev56" if ARCH_ALPHA_EV56
+ default "ev6" if ARCH_ALPHA_EV6
+ default "ev67" if ARCH_ALPHA_EV67
diff --git a/config/arch/alpha.in.2 b/config/arch/alpha.in.2
deleted file mode 100644
index aa52624..0000000
--- a/config/arch/alpha.in.2
+++ /dev/null
@@ -1,56 +0,0 @@
-# Alpha specific configuration file
-
-choice
- bool
- prompt "Variant"
-
-config ARCH_ALPHA_EV4
- bool
- prompt "EV4"
-
-config ARCH_ALPHA_EV45
- bool
- prompt "EV45"
-
-config ARCH_ALPHA_EV5
- bool
- prompt "EV5"
-
-config ARCH_ALPHA_EV56
- bool
- prompt "EV56"
-
-config ARCH_ALPHA_EV6
- bool
- prompt "EV6"
-
-config ARCH_ALPHA_EV67
- bool
- prompt "EV67"
-
-endchoice
-
-config ARCH_ALPHA_VARIANT
- string
- default "ev4" if ARCH_ALPHA_EV4
- default "ev45" if ARCH_ALPHA_EV45
- default "ev5" if ARCH_ALPHA_EV5
- default "ev56" if ARCH_ALPHA_EV56
- default "ev6" if ARCH_ALPHA_EV6
- default "ev67" if ARCH_ALPHA_EV67
-
-config ARCH_CPU
- default "ev4" if ARCH_ALPHA_EV4
- default "ev45" if ARCH_ALPHA_EV45
- default "ev5" if ARCH_ALPHA_EV5
- default "ev56" if ARCH_ALPHA_EV56
- default "ev6" if ARCH_ALPHA_EV6
- default "ev67" if ARCH_ALPHA_EV67
-
-config ARCH_TUNE
- default "ev4" if ARCH_ALPHA_EV4
- default "ev45" if ARCH_ALPHA_EV45
- default "ev5" if ARCH_ALPHA_EV5
- default "ev56" if ARCH_ALPHA_EV56
- default "ev6" if ARCH_ALPHA_EV6
- default "ev67" if ARCH_ALPHA_EV67
diff --git a/config/arch/arm.in b/config/arch/arm.in
index 5dbc717..269310d 100644
--- a/config/arch/arm.in
+++ b/config/arch/arm.in
@@ -14,6 +14,101 @@
## select ARCH_SUPPORTS_WITH_FLOAT if ARCH_32
## select ARCH_SUPPORTS_WITH_FPU if ARCH_32
## select ARCH_SUPPORTS_SOFTFP if ARCH_32
-##
+
## help The ARM architecture, as defined by:
## help http://www.arm.com/
+
+if ARCH_32
+config ARCH_ARM_MODE
+ string
+ default "arm" if ARCH_ARM_MODE_ARM
+ default "thumb" if ARCH_ARM_MODE_THUMB
+
+choice
+ bool
+ prompt "Default instruction set mode"
+ default ARCH_ARM_MODE_ARM
+
+config ARCH_ARM_MODE_ARM
+ bool
+ prompt "arm"
+ help
+ Defaults to emitting instructions in the ARM mode.
+
+config ARCH_ARM_MODE_THUMB
+ bool
+ prompt "thumb"
+ help
+ Defaults to emitting instructions in the THUMB mode.
+
+endchoice
+
+config ARCH_ARM_INTERWORKING
+ bool
+ prompt "Use Thumb-interworking (READ HELP)"
+ help
+ Excerpt from the gcc manual:
+
+ > Generate code which supports calling between the ARM and Thumb
+ > instruction sets. Without this option the two instruction sets
+ > cannot be reliably used inside one program. The default is
+ > [not to use interwork], since slightly larger code is generated
+ > when [interwork] is specified.
+
+ NOTE: Interworking in crosstool-NG is not sell-tested. Use at your
+ own risks, and report success and/or failure.
+
+# Until we only support EABI:
+config ARCH_ARM_ABI_OK
+ def_bool y
+ depends on ! ARCH_ARM_EABI
+ select ARCH_SUPPORTS_WITH_ABI
+
+# Little trick to force EABI *and* always show the prompt
+config ARCH_ARM_EABI_FORCE
+ bool
+ default y if ! OBSOLETE
+ select ARCH_ARM_EABI
+
+config ARCH_ARM_EABI
+ bool
+ prompt "Use EABI"
+ default y
+ help
+ Set up the toolchain so that it generates EABI-compliant binaries.
+
+ If you say 'n' here, then the toolchain will generate OABI binaries.
+ OABI has long been deprecated, and is now considered legacy.
+
+config ARCH_ARM_TUPLE_USE_EABIHF
+ bool
+ prompt "append 'hf' to the tuple (EXPERIMENTAL)"
+ depends on ARCH_FLOAT_HW
+ depends on ARCH_ARM_EABI # Until we only support that...
+ default y
+ help
+ Is you say 'y' here, then the tuple for the toolchain will end
+ up with *eabihf, instead of the usual *eabi.
+
+ *eabihf is used to denote that the toolchain *is* using the
+ hard-float ABI, while *eabi is just an indication of using the
+ soft-float ABI.
+
+ Ie. all one can say is: *eabihf ⊢ hard-float ABI
+
+ Saying 'n' here does *not* impact the ability of the toolchain to
+ generate hard-float instructions with the hard-float ABI. It is a
+ purely cosmetic thing, used by distros to differentiate their
+ hard-float-ABI-using ports from their soft-float-ABI-using ports.
+ (eg. Debian Wheezy and above).
+
+ This is an option, as not all versions of gcc/binutils do support
+ such tuple, and fail to build with *eabihf. Stock gcc version up
+ to, and including 4.7.2 have an issue or another with *eabihf.
+
+ This option is here for the future.
+
+ Say 'n', unless you are trying to fix gcc to properly recognise
+ the *eabihf tuples.
+
+endif
diff --git a/config/arch/arm.in.2 b/config/arch/arm.in.2
deleted file mode 100644
index 166c78f..0000000
--- a/config/arch/arm.in.2
+++ /dev/null
@@ -1,96 +0,0 @@
-# ARM specific configuration file
-
-if ARCH_32
-config ARCH_ARM_MODE
- string
- default "arm" if ARCH_ARM_MODE_ARM
- default "thumb" if ARCH_ARM_MODE_THUMB
-
-choice
- bool
- prompt "Default instruction set mode"
- default ARCH_ARM_MODE_ARM
-
-config ARCH_ARM_MODE_ARM
- bool
- prompt "arm"
- help
- Defaults to emitting instructions in the ARM mode.
-
-config ARCH_ARM_MODE_THUMB
- bool
- prompt "thumb"
- help
- Defaults to emitting instructions in the THUMB mode.
-
-endchoice
-
-config ARCH_ARM_INTERWORKING
- bool
- prompt "Use Thumb-interworking (READ HELP)"
- help
- Excerpt from the gcc manual:
-
- > Generate code which supports calling between the ARM and Thumb
- > instruction sets. Without this option the two instruction sets
- > cannot be reliably used inside one program. The default is
- > [not to use interwork], since slightly larger code is generated
- > when [interwork] is specified.
-
- NOTE: Interworking in crosstool-NG is not sell-tested. Use at your
- own risks, and report success and/or failure.
-
-# Until we only support EABI:
-config ARCH_ARM_ABI_OK
- def_bool y
- depends on ! ARCH_ARM_EABI
- select ARCH_SUPPORTS_WITH_ABI
-
-# Little trick to force EABI *and* always show the prompt
-config ARCH_ARM_EABI_FORCE
- bool
- default y if ! OBSOLETE
- select ARCH_ARM_EABI
-
-config ARCH_ARM_EABI
- bool
- prompt "Use EABI"
- default y
- help
- Set up the toolchain so that it generates EABI-compliant binaries.
-
- If you say 'n' here, then the toolchain will generate OABI binaries.
- OABI has long been deprecated, and is now considered legacy.
-
-config ARCH_ARM_TUPLE_USE_EABIHF
- bool
- prompt "append 'hf' to the tuple (EXPERIMENTAL)"
- depends on ARCH_FLOAT_HW
- depends on ARCH_ARM_EABI # Until we only support that...
- default y
- help
- Is you say 'y' here, then the tuple for the toolchain will end
- up with *eabihf, instead of the usual *eabi.
-
- *eabihf is used to denote that the toolchain *is* using the
- hard-float ABI, while *eabi is just an indication of using the
- soft-float ABI.
-
- Ie. all one can say is: *eabihf ⊢ hard-float ABI
-
- Saying 'n' here does *not* impact the ability of the toolchain to
- generate hard-float instructions with the hard-float ABI. It is a
- purely cosmetic thing, used by distros to differentiate their
- hard-float-ABI-using ports from their soft-float-ABI-using ports.
- (eg. Debian Wheezy and above).
-
- This is an option, as not all versions of gcc/binutils do support
- such tuple, and fail to build with *eabihf. Stock gcc version up
- to, and including 4.7.2 have an issue or another with *eabihf.
-
- This option is here for the future.
-
- Say 'n', unless you are trying to fix gcc to properly recognise
- the *eabihf tuples.
-
-endif
diff --git a/config/arch/mips.in b/config/arch/mips.in
index 1168f5e..850fe11 100644
--- a/config/arch/mips.in
+++ b/config/arch/mips.in
@@ -9,6 +9,43 @@
## select ARCH_SUPPORTS_WITH_ARCH
## select ARCH_SUPPORTS_WITH_TUNE
## select ARCH_SUPPORTS_WITH_FLOAT
-##
+
## help The MIPS architecture, as defined by:
## help http://www.mips.com/
+
+choice
+ bool
+ prompt "ABI"
+
+config ARCH_mips_o32
+ bool
+ prompt "o32"
+ depends on (ARCH_32 || MULTILIB)
+ help
+ This is the -mabi=32 gcc option.
+
+config ARCH_mips_n32
+ bool
+ prompt "n32"
+ depends on ARCH_64
+ help
+ This is the -mabi=n32 gcc option.
+
+config ARCH_mips_n64
+ bool
+ prompt "n64"
+ depends on ARCH_64
+ help
+ This is the -mabi=64 gcc option.
+
+# Not supported on Linux:
+# o64 : seems related to *BSD
+# eabi : seems related to bare-metal
+
+endchoice
+
+config ARCH_mips_ABI
+ string
+ default "32" if ARCH_mips_o32
+ default "n32" if ARCH_mips_n32
+ default "64" if ARCH_mips_n64
diff --git a/config/arch/mips.in.2 b/config/arch/mips.in.2
deleted file mode 100644
index 35c60e0..0000000
--- a/config/arch/mips.in.2
+++ /dev/null
@@ -1,38 +0,0 @@
-# MIPS specific config options
-
-choice
- bool
- prompt "ABI"
-
-config ARCH_mips_o32
- bool
- prompt "o32"
- depends on (ARCH_32 || MULTILIB)
- help
- This is the -mabi=32 gcc option.
-
-config ARCH_mips_n32
- bool
- prompt "n32"
- depends on ARCH_64
- help
- This is the -mabi=n32 gcc option.
-
-config ARCH_mips_n64
- bool
- prompt "n64"
- depends on ARCH_64
- help
- This is the -mabi=64 gcc option.
-
-# Not supported on Linux:
-# o64 : seems related to *BSD
-# eabi : seems related to bare-metal
-
-endchoice
-
-config ARCH_mips_ABI
- string
- default "32" if ARCH_mips_o32
- default "n32" if ARCH_mips_n32
- default "64" if ARCH_mips_n64
diff --git a/config/arch/powerpc.in b/config/arch/powerpc.in
index 6dfc742..276438f 100644
--- a/config/arch/powerpc.in
+++ b/config/arch/powerpc.in
@@ -1,4 +1,4 @@
-# powerpc specific configuration file
+# Powerpc specific configuration file
## select ARCH_SUPPORTS_32
## select ARCH_SUPPORTS_64
@@ -13,3 +13,44 @@
##
## help The PowerPC architecture, as defined by:
## help http://www.ibm.com/developerworks/eserver/articles/archguide.html
+
+config ARCH_powerpc_ABI
+ string
+ default "" if ARCH_powerpc_ABI_DEFAULT
+ default "eabi" if ARCH_powerpc_ABI_EABI
+ default "spe" if ARCH_powerpc_ABI_SPE
+
+choice
+ bool
+ prompt "ABI"
+ default ARCH_powerpc_ABI_DEFAULT
+
+config ARCH_powerpc_ABI_DEFAULT
+ bool
+ prompt "default"
+ help
+ The default ABI (System V.4).
+
+config ARCH_powerpc_ABI_EABI
+ bool
+ prompt "EABI"
+ depends on BARE_METAL
+ help
+ The Embedded ABI (stack alignment of 8 bytes, etc).
+
+config ARCH_powerpc_ABI_SPE
+ bool
+ prompt "SPE"
+ help
+ Add support for the Signal Processing Engine. This will set up
+ the toolchain so that it supports the SPE ABI extensions. This
+ mainly targets Freescale e500 processors.
+
+ Setting this option will append "spe" to the end of your target
+ tuple name (e.g., powerpc-e500v2-linux-gnuspe) so that the gcc
+ configure/build system will know to include SPE ABI support. It
+ will also automatically add "-mabi=spe -mspe" to your TARGET_CFLAGS,
+ and "--enable-e500_double" to your CC_EXTRA_CONFIG_ARRAY, so you
+ do not need to explicitly add them.
+
+endchoice
diff --git a/config/arch/powerpc.in.2 b/config/arch/powerpc.in.2
deleted file mode 100644
index 2cbc370..0000000
--- a/config/arch/powerpc.in.2
+++ /dev/null
@@ -1,42 +0,0 @@
-# powerpc specific configuration file
-
-config ARCH_powerpc_ABI
- string
- default "" if ARCH_powerpc_ABI_DEFAULT
- default "eabi" if ARCH_powerpc_ABI_EABI
- default "spe" if ARCH_powerpc_ABI_SPE
-
-choice
- bool
- prompt "ABI"
- default ARCH_powerpc_ABI_DEFAULT
-
-config ARCH_powerpc_ABI_DEFAULT
- bool
- prompt "default"
- help
- The default ABI (System V.4).
-
-config ARCH_powerpc_ABI_EABI
- bool
- prompt "EABI"
- depends on BARE_METAL
- help
- The Embedded ABI (stack alignment of 8 bytes, etc).
-
-config ARCH_powerpc_ABI_SPE
- bool
- prompt "SPE"
- help
- Add support for the Signal Processing Engine. This will set up
- the toolchain so that it supports the SPE ABI extensions. This
- mainly targets Freescale e500 processors.
-
- Setting this option will append "spe" to the end of your target
- tuple name (e.g., powerpc-e500v2-linux-gnuspe) so that the gcc
- configure/build system will know to include SPE ABI support. It
- will also automatically add "-mabi=spe -mspe" to your TARGET_CFLAGS,
- and "--enable-e500_double" to your CC_EXTRA_CONFIG_ARRAY, so you
- do not need to explicitly add them.
-
-endchoice
diff --git a/config/arch/sh.in b/config/arch/sh.in
index 60de313..be525b4 100644
--- a/config/arch/sh.in
+++ b/config/arch/sh.in
@@ -9,3 +9,27 @@
##
## help The Super-H architecture, as defined by:
## help http://www.renesas.com/fmwk.jsp?cnt=superh_family_landing.jsp&fp=/products/mpumcu/superh_family/
+
+choice
+ bool
+ prompt "Variant"
+
+config ARCH_SH_SH3
+ bool
+ prompt "sh3"
+
+config ARCH_SH_SH4
+ bool
+ prompt "sh4"
+
+config ARCH_SH_SH4A
+ bool
+ prompt "sh4a"
+
+endchoice
+
+config ARCH_SH_VARIANT
+ string
+ default "sh3" if ARCH_SH_SH3
+ default "sh4" if ARCH_SH_SH4
+ default "sh4a" if ARCH_SH_SH4A
diff --git a/config/arch/sh.in.2 b/config/arch/sh.in.2
deleted file mode 100644
index 82856ee..0000000
--- a/config/arch/sh.in.2
+++ /dev/null
@@ -1,25 +0,0 @@
-# Super-H specific configuration file
-
-choice
- bool
- prompt "Variant"
-
-config ARCH_SH_SH3
- bool
- prompt "sh3"
-
-config ARCH_SH_SH4
- bool
- prompt "sh4"
-
-config ARCH_SH_SH4A
- bool
- prompt "sh4a"
-
-endchoice
-
-config ARCH_SH_VARIANT
- string
- default "sh3" if ARCH_SH_SH3
- default "sh4" if ARCH_SH_SH4
- default "sh4a" if ARCH_SH_SH4A
diff --git a/config/arch/xtensa.in b/config/arch/xtensa.in
index 3ffa4e8..bf4fcb6 100644
--- a/config/arch/xtensa.in
+++ b/config/arch/xtensa.in
@@ -5,7 +5,7 @@
## select ARCH_DEFAULT_LE
## select ARCH_SUPPORTS_BOTH_MMU
## select ARCH_DEFAULT_HAS_MMU
-##
+
## help The xtensa architecture
## help
## help Xtensa is a configurable and extensible processor architecture.
@@ -20,3 +20,16 @@
## help
## help The default option (ARCH_xtensa_fsf) uses a built-in configuration,
## help which may or may not work for a particular Xtensa processor.
+
+choice
+ prompt "Target Architecture Variant"
+ default ARCH_xtensa_fsf
+
+config XTENSA_CUSTOM
+ bool "Custom Xtensa processor configuration"
+ select TARGET_USE_OVERLAY
+
+config ARCH_xtensa_fsf
+ bool "fsf - Default configuration"
+
+endchoice
diff --git a/config/arch/xtensa.in.2 b/config/arch/xtensa.in.2
deleted file mode 100644
index 5ae14d2..0000000
--- a/config/arch/xtensa.in.2
+++ /dev/null
@@ -1,12 +0,0 @@
-choice
- prompt "Target Architecture Variant"
- default ARCH_xtensa_fsf
-
-config XTENSA_CUSTOM
- bool "Custom Xtensa processor configuration"
- select TARGET_USE_OVERLAY
-
-config ARCH_xtensa_fsf
- bool "fsf - Default configuration"
-
-endchoice
diff --git a/config/binutils.in b/config/binutils.in
index 7210f7c..a483881 100644
--- a/config/binutils.in
+++ b/config/binutils.in
@@ -34,6 +34,5 @@ config ARCH_BINFMT_FDPIC
endchoice
source "config/gen/binutils.in"
-source "config/gen/binutils.in.2"
endmenu
diff --git a/config/cc.in b/config/cc.in
index 62aee4b..187a48d 100644
--- a/config/cc.in
+++ b/config/cc.in
@@ -128,6 +128,4 @@ config CC_LANG_OTHERS
Eg. gcc-4.1+ has a toy programming language, treelang. As it is not useful
in real life, it is not available in the selection above.
-source "config/gen/cc.in.2"
-
endmenu
diff --git a/config/cc/gcc.in b/config/cc/gcc.in
index 96e0b28..8bf95e7 100644
--- a/config/cc/gcc.in
+++ b/config/cc/gcc.in
@@ -1,5 +1,5 @@
-# Compiler options
-#
+# GCC options
+
## default y
## select CC_SUPPORT_CXX if !LIBC_none
## select CC_SUPPORT_FORTRAN
@@ -19,10 +19,423 @@
## select ISL_REQUIRE_0_10_or_later if ISL_NEEDED && GCC_4_8_or_later
## select ISL_REQUIRE_0_15_or_older if ISL_NEEDED && GCC_4_9_or_later && !GCC_5_or_later
## select ISL_REQUIRE_0_14_or_older if ISL_NEEDED && GCC_4_8_or_later && !GCC_4_9_or_later
-##
+
## help gcc is the full-blown GNU compiler. This is what most people will choose.
## help
## help gcc supports many languages, a powerful code parser, optimised binary
## help output, and lots of other features.
source "config/versions/gcc.in"
+
+# Only enable gcc's support for plugins if binutils has it as well
+# They are useful only when doing LTO, but it does no harm enabling
+# them even without LTO.
+config CC_GCC_ENABLE_PLUGINS
+ bool
+ depends on BINUTILS_PLUGINS
+ depends on ! STATIC_TOOLCHAIN
+ default y
+
+# Affects the build of musl
+config GCC_BUG_61144
+ bool
+ default y if GCC_4_9_or_later && !GCC_4_9_2_or_later
+
+# If binutils installs gold, enable support for gold in gcc
+config CC_GCC_GOLD
+ bool
+ depends on BINUTILS_GOLD_INSTALLED
+ default y
+
+config CC_GCC_HAS_LIBMPX
+ depends on GCC_5_or_later
+ bool
+
+config CC_LANG_JAVA_USE_ECJ
+ bool
+ default y
+ depends on CC_LANG_JAVA
+
+config CC_GCC_ENABLE_CXX_FLAGS
+ string
+ prompt "Flags to pass to --enable-cxx-flags"
+ default ""
+ help
+ Enter here the value of the gcc's ./configure option --enable-cxx-flags.
+ Leave empty if you don't know better.
+
+ Note: just pass in the option _value_, that is only the part that goes
+ after the '=' sign.
+
+config CC_GCC_CORE_EXTRA_CONFIG_ARRAY
+ string
+ prompt "Core gcc extra config"
+ default ""
+ depends on CC_CORE_PASS_1_NEEDED || CC_CORE_PASS_2_NEEDED
+ help
+ Extra flags to pass onto ./configure when configuring the core gcc.
+
+ The core gcc is a stripped down, C-only compiler needed to build
+ the C library. Kinda bootstrap gcc, if you wish.
+
+ You can enter multiple arguments here, and arguments can contain spaces
+ if they are properly quoted (or escaped, but prefer quotes). Eg.:
+ --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space
+
+config CC_GCC_EXTRA_CONFIG_ARRAY
+ string
+ prompt "gcc extra config"
+ default ""
+ help
+ Extra flags to pass onto ./configure when configuring gcc.
+
+ You can enter multiple arguments here, and arguments can contain spaces
+ if they are properly quoted (or escaped, but prefer quotes). Eg.:
+ --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space
+
+config CC_GCC_MULTILIB_LIST
+ string
+ prompt "List of multilib variants"
+ depends on MULTILIB
+ help
+ Architecture-specific option of expanding or restricting the list of
+ the multilib variants to be built. Refer to GCC installation manual
+ for the format of this option for a particular architecture.
+ Leave empty to use the default list for this architecture.
+
+config STATIC_TOOLCHAIN
+ bool
+ select CC_GCC_STATIC_LIBSTDCXX
+
+config CC_GCC_STATIC_LIBSTDCXX
+ bool
+ prompt "Link libstdc++ statically into the gcc binary"
+ default y
+ depends on CONFIGURE_has_static_link || CANADIAN || CROSS_NATIVE
+ select WANTS_STATIC_LINK if CROSS || NATIVE
+ select WANTS_STATIC_LINK_CXX if CROSS || NATIVE
+ help
+ Newer gcc versions require some c++ libraries. So statically
+ linking libstdc++ increases the likeliness that the gcc binary will
+ run on machines other than the one which it was built on, without
+ having to worry about distributing the matching version of libstdc++
+ along with it.
+
+config CC_GCC_SYSTEM_ZLIB
+ bool
+ prompt "Use system zlib"
+ help
+ Do not use bundled zlib, and use the zlib already available for
+ the host (eg. the system library).
+
+ If zlib is built as a companion library, selecting this option
+ will use it.
+
+ If you want to build a static toolchain, you will need to also
+ install the static version of zlib for your host.
+
+ If unsure, say 'n'.
+
+config CC_GCC_CONFIG_TLS
+ tristate
+ prompt "Configure TLS (Thread Local Storage)"
+ default m
+ help
+ Specify that the target supports TLS (Thread Local Storage). Usually
+ configure can correctly determine if TLS is supported. In cases where
+ it guesses incorrectly, TLS can be explicitly enabled or disabled.
+ This can happen if the assembler supports TLS but the C library does
+ not, or if the assumptions made by the configure test are incorrect.
+
+ Option | TLS use | Associated ./configure switch
+ ---------+--------------------+--------------------------------
+ Y | forcibly used | --enable-tls
+ M | auto | (none, ./configure decides)
+ N | forcibly not used | --disable-tls
+
+ If unsure, say 'M'.
+
+#-----------------------------------------------------------------------------
+# Optimisation features
+
+comment "Optimisation features"
+
+# Defined in config/cc/gcc.in
+# For graphite: gcc needs cloog and isl
+# In >= gcc-5.x, cloog is no longer needed, but isl is.
+config CC_GCC_USE_GRAPHITE
+ bool "Enable GRAPHITE loop optimisations"
+ default y
+ select CLOOG_NEEDED if !GCC_5_or_later
+ select ISL_NEEDED
+ help
+ Enable the GRAPHITE loop optimsations.
+
+ On some systems (eg. Cygwin), CLooG and ISL (required to enable
+ GRAPHITE) may not build properly (yet), so you'll have to say 'N'
+ here (or help debug the issues)
+
+ TODO: Is this still true on Cygwin?
+
+# The way LTO works is a bit twisted.
+# See: http://gcc.gnu.org/wiki/LinkTimeOptimization#Requirements
+# Basically:
+# - if binutils has plugins: LTO is handled by ld/gold by loading
+# the plugin when linking
+# - if binutils does not have plugins: LTO is handled by collect2
+# In any case, LTO support does not depend on plugins, but takes
+# advantage of it
+config CC_GCC_USE_LTO
+ bool "Enable LTO"
+ default y
+ depends on ! STATIC_TOOLCHAIN
+ help
+ Enable the Link Time Optimisations.
+
+#-----------------------------------------------------------------------------
+comment "Settings for libraries running on target"
+
+config CC_GCC_ENABLE_TARGET_OPTSPACE
+ bool
+ prompt "Optimize gcc libs for size"
+ default y
+ help
+ Pass --enable-target-optspace to crossgcc's configure.
+
+ This will compile crossgcc's libs with -Os.
+
+config CC_GCC_LIBMUDFLAP
+ bool
+ prompt "Compile libmudflap"
+ help
+ libmudflap is a pointer-use checking tool, which can detect
+ various mis-usages of pointers in C and (to some extents) C++.
+
+ You should say 'N' here, as libmduflap generates instrumented
+ code (thus it is a bit bigger and a bit slower) and requires
+ re-compilation and re-link, while it exists better run-time
+ alternatives (eg. DUMA, dmalloc...) that need neither re-
+ compilation nor re-link.
+
+config CC_GCC_LIBGOMP
+ bool
+ prompt "Compile libgomp"
+ depends on !THREADS_NONE
+ help
+ libgomp is "the GNU implementation of the OpenMP Application Programming
+ Interface (API) for multi-platform shared-memory parallel programming in
+ C/C++ and Fortran". See:
+ http://gcc.gnu.org/onlinedocs/libgomp/
+
+ GNU OpenMP support requires threading.
+
+ The default is 'N'. Say 'Y' if you need it, and report success/failure.
+
+config CC_GCC_LIBSSP
+ bool
+ prompt "Compile libssp"
+ help
+ libssp is the run-time Stack-Smashing Protection library.
+
+ The default is 'N'. Say 'Y' if you need it, and report success/failure.
+
+config CC_GCC_LIBQUADMATH
+ bool
+ prompt "Compile libquadmath"
+ help
+ libquadmath is a library which provides quad-precision mathematical
+ functions on targets supporting the __float128 datatype. See:
+ http://gcc.gnu.org/onlinedocs/libquadmath/
+
+ The default is 'N'. Say 'Y' if you need it, and report success/failure.
+
+config CC_GCC_LIBSANITIZER
+ bool
+ prompt "Compile libsanitizer"
+ depends on THREADS_NATIVE
+ depends on ! LIBC_uClibc && ! LIBC_musl # Currently lacks required headers (like netrom.h)
+ help
+ libsanitizer is a library which provides run-time sanitising of either
+ or both of:
+ - memory access patterns (out-of-bonds, use-after-free)
+ - racy data accesses (in multi-threaded programs)
+
+ The default is 'N'. Say 'Y' if you need it, and report success/failure.
+
+config CC_GCC_LIBMPX
+ bool
+ default y
+ prompt "Compile libmpx"
+ depends on CC_GCC_HAS_LIBMPX
+ depends on ARCH_x86
+ # MUSL does not define libc types that GCC requires. Mingw lacks certain headers.
+ depends on !LIBC_musl && ! LIBC_mingw
+ help
+ Enable GCC support for Intel Memory Protection Extensions (MPX).
+
+#-----------------------------------------------------------------------------
+
+comment "Misc. obscure options."
+
+config CC_CXA_ATEXIT
+ bool
+ prompt "Use __cxa_atexit"
+ default y
+ depends on ! BARE_METAL || LIBC_PROVIDES_CXA_ATEXIT
+ help
+ If you get the missing symbol "__cxa_atexit" when building C++ programs,
+ you might want to try disabling this option.
+
+config CC_GCC_DISABLE_PCH
+ bool
+ prompt "Do not build PCH"
+ help
+ Say 'y' here to not use Pre-Compiled Headers in the resulting toolchain.
+ at the expense of speed when compiling C++ code.
+
+ For some configurations (most notably canadian?), PCH are broken, and
+ need to be disabled. Please see:
+ http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40974
+
+config CC_GCC_SJLJ_EXCEPTIONS
+ tristate
+ prompt "Use sjlj for exceptions"
+ depends on ! BARE_METAL
+ default m
+ help
+ 'sjlj' is short for setjmp/longjmp.
+
+ On some architectures, stack unwinding during exception handling
+ works perfectly well without using sjlj, while on some others,
+ use of sjlj is required for proper stack unwinding.
+
+ Option | sjlj use | Associated ./configure switch
+ ---------+--------------------+--------------------------------
+ Y | forcibly used | --enable-sjlj-exceptions
+ M | auto | (none, ./configure decides)
+ N | forcibly not used | --disable-sjlj-exceptions
+
+ It should be safe to say 'M' or 'N'.
+
+ It can happen that ./configure is wrong in some cases. Known
+ case is for ARM big endian, where you should say 'N'.
+
+config CC_GCC_LDBL_128
+ tristate
+ prompt "Enable 128-bit long doubles"
+ default m
+ help
+ Saying 'Y' will force gcc to use 128-bit wide long doubles
+ Saying 'N' will force gcc to use 64-bit wide long doubles
+ Saying 'M' will let gcc choose (default is 128-bit for
+ glibc >= 2.4, 64-bit otherwise)
+
+ If in doubt, keep the default, ie. 'M'.
+
+config CC_GCC_BUILD_ID
+ bool
+ prompt "Enable build-id"
+ help
+ Tells GCC to pass --build-id option to the linker for all final
+ links (links performed without the -r or --relocatable option),
+ if the linker supports it. If you say 'y' here, but your linker
+ does not support --build-id option, a warning is issued and this
+ option is ignored.
+
+ The default is off.
+
+choice CC_GCC_LNK_HASH_STYLE_CHOICE
+ bool
+ prompt "linker hash style"
+ depends on BINUTILS_HAS_HASH_STYLE
+
+config CC_GCC_LNK_HASH_STYLE_DEFAULT
+ bool
+ prompt "Default"
+ help
+ Do not specify any value, and use the default value (sysv).
+
+config CC_GCC_LNK_HASH_STYLE_SYSV
+ bool
+ prompt "sysv"
+ help
+ Force use of the SYSV hash style.
+
+config CC_GCC_LNK_HASH_STYLE_GNU
+ bool
+ prompt "gnu"
+ help
+ Force use of the GNU hash style.
+
+config CC_GCC_LNK_HASH_STYLE_BOTH
+ bool
+ prompt "both"
+ help
+ Force use of both hash styles.
+
+endchoice # CC_GCC_LNK_HASH_STYLE_CHOICE
+
+config CC_GCC_LNK_HASH_STYLE
+ string
+ default "" if CC_GCC_LNK_HASH_STYLE_DEFAULT
+ default "sysv" if CC_GCC_LNK_HASH_STYLE_SYSV
+ default "gnu" if CC_GCC_LNK_HASH_STYLE_GNU
+ default "both" if CC_GCC_LNK_HASH_STYLE_BOTH
+
+choice CC_GCC_DEC_FLOATS_CHOICE
+ bool "Decimal floats"
+ default CC_GCC_DEC_FLOATS_AUTO
+ help
+ Choose what type of decimal floats to support.
+
+ Note that using decimal floats requires a C library that provides
+ support for fenv (namely, the fenv.h header). This is the case
+ for (e)glibc, and uClibc on x86/32. For other C libraries, or
+ uClibc on other archs, this might not be the case, so you should
+ disable support for decimal floats.
+
+ The default is to let ./configure decide.
+
+config CC_GCC_DEC_FLOAT_AUTO
+ bool "auto"
+ help
+ Let ./configure decide. If you say 'y' here, gcc will default to:
+ - 'bid' for x86 (32- and 64-bit)
+ - 'dpd' for powerpc
+ - 'no' for the other architectures
+
+config CC_GCC_DEC_FLOAT_BID
+ bool "bid"
+ help
+ Use the 'binary integer decimal' format for decimal floats.
+
+config CC_GCC_DEC_FLOAT_DPD
+ bool "dpd"
+ help
+ Use the 'densely packed decimal' for decimal floats.
+
+config CC_GCC_DEC_FLOATS_NO
+ bool "no"
+ help
+ Do not support decimal floats. The default.
+
+endchoice # CC_GCC_DEC_FLOATS_CHOICE
+
+config CC_GCC_DEC_FLOATS
+ string
+ default "" if CC_GCC_DEC_FLOATS_AUTO
+ default "bid" if CC_GCC_DEC_FLOATS_BID
+ default "dpd" if CC_GCC_DEC_FLOATS_DPD
+ default "no" if CC_GCC_DEC_FLOATS_NO
+
+#-----------------------------------------------------------------------------
+
+config CC_GCC_HAS_ARCH_OPTIONS
+ bool
+
+comment "archictecture-specific options"
+ depends on CC_GCC_HAS_ARCH_OPTIONS
+
+if ARCH_mips
+source "config/cc/gcc.in.mips"
+endif # ARCH_mips
diff --git a/config/cc/gcc.in.2 b/config/cc/gcc.in.2
deleted file mode 100644
index 36ae939..0000000
--- a/config/cc/gcc.in.2
+++ /dev/null
@@ -1,413 +0,0 @@
-# Only enable gcc's support for plugins if binutils has it as well
-# They are useful only when doing LTO, but it does no harm enabling
-# them even without LTO.
-config CC_GCC_ENABLE_PLUGINS
- bool
- depends on BINUTILS_PLUGINS
- depends on ! STATIC_TOOLCHAIN
- default y
-
-# Affects the build of musl
-config GCC_BUG_61144
- bool
- default y if GCC_4_9_or_later && !GCC_4_9_2_or_later
-
-# If binutils installs gold, enable support for gold in gcc
-config CC_GCC_GOLD
- bool
- depends on BINUTILS_GOLD_INSTALLED
- default y
-
-config CC_GCC_HAS_LIBMPX
- depends on GCC_5_or_later
- bool
-
-config CC_LANG_JAVA_USE_ECJ
- bool
- default y
- depends on CC_LANG_JAVA
-
-config CC_GCC_ENABLE_CXX_FLAGS
- string
- prompt "Flags to pass to --enable-cxx-flags"
- default ""
- help
- Enter here the value of the gcc's ./configure option --enable-cxx-flags.
- Leave empty if you don't know better.
-
- Note: just pass in the option _value_, that is only the part that goes
- after the '=' sign.
-
-config CC_GCC_CORE_EXTRA_CONFIG_ARRAY
- string
- prompt "Core gcc extra config"
- default ""
- depends on CC_CORE_PASS_1_NEEDED || CC_CORE_PASS_2_NEEDED
- help
- Extra flags to pass onto ./configure when configuring the core gcc.
-
- The core gcc is a stripped down, C-only compiler needed to build
- the C library. Kinda bootstrap gcc, if you wish.
-
- You can enter multiple arguments here, and arguments can contain spaces
- if they are properly quoted (or escaped, but prefer quotes). Eg.:
- --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space
-
-config CC_GCC_EXTRA_CONFIG_ARRAY
- string
- prompt "gcc extra config"
- default ""
- help
- Extra flags to pass onto ./configure when configuring gcc.
-
- You can enter multiple arguments here, and arguments can contain spaces
- if they are properly quoted (or escaped, but prefer quotes). Eg.:
- --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space
-
-config CC_GCC_MULTILIB_LIST
- string
- prompt "List of multilib variants"
- depends on MULTILIB
- help
- Architecture-specific option of expanding or restricting the list of
- the multilib variants to be built. Refer to GCC installation manual
- for the format of this option for a particular architecture.
- Leave empty to use the default list for this architecture.
-
-config STATIC_TOOLCHAIN
- bool
- select CC_GCC_STATIC_LIBSTDCXX
-
-config CC_GCC_STATIC_LIBSTDCXX
- bool
- prompt "Link libstdc++ statically into the gcc binary"
- default y
- depends on CONFIGURE_has_static_link || CANADIAN || CROSS_NATIVE
- select WANTS_STATIC_LINK if CROSS || NATIVE
- select WANTS_STATIC_LINK_CXX if CROSS || NATIVE
- help
- Newer gcc versions require some c++ libraries. So statically
- linking libstdc++ increases the likeliness that the gcc binary will
- run on machines other than the one which it was built on, without
- having to worry about distributing the matching version of libstdc++
- along with it.
-
-config CC_GCC_SYSTEM_ZLIB
- bool
- prompt "Use system zlib"
- help
- Do not use bundled zlib, and use the zlib already available for
- the host (eg. the system library).
-
- If zlib is built as a companion library, selecting this option
- will use it.
-
- If you want to build a static toolchain, you will need to also
- install the static version of zlib for your host.
-
- If unsure, say 'n'.
-
-config CC_GCC_CONFIG_TLS
- tristate
- prompt "Configure TLS (Thread Local Storage)"
- default m
- help
- Specify that the target supports TLS (Thread Local Storage). Usually
- configure can correctly determine if TLS is supported. In cases where
- it guesses incorrectly, TLS can be explicitly enabled or disabled.
- This can happen if the assembler supports TLS but the C library does
- not, or if the assumptions made by the configure test are incorrect.
-
- Option | TLS use | Associated ./configure switch
- ---------+--------------------+--------------------------------
- Y | forcibly used | --enable-tls
- M | auto | (none, ./configure decides)
- N | forcibly not used | --disable-tls
-
- If unsure, say 'M'.
-
-#-----------------------------------------------------------------------------
-# Optimisation features
-
-comment "Optimisation features"
-
-# Defined in config/cc/gcc.in
-# For graphite: gcc needs cloog and isl
-# In >= gcc-5.x, cloog is no longer needed, but isl is.
-# Prompt in config/cc/gcc.in.2
-config CC_GCC_USE_GRAPHITE
- bool "Enable GRAPHITE loop optimisations"
- default y
- select CLOOG_NEEDED if !GCC_5_or_later
- select ISL_NEEDED
- help
- Enable the GRAPHITE loop optimsations.
-
- On some systems (eg. Cygwin), CLooG and ISL (required to enable
- GRAPHITE) may not build properly (yet), so you'll have to say 'N'
- here (or help debug the issues)
-
- TODO: Is this still true on Cygwin?
-
-# The way LTO works is a bit twisted.
-# See: http://gcc.gnu.org/wiki/LinkTimeOptimization#Requirements
-# Basically:
-# - if binutils has plugins: LTO is handled by ld/gold by loading
-# the plugin when linking
-# - if binutils does not have plugins: LTO is handled by collect2
-# In any case, LTO support does not depend on plugins, but takes
-# advantage of it
-config CC_GCC_USE_LTO
- bool "Enable LTO"
- default y
- depends on ! STATIC_TOOLCHAIN
- help
- Enable the Link Time Optimisations.
-
-#-----------------------------------------------------------------------------
-comment "Settings for libraries running on target"
-
-config CC_GCC_ENABLE_TARGET_OPTSPACE
- bool
- prompt "Optimize gcc libs for size"
- default y
- help
- Pass --enable-target-optspace to crossgcc's configure.
-
- This will compile crossgcc's libs with -Os.
-
-config CC_GCC_LIBMUDFLAP
- bool
- prompt "Compile libmudflap"
- help
- libmudflap is a pointer-use checking tool, which can detect
- various mis-usages of pointers in C and (to some extents) C++.
-
- You should say 'N' here, as libmduflap generates instrumented
- code (thus it is a bit bigger and a bit slower) and requires
- re-compilation and re-link, while it exists better run-time
- alternatives (eg. DUMA, dmalloc...) that need neither re-
- compilation nor re-link.
-
-config CC_GCC_LIBGOMP
- bool
- prompt "Compile libgomp"
- depends on !THREADS_NONE
- help
- libgomp is "the GNU implementation of the OpenMP Application Programming
- Interface (API) for multi-platform shared-memory parallel programming in
- C/C++ and Fortran". See:
- http://gcc.gnu.org/onlinedocs/libgomp/
-
- GNU OpenMP support requires threading.
-
- The default is 'N'. Say 'Y' if you need it, and report success/failure.
-
-config CC_GCC_LIBSSP
- bool
- prompt "Compile libssp"
- help
- libssp is the run-time Stack-Smashing Protection library.
-
- The default is 'N'. Say 'Y' if you need it, and report success/failure.
-
-config CC_GCC_LIBQUADMATH
- bool
- prompt "Compile libquadmath"
- help
- libquadmath is a library which provides quad-precision mathematical
- functions on targets supporting the __float128 datatype. See:
- http://gcc.gnu.org/onlinedocs/libquadmath/
-
- The default is 'N'. Say 'Y' if you need it, and report success/failure.
-
-config CC_GCC_LIBSANITIZER
- bool
- prompt "Compile libsanitizer"
- depends on THREADS_NATIVE
- depends on ! LIBC_uClibc && ! LIBC_musl # Currently lacks required headers (like netrom.h)
- help
- libsanitizer is a library which provides run-time sanitising of either
- or both of:
- - memory access patterns (out-of-bonds, use-after-free)
- - racy data accesses (in multi-threaded programs)
-
- The default is 'N'. Say 'Y' if you need it, and report success/failure.
-
-config CC_GCC_LIBMPX
- bool
- default y
- prompt "Compile libmpx"
- depends on CC_GCC_HAS_LIBMPX
- depends on ARCH_x86
- # MUSL does not define libc types that GCC requires. Mingw lacks certain headers.
- depends on !LIBC_musl && ! LIBC_mingw
- help
- Enable GCC support for Intel Memory Protection Extensions (MPX).
-
-#-----------------------------------------------------------------------------
-
-comment "Misc. obscure options."
-
-config CC_CXA_ATEXIT
- bool
- prompt "Use __cxa_atexit"
- default y
- depends on ! BARE_METAL || LIBC_PROVIDES_CXA_ATEXIT
- help
- If you get the missing symbol "__cxa_atexit" when building C++ programs,
- you might want to try disabling this option.
-
-config CC_GCC_DISABLE_PCH
- bool
- prompt "Do not build PCH"
- help
- Say 'y' here to not use Pre-Compiled Headers in the resulting toolchain.
- at the expense of speed when compiling C++ code.
-
- For some configurations (most notably canadian?), PCH are broken, and
- need to be disabled. Please see:
- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40974
-
-config CC_GCC_SJLJ_EXCEPTIONS
- tristate
- prompt "Use sjlj for exceptions"
- depends on ! BARE_METAL
- default m
- help
- 'sjlj' is short for setjmp/longjmp.
-
- On some architectures, stack unwinding during exception handling
- works perfectly well without using sjlj, while on some others,
- use of sjlj is required for proper stack unwinding.
-
- Option | sjlj use | Associated ./configure switch
- ---------+--------------------+--------------------------------
- Y | forcibly used | --enable-sjlj-exceptions
- M | auto | (none, ./configure decides)
- N | forcibly not used | --disable-sjlj-exceptions
-
- It should be safe to say 'M' or 'N'.
-
- It can happen that ./configure is wrong in some cases. Known
- case is for ARM big endian, where you should say 'N'.
-
-config CC_GCC_LDBL_128
- tristate
- prompt "Enable 128-bit long doubles"
- default m
- help
- Saying 'Y' will force gcc to use 128-bit wide long doubles
- Saying 'N' will force gcc to use 64-bit wide long doubles
- Saying 'M' will let gcc choose (default is 128-bit for
- glibc >= 2.4, 64-bit otherwise)
-
- If in doubt, keep the default, ie. 'M'.
-
-config CC_GCC_BUILD_ID
- bool
- prompt "Enable build-id"
- help
- Tells GCC to pass --build-id option to the linker for all final
- links (links performed without the -r or --relocatable option),
- if the linker supports it. If you say 'y' here, but your linker
- does not support --build-id option, a warning is issued and this
- option is ignored.
-
- The default is off.
-
-choice CC_GCC_LNK_HASH_STYLE_CHOICE
- bool
- prompt "linker hash style"
- depends on BINUTILS_HAS_HASH_STYLE
-
-config CC_GCC_LNK_HASH_STYLE_DEFAULT
- bool
- prompt "Default"
- help
- Do not specify any value, and use the default value (sysv).
-
-config CC_GCC_LNK_HASH_STYLE_SYSV
- bool
- prompt "sysv"
- help
- Force use of the SYSV hash style.
-
-config CC_GCC_LNK_HASH_STYLE_GNU
- bool
- prompt "gnu"
- help
- Force use of the GNU hash style.
-
-config CC_GCC_LNK_HASH_STYLE_BOTH
- bool
- prompt "both"
- help
- Force use of both hash styles.
-
-endchoice # CC_GCC_LNK_HASH_STYLE_CHOICE
-
-config CC_GCC_LNK_HASH_STYLE
- string
- default "" if CC_GCC_LNK_HASH_STYLE_DEFAULT
- default "sysv" if CC_GCC_LNK_HASH_STYLE_SYSV
- default "gnu" if CC_GCC_LNK_HASH_STYLE_GNU
- default "both" if CC_GCC_LNK_HASH_STYLE_BOTH
-
-choice CC_GCC_DEC_FLOATS_CHOICE
- bool "Decimal floats"
- default CC_GCC_DEC_FLOATS_AUTO
- help
- Choose what type of decimal floats to support.
-
- Note that using decimal floats requires a C library that provides
- support for fenv (namely, the fenv.h header). This is the case
- for (e)glibc, and uClibc on x86/32. For other C libraries, or
- uClibc on other archs, this might not be the case, so you should
- disable support for decimal floats.
-
- The default is to let ./configure decide.
-
-config CC_GCC_DEC_FLOAT_AUTO
- bool "auto"
- help
- Let ./configure decide. If you say 'y' here, gcc will default to:
- - 'bid' for x86 (32- and 64-bit)
- - 'dpd' for powerpc
- - 'no' for the other architectures
-
-config CC_GCC_DEC_FLOAT_BID
- bool "bid"
- help
- Use the 'binary integer decimal' format for decimal floats.
-
-config CC_GCC_DEC_FLOAT_DPD
- bool "dpd"
- help
- Use the 'densely packed decimal' for decimal floats.
-
-config CC_GCC_DEC_FLOATS_NO
- bool "no"
- help
- Do not support decimal floats. The default.
-
-endchoice # CC_GCC_DEC_FLOATS_CHOICE
-
-config CC_GCC_DEC_FLOATS
- string
- default "" if CC_GCC_DEC_FLOATS_AUTO
- default "bid" if CC_GCC_DEC_FLOATS_BID
- default "dpd" if CC_GCC_DEC_FLOATS_DPD
- default "no" if CC_GCC_DEC_FLOATS_NO
-
-#-----------------------------------------------------------------------------
-
-config CC_GCC_HAS_ARCH_OPTIONS
- bool
-
-comment "archictecture-specific options"
- depends on CC_GCC_HAS_ARCH_OPTIONS
-
-if ARCH_mips
-source "config/cc/gcc.in.mips"
-endif # ARCH_mips
diff --git a/config/companion_libs.in b/config/comp_libs.in
index 76ab0f9..009aac8 100644
--- a/config/companion_libs.in
+++ b/config/comp_libs.in
@@ -136,47 +136,47 @@ config ZLIB
# For now, just have comments delineating the libs.
if ZLIB
comment "zlib options"
-source "config/companion_libs/zlib.in"
+source "config/comp_libs/zlib.in"
endif
if LIBICONV
comment "libiconv options"
-source "config/companion_libs/libiconv.in"
+source "config/comp_libs/libiconv.in"
endif
if GETTEXT
comment "gettext options"
-source "config/companion_libs/gettext.in"
+source "config/comp_libs/gettext.in"
endif
if GMP
comment "GMP options"
-source "config/companion_libs/gmp.in"
+source "config/comp_libs/gmp.in"
endif
if MPFR
comment "MPFR options"
-source "config/companion_libs/mpfr.in"
+source "config/comp_libs/mpfr.in"
endif
if ISL
comment "ISL options"
-source "config/companion_libs/isl.in"
+source "config/comp_libs/isl.in"
endif
if CLOOG
comment "CLooG options"
-source "config/companion_libs/cloog.in"
+source "config/comp_libs/cloog.in"
endif
if MPC
comment "MPC options"
-source "config/companion_libs/mpc.in"
+source "config/comp_libs/mpc.in"
endif
if LIBELF || LIBELF_TARGET
comment "libelf options"
-source "config/companion_libs/libelf.in"
+source "config/comp_libs/libelf.in"
endif
if EXPAT || EXPAT_TARGET
comment "expat options"
-source "config/companion_libs/expat.in"
+source "config/comp_libs/expat.in"
endif
if NCURSES || NCURSES_TARGET
comment "ncurses options"
-source "config/companion_libs/ncurses.in"
+source "config/comp_libs/ncurses.in"
endif
if COMPLIBS
diff --git a/config/companion_libs/cloog.in b/config/comp_libs/cloog.in
index b894de9..b894de9 100644
--- a/config/companion_libs/cloog.in
+++ b/config/comp_libs/cloog.in
diff --git a/config/companion_libs/expat.in b/config/comp_libs/expat.in
index a2753a4..a2753a4 100644
--- a/config/companion_libs/expat.in
+++ b/config/comp_libs/expat.in
diff --git a/config/companion_libs/gettext.in b/config/comp_libs/gettext.in
index 4928ede..4928ede 100644
--- a/config/companion_libs/gettext.in
+++ b/config/comp_libs/gettext.in
diff --git a/config/companion_libs/gmp.in b/config/comp_libs/gmp.in
index 28359cd..28359cd 100644
--- a/config/companion_libs/gmp.in
+++ b/config/comp_libs/gmp.in
diff --git a/config/companion_libs/isl.in b/config/comp_libs/isl.in
index 9c74078..9c74078 100644
--- a/config/companion_libs/isl.in
+++ b/config/comp_libs/isl.in
diff --git a/config/companion_libs/libelf.in b/config/comp_libs/libelf.in
index 5b268c1..5b268c1 100644
--- a/config/companion_libs/libelf.in
+++ b/config/comp_libs/libelf.in
diff --git a/config/companion_libs/libiconv.in b/config/comp_libs/libiconv.in
index 99d3365..99d3365 100644
--- a/config/companion_libs/libiconv.in
+++ b/config/comp_libs/libiconv.in
diff --git a/config/companion_libs/mpc.in b/config/comp_libs/mpc.in
index 790e755..790e755 100644
--- a/config/companion_libs/mpc.in
+++ b/config/comp_libs/mpc.in
diff --git a/config/companion_libs/mpfr.in b/config/comp_libs/mpfr.in
index 5ed7ac8..5ed7ac8 100644
--- a/config/companion_libs/mpfr.in
+++ b/config/comp_libs/mpfr.in
diff --git a/config/companion_libs/ncurses.in b/config/comp_libs/ncurses.in
index 7087fbe..7087fbe 100644
--- a/config/companion_libs/ncurses.in
+++ b/config/comp_libs/ncurses.in
diff --git a/config/companion_libs/zlib.in b/config/comp_libs/zlib.in
index 70668e2..70668e2 100644
--- a/config/companion_libs/zlib.in
+++ b/config/comp_libs/zlib.in
diff --git a/config/companion_tools.in b/config/comp_tools.in
index e5ef3fc..020a070 100644
--- a/config/companion_tools.in
+++ b/config/comp_tools.in
@@ -10,6 +10,6 @@ config COMP_TOOLS_FOR_HOST
tools into the final toolchain (rather than just using them
to build it).
-source "config/gen/companion_tools.in"
+source "config/gen/comp_tools.in"
endmenu
diff --git a/config/companion_tools/autoconf.in b/config/comp_tools/autoconf.in
index b49017d..b49017d 100644
--- a/config/companion_tools/autoconf.in
+++ b/config/comp_tools/autoconf.in
diff --git a/config/companion_tools/automake.in b/config/comp_tools/automake.in
index 455200e..455200e 100644
--- a/config/companion_tools/automake.in
+++ b/config/comp_tools/automake.in
diff --git a/config/companion_tools/libtool.in b/config/comp_tools/libtool.in
index 071b53e..071b53e 100644
--- a/config/companion_tools/libtool.in
+++ b/config/comp_tools/libtool.in
diff --git a/config/companion_tools/m4.in b/config/comp_tools/m4.in
index 1a81a9f..1a81a9f 100644
--- a/config/companion_tools/m4.in
+++ b/config/comp_tools/m4.in
diff --git a/config/companion_tools/make.in b/config/comp_tools/make.in
index 5c9cfb3..5c9cfb3 100644
--- a/config/companion_tools/make.in
+++ b/config/comp_tools/make.in
diff --git a/config/config.in b/config/config.in
index 21b0c7e..6b0b911 100644
--- a/config/config.in
+++ b/config/config.in
@@ -7,6 +7,6 @@ source "config/binutils.in"
source "config/libc.in"
source "config/cc.in"
source "config/debug.in"
-source "config/companion_libs.in"
-source "config/companion_tools.in"
+source "config/comp_libs.in"
+source "config/comp_tools.in"
source "config/test_suite.in"
diff --git a/config/kernel.in b/config/kernel.in
index 31e83fc..579cc23 100644
--- a/config/kernel.in
+++ b/config/kernel.in
@@ -33,6 +33,4 @@ config SHARED_LIBS
You might not want shared libraries if you're building for a target that
don't support it (maybe some nommu targets, for example, or bare metal).
-source "config/gen/kernel.in.2"
-
endmenu
diff --git a/config/kernel/linux.in b/config/kernel/linux.in
index e1edb48..52bc9d7 100644
--- a/config/kernel/linux.in
+++ b/config/kernel/linux.in
@@ -2,7 +2,7 @@
## depends on ! ARCH_avr
## select KERNEL_SUPPORTS_SHARED_LIBS
-##
+
## help Build a toolchain targeting systems running Linux as a kernel.
# GLIBC and kernel are special when it comes to obsoletion. Users
@@ -13,3 +13,42 @@
# Such pinned versions are indicated in version.desc files with a comment.
source "config/versions/linux.in"
+
+choice
+ bool
+ prompt "Kernel verbosity:"
+ default KERNEL_LINUX_VERBOSITY_0
+
+config KERNEL_LINUX_VERBOSITY_0
+ bool
+ prompt "Simplified"
+ help
+ Print simplified command lines.
+
+config KERNEL_LINUX_VERBOSITY_1
+ bool
+ prompt "Full commands"
+ help
+ Print full command lines.
+
+config KERNEL_LINUX_VERBOSITY_2
+ bool
+ prompt "Exec reasons"
+ help
+ Print the reasons why a make target is rebuild.
+
+endchoice
+
+config KERNEL_LINUX_VERBOSE_LEVEL
+ int
+ default 0 if KERNEL_LINUX_VERBOSITY_0
+ default 1 if KERNEL_LINUX_VERBOSITY_1
+ default 2 if KERNEL_LINUX_VERBOSITY_2
+
+config KERNEL_LINUX_INSTALL_CHECK
+ bool
+ prompt "Check installed headers"
+ default y
+ help
+ If you are in doubt that installed headers are buggy, say 'Y'
+ here to have an extra check passed onto the headers.
diff --git a/config/kernel/linux.in.2 b/config/kernel/linux.in.2
deleted file mode 100644
index 80e13f3..0000000
--- a/config/kernel/linux.in.2
+++ /dev/null
@@ -1,40 +0,0 @@
-# Linux kernel options
-
-choice
- bool
- prompt "Kernel verbosity:"
- default KERNEL_LINUX_VERBOSITY_0
-
-config KERNEL_LINUX_VERBOSITY_0
- bool
- prompt "Simplified"
- help
- Print simplified command lines.
-
-config KERNEL_LINUX_VERBOSITY_1
- bool
- prompt "Full commands"
- help
- Print full command lines.
-
-config KERNEL_LINUX_VERBOSITY_2
- bool
- prompt "Exec reasons"
- help
- Print the reasons why a make target is rebuild.
-
-endchoice
-
-config KERNEL_LINUX_VERBOSE_LEVEL
- int
- default 0 if KERNEL_LINUX_VERBOSITY_0
- default 1 if KERNEL_LINUX_VERBOSITY_1
- default 2 if KERNEL_LINUX_VERBOSITY_2
-
-config KERNEL_LINUX_INSTALL_CHECK
- bool
- prompt "Check installed headers"
- default y
- help
- If you are in doubt that installed headers are buggy, say 'Y'
- here to have an extra check passed onto the headers.
diff --git a/config/libc.in b/config/libc.in
index 62490b9..8e990c3 100644
--- a/config/libc.in
+++ b/config/libc.in
@@ -106,8 +106,6 @@ config LIBC_XLDD
for the native ldd. Please see the help, by running it
with '--help' for more explanations.
-source "config/gen/libc.in.2"
-
endif # ! LIBC_none
endmenu
diff --git a/config/libc/avr-libc.in b/config/libc/avr-libc.in
index 6abbe01..42500f0 100644
--- a/config/libc/avr-libc.in
+++ b/config/libc/avr-libc.in
@@ -10,3 +10,10 @@
## help provides the basic startup code needed by most applications.
source "config/versions/avr-libc.in"
+
+config LIBC_AVR_LIBC_EXTRA_CONFIG_ARRAY
+ string
+ prompt "Extra config for avr-libc"
+ default ""
+ help
+ Extra flags to pass onto ./configure when configuring the avr-libc.
diff --git a/config/libc/avr-libc.in.2 b/config/libc/avr-libc.in.2
deleted file mode 100644
index 89a182f..0000000
--- a/config/libc/avr-libc.in.2
+++ /dev/null
@@ -1,8 +0,0 @@
-# avr-libc second-part options
-
-config LIBC_AVR_LIBC_EXTRA_CONFIG_ARRAY
- string
- prompt "Extra config for avr-libc"
- default ""
- help
- Extra flags to pass onto ./configure when configuring the avr-libc.
diff --git a/config/libc/glibc.in b/config/libc/glibc.in
index 803ba29..bbf893d 100644
--- a/config/libc/glibc.in
+++ b/config/libc/glibc.in
@@ -1,16 +1,13 @@
-# glibc options
-
-# TBD move all the remaining parts into glibc.in.2 and move the sourcing of versions
-# into the auto-generated choice/menus?
+# This file contains the common configuration options
+# that apply to both glibc.
## depends on ! WINDOWS && ! BARE_METAL && ARCH_USE_MMU
-##
## select LIBC_SUPPORT_THREADS_NATIVE
## select CC_CORE_PASSES_NEEDED
# TBD: select GETTEXT for build only, not for host
## select GETTEXT_NEEDED
## select BINUTILS_FORCE_LD_BFD_DEFAULT
-##
+
## help The de-facto standard for Linux distributions.
## help Feature-rich, but large... Most useful for desktop-like systems.
@@ -23,3 +20,270 @@ source "config/versions/glibc.in"
if GLIBC_USE_PORTS_EXTERNAL
source "config/versions/glibc-ports.in"
endif
+
+config THREADS
+ default "nptl"
+
+# Known add-ons and when they exist(ed)
+# crypt external in 2.1, no longer an add-on since 2.2
+# libidn external in 2.3.4 .. 2.10, still an add-on
+# linuxthreads external in 2.0.1 .. 2.5, no longer available since 2.6 [*]
+# localedata external in 2.0.1 .. 2.0.6, no longer an add-on since 2.1 [*]
+# ports external in 2.3.4 .. 2.16, no longer an add-on since 2.20
+# nptl never external, no longer an add-on since 2.20
+#
+# Given the list of currently supported glibc releases, we only need to worry about
+# 'libidn', 'ports' and 'nptl' add-ons. Of these, only 'ports' can be an external
+# tarball; and only 'libidn' is user-selectable ('ports' & 'nptl' are selected
+# by crosstool-NG, as dictated by the architecture and thread model).
+#
+# I had trouble locating the sources in the repository for some of the released
+# versions. E.g., there is a 2.5 version of linuxthreads, but the tag for 2.5 in Git
+# does not have the linuxthreads directory at all. Similarly, 2.0.6 tag did not have
+# localedata. Since these releases are no longer supported by crosstool-NG, this is
+# of pure historical interest now, however.
+
+config GLIBC_HAS_NPTL_ADDON
+ def_bool y
+ depends on !GLIBC_2_20_or_later
+
+config GLIBC_HAS_PORTS_ADDON
+ def_bool y
+ depends on !GLIBC_2_20_or_later
+
+config GLIBC_HAS_PORTS_ADDON_EXTERNAL
+ def_bool y
+ depends on !GLIBC_2_17_or_later
+
+# In case it folds into main distribution in some future release, too
+config GLIBC_HAS_LIBIDN_ADDON
+ def_bool y
+
+# Some architectures require the ports addon. List them one by one here:
+# This list must be carefully in sync with the architectures names
+# we can find in config/arch/*
+config GLIBC_USE_PORTS_ADDON
+ def_bool y
+ depends on ARCH_alpha || ARCH_arm || ARCH_m68k || ARCH_mips || ARCH_powerpc
+ depends on GLIBC_HAS_PORTS_ADDON
+
+config GLIBC_USE_PORTS_EXTERNAL
+ def_bool y
+ depends on GLIBC_USE_PORTS_ADDON && GLIBC_HAS_PORTS_ADDON_EXTERNAL
+
+config GLIBC_USE_NPTL_ADDON
+ def_bool y
+ depends on THREADS_NATIVE && GLIBC_HAS_NPTL_ADDON
+
+config GLIBC_USE_LIBIDN_ADDON
+ bool "Build libidn add-on"
+ help
+ Enables the libidn add-on in GNU libc.
+
+# SPARCv8 support retired in 2.23
+config GLIBC_NO_SPARC_V8
+ def_bool y
+ depends on GLIBC_2_23_or_later
+
+config GLIBC_EXTRA_CONFIG_ARRAY
+ string
+ prompt "extra config"
+ default ""
+ help
+ Extra flags to pass onto ./configure when configuring.
+
+ You can enter multiple arguments here, and arguments can contain spaces
+ if they are properly quoted (or escaped, but prefer quotes). Eg.:
+ --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space
+
+config GLIBC_CONFIGPARMS
+ string
+ prompt "Extra config params (READ HELP)"
+ default "" if ! ARCH_sh
+ default "no-z-defs=yes" if ARCH_sh
+ help
+ Some architectures need to set options in the file configparms.
+ This is the case for sh3/4, which really need to set configparms
+ to "no-z-defs=yes" as of gcc-3.4/glibc-2.3.2.
+
+ Unless you are building a toolchain for sh3/4, you should leave that empty.
+
+ Note: If you need to pass more than one value, separate them with
+ '\n'. Eg.: var1=val1\nvar2=val2
+
+config GLIBC_EXTRA_CFLAGS
+ string
+ prompt "extra target CFLAGS"
+ default ""
+ help
+ Extra target CFLAGS to use when building.
+
+config GLIBC_ENABLE_FORTIFIED_BUILD
+ bool
+ prompt "Enable fortified build (EXPERIMENTAL)"
+ depends on EXPERIMENTAL
+ help
+ If you say 'y' here, then glibc will be using fortified versions
+ of functions with format arguments (eg. vsyslog, printf...), and
+ do a sanity check on the format at runtime, to avoid some of the
+ common format string attacks.
+
+ This is currently not supported, and will most probably result in
+ a broken build, with an error message like:
+ ../misc/syslog.c: In function '__vsyslog_chk':
+ ../misc/syslog.c:123: sorry, unimplemented: inlining failed in
+ call to 'syslog': function body not available
+
+ If you are brave enough and want to debug the issue, then say 'y'
+ here. Otherwise, be still and say 'n' (the default). ;-)
+
+
+config GLIBC_DISABLE_VERSIONING
+ bool
+ prompt "Disable symbols versioning"
+ help
+ Do not include versioning information in the library objects.
+
+config GLIBC_OLDEST_ABI
+ string
+ prompt "Oldest supported ABI"
+ default ""
+ help
+ Set the oldest ABI supported by the C library.
+
+ Setting this option, for example, to 2.2 will provide ABI support
+ back to (e)glibc-2.2.
+
+ If this option is not set, (e)glibc will choose for you.
+
+config GLIBC_FORCE_UNWIND
+ bool
+ prompt "Force unwind support (READ HELP!)"
+ default y
+ help
+ If your toolchain fails building while building the C library
+ start files, or the complete C library, with a message like:
+ configure: error: forced unwind support is required
+
+ then you may try changing this option. Otherwise, leave it to
+ the default 'y'.
+
+ The issue seems to be related to building NPTL on old versions
+ of glibc on some architectures
+ (seen on s390, s390x and x86_64).
+
+config GLIBC_LOCALES
+ bool
+ prompt "Build and install locales"
+ help
+ Whether to build and install the libc locale files for the target,
+ which is required in order to support internationalization.
+
+if LIBC_glibc && GLIBC_LOCALES
+comment "WARNING! "
+comment "| The built locales will be usable if and only if the build "
+comment "| machine and the target: "
+comment "| - have the same endianness, "
+comment "| - and have the same alignment requirements for uint32_t. "
+comment "| You will have to check by yourself (for now). "
+comment "WARNING! "
+comment "| Building GLIBC locales requires that GLIBC supports "
+comment "| the build machine as the target. "
+endif # LIBC_glibc && GLIBC_LOCALES
+
+if KERNEL_linux
+
+choice GLIBC_SUPPORTED_KERNEL
+ bool
+ prompt "Minimum supported kernel version"
+ default GLIBC_KERNEL_VERSION_AS_HEADERS
+
+config GLIBC_KERNEL_VERSION_NONE
+ bool
+ prompt "Let ./configure decide"
+ help
+ Let ./configure decide what minimum kernel version glibc will be
+ able to run against.
+
+ This will include legacy compatibility code for older kernels in
+ the C library, thus ensuring that it will run on a large number
+ of old kernels.
+
+ The minimum kernel version supported will be dependent upon the
+ target you build for. For example:
+ alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL
+ sh[34]-*-linux-gnu Requires Linux 2.6.11
+ powerpc* Requires Linux 2.4.19
+ arm*-*-linux-*gnueabi Requires Linux 2.6.16
+
+config GLIBC_KERNEL_VERSION_AS_HEADERS
+ bool
+ prompt "Same as kernel headers (default)"
+ help
+ Normally, you'll want glibc to run against the same kernel
+ version as the one used for the headers.
+
+ This is the default.
+
+ If enabled, crosstool-ng will use the chosen version of kernel
+ headers for the glibc minimum kernel version supported, which is
+ what gets passed to "--enable-kernel=" when configuring glibc.
+
+ Enabling this will ensure that no legacy compatibility code for
+ older kernels is built into your C libraries, but it will
+ be unable to run on kernel versions older than whichever kernel
+ headers version you've built the toolchain for.
+
+ If you know for sure that your toolchain will never need to build
+ applications that will run under a kernel version older than your
+ chosen kernel headers version (CT_KERNEL_VERSION), you can choose
+ "y" here.
+
+config GLIBC_KERNEL_VERSION_CHOSEN
+ bool
+ prompt "Specific kernel version"
+ help
+ Specify the earliest Linux kernel version you want glibc to
+ include support for. This does not have to match the kernel
+ headers version used for your toolchain. This controls what is
+ passed to the "--enable-kernel=" option to the glibc configure
+ script.
+
+ If you want to be able to statically link programs with your
+ toolchain's C library, make sure this kernel version is lower than
+ all kernels you wish to support to avoid "FATAL: kernel too old"
+ errors. The higher the version you specify, the less legacy code
+ will be built into libc.
+
+ Most people can leave this at the default value of "2.6.9".
+
+if GLIBC_KERNEL_VERSION_CHOSEN
+
+config GLIBC_MIN_KERNEL_VERSION
+ string
+ prompt "Minimum kernel version to support"
+ default "2.6.9"
+ help
+ Enter here the lowest kernel version glibc will be able to run against.
+
+ The minimum kernel version supported will be dependent upon the
+ target you build for. For example:
+ alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL
+ sh[34]-*-linux-gnu Requires Linux 2.6.11
+ powerpc* Requires Linux 2.4.19
+ arm*-*-linux-*gnueabi Requires Linux 2.6.16
+
+ Note that no sanity check is performed by crosstool-NG to ensure
+ that the value you enter here is appropriate for your target.
+
+endif # GLIBC_KERNEL_VERSION_CHOSEN
+
+endchoice
+
+config GLIBC_MIN_KERNEL
+ string
+ default "" if GLIBC_KERNEL_VERSION_NONE
+ default LINUX_VERSION if GLIBC_KERNEL_VERSION_AS_HEADERS
+ default GLIBC_MIN_KERNEL_VERSION if GLIBC_KERNEL_VERSION_CHOSEN
+
+endif # KERNEL_linux
diff --git a/config/libc/glibc.in.2 b/config/libc/glibc.in.2
deleted file mode 100644
index 7785aca..0000000
--- a/config/libc/glibc.in.2
+++ /dev/null
@@ -1,269 +0,0 @@
-# This file contains the common configuration options
-# that apply to both glibc.
-
-config THREADS
- default "nptl"
-
-# Known add-ons and when they exist(ed)
-# crypt external in 2.1, no longer an add-on since 2.2
-# libidn external in 2.3.4 .. 2.10, still an add-on
-# linuxthreads external in 2.0.1 .. 2.5, no longer available since 2.6 [*]
-# localedata external in 2.0.1 .. 2.0.6, no longer an add-on since 2.1 [*]
-# ports external in 2.3.4 .. 2.16, no longer an add-on since 2.20
-# nptl never external, no longer an add-on since 2.20
-#
-# Given the list of currently supported glibc releases, we only need to worry about
-# 'libidn', 'ports' and 'nptl' add-ons. Of these, only 'ports' can be an external
-# tarball; and only 'libidn' is user-selectable ('ports' & 'nptl' are selected
-# by crosstool-NG, as dictated by the architecture and thread model).
-#
-# I had trouble locating the sources in the repository for some of the released
-# versions. E.g., there is a 2.5 version of linuxthreads, but the tag for 2.5 in Git
-# does not have the linuxthreads directory at all. Similarly, 2.0.6 tag did not have
-# localedata. Since these releases are no longer supported by crosstool-NG, this is
-# of pure historical interest now, however.
-
-config GLIBC_HAS_NPTL_ADDON
- def_bool y
- depends on !GLIBC_2_20_or_later
-
-config GLIBC_HAS_PORTS_ADDON
- def_bool y
- depends on !GLIBC_2_20_or_later
-
-config GLIBC_HAS_PORTS_ADDON_EXTERNAL
- def_bool y
- depends on !GLIBC_2_17_or_later
-
-# In case it folds into main distribution in some future release, too
-config GLIBC_HAS_LIBIDN_ADDON
- def_bool y
-
-# Some architectures require the ports addon. List them one by one here:
-# This list must be carefully in sync with the architectures names
-# we can find in config/arch/*
-config GLIBC_USE_PORTS_ADDON
- def_bool y
- depends on ARCH_alpha || ARCH_arm || ARCH_m68k || ARCH_mips || ARCH_powerpc
- depends on GLIBC_HAS_PORTS_ADDON
-
-config GLIBC_USE_PORTS_EXTERNAL
- def_bool y
- depends on GLIBC_USE_PORTS_ADDON && GLIBC_HAS_PORTS_ADDON_EXTERNAL
-
-config GLIBC_USE_NPTL_ADDON
- def_bool y
- depends on THREADS_NATIVE && GLIBC_HAS_NPTL_ADDON
-
-config GLIBC_USE_LIBIDN_ADDON
- bool "Build libidn add-on"
- help
- Enables the libidn add-on in GNU libc.
-
-# SPARCv8 support retired in 2.23
-config GLIBC_NO_SPARC_V8
- def_bool y
- depends on GLIBC_2_23_or_later
-
-config GLIBC_EXTRA_CONFIG_ARRAY
- string
- prompt "extra config"
- default ""
- help
- Extra flags to pass onto ./configure when configuring.
-
- You can enter multiple arguments here, and arguments can contain spaces
- if they are properly quoted (or escaped, but prefer quotes). Eg.:
- --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space
-
-config GLIBC_CONFIGPARMS
- string
- prompt "Extra config params (READ HELP)"
- default "" if ! ARCH_sh
- default "no-z-defs=yes" if ARCH_sh
- help
- Some architectures need to set options in the file configparms.
- This is the case for sh3/4, which really need to set configparms
- to "no-z-defs=yes" as of gcc-3.4/glibc-2.3.2.
-
- Unless you are building a toolchain for sh3/4, you should leave that empty.
-
- Note: If you need to pass more than one value, separate them with
- '\n'. Eg.: var1=val1\nvar2=val2
-
-config GLIBC_EXTRA_CFLAGS
- string
- prompt "extra target CFLAGS"
- default ""
- help
- Extra target CFLAGS to use when building.
-
-config GLIBC_ENABLE_FORTIFIED_BUILD
- bool
- prompt "Enable fortified build (EXPERIMENTAL)"
- depends on EXPERIMENTAL
- help
- If you say 'y' here, then glibc will be using fortified versions
- of functions with format arguments (eg. vsyslog, printf...), and
- do a sanity check on the format at runtime, to avoid some of the
- common format string attacks.
-
- This is currently not supported, and will most probably result in
- a broken build, with an error message like:
- ../misc/syslog.c: In function '__vsyslog_chk':
- ../misc/syslog.c:123: sorry, unimplemented: inlining failed in
- call to 'syslog': function body not available
-
- If you are brave enough and want to debug the issue, then say 'y'
- here. Otherwise, be still and say 'n' (the default). ;-)
-
-
-config GLIBC_DISABLE_VERSIONING
- bool
- prompt "Disable symbols versioning"
- help
- Do not include versioning information in the library objects.
-
-config GLIBC_OLDEST_ABI
- string
- prompt "Oldest supported ABI"
- default ""
- help
- Set the oldest ABI supported by the C library.
-
- Setting this option, for example, to 2.2 will provide ABI support
- back to (e)glibc-2.2.
-
- If this option is not set, (e)glibc will choose for you.
-
-config GLIBC_FORCE_UNWIND
- bool
- prompt "Force unwind support (READ HELP!)"
- default y
- help
- If your toolchain fails building while building the C library
- start files, or the complete C library, with a message like:
- configure: error: forced unwind support is required
-
- then you may try changing this option. Otherwise, leave it to
- the default 'y'.
-
- The issue seems to be related to building NPTL on old versions
- of glibc on some architectures
- (seen on s390, s390x and x86_64).
-
-config GLIBC_LOCALES
- bool
- prompt "Build and install locales"
- help
- Whether to build and install the libc locale files for the target,
- which is required in order to support internationalization.
-
-if LIBC_glibc && GLIBC_LOCALES
-comment "WARNING! "
-comment "| The built locales will be usable if and only if the build "
-comment "| machine and the target: "
-comment "| - have the same endianness, "
-comment "| - and have the same alignment requirements for uint32_t. "
-comment "| You will have to check by yourself (for now). "
-comment "WARNING! "
-comment "| Building GLIBC locales requires that GLIBC supports "
-comment "| the build machine as the target. "
-endif # LIBC_glibc && GLIBC_LOCALES
-
-if KERNEL_linux
-
-choice GLIBC_SUPPORTED_KERNEL
- bool
- prompt "Minimum supported kernel version"
- default GLIBC_KERNEL_VERSION_AS_HEADERS
-
-config GLIBC_KERNEL_VERSION_NONE
- bool
- prompt "Let ./configure decide"
- help
- Let ./configure decide what minimum kernel version glibc will be
- able to run against.
-
- This will include legacy compatibility code for older kernels in
- the C library, thus ensuring that it will run on a large number
- of old kernels.
-
- The minimum kernel version supported will be dependent upon the
- target you build for. For example:
- alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL
- sh[34]-*-linux-gnu Requires Linux 2.6.11
- powerpc* Requires Linux 2.4.19
- arm*-*-linux-*gnueabi Requires Linux 2.6.16
-
-config GLIBC_KERNEL_VERSION_AS_HEADERS
- bool
- prompt "Same as kernel headers (default)"
- help
- Normally, you'll want glibc to run against the same kernel
- version as the one used for the headers.
-
- This is the default.
-
- If enabled, crosstool-ng will use the chosen version of kernel
- headers for the glibc minimum kernel version supported, which is
- what gets passed to "--enable-kernel=" when configuring glibc.
-
- Enabling this will ensure that no legacy compatibility code for
- older kernels is built into your C libraries, but it will
- be unable to run on kernel versions older than whichever kernel
- headers version you've built the toolchain for.
-
- If you know for sure that your toolchain will never need to build
- applications that will run under a kernel version older than your
- chosen kernel headers version (CT_KERNEL_VERSION), you can choose
- "y" here.
-
-config GLIBC_KERNEL_VERSION_CHOSEN
- bool
- prompt "Specific kernel version"
- help
- Specify the earliest Linux kernel version you want glibc to
- include support for. This does not have to match the kernel
- headers version used for your toolchain. This controls what is
- passed to the "--enable-kernel=" option to the glibc configure
- script.
-
- If you want to be able to statically link programs with your
- toolchain's C library, make sure this kernel version is lower than
- all kernels you wish to support to avoid "FATAL: kernel too old"
- errors. The higher the version you specify, the less legacy code
- will be built into libc.
-
- Most people can leave this at the default value of "2.6.9".
-
-if GLIBC_KERNEL_VERSION_CHOSEN
-
-config GLIBC_MIN_KERNEL_VERSION
- string
- prompt "Minimum kernel version to support"
- default "2.6.9"
- help
- Enter here the lowest kernel version glibc will be able to run against.
-
- The minimum kernel version supported will be dependent upon the
- target you build for. For example:
- alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL
- sh[34]-*-linux-gnu Requires Linux 2.6.11
- powerpc* Requires Linux 2.4.19
- arm*-*-linux-*gnueabi Requires Linux 2.6.16
-
- Note that no sanity check is performed by crosstool-NG to ensure
- that the value you enter here is appropriate for your target.
-
-endif # GLIBC_KERNEL_VERSION_CHOSEN
-
-endchoice
-
-config GLIBC_MIN_KERNEL
- string
- default "" if GLIBC_KERNEL_VERSION_NONE
- default LINUX_VERSION if GLIBC_KERNEL_VERSION_AS_HEADERS
- default GLIBC_MIN_KERNEL_VERSION if GLIBC_KERNEL_VERSION_CHOSEN
-
-endif # KERNEL_linux
diff --git a/config/libc/musl.in b/config/libc/musl.in
index 24f522a..e16e85a 100644
--- a/config/libc/musl.in
+++ b/config/libc/musl.in
@@ -1,17 +1,66 @@
-# musl options
+# musl second-part option
## depends on ! WINDOWS && ! BARE_METAL
## depends on EXPERIMENTAL
-##
## select LIBC_SUPPORT_THREADS_NATIVE
## select CC_CORE_PASSES_NEEDED
-##
+
## help Musl is a new standard library to power a new generation of Linux-based
## help devices. musl is lightweight, fast, simple, free, and strives to be
## help correct in the sense of standards-conformance and safety.
source "config/versions/musl.in"
-# FIXME why? it claims "native", why report "musl"?
+# TBD why? it claims "native", why report "musl"?
config THREADS
default "musl"
+
+config LIBC_MUSL_DEBUG
+ bool
+ prompt "Build with debugging information"
+ help
+ This option enables debugging information, this will increase the size of
+ the resulting library.
+
+config LIBC_MUSL_WARNINGS
+ bool
+ prompt "Build with recommended warnings flags"
+ help
+ Build musl-libc with extra warnings, useful for musl-libc development.
+
+choice
+ prompt "How to optimize musl-libc"
+ default LIBC_MUSL_OPTIMIZE_AUTO
+
+config LIBC_MUSL_OPTIMIZE_NONE
+ bool
+ prompt "Do not optimize musl-libc"
+ help
+ This option sets `--enable-optimize=no' to disable optimization.
+
+config LIBC_MUSL_OPTIMIZE_AUTO
+ bool
+ prompt "Use musl-libc's automatic optimization"
+ help
+ This option sets `--enable-optimize=auto' to automatically set optimization.
+
+config LIBC_MUSL_OPTIMIZE_SPEED
+ bool
+ prompt "Optimize musl-libc for speed"
+ help
+ This option sets `--enable-optimize=yes' to set optimization to -O3 for speed.
+
+config LIBC_MUSL_OPTIMIZE_SIZE
+ bool
+ prompt "Optimize musl-libc for size"
+ help
+ This option sets `--enable-optimize=size' to set optimization to -Os for size.
+
+endchoice
+
+config LIBC_MUSL_OPTIMIZE
+ string
+ default "no" if LIBC_MUSL_OPTIMIZE_NONE
+ default "auto" if LIBC_MUSL_OPTIMIZE_AUTO
+ default "yes" if LIBC_MUSL_OPTIMIZE_SPEED
+ default "size" if LIBC_MUSL_OPTIMIZE_SIZE
diff --git a/config/libc/musl.in.2 b/config/libc/musl.in.2
deleted file mode 100644
index f4abcc4..0000000
--- a/config/libc/musl.in.2
+++ /dev/null
@@ -1,51 +0,0 @@
-# musl second-part option
-
-config LIBC_MUSL_DEBUG
- bool
- prompt "Build with debugging information"
- help
- This option enables debugging information, this will increase the size of
- the resulting library.
-
-config LIBC_MUSL_WARNINGS
- bool
- prompt "Build with recommended warnings flags"
- help
- Build musl-libc with extra warnings, useful for musl-libc development.
-
-choice
- prompt "How to optimize musl-libc"
- default LIBC_MUSL_OPTIMIZE_AUTO
-
-config LIBC_MUSL_OPTIMIZE_NONE
- bool
- prompt "Do not optimize musl-libc"
- help
- This option sets `--enable-optimize=no' to disable optimization.
-
-config LIBC_MUSL_OPTIMIZE_AUTO
- bool
- prompt "Use musl-libc's automatic optimization"
- help
- This option sets `--enable-optimize=auto' to automatically set optimization.
-
-config LIBC_MUSL_OPTIMIZE_SPEED
- bool
- prompt "Optimize musl-libc for speed"
- help
- This option sets `--enable-optimize=yes' to set optimization to -O3 for speed.
-
-config LIBC_MUSL_OPTIMIZE_SIZE
- bool
- prompt "Optimize musl-libc for size"
- help
- This option sets `--enable-optimize=size' to set optimization to -Os for size.
-
-endchoice
-
-config LIBC_MUSL_OPTIMIZE
- string
- default "no" if LIBC_MUSL_OPTIMIZE_NONE
- default "auto" if LIBC_MUSL_OPTIMIZE_AUTO
- default "yes" if LIBC_MUSL_OPTIMIZE_SPEED
- default "size" if LIBC_MUSL_OPTIMIZE_SIZE
diff --git a/config/libc/newlib.in b/config/libc/newlib.in
index a37eca7..f43a67d 100644
--- a/config/libc/newlib.in
+++ b/config/libc/newlib.in
@@ -1,11 +1,10 @@
# newlib options
## depends on BARE_METAL
-##
## select LIBC_SUPPORT_THREADS_NONE
## select CC_CORE_PASSES_NEEDED if CANADIAN
## select CC_CORE_PASS_2_NEEDED if ! CANADIAN
-##
+
## help Newlib is a C library intended for use on embedded systems. It is a
## help conglomeration of several library parts, all under free software
## help licenses that make them easily usable on embedded products. Newlib
@@ -29,3 +28,192 @@ config NEWLIB_HAS_NANO_MALLOC
config NEWLIB_HAS_NANO_FORMATTED_IO
def_bool y
depends on NEWLIB_2_2_or_later
+
+config LIBC_NEWLIB_TARGET_CFLAGS
+ string
+ prompt "Target CFLAGS for newlib"
+ default ""
+ help
+ Used to add specific options when compiling the target libraries
+ (eg. -ffunction-sections -fdata-sections), which can't be defined
+ in global TARGET_CFLAGS, because they shall be not used for the
+ gcc target libraries.
+ Note: Both TARGET_CFLAGS and LIBC_NEWLIB_TARGET_CFLAGS are used
+ to compile the libraries.
+
+ Leave blank if you don't know better.
+
+config LIBC_NEWLIB_IO_C99FMT
+ bool
+ prompt "Enable IOs on C99 formats"
+ help
+ Enable support for IOs on C99 formats.
+
+config LIBC_NEWLIB_IO_LL
+ bool
+ prompt "Enable IOs on long long"
+ help
+ Enable support for IOs on long long integers.
+
+config LIBC_NEWLIB_IO_FLOAT
+ bool
+ prompt "Enable IOs on floats and doubles"
+ help
+ Enable support for IOs on floating point
+ values (float and double).
+
+config LIBC_NEWLIB_IO_LDBL
+ bool
+ prompt "Enable IOs on long doubles"
+ depends on LIBC_NEWLIB_IO_FLOAT
+ help
+ Enable support for IOs on long doubles.
+
+config LIBC_NEWLIB_IO_POS_ARGS
+ bool
+ prompt "Enable printf-family positional arg support"
+ help
+ Enable printf-family positional arg support.
+
+config LIBC_NEWLIB_FVWRITE_IN_STREAMIO
+ bool
+ prompt "Vector buffer mechanism to support stream IO buffering"
+ default y
+ help
+ NEWLIB implements the vector buffer mechanism to support stream IO
+ buffering required by C standard. This feature is possibly
+ unnecessary for embedded systems which won't change file buffering
+ with functions like `setbuf' or `setvbuf'. The buffering mechanism
+ still acts as default for STDIN/STDOUT/STDERR even if this option
+ is specified.
+
+config LIBC_NEWLIB_UNBUF_STREAM_OPT
+ bool
+ prompt "Optimize fprintf to unbuffered unix file"
+ default y
+ help
+ NEWLIB does optimization when `fprintf to write only unbuffered unix
+ file'. It creates a temorary buffer to do the optimization that
+ increases stack consumption by about `BUFSIZ' bytes. Disabling this option
+ disables the optimization and saves size of text and stack.
+
+config LIBC_NEWLIB_FSEEK_OPTIMIZATION
+ bool
+ prompt "Fseek optimisation"
+ default y
+ help
+ Disabling fseek optimisation can decrease code size.
+
+config LIBC_NEWLIB_DISABLE_SUPPLIED_SYSCALLS
+ bool
+ prompt "Disable the syscalls supplied with newlib"
+ help
+ Disable the syscalls that come with newlib. You
+ will have to implement your own _sbrk, _read,
+ _write... If you plan to port newlib to a new
+ platform/board, say Yes.
+
+config LIBC_NEWLIB_REGISTER_FINI
+ bool
+ prompt "Enable finalization function registration using atexit"
+ help
+ Enable finalization function registration using atexit.
+
+config LIBC_NEWLIB_ATEXIT_DYNAMIC_ALLOC
+ bool
+ prompt "Enable dynamic allocation of atexit entries"
+ default y
+ help
+ Enable dynamic allocation of atexit entries.
+
+config LIBC_NEWLIB_GLOBAL_ATEXIT
+ bool
+ prompt "Enable atexit data structure as global variable"
+ help
+ Enable atexit data structure as global variable. By doing so it is
+ move out of _reent structure, and can be garbage collected if atexit
+ is not referenced.
+
+config LIBC_NEWLIB_LITE_EXIT
+ bool
+ prompt "Enable lite exit"
+ help
+ Enable lite exit, a size-reduced implementation of exit that doesn't
+ invoke clean-up functions such as _fini or global destructors.
+
+config LIBC_NEWLIB_REENT_SMALL
+ bool
+ prompt "Enable small reentrant struct support"
+ help
+ Enable small reentrant struct support.
+
+config LIBC_NEWLIB_MULTITHREAD
+ bool
+ prompt "Enable support for multiple threads"
+ default y
+ help
+ Enable support for multiple threads.
+
+config LIBC_NEWLIB_EXTRA_SECTIONS
+ bool
+ prompt "Place each function & data element in their own section"
+ help
+ Place each function & data symbol in their own section. This allows
+ the linker to garbage collect unused symbols at link time.
+
+config LIBC_NEWLIB_WIDE_ORIENT
+ bool
+ prompt "Allow wide C99 stream orientation"
+ default y
+ help
+ C99 states that each stream has an orientation, wide or byte. This
+ feature is possibly unnecessary for embedded systems which only do
+ byte input/output operations on stream. Disabling this feature can
+ decrease code size.
+
+config LIBC_NEWLIB_ENABLE_TARGET_OPTSPACE
+ bool
+ prompt "Optimize newlib for size"
+ default y
+ help
+ Pass --enable-target-optspace to newlib configure.
+
+ This will compile newlib with -Os.
+
+config LIBC_NEWLIB_LTO
+ bool
+ prompt "Enable Link Time Optimization"
+ depends on CC_GCC_USE_LTO
+ help
+ Builds the libraries with -flto to enable more aggressive link time
+ optimization. You will need to add -flto-partition=one to your
+ application's link line to keep the RETURN assembler macro together
+ with it's consumers.
+
+config LIBC_NEWLIB_NANO_MALLOC
+ bool
+ prompt "Enable Nano Malloc"
+ depends on NEWLIB_HAS_NANO_MALLOC
+ help
+ NEWLIB has two implementations of malloc family's functions, one in
+ `mallocr.c' and the other one in `nano-mallocr.c'. This options
+ enables the nano-malloc implementation, which is for small systems
+ with very limited memory. Note that this implementation does not
+ support `--enable-malloc-debugging' any more.
+
+config LIBC_NEWLIB_NANO_FORMATTED_IO
+ bool
+ prompt "Enable Nano Formatted I/O"
+ depends on NEWLIB_HAS_NANO_FORMATTED_IO
+ help
+ This builds NEWLIB with a special implementation of formatted I/O
+ functions, designed to lower the size of application on small systems
+ with size constraint issues. This option does not affect wide-char
+ formatted I/O functions.
+
+config LIBC_NEWLIB_EXTRA_CONFIG_ARRAY
+ string
+ prompt "Extra config for newlib"
+ default ""
+ help
+ Extra flags to pass onto ./configure when configuring the newlib.
diff --git a/config/libc/newlib.in.2 b/config/libc/newlib.in.2
deleted file mode 100644
index ed27e7a..0000000
--- a/config/libc/newlib.in.2
+++ /dev/null
@@ -1,190 +0,0 @@
-# newlib second-part options
-
-config LIBC_NEWLIB_TARGET_CFLAGS
- string
- prompt "Target CFLAGS for newlib"
- default ""
- help
- Used to add specific options when compiling the target libraries
- (eg. -ffunction-sections -fdata-sections), which can't be defined
- in global TARGET_CFLAGS, because they shall be not used for the
- gcc target libraries.
- Note: Both TARGET_CFLAGS and LIBC_NEWLIB_TARGET_CFLAGS are used
- to compile the libraries.
-
- Leave blank if you don't know better.
-
-config LIBC_NEWLIB_IO_C99FMT
- bool
- prompt "Enable IOs on C99 formats"
- help
- Enable support for IOs on C99 formats.
-
-config LIBC_NEWLIB_IO_LL
- bool
- prompt "Enable IOs on long long"
- help
- Enable support for IOs on long long integers.
-
-config LIBC_NEWLIB_IO_FLOAT
- bool
- prompt "Enable IOs on floats and doubles"
- help
- Enable support for IOs on floating point
- values (float and double).
-
-config LIBC_NEWLIB_IO_LDBL
- bool
- prompt "Enable IOs on long doubles"
- depends on LIBC_NEWLIB_IO_FLOAT
- help
- Enable support for IOs on long doubles.
-
-config LIBC_NEWLIB_IO_POS_ARGS
- bool
- prompt "Enable printf-family positional arg support"
- help
- Enable printf-family positional arg support.
-
-config LIBC_NEWLIB_FVWRITE_IN_STREAMIO
- bool
- prompt "Vector buffer mechanism to support stream IO buffering"
- default y
- help
- NEWLIB implements the vector buffer mechanism to support stream IO
- buffering required by C standard. This feature is possibly
- unnecessary for embedded systems which won't change file buffering
- with functions like `setbuf' or `setvbuf'. The buffering mechanism
- still acts as default for STDIN/STDOUT/STDERR even if this option
- is specified.
-
-config LIBC_NEWLIB_UNBUF_STREAM_OPT
- bool
- prompt "Optimize fprintf to unbuffered unix file"
- default y
- help
- NEWLIB does optimization when `fprintf to write only unbuffered unix
- file'. It creates a temorary buffer to do the optimization that
- increases stack consumption by about `BUFSIZ' bytes. Disabling this option
- disables the optimization and saves size of text and stack.
-
-config LIBC_NEWLIB_FSEEK_OPTIMIZATION
- bool
- prompt "Fseek optimisation"
- default y
- help
- Disabling fseek optimisation can decrease code size.
-
-config LIBC_NEWLIB_DISABLE_SUPPLIED_SYSCALLS
- bool
- prompt "Disable the syscalls supplied with newlib"
- help
- Disable the syscalls that come with newlib. You
- will have to implement your own _sbrk, _read,
- _write... If you plan to port newlib to a new
- platform/board, say Yes.
-
-config LIBC_NEWLIB_REGISTER_FINI
- bool
- prompt "Enable finalization function registration using atexit"
- help
- Enable finalization function registration using atexit.
-
-config LIBC_NEWLIB_ATEXIT_DYNAMIC_ALLOC
- bool
- prompt "Enable dynamic allocation of atexit entries"
- default y
- help
- Enable dynamic allocation of atexit entries.
-
-config LIBC_NEWLIB_GLOBAL_ATEXIT
- bool
- prompt "Enable atexit data structure as global variable"
- help
- Enable atexit data structure as global variable. By doing so it is
- move out of _reent structure, and can be garbage collected if atexit
- is not referenced.
-
-config LIBC_NEWLIB_LITE_EXIT
- bool
- prompt "Enable lite exit"
- help
- Enable lite exit, a size-reduced implementation of exit that doesn't
- invoke clean-up functions such as _fini or global destructors.
-
-config LIBC_NEWLIB_REENT_SMALL
- bool
- prompt "Enable small reentrant struct support"
- help
- Enable small reentrant struct support.
-
-config LIBC_NEWLIB_MULTITHREAD
- bool
- prompt "Enable support for multiple threads"
- default y
- help
- Enable support for multiple threads.
-
-config LIBC_NEWLIB_EXTRA_SECTIONS
- bool
- prompt "Place each function & data element in their own section"
- help
- Place each function & data symbol in their own section. This allows
- the linker to garbage collect unused symbols at link time.
-
-config LIBC_NEWLIB_WIDE_ORIENT
- bool
- prompt "Allow wide C99 stream orientation"
- default y
- help
- C99 states that each stream has an orientation, wide or byte. This
- feature is possibly unnecessary for embedded systems which only do
- byte input/output operations on stream. Disabling this feature can
- decrease code size.
-
-config LIBC_NEWLIB_ENABLE_TARGET_OPTSPACE
- bool
- prompt "Optimize newlib for size"
- default y
- help
- Pass --enable-target-optspace to newlib configure.
-
- This will compile newlib with -Os.
-
-config LIBC_NEWLIB_LTO
- bool
- prompt "Enable Link Time Optimization"
- depends on CC_GCC_USE_LTO
- help
- Builds the libraries with -flto to enable more aggressive link time
- optimization. You will need to add -flto-partition=one to your
- application's link line to keep the RETURN assembler macro together
- with it's consumers.
-
-config LIBC_NEWLIB_NANO_MALLOC
- bool
- prompt "Enable Nano Malloc"
- depends on NEWLIB_HAS_NANO_MALLOC
- help
- NEWLIB has two implementations of malloc family's functions, one in
- `mallocr.c' and the other one in `nano-mallocr.c'. This options
- enables the nano-malloc implementation, which is for small systems
- with very limited memory. Note that this implementation does not
- support `--enable-malloc-debugging' any more.
-
-config LIBC_NEWLIB_NANO_FORMATTED_IO
- bool
- prompt "Enable Nano Formatted I/O"
- depends on NEWLIB_HAS_NANO_FORMATTED_IO
- help
- This builds NEWLIB with a special implementation of formatted I/O
- functions, designed to lower the size of application on small systems
- with size constraint issues. This option does not affect wide-char
- formatted I/O functions.
-
-config LIBC_NEWLIB_EXTRA_CONFIG_ARRAY
- string
- prompt "Extra config for newlib"
- default ""
- help
- Extra flags to pass onto ./configure when configuring the newlib.
diff --git a/config/libc/uClibc.in b/config/libc/uClibc.in
index c1530b2..b384be9 100644
--- a/config/libc/uClibc.in
+++ b/config/libc/uClibc.in
@@ -110,3 +110,98 @@ config LIBC_UCLIBC_CONFIG_FILE
Path to the configuration file.
If the file is not provided, we fall back to a default config file.
+
+if THREADS_LT && !UCLIBC_MERGED_LINUXTHREADS
+
+choice
+ bool
+ prompt "Linuxthread implementation: "
+ default LIBC_UCLIBC_LNXTHRD_OLD
+
+config LIBC_UCLIBC_LNXTHRD_OLD
+ bool
+ prompt "old/stable"
+ help
+ From the uClibc config option help:
+ There are two versions of linuxthreads. The older (stable) version
+ has been in uClibc for quite a long time but hasn't seen too many
+ updates other than bugfixes.
+
+config LIBC_UCLIBC_LNXTHRD_NEW
+ bool
+ prompt "new"
+ help
+ From the uClibc config option help:
+ The new version has not been tested much, and lacks ports for arches
+ which glibc does not support (like frv, etc...), but is based on
+ the latest code from glibc, so it may be the only choice for the
+ newer ports (like alpha/amd64/64bit arches and hppa).
+
+endchoice
+
+endif # THREADS_LT
+
+config LIBC_UCLIBC_LNXTHRD
+ string
+ default "" if THREADS_NONE
+ default "" if THREADS_NATIVE
+ default "" if UCLIBC_MERGED_LINUXTHREADS
+ default "old" if LIBC_UCLIBC_LNXTHRD_OLD
+ default "new" if LIBC_UCLIBC_LNXTHRD_NEW
+
+config LIBC_UCLIBC_LOCALES
+ bool
+ select LIBC_UCLIBC_WCHAR
+ prompt "Add support for locales"
+ help
+ Say y if you want uClibc to support localisation.
+
+ Note that seems to be broken on recent uClibc releases.
+
+config LIBC_UCLIBC_IPV6
+ bool
+ prompt "Add support for IPv6"
+ help
+ Say y if you want uClibc to support IPv6.
+
+config LIBC_UCLIBC_WCHAR
+ bool
+ prompt "Add support for WCHAR"
+ help
+ Say y if you want uClibc to support WCHAR.
+
+ Maybe this is needed, if you're building a C++-Compiler
+
+config LIBC_UCLIBC_FENV
+ bool
+ prompt "Add support for fenv.h"
+ default y if ARCH_x86
+ help
+ fenv.h provides functions to control the floating point environment,
+ such as rounding mode, exceptions...
+
+ For some architectures, fenv.h is incomplete, so is not installed
+ by default. x86 is known to have a rather complete fenv.h, so it is
+ installed by default only for x86.
+
+ If you need fenv.h on other architectures, say 'y' here, but you may
+ encounter some issues.
+
+config LIBC_UCLIBC_RPC
+ bool
+ prompt "Add support for RPC"
+ help
+ Enable support for remote procedure calls (RPC) in uClibc.
+
+if ARCH_arm
+config LIBC_UCLIBC_USE_GNU_SUFFIX
+ bool
+ default y
+ prompt "Use -uclibcgnueabi suffix"
+ help
+ Depending on where the resulting toolchain will be used, you may need
+ to tweak the "system" part of the target tuple. Buildroot prefers
+ to have arm-*-linux-uclibcgnueabi; OpenEmbedded prefers
+ arm-*-linux-uclibceabi. Other tools seem to either accept both, or
+ don't care about the suffix.
+endif
diff --git a/config/libc/uClibc.in.2 b/config/libc/uClibc.in.2
deleted file mode 100644
index 2ff0d15..0000000
--- a/config/libc/uClibc.in.2
+++ /dev/null
@@ -1,96 +0,0 @@
-# uClibc second-part option
-
-if THREADS_LT && !UCLIBC_MERGED_LINUXTHREADS
-
-choice
- bool
- prompt "Linuxthread implementation: "
- default LIBC_UCLIBC_LNXTHRD_OLD
-
-config LIBC_UCLIBC_LNXTHRD_OLD
- bool
- prompt "old/stable"
- help
- From the uClibc config option help:
- There are two versions of linuxthreads. The older (stable) version
- has been in uClibc for quite a long time but hasn't seen too many
- updates other than bugfixes.
-
-config LIBC_UCLIBC_LNXTHRD_NEW
- bool
- prompt "new"
- help
- From the uClibc config option help:
- The new version has not been tested much, and lacks ports for arches
- which glibc does not support (like frv, etc...), but is based on
- the latest code from glibc, so it may be the only choice for the
- newer ports (like alpha/amd64/64bit arches and hppa).
-
-endchoice
-
-endif # THREADS_LT
-
-config LIBC_UCLIBC_LNXTHRD
- string
- default "" if THREADS_NONE
- default "" if THREADS_NATIVE
- default "" if UCLIBC_MERGED_LINUXTHREADS
- default "old" if LIBC_UCLIBC_LNXTHRD_OLD
- default "new" if LIBC_UCLIBC_LNXTHRD_NEW
-
-config LIBC_UCLIBC_LOCALES
- bool
- select LIBC_UCLIBC_WCHAR
- prompt "Add support for locales"
- help
- Say y if you want uClibc to support localisation.
-
- Note that seems to be broken on recent uClibc releases.
-
-config LIBC_UCLIBC_IPV6
- bool
- prompt "Add support for IPv6"
- help
- Say y if you want uClibc to support IPv6.
-
-config LIBC_UCLIBC_WCHAR
- bool
- prompt "Add support for WCHAR"
- help
- Say y if you want uClibc to support WCHAR.
-
- Maybe this is needed, if you're building a C++-Compiler
-
-config LIBC_UCLIBC_FENV
- bool
- prompt "Add support for fenv.h"
- default y if ARCH_x86
- help
- fenv.h provides functions to control the floating point environment,
- such as rounding mode, exceptions...
-
- For some architectures, fenv.h is incomplete, so is not installed
- by default. x86 is known to have a rather complete fenv.h, so it is
- installed by default only for x86.
-
- If you need fenv.h on other architectures, say 'y' here, but you may
- encounter some issues.
-
-config LIBC_UCLIBC_RPC
- bool
- prompt "Add support for RPC"
- help
- Enable support for remote procedure calls (RPC) in uClibc.
-
-if ARCH_arm
-config LIBC_UCLIBC_USE_GNU_SUFFIX
- bool
- default y
- prompt "Use -uclibcgnueabi suffix"
- help
- Depending on where the resulting toolchain will be used, you may need
- to tweak the "system" part of the target tuple. Buildroot prefers
- to have arm-*-linux-uclibcgnueabi; OpenEmbedded prefers
- arm-*-linux-uclibceabi. Other tools seem to either accept both, or
- don't care about the suffix.
-endif
diff --git a/config/target.in b/config/target.in
index 1011ac9..b96a4c2 100644
--- a/config/target.in
+++ b/config/target.in
@@ -402,8 +402,6 @@ config ARCH_FLOAT
default "soft" if ARCH_FLOAT_SW
default "softfp" if ARCH_FLOAT_SOFTFP
-source "config/gen/arch.in.2"
-
config TARGET_USE_OVERLAY
bool
diff --git a/maintainer/addToolVersion.sh b/maintainer/addToolVersion.sh
deleted file mode 100755
index 38c2e55..0000000
--- a/maintainer/addToolVersion.sh
+++ /dev/null
@@ -1,238 +0,0 @@
-#!/bin/sh
-set -e
-
-# Adds a new version to one of the toolchain component
-myname="$0"
-
-# Parse the tools' paths configuration
-# It is expected that this script is only to be run from the
-# source directory of crosstool-NG, so it is trivial to find
-# paths.sh (we can't use ". paths.sh", as POSIX states that
-# $PATH should be searched for, and $PATH most probably doe
-# not include "."), hence the "./".
-. "./paths.sh"
-
-doHelp() {
- cat <<-EOF
- Usage: ${myname} <--tool> <[options] version [...]> ...
- 'tool' in one of:
- gcc, binutils, glibc, uClibc, uClibc-ng, newlib, linux, gdb,
- duma, strace, ltrace, libelf, gmp, mpfr, isl, cloog, mpc,
- mingw-w64, expat, ncurses, musl, gettext, zlib, libiconv
-
- Valid options for all tools:
- --stable, -s, +x (default)
- mark the version as being stable (as opposed to experimental, below)
-
- --experimental, -x, +s
- mark the version as being experimental (as opposed to stable, above)
-
- --current, -c, +o (default)
- mark the version as being cuurent (as opposed to obsolete, below)
-
- --obsolete, -o, +c
- mark the version as being obsolete (as opposed to current, above)
-
- Note: setting a new tool resets to the defaults: 'stable' and 'current'.
-
- 'version' is a valid version for the specified tool.
-
- Examples:
- add stable current version 2.6.19.2 to linux kernel:
- ${myname} --linux 2.6.19.2
-
- add experimental obsolete version 2.3.5 and stable current versions 2.6.1
- and 2.6.2 to glibc, add stable obsolete version 3.3.3 to gcc:
- ${myname} --glibc -x -o 2.3.5 -s -c 2.6.1 2.6.2 --gcc -o 3.3.3
-EOF
-}
-
-# Extract field $3 from version $1 with separator $2
-getVersionField() {
- local version="$1"
- local sep="$2"
- local field="$3"
-
- echo "${version}${sep}${sep}${sep}${sep}" |cut -d ${sep} -f ${field}
-}
-
-# Effectively add a version to the specified tool
-# $cat : tool category
-# $tool : tool name
-# $tool_prefix : tool directory prefix
-# $EXP : set to non empty if experimental, to empty otherwise
-# OBS : set to non empty if obsolete, to empty otherwise
-# $1 : version string to add
-addToolVersion() {
- local version="$1"
- local file="$2"
- local config_ver_option
- local exp_obs_prompt
- local deps v ver_M ver_m ver_p
- local SedExpr1 SedExpr2
-
- [ -f "${file}" ] || return 0
-
- v=$(echo "${version}" |"${sed}" -r -e 's/-/_/g; s/\./_/g;')
-
- config_ver_option="${cat}_V_${v}"
-
- # Check for existing version: it can be legitimitate for an end-user
- # to try adding a new version if the one he/she wants is not listed.
- # But it can be the case where the version is hidden behind either one
- # of EXPERIMENTAL or OBSOLETE, so warn if the version is already listed.
- if ${grep} -E "^config ${config_ver_option}$" "${file}" >/dev/null 2>&1; then
- echo "'${tool}': version '${version}' already present:"
- ${grep} -A1 -B0 -n \
- -E "^(config ${config_ver_option}| {4}prompt \"${version}\")$" \
- "${file}" /dev/null
- return 0
- fi
-
- SedExpr1="${SedExpr1}config ${config_ver_option}\n"
- SedExpr1="${SedExpr1} bool\n"
- SedExpr1="${SedExpr1} prompt \"${version}"
- case "${EXP},${OBS}" in
- ,) ;;
- ,*) exp_obs_prompt=" (OBSOLETE)"
- deps=" depends on OBSOLETE"
- ;;
- *,) exp_obs_prompt=" (EXPERIMENTAL)"
- deps=" depends on EXPERIMENTAL"
- ;;
- *) exp_obs_prompt=" (EXPERIMENTAL, OBSOLETE)"
- deps=" depends on EXPERIMENTAL \\&\\& OBSOLETE"
- ;;
- esac
- [ -n "${exp_obs_prompt}" ] && SedExpr1="${SedExpr1}${exp_obs_prompt}"
- SedExpr1="${SedExpr1}\""
- [ -n "${deps}" ] && SedExpr1="${SedExpr1}\n${deps}"
- case "${tool}" in
- gcc)
- # Extract 'M'ajor and 'm'inor from version string
- ver_M=$(getVersionField "${version}" . 1)
- ver_m=$(getVersionField "${version}" . 2)
- if [ ${ver_M} -ge 4 ] && [ ${ver_m} -ge 2 ]; then
- SedExpr1="${SedExpr1}\n select CC_GCC_${ver_M}_${ver_m}"
- fi
- ;;
- binutils)
- # Extract 'M'ajor, 'm'inor, sometimes 'p'atch from version string
- # TODO: Rework this
- ver_M=$(getVersionField "${version}" . 1)
- ver_m=$(getVersionField "${version}" . 2)
- ver_p=$(getVersionField "${version}" . 3)
- if [ ${ver_M} -eq 2 -a ${ver_m} -eq 27 ]; then
- SedExpr1="${SedExpr1}\n select BINUTILS_2_27_or_later"
- elif [ ${ver_M} -eq 2 -a ${ver_m} -eq 26 ]; then
- SedExpr1="${SedExpr1}\n select BINUTILS_2_26_or_later"
- elif [ ${ver_M} -eq 2 -a ${ver_m} -eq 25 -a ${ver_p} -eq 1 ]; then
- SedExpr1="${SedExpr1}\n select BINUTILS_2_25_1_or_later"
- elif [ ${ver_M} -eq 2 -a ${ver_m} -eq 25 -a -z ${ver_p} ]; then
- SedExpr1="${SedExpr1}\n select BINUTILS_2_25_or_later"
- elif [ ${ver_M} -eq 2 -a ${ver_m} -eq 24 ]; then
- SedExpr1="${SedExpr1}\n select BINUTILS_2_24_or_later"
- elif [ ${ver_M} -eq 2 -a ${ver_m} -eq 23 -a ${ver_p} -eq 2 ]; then
- SedExpr1="${SedExpr1}\n select BINUTILS_2_23_2_or_later"
- fi
- ;;
- uClibc)
- # uClibc-0.9.33.2 needs some love
- ver_M=$(getVersionField "${version}" . 1)
- ver_m=$(getVersionField "${version}" . 2)
- ver_p=$(getVersionField "${version}" . 3)
- if [ ${ver_M} -eq 0 -a ${ver_m} -eq 9 -a ${ver_p} -eq 33 ]; then
- SedExpr1="${SedExpr1}\n select LIBC_UCLIBC_0_9_33_2_or_later"
- fi
- ;;
- uClibc-ng)
- # uClibc-ng-1.0.15 changed threading configuration, no longer compatible
- # with the rest of uClibc gang.
- ver_M=$(getVersionField "${version}" . 1)
- ver_m=$(getVersionField "${version}" . 2)
- ver_p=$(getVersionField "${version}" . 3)
- if [ ${ver_M} -eq 1 -a ${ver_m} -eq 0 -a ${ver_p} -eq 15 ]; then
- SedExpr1="${SedExpr1}\n select LIBC_UCLIBC_NG_1_0_15_or_later"
- fi
- ;;
- gdb)
- # gdb-7.0 and above have special handling
- ver_M=$(getVersionField "${version}" . 1)
- ver_m=$(getVersionField "${version}" . 2)
- if [ ${ver_M} -ge 7 ]; then
- if [ ${ver_m} -ge 2 ]; then
- SedExpr1="${SedExpr1}\n select GDB_7_2_or_later"
- else
- SedExpr1="${SedExpr1}\n select GDB_7_0_or_later"
- fi
- fi
- ;;
- esac
- SedExpr2=" default \"${version}\" if ${config_ver_option}"
- "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_BELOW)$/\1\n\n'"${SedExpr1}"'/;' "${file}"
- "${sed}" -r -i -e 's/^(# CT_INSERT_VERSION_STRING_BELOW)$/\1\n'"${SedExpr2}"'/;' "${file}"
-}
-
-cat=
-tool=
-tool_prefix=
-VERSION=
-EXP=
-OBS=
-
-if [ $# -eq 0 ]; then
- doHelp
- exit 1
-fi
-
-while [ $# -gt 0 ]; do
- case "$1" in
- # Tools:
- --gcc) EXP=; OBS=; cat=CC_GCC; tool=gcc; tool_prefix=cc; dot2suffix=;;
- --binutils) EXP=; OBS=; cat=BINUTILS; tool=binutils; tool_prefix=binutils; dot2suffix=;;
- --glibc) EXP=; OBS=; cat=LIBC_GLIBC; tool=glibc; tool_prefix=libc; dot2suffix=;;
- --uClibc) EXP=; OBS=; cat=LIBC_UCLIBC; tool=uClibc; tool_prefix=libc; dot2suffix=;;
- --uClibc-ng)EXP=; OBS=; cat=LIBC_UCLIBC_NG; tool=uClibc; tool_prefix=libc; dot2suffix=;;
- --newlib) EXP=; OBS=; cat=LIBC_NEWLIB; tool=newlib; tool_prefix=libc; dot2suffix=;;
- --mingw-w64)EXP=; OBS=; cat=WINAPI; tool=mingw; tool_prefix=libc; dot2suffix=;;
- --musl) EXP=; OBS=; cat=LIBC_MUSL; tool=musl; tool_prefix=libc; dot2suffix=;;
- --linux) EXP=; OBS=; cat=KERNEL; tool=linux; tool_prefix=kernel; dot2suffix=;;
- --gdb) EXP=; OBS=; cat=GDB; tool=gdb; tool_prefix=debug; dot2suffix=;;
- --duma) EXP=; OBS=; cat=DUMA; tool=duma; tool_prefix=debug; dot2suffix=;;
- --strace) EXP=; OBS=; cat=STRACE; tool=strace; tool_prefix=debug; dot2suffix=;;
- --ltrace) EXP=; OBS=; cat=LTRACE; tool=ltrace; tool_prefix=debug; dot2suffix=;;
- --gmp) EXP=; OBS=; cat=GMP; tool=gmp; tool_prefix=companion_libs; dot2suffix=;;
- --mpfr) EXP=; OBS=; cat=MPFR; tool=mpfr; tool_prefix=companion_libs; dot2suffix=;;
- --isl) EXP=; OBS=; cat=ISL; tool=isl; tool_prefix=companion_libs; dot2suffix=;;
- --cloog) EXP=; OBS=; cat=CLOOG; tool=cloog; tool_prefix=companion_libs; dot2suffix=;;
- --mpc) EXP=; OBS=; cat=MPC; tool=mpc; tool_prefix=companion_libs; dot2suffix=;;
- --libelf) EXP=; OBS=; cat=LIBELF; tool=libelf; tool_prefix=companion_libs; dot2suffix=;;
- --expat) EXP=; OBS=; cat=EXPAT; tool=expat; tool_prefix=companion_libs; dot2suffix=;;
- --ncurses) EXP=; OBS=; cat=NCURSES; tool=ncurses; tool_prefix=companion_libs; dot2suffix=;;
- --gettext) EXP=; OBS=; cat=GETTEXT; tool=gettext; tool_prefix=companion_libs; dot2suffix=;;
- --libiconv) EXP=; OBS=; cat=LIBICONV; tool=libiconv; tool_prefix=companion_libs; dot2suffix=;;
- --zlib) EXP=; OBS=; cat=ZLIB; tool=zlib; tool_prefix=companion_tools; dot2suffix=;;
- --make) EXP=; OBS=; cat=MAKE; tool=make; tool_prefix=companion_tools; dot2suffix=;;
- --m4) EXP=; OBS=; cat=M4; tool=m4; tool_prefix=companion_tools; dot2suffix=;;
- --autoconf) EXP=; OBS=; cat=AUTOCONF; tool=autoconf; tool_prefix=companion_tools; dot2suffix=;;
- --automake) EXP=; OBS=; cat=AUTOMAKE; tool=automake; tool_prefix=companion_tools; dot2suffix=;;
- --libtool) EXP=; OBS=; cat=LIBTOOL; tool=libtool; tool_prefix=companion_tools; dot2suffix=;;
-
- # Tools options:
- -x|--experimental|+s) EXP=1;;
- -s|--stable|+x) EXP=;;
- -o|--obsolete|+c) OBS=1;;
- -c|--current|+o) OBS=;;
-
- # Misc:
- -h|--help) doHelp; exit 0;;
- -*) echo "Unknown option: '$1' (use -h/--help for help)."; exit 1;;
-
- # Version string:
- *) [ -n "${tool}" ] || { doHelp; exit 1; }
- file_base="config/${tool_prefix}/${tool}.in"
- addToolVersion "$1" "${file_base}${dot2suffix}"
- ;;
- esac
- shift
-done
diff --git a/maintainer/gen-kconfig.sh b/maintainer/gen-kconfig.sh
deleted file mode 100755
index 096599c..0000000
--- a/maintainer/gen-kconfig.sh
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/bin/bash
-
-set -e
-
-# Accept overrides from command line if needed
-sed=${SED:-sed}
-grep=${GREP:-grep}
-
-# Generate either a choice or a menuconfig with the specified entries.
-#
-# Usage:
-# generate a choice:
-# gen_choice <out-file> <label> <config-prefix> <base-dir>
-#
-# generate a menuconfig:
-# gen_menu <out-file> <label> <config-prefix> <base-dir>
-#
-# where:
-# out-file
-# put the generated choice/menuconfig into that file
-# for choices, it acts as the base bname of the file, the secondary
-# parts (the .in.2) are put in out-file.2
-#
-# label
-# name for the entries family
-# eg. Architecture, Kernel...
-#
-# config-prefix
-# prefix for the choice entries
-# eg. ARCH, KERNEL...
-#
-# base-dir
-# base directory containing config files
-# eg. config/arch, config/kernel...
-#
-
-# Helper: find the base names of all *.in files in a given directory
-get_components() {
- local dir="${1}"
- local f b
-
- for f in ${dir}/*.in; do
- b=${f#${dir}/}
- echo ${b%.in}
- done
-}
-
-# Generate a choice
-# See above for usage
-gen_choice() {
- local out_file="${1}"
- local label="${2}"
- local cfg_prefix="${3}"
- local base_dir="${4}"
- local file entry _entry
-
- # Generate the part-1
- exec >"${out_file}"
- printf '# %s menu\n' "${label}"
- printf '# Generated file, do not edit!!!\n'
- printf '\n'
- printf 'choice GEN_CHOICE_%s\n' "${cfg_prefix}"
- printf ' bool\n'
- printf ' prompt "%s"\n' "${label}"
- printf '\n'
- for entry in `get_components ${base_dir}`; do
- file="${base_dir}/${entry}.in"
- _entry=$(printf '%s\n' "${entry}" |"${sed}" -r -s -e 's/[-.+]/_/g;')
- printf 'config %s_%s\n' "${cfg_prefix}" "${_entry}"
- printf ' bool\n'
- printf ' prompt "%s"\n' "${entry}"
- "${sed}" -r -e '/^## depends on /!d; s/^## / /;' ${file} 2>/dev/null
- "${sed}" -r -e '/^## select /!d; s/^## / /;' ${file} 2>/dev/null
- if "${grep}" -E '^## help' ${file} >/dev/null 2>&1; then
- printf ' help\n'
- "${sed}" -r -e '/^## help ?/!d; s/^## help ?/ /;' ${file} 2>/dev/null
- fi
- printf '\n'
- done
- printf 'endchoice\n'
-
- printf '\n'
- printf 'config %s\n' "${cfg_prefix}"
- printf ' string\n'
- for entry in `get_components ${base_dir}`; do
- file="${base_dir}/${entry}.in"
- _entry=$(printf '%s\n' "${entry}" |"${sed}" -r -s -e 's/[-.+]/_/g;')
- printf ' default "%s" if %s_%s\n' "${entry}" "${cfg_prefix}" "${_entry}"
- done
-
- printf '\n'
- for entry in `get_components ${base_dir}`; do
- file="${base_dir}/${entry}.in"
- _entry=$(printf '%s\n' "${entry}" |"${sed}" -r -s -e 's/[-.+]/_/g;')
- printf 'if %s_%s\n' "${cfg_prefix}" "${_entry}"
- printf 'source "%s"\n' "${file}"
- printf 'endif\n'
- done
-
- # Generate the part-2
- exec >"${out_file}.2"
- printf '# %s second part options\n' "${label}"
- printf '# Generated file, do not edit!!!\n'
- for entry in `get_components ${base_dir}`; do
- file="${base_dir}/${entry}.in"
- _entry=$(printf '%s\n' "${entry}" |"${sed}" -r -s -e 's/[-.+]/_/g;')
- if [ -f "${file}.2" ]; then
- printf '\n'
- printf 'if %s_%s\n' "${cfg_prefix}" "${_entry}"
- printf 'source "%s.2"\n' "${file}"
- printf 'endif\n'
- fi
- done
-}
-
-# Generate a menuconfig
-# See above for usage
-gen_menu() {
- local out_file="${1}"
- local label="${2}"
- local cfg_prefix="${3}"
- local base_dir="${4}"
- local file entry _entry
-
- # Generate the menuconfig
- exec >"${out_file}"
- printf '# %s menu\n' "${label}"
- printf '# Generated file, do not edit!!!\n'
- printf '\n'
- for entry in `get_components ${base_dir}`; do
- file="${base_dir}/${entry}.in"
- _entry=$(printf '%s\n' "${entry}" |"${sed}" -r -s -e 's/[-.+]/_/g;')
- printf 'menuconfig %s_%s\n' "${cfg_prefix}" "${_entry}"
- printf ' bool\n'
- if "${grep}" -E '^## default' ${file} >/dev/null 2>&1; then
- "${sed}" -r -e '/^## default ?/!d; s/^## default ?/ default /;' ${file} 2>/dev/null
- fi
- printf ' prompt "%s"\n' "${entry}"
- "${sed}" -r -e '/^## depends on /!d; s/^## / /;' ${file} 2>/dev/null
- "${sed}" -r -e '/^## select /!d; s/^## / /;' ${file} 2>/dev/null
- if "${grep}" -E '^## help' ${file} >/dev/null 2>&1; then
- printf ' help\n'
- "${sed}" -r -e '/^## help ?/!d; s/^## help ?/ /;' ${file} 2>/dev/null
- fi
- printf '\n'
- printf 'if %s_%s\n' "${cfg_prefix}" "${_entry}"
- printf 'source "%s"\n' "${file}"
- printf 'endif\n'
- printf '\n'
- done
-}
-
-mkdir -p config/gen
-gen_choice config/gen/arch.in "Target Architecture" "ARCH" "config/arch"
-gen_choice config/gen/kernel.in "Target OS" "KERNEL" "config/kernel"
-gen_choice config/gen/cc.in "Compiler" "CC" "config/cc"
-gen_choice config/gen/binutils.in "Binutils" "BINUTILS" "config/binutils"
-gen_choice config/gen/libc.in "C library" "LIBC" "config/libc"
-gen_menu config/gen/debug.in "Debug facilities" "DEBUG" "config/debug"
-gen_menu config/gen/companion_tools.in "Companion tools" "COMP_TOOLS" "config/companion_tools"
diff --git a/maintainer/gen-versions.sh b/maintainer/gen-versions.sh
deleted file mode 100755
index 09ebc0b..0000000
--- a/maintainer/gen-versions.sh
+++ /dev/null
@@ -1,560 +0,0 @@
-#!/bin/bash
-
-########################################
-# Common meta-language implementation. Syntax:
-#
-# The template file is processed line by line, with @@VAR@@ placeholders
-# being replaced with a value of the VAR variable.
-# Special lines start with '#!' and a keyword:
-#
-# #!//
-# Comment, the rest of the line is ignored
-# #!if COND
-# Conditional: the lines until the matching #!end-if are processed
-# only if the conditional COND evaluates to true.
-# #!foreach NAME
-# Iterate over NAME entities (the iterator must be set up first
-# using the set_iter function), processing the lines until the matching
-# #!end-foreach line.
-
-declare -A info
-
-debug()
-{
- if [ -n "${DEBUG}" ]; then
- echo "DEBUG :: $@" >&2
- fi
-}
-
-msg()
-{
- if [ -z "${QUIET}" ]; then
- echo "INFO :: $@" >&2
- fi
-}
-
-warn()
-{
- echo "WARN :: $@" >&2
-}
-
-error()
-{
- echo "ERROR :: $@" >&2
- exit 1
-}
-
-find_end()
-{
- local token="${1}"
- local count=1
-
- # Skip first line, we know it has the proper '#!' command on it
- endline=$[l + 1]
- while [ "${endline}" -le "${end}" ]; do
- case "${tlines[${endline}]}" in
- "#!${token} "*)
- count=$[count + 1]
- ;;
- "#!end-${token}")
- count=$[count - 1]
- ;;
- esac
- if [ "${count}" = 0 ]; then
- return
- fi
- endline=$[endline + 1]
- done
- error "line ${l}: '${token}' token is unpaired"
-}
-
-set_iter()
-{
- local name="${1}"
-
- if [ "${info[iter_${name}]+set}" = "set" ]; then
- error "Iterator over '${name}' is already set up"
- fi
- shift
- debug "Setting iterator over '${name}' to '$*'"
- info[iter_${name}]="$*"
-}
-
-run_if()
-{
- local cond="${1}"
- local endline
-
- find_end "if"
- if eval "${cond}"; then
- debug "True conditional '${cond}' at lines ${l}..${endline}"
- run_lines $[l + 1] $[endline - 1]
- else
- debug "False conditional '${cond}' at lines ${l}..${endline}"
- fi
- lnext=$[endline + 1]
- debug "Continue at line ${lnext}"
-}
-
-do_foreach()
-{
- local var="${1}"
- local v saveinfo
-
- shift
- if [ "`type -t enter_${var}`" != "function" ]; then
- error "No parameter setup routine for iterator over '${var}'"
- fi
- for v in ${info[iter_${var}]}; do
- saveinfo=`declare -p info`
- eval "enter_${var} ${v}"
- eval "$@"
- eval "${saveinfo#declare -A }"
- done
-}
-
-run_foreach()
-{
- local var="${1}"
- local endline
-
- if [ "${info[iter_${var}]+set}" != "set" ]; then
- error "line ${l}: iterator over '${var}' is not defined"
- fi
- find_end "foreach"
- debug "Loop over '${var}', lines ${l}..${endline}"
- do_foreach ${var} run_lines $[l + 1] $[endline - 1]
- lnext=$[endline + 1]
- debug "Continue at line ${lnext}"
-}
-
-run_lines()
-{
- local start="${1}"
- local end="${2}"
- local l lnext s s1 v
-
- debug "Running lines ${start}..${end}"
- l=${start}
- while [ "${l}" -le "${end}" ]; do
- lnext=$[l+1]
- s="${tlines[${l}]}"
- # Expand @@foo@@ to ${info[foo]}. First escape variables/backslashes for evals below.
- s="${s//\\/\\\\}"
- s="${s//\$/\\\$}"
- s1=
- while [ -n "${s}" ]; do
- case "${s}" in
- *@@*@@*)
- v="${s#*@@}"
- v="${v%%@@*}"
- if [ "${info[${v}]+set}" != "set" ]; then
- error "line ${l}: reference to undefined variable '${v}'"
- fi
- s1="${s1}${s%%@@*}\${info[${v}]}"
- s="${s#*@@*@@}"
- ;;
- *@@*)
- error "line ${l}: non-paired @@ markers"
- ;;
- *)
- s1="${s1}${s}"
- break
- ;;
- esac
- done
- s=${s1}
-
- debug "Evaluate: ${s}"
- case "${s}" in
- "#!if "*)
- run_if "${s#* }"
- ;;
- "#!foreach "*)
- run_foreach "${s#* }"
- ;;
- "#!//"*)
- # Comment, do nothing
- ;;
- "#!"*)
- error "line ${l}: unrecognized command"
- ;;
- *)
- # Not a special command
- eval "echo \"${s//\"/\\\"}\""
- ;;
- esac
- l=${lnext}
- done
-}
-
-run_template()
-{
- local -a tlines
- local src="${1}"
-
- debug "Running template ${src}"
- mapfile -O 1 -t tlines < "${src}"
- run_lines 1 ${#tlines[@]}
-}
-
-########################################
-
-# Where the version configs are generated
-config_dir=config/versions
-template=maintainer/kconfig-versions.template
-
-declare -A pkg_forks pkg_milestones pkg_nforks
-declare -a pkg_masters pkg_all pkg_preferred
-
-# Convert the argument to a Kconfig-style macro
-kconfigize()
-{
- local v="${1}"
-
- v=${v//[^0-9A-Za-z_]/_}
- echo "${v^^}"
-}
-
-# Helper for cmp_versions: compare an upstream/debian portion of
-# a version. Returns 0 if equal, otherwise echoes "-1" or "1" and
-# returns 1.
-equal_versions()
-{
- local v1="${1}"
- local v2="${2}"
- local p1 p2
-
- # Compare alternating non-numerical/numerical portions, until
- # non-equal portion is found or either string is exhausted.
- while [ -n "${v1}" -a -n "${v2}" ]; do
- # Find non-numerical portions and compare lexicographically
- p1="${v1%%[0-9]*}"
- p2="${v2%%[0-9]*}"
- v1="${v1#${p1}}"
- v2="${v2#${p2}}"
- #debug "lex [${p1}] v [${p2}]"
- if [ "${p1}" \< "${p2}" ]; then
- echo "-1"
- return 1
- elif [ "${p1}" \> "${p2}" ]; then
- echo "1"
- return 1
- fi
- #debug "rem [${v1}] v [${v2}]"
- # Find numerical portions and compare numerically
- p1="${v1%%[^0-9]*}"
- p2="${v2%%[^0-9]*}"
- v1="${v1#${p1}}"
- v2="${v2#${p2}}"
- #debug "num [${p1}] v [${p2}]"
- if [ "${p1:-0}" -lt "${p2:-0}" ]; then
- echo "-1"
- return 1
- elif [ "${p1:-0}" -gt "${p2:-0}" ]; then
- echo "1"
- return 1
- fi
- #debug "rem [${v1}] v [${v2}]"
- done
- if [ -n "${v1}" ]; then
- echo "1"
- return 1
- elif [ -n "${v2}" ]; then
- echo "-1"
- return 1
- fi
- return 0
-}
-
-# Compare two version strings, similar to sort -V. But we don't
-# want to depend on GNU sort availability on the host.
-# See http://www.debian.org/doc/debian-policy/ch-controlfields.html
-# for description of what the version is expected to be.
-# Returns "-1", "0" or "1" if first version is earlier, same or
-# later than the second.
-cmp_versions()
-{
- local v1="${1}"
- local v2="${2}"
- local e1=0 e2=0 u1 u2 d1=0 d2=0
-
- # Case-insensitive comparison
- v1="${v1^^}"
- v2="${v2^^}"
-
- # Find if the versions contain epoch part
- case "${v1}" in
- *:*)
- e1="${v1%%:*}"
- v1="${v1#*:}"
- ;;
- esac
- case "${v2}" in
- *:*)
- e2="${v2%%:*}"
- v2="${v2#*:}"
- ;;
- esac
-
- # Compare epochs numerically
- if [ "${e1}" -lt "${e2}" ]; then
- echo "-1"
- return
- elif [ "${e1}" -gt "${e2}" ]; then
- echo "1"
- return
- fi
-
- # Find if the version contains a "debian" part.
- # v1/v2 will now contain "upstream" part.
- case "${v1}" in
- *-*)
- d1=${v1##*-}
- v1=${v1%-*}
- ;;
- esac
- case "${v2}" in
- *-*)
- d2=${v2##*-}
- v2=${v2%-*}
- ;;
- esac
-
- # Compare upstream
- if equal_versions "${v1}" "${v2}" && equal_versions "${d1}" "${d2}"; then
- echo "0"
- fi
-}
-
-# Sort versions, descending
-sort_versions()
-{
- local sorted
- local remains="$*"
- local next_remains
- local v vx found
-
- while [ -n "${remains}" ]; do
- #debug "Sorting [${remains}]"
- for v in ${remains}; do
- found=yes
- next_remains=
- #debug "Candidate ${v}"
- for vx in ${remains}; do
- #debug "${v} vs ${vx} :: `cmp_versions ${v} ${vx}`"
- case `cmp_versions ${v} ${vx}` in
- 1)
- next_remains+=" ${vx}"
- ;;
- 0)
- ;;
- -1)
- found=no
- #debug "Bad: earlier than ${vx}"
- break
- ;;
- esac
- done
- if [ "${found}" = "yes" ]; then
- # $v is less than all other members in next_remains
- sorted+=" ${v}"
- remains="${next_remains}"
- #debug "Good candidate ${v} sorted [${sorted}] remains [${remains}]"
- break
- fi
- done
- done
- echo "${sorted}"
-}
-
-read_file()
-{
- local l p
-
- while read l; do
- l="${p}${l}"
- p=
- case "${l}" in
- "")
- continue
- ;;
- *\\)
- p="${l%\\}"
- continue
- ;;
- "#"*)
- continue
- ;;
- *=*)
- echo "info[${l%%=*}]=${l#*=}"
- ;;
- *)
- error "syntax error in '${1}': '${l}'"
- ;;
- esac
- done < "${1}"
-}
-
-read_package_desc()
-{
- read_file "packages/${1}/package.desc"
-}
-
-read_version_desc()
-{
- read_file "packages/${1}/${2}/version.desc"
-}
-
-find_forks()
-{
- local -A info
-
- info[preferred]=${1}
- eval `read_package_desc ${1}`
-
- if [ -n "${info[master]}" ]; then
- pkg_nforks[${info[master]}]=$[pkg_nforks[${info[master]}]+1]
- pkg_forks[${info[master]}]+=" ${1} "
- else
- pkg_preferred[${1}]=${info[preferred]}
- pkg_nforks[${1}]=$[pkg_nforks[${1}]+1]
- pkg_forks[${1}]+=" ${1} "
- pkg_milestones[${1}]=`sort_versions ${info[milestones]}`
- pkg_masters+=( "${1}" )
- fi
- # Keep sorting so that preferred fork is first
- if [ -n "${pkg_preferred[${1}]}" ]; then
- pkg_forks[${1}]="${pkg_preferred[${1}]} ${pkg_forks[${1}]##* ${pkg_preferred[${1}]} } ${pkg_forks[${1}]%% ${pkg_preferred[${1}]} *}"
- fi
-}
-
-check_obsolete_experimental()
-{
- [ -z "${info[obsolete]}" ] && only_obsolete=
- [ -z "${info[experimental]}" ] && only_experimental=
-}
-
-enter_fork()
-{
- local fork="${1}"
- local versions
- local only_obsolete only_experimental
-
- # Set defaults
- info[obsolete]=
- info[experimental]=
- info[repository]=
- info[repository_branch]=
- info[repository_cset]=
- info[repository_subdir]=
- info[bootstrap]=
- info[fork]=${fork}
- info[name]=${fork}
- info[mirrors]=
- info[archive_filename]='@{pkg_name}-@{version}'
- info[archive_dirname]='@{pkg_name}-@{version}'
-
- eval `read_package_desc ${fork}`
-
- info[pfx]=`kconfigize ${fork}`
- info[originpfx]=`kconfigize ${info[origin]}`
- if [ -r "packages/${info[origin]}.help" ]; then
- info[originhelp]=`sed 's/^/ /' "packages/${info[origin]}.help"`
- else
- info[originhelp]=" ${info[master]} from ${info[origin]}."
- fi
-
- if [ -n "${info[repository]}" ]; then
- info[vcs]=${info[repository]%% *}
- info[repository_url]=${info[repository]#* }
- fi
- info[versionlocked]=`kconfigize "${info[versionlocked]}"`
-
- versions=`cd packages/${fork} && \
- for f in */version.desc; do [ -r "${f}" ] && echo "${f%/version.desc}"; done`
- versions=`sort_versions ${versions}`
-
- set_iter version ${versions}
- info[all_versions]=${versions}
-
- # If a fork does not define any versions at all ("rolling release"), do not
- # consider it obsolete/experimental unless it is so marked in the fork's
- # description.
- if [ -n "${versions}" ]; then
- only_obsolete=yes
- only_experimental=yes
- do_foreach version check_obsolete_experimental
- info[only_obsolete]=${only_obsolete}
- info[only_experimental]=${only_experimental}
- else
- info[only_obsolete]=${info[obsolete]}
- info[only_experimental]=${info[experimental]}
- fi
-}
-
-enter_version()
-{
- local -A ver_postfix=( \
- [,yes,,]=" (OBSOLETE)" \
- [,,yes,]=" (EXPERIMENTAL)" \
- [,yes,yes,]=" (OBSOLETE,EXPERIMENTAL)" )
- local version="${1}"
-
- eval `read_version_desc ${info[fork]} ${version}`
- info[ver]=${version}
- info[kcfg]=`kconfigize ${version}`
- info[ver_postfix]=${ver_postfix[,${info[obsolete]},${info[experimental]},]}
-}
-
-enter_milestone()
-{
- local ms="${1}"
- local cmp
-
- info[ms]=${ms}
- info[ms_kcfg]=`kconfigize ${ms}`
- if [ -n "${info[ver]}" ]; then
- info[version_cmp_milestone]=`cmp_versions ${info[ver]} ${info[ms]}`
- fi
-}
-
-rm -rf "${config_dir}"
-mkdir -p "${config_dir}"
-
-pkg_all=( `cd packages && \
- ls */package.desc 2>/dev/null | \
- while read f; do [ -r "${f}" ] && echo "${f%/package.desc}"; done | \
- xargs echo` )
-
-msg "Generating package version descriptions"
-debug "Packages: ${pkg_all[@]}"
-
-# We need to group forks of the same package into the same
-# config file. Discover such relationships and only iterate
-# over "master" packages at the top.
-for p in "${pkg_all[@]}"; do
- find_forks "${p}"
-done
-msg "Master packages: ${pkg_masters[@]}"
-
-# Now for each master, create its kconfig file with version
-# definitions.
-for p in "${pkg_masters[@]}"; do
- msg "Generating '${config_dir}/${p}.in'"
- exec >"${config_dir}/${p}.in"
- # Base definitions for the whole config file
- info=( \
- [master]=${p} \
- [masterpfx]=`kconfigize ${p}` \
- [nforks]=${pkg_nforks[${p}]} \
- [all_milestones]=${pkg_milestones[${p}]} \
- )
- set_iter fork ${pkg_forks[${p}]}
- set_iter milestone ${pkg_milestones[${p}]}
-
- # TBD check that origins are set for all forks if there is more than one? or is it automatic because of a missing variable check?
- # TBD get rid of the "origin" completely and use just the fork name?
- run_template "${template}"
-done
-msg "Done!"
diff --git a/maintainer/kconfig-choice.template b/maintainer/kconfig-choice.template
new file mode 100644
index 0000000..cfb5285
--- /dev/null
+++ b/maintainer/kconfig-choice.template
@@ -0,0 +1,32 @@
+#
+# DO NOT EDIT! This file is automatically generated.
+#
+
+choice GEN_CHOICE_@@prefix@@
+ bool "@@label@@"
+
+#!foreach choice
+config @@prefix@@_@@choice@@
+ bool "@@choice@@"
+#!foreach dependency
+ @@depline@@
+#!end-foreach
+ help
+#!foreach help
+ @@helpline@@
+#!end-foreach
+
+#!end-foreach
+endchoice
+
+config @@prefix@@
+ string
+#!foreach choice
+ default "@@choice@@" if @@prefix@@_@@choice@@
+#!end-foreach
+
+#!foreach choice
+if @@prefix@@_@@choice@@
+source "config/@@dir@@/@@choice@@.in"
+endif
+#!end-foreach
diff --git a/maintainer/kconfig-menu.template b/maintainer/kconfig-menu.template
new file mode 100644
index 0000000..e079a6b
--- /dev/null
+++ b/maintainer/kconfig-menu.template
@@ -0,0 +1,20 @@
+#
+# DO NOT EDIT! This file is automatically generated.
+#
+
+#!foreach choice
+menuconfig @@prefix@@_@@choice@@
+ bool "@@choice@@"
+#!foreach dependency
+ @@depline@@
+#!end-foreach
+ help
+#!foreach help
+ @@helpline@@
+#!end-foreach
+
+if @@prefix@@_@@choice@@
+source "config/@@dir@@/@@choice@@.in"
+endif
+
+#!end-foreach