rt: librt-* librt
pthread: libpthread-* libpthread
stdcpp: libstdc++
+ thread_db: libthread-db
gcc: libgcc_s
ssp: libssp
gfortran: libgfortran
gdbserver: gdbserver
"
+OVERWRITE_CONFIG=""
test_c() {
cat <<-EOT | "${CC:-false}" $CFLAGS -o /dev/null -x c - 2>/dev/null
local mksubtarget
local target="$("$CC" $CFLAGS -dumpmachine)"
+ local version="$("$CC" $CFLAGS -dumpversion)"
local cpuarch="${target%%-*}"
- local prefix="${CC##*/}"; prefix="${prefix%-*}-"
+
+ # get CC; strip version; strip gcc and add - suffix
+ local prefix="${CC##*/}"; prefix="${prefix%-$version}"; prefix="${prefix%-*}-"
local config="${0%/scripts/*}/.config"
# if no target specified, print choice list and exit
fi
# bail out if there is a .config already
- if [ -f "${0%/scripts/*}/.config" ]; then
- echo "There already is a .config file, refusing to overwrite!" >&2
- return 1
+ if [ -f "$config" ]; then
+ if [ "$OVERWRITE_CONFIG" == "" ]; then
+ echo "There already is a .config file, refusing to overwrite!" >&2
+ return 1
+ else
+ echo "There already is a .config file, trying to overwrite!"
+ fi
fi
case "$mktarget" in */*)
mktarget="${mktarget%/*}"
;; esac
+ if [ ! -f "$config" ]; then
+ touch "$config"
+ fi
- echo "CONFIG_TARGET_${mktarget}=y" > "$config"
+ echo "CONFIG_TARGET_${mktarget}=y" >> "$config"
if [ -n "$mksubtarget" ]; then
echo "CONFIG_TARGET_${mktarget}_${mksubtarget}=y" >> "$config"
echo "CONFIG_TOOLCHAIN_PREFIX=\"$prefix\"" >> "$config"
echo "CONFIG_TARGET_NAME=\"$target\"" >> "$config"
- if [ "$LIBC_TYPE" != glibc ]; then
- echo "CONFIG_TOOLCHAIN_LIBC=\"$LIBC_TYPE\"" >> "$config"
+ if [ -f "$config" ]; then
+ sed -i '/CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL/d' "$config"
+ sed -i '/CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC/d' "$config"
+ fi
+
+ if [ "$LIBC_TYPE" == glibc ]; then
+ echo "CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC=y" >> "$config"
+ elif [ "$LIBC_TYPE" == musl ]; then
+ echo "CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL=y" >> "$config"
+ else
+ echo "Can't detect LIBC type. Aborting!" >&2
+ return 1
fi
local lib
}
probe_libc() {
+ if [ -f $TOOLCHAIN/info.mk ]; then
+ LIBC_TYPE=$(grep LIBC_TYPE $TOOLCHAIN/info.mk | sed 's/LIBC_TYPE=//')
+ return 0
+ fi
+
+ echo "Warning! Can't find info.mk, trying to detect with alternative way."
+
if [ -z "$LIBC_TYPE" ]; then
if test_uclibc; then
LIBC_TYPE="uclibc"
exit $?
;;
+ --overwrite-config)
+ OVERWRITE_CONFIG=y
+ ;;
+
--config)
if probe_cc; then
+ probe_libc
print_config "$1"
exit $?
fi
echo -e " Most commands also take a --cflags parameter which " >&2
echo -e " is used to specify C flags to be passed to the " >&2
echo -e " cross compiler when performing tests." >&2
- echo -e " This paremter may be repeated multiple times." >&2
+ echo -e " This parameter may be repeated multiple times." >&2
+ echo -e " Use --overwrite-config before --config to overwrite" >&2
+ echo -e " an already present config with the required changes.">&2
exit 1
;;