aboutsummaryrefslogtreecommitdiff
path: root/scripts/build
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build')
-rw-r--r--scripts/build/arch/rx.sh5
-rw-r--r--scripts/build/arch/sh.sh38
-rw-r--r--scripts/build/cc/gcc.sh9
-rw-r--r--scripts/build/companion_libs/100-gmp.sh4
-rw-r--r--scripts/build/companion_libs/220-ncurses.sh4
-rw-r--r--scripts/build/companion_libs/340-picolibc.sh27
-rw-r--r--scripts/build/kernel/hurd.sh71
-rw-r--r--scripts/build/libc/glibc.sh4
-rw-r--r--scripts/build/test_suite/gcc.sh13
9 files changed, 140 insertions, 35 deletions
diff --git a/scripts/build/arch/rx.sh b/scripts/build/arch/rx.sh
new file mode 100644
index 00000000..88bdb5f4
--- /dev/null
+++ b/scripts/build/arch/rx.sh
@@ -0,0 +1,5 @@
+# Compute RX values
+
+CT_DoArchTupleValues() {
+ :;
+}
diff --git a/scripts/build/arch/sh.sh b/scripts/build/arch/sh.sh
index 8339b940..6fe2e9e5 100644
--- a/scripts/build/arch/sh.sh
+++ b/scripts/build/arch/sh.sh
@@ -5,7 +5,7 @@ CT_DoArchTupleValues () {
# like 'sheb-unknown-elf' even though GCC does. So keep the tuple just sh-*-elf
# unless user wants something specific (either CPU or explicit suffix).
if [ "${CT_ARCH_SH_VARIANT}" != "sh" -o -n "${CT_ARCH_SUFFIX}" ]; then
- CT_TARGET_ARCH="${CT_ARCH_SH_VARIANT}${CT_ARCH_SUFFIX:-${target_endian_eb}}"
+ CT_TARGET_ARCH="${CT_ARCH_SH_VARIANT}${CT_ARCH_SUFFIX:-${CT_ARCH_SH_FLOAT_SUFFIX}${target_endian_eb}}"
fi
# Endianness stuff (uses non-standard CFLAGS). If both are compiled, let the
@@ -17,20 +17,9 @@ CT_DoArchTupleValues () {
# Instead of -m{soft,hard}-float, uses CPU type
CT_ARCH_FLOAT_CFLAG=
- case "${CT_ARCH_SH_VARIANT}" in
- sh3) CT_ARCH_ARCH_CFLAG=-m3;;
- sh4*|sh2*)
- # softfp is not possible for SuperH, no need to test for it.
- case "${CT_ARCH_FLOAT}" in
- hard)
- CT_ARCH_ARCH_CFLAG="-m${CT_ARCH_SH_VARIANT##sh}"
- ;;
- soft)
- CT_ARCH_ARCH_CFLAG="-m${CT_ARCH_SH_VARIANT##sh}-nofpu"
- ;;
- esac
- ;;
- esac
+ if [ "${CT_ARCH_SH_VARIANT}" != "sh" ]; then
+ CT_ARCH_ARCH_CFLAG=-m${CT_ARCH_SH_VARIANT#sh}-${CT_ARCH_SH_FLOAT_SUFFIX#_}
+ fi
}
CT_DoArchMultilibList() {
@@ -47,11 +36,11 @@ CT_DoArchMultilibList() {
# the default CPU configured with --with-cpu (CT_ARCH_CPU).
IFS=,
for x in ${CT_CC_GCC_MULTILIB_LIST}; do
- if [ "${x}" = "${CT_ARCH_SH_VARIANT}" -o "sh${x#m}" = "${CT_ARCH_SH_VARIANT}" ]; then
+ if [ "${x}" = "${CT_ARCH_ARCH_CFLAG#-}" -o "sh${x#m}" = "${CT_ARCH_ARCH_CFLAG#-}" ]; then
CT_DoLog WARN "Ignoring '${x}' in multilib list: it is the default multilib"
continue
fi
- if [ "${x}" = "${CT_ARCH_CPU}" -o "sh${x#m}" = "${CT_ARCH_CPU}" ]; then
+ if [ "${x}" = "${CT_ARCH_CPU}" -o "sh${x#m}" = "${CT_ARCH_CPU}" -o "m${x#sh}" = "${CT_ARCH_CPU}" ]; then
CT_DoLog WARN "Ignoring '${x}' in multilib list: it is the default multilib"
continue
fi
@@ -74,10 +63,7 @@ CT_DoArchMultilibTarget ()
for m in "${multi_flags[@]}"; do
case "${m}" in
- -m4*) newcpu=sh4;;
- -m3*) newcpu=sh3;;
- -m2*) newcpu=sh2;;
- -m1*) newcpu=sh1;;
+ -m[12345]*) newcpu=sh${m#-m}; newcpu=${newcpu/_/-}; newcpu=${newcpu/_/-};;
esac
done
@@ -96,6 +82,7 @@ CT_DoArchMultilibTarget ()
CT_DoArchGlibcAdjustTuple() {
local target_var="${1}"
local target_
+ local newtarget
eval target_=\"\${${target_var}}\"
@@ -106,7 +93,10 @@ CT_DoArchGlibcAdjustTuple() {
# specified, so the only source of default is CT_ARCH_CPU.
# GCC defaults to sh1, but this Glibc cannot compile for it.
if [ -n "${CT_ARCH_CPU}" ]; then
- target_=${target_/#sh-/${CT_ARCH_CPU}-}
+ newtarget=${CT_ARCH_CPU/#m/sh}
+ newtarget=${newtarget/-/_}
+ newtarget=${newtarget/-/_}
+ target_="${newtarget}-${target_#*-}"
CT_DoLog DEBUG "Adjusted target tuple ${target_}"
else
CT_Abort "GNU C library cannot build for sh1 (GCC default). " \
@@ -142,10 +132,10 @@ CT_DoArchGlibcAdjustConfigure() {
# and it would've been handled above. Our last resort: CT_ARCH_CPU
if [ "${#add_args[@]}" = 0 ]; then
case "${CT_ARCH_CPU}" in
- sh[34]*-nofpu)
+ sh[24]a-nofpu | m[24]a-nofpu | sh4-nofpu | m4-nofpu)
add_args+=( "--without-fp" )
;;
- sh[34]*)
+ *)
add_args+=( "--with-fp" )
;;
esac
diff --git a/scripts/build/cc/gcc.sh b/scripts/build/cc/gcc.sh
index 2d57459b..57f5f222 100644
--- a/scripts/build/cc/gcc.sh
+++ b/scripts/build/cc/gcc.sh
@@ -390,7 +390,7 @@ do_gcc_core_backend() {
esac
if [ "${build_libstdcxx}" = "yes" ]; then
- if [ "${CT_CC_GCC_LIBSTDCXX}" = "n" ]; then
+ if [ "x${CT_CC_GCC_LIBSTDCXX}" = "x" ]; then
build_libstdcxx="no"
elif [ "${CT_CC_GCC_LIBSTDCXX}" = "y" ]; then
extra_config+=("--enable-libstdcxx")
@@ -913,6 +913,7 @@ do_cc_for_host() {
final_opts+=( "ldflags=${CT_LDFLAGS_FOR_HOST}" )
final_opts+=( "lang_list=$( cc_gcc_lang_list )" )
final_opts+=( "build_step=gcc_host" )
+ final_opts+=( "extra_cxxflags_for_target=${CT_CC_GCC_LIBSTDCXX_TARGET_CXXFLAGS}" )
if [ "${CT_BUILD_MANUALS}" = "y" ]; then
final_opts+=( "build_manuals=yes" )
fi
@@ -1091,7 +1092,7 @@ do_gcc_backend() {
"") extra_config+=("--disable-libstdcxx-verbose");;
esac
- if [ "${CT_CC_GCC_LIBSTDCXX}" = "n" ]; then
+ if [ "x${CT_CC_GCC_LIBSTDCXX}" = "x" ]; then
extra_config+=(--disable-libstdcxx)
elif [ "${CT_CC_GCC_LIBSTDCXX}" = "y" ]; then
extra_config+=(--enable-libstdcxx)
@@ -1175,6 +1176,10 @@ do_gcc_backend() {
fi
fi
+ if [ "${CT_CC_GCC_ENABLE_DEFAULT_PIE}" = "y" ]; then
+ extra_config+=("--enable-default-pie")
+ fi
+
if [ "${CT_CC_GCC_ENABLE_TARGET_OPTSPACE}" = "y" ] || \
[ "${enable_optspace}" = "yes" ]; then
extra_config+=("--enable-target-optspace")
diff --git a/scripts/build/companion_libs/100-gmp.sh b/scripts/build/companion_libs/100-gmp.sh
index 28deff97..4ecaa721 100644
--- a/scripts/build/companion_libs/100-gmp.sh
+++ b/scripts/build/companion_libs/100-gmp.sh
@@ -122,12 +122,14 @@ do_gmp_backend() {
extra_config+=("--with-pic")
fi
+ cflags+=" ${CT_GMP_EXTRA_CFLAGS}"
+
# GMP's configure script doesn't respect the host parameter
# when not cross-compiling, ie when build == host so set
# CC_FOR_BUILD and CPP_FOR_BUILD.
CT_DoExecLog CFG \
CC_FOR_BUILD="${CT_BUILD}-gcc" \
- CPP_FOR_BUILD="{CT_BUILD}-cpp" \
+ CPP_FOR_BUILD="${CT_BUILD}-cpp" \
CC="${host}-gcc" \
CFLAGS="${cflags} -fexceptions" \
LDFLAGS="${ldflags}" \
diff --git a/scripts/build/companion_libs/220-ncurses.sh b/scripts/build/companion_libs/220-ncurses.sh
index f1fcd1a1..36aadae6 100644
--- a/scripts/build/companion_libs/220-ncurses.sh
+++ b/scripts/build/companion_libs/220-ncurses.sh
@@ -133,6 +133,8 @@ do_ncurses_backend() {
esac
done
+ ncurses_opts+=("--disable-widec")
+
if [ "${CT_NCURSES_NEW_ABI}" != "y" ]; then
ncurses_opts+=("--with-abi-version=5")
fi
@@ -150,6 +152,8 @@ do_ncurses_backend() {
ncurses_opts+=("--with-shared")
fi
+ cflags+=" ${CT_NCURSES_EXTRA_CFLAGS}"
+
CT_DoLog EXTRA "Configuring ncurses"
CT_DoExecLog CFG \
CFLAGS="${cflags}" \
diff --git a/scripts/build/companion_libs/340-picolibc.sh b/scripts/build/companion_libs/340-picolibc.sh
index 35ee0eaa..bef72e0f 100644
--- a/scripts/build/companion_libs/340-picolibc.sh
+++ b/scripts/build/companion_libs/340-picolibc.sh
@@ -26,13 +26,7 @@ do_picolibc_common_install() {
yn_args="IO_C99FMT:io-c99-formats
IO_LL:io-long-long
-REGISTER_FINI:newlib-register-fini
NANO_MALLOC:newlib-nano-malloc
-ATEXIT_DYNAMIC_ALLOC:newlib-atexit-dynamic-alloc
-GLOBAL_ATEXIT:newlib-global-atexit
-LITE_EXIT:lite-exit
-MULTITHREAD:newlib-multithread
-RETARGETABLE_LOCKING:newlib-retargetable-locking
"
for ynarg in $yn_args; do
@@ -48,6 +42,24 @@ RETARGETABLE_LOCKING:newlib-retargetable-locking
fi
done
+ # Check how picolibc wants threading support to be specified
+
+ if grep -q single-thread "${CT_SRC_DIR}/picolibc/meson_options.txt"; then
+ if [ "${CT_LIBC_PICOLIBC_MULTITHREAD}" = "y" ]; then
+ picolibc_opts+=("-Dsingle-thread=false")
+ else
+ picolibc_opts+=("-Dsingle-thread=true")
+ fi
+ else
+ if [ "${CT_LIBC_PICOLIBC_MULTITHREAD}" = "y" ]; then
+ picolibc_opts+=("-Dnewlib-retargetable-locking=true")
+ picolibc_opts+=("-Dnewlib-multithread=true")
+ else
+ picolibc_opts+=("-Dnewlib-retargetable-locking=false")
+ picolibc_opts+=("-Dnewlib-multithread=false")
+ fi
+ fi
+
[ "${CT_LIBC_PICOLIBC_EXTRA_SECTIONS}" = "y" ] && \
CT_LIBC_PICOLIBC_TARGET_CFLAGS="${CT_LIBC_PICOLIBC_TARGET_CFLAGS} -ffunction-sections -fdata-sections"
@@ -157,6 +169,9 @@ do_cc_libstdcxx_picolibc()
if [ "${CT_LIBC_PICOLIBC_ENABLE_TARGET_OPTSPACE}" = "y" ]; then
final_opts+=( "enable_optspace=yes" )
fi
+ if [ -n "${CT_LIBC_PICOLIBC_GCC_LIBSTDCXX_TARGET_CXXFLAGS}" ]; then
+ final_opts+=( "extra_cxxflags_for_target=${CT_LIBC_PICOLIBC_GCC_LIBSTDCXX_TARGET_CXXFLAGS}" )
+ fi
if [ "${CT_BARE_METAL}" = "y" ]; then
final_opts+=( "mode=baremetal" )
diff --git a/scripts/build/kernel/hurd.sh b/scripts/build/kernel/hurd.sh
new file mode 100644
index 00000000..fcda95bc
--- /dev/null
+++ b/scripts/build/kernel/hurd.sh
@@ -0,0 +1,71 @@
+# This file declares functions to install the kernel headers for linux
+# Copyright 2007 Yann E. MORIN
+# Licensed under the GPL v2. See COPYING in the root of this package
+
+CT_DoKernelTupleValues()
+{
+ :
+}
+
+# Download the kernel
+do_kernel_get()
+{
+ CT_Fetch HURD
+ CT_Fetch GNUMACH
+ CT_Fetch MIG
+}
+
+# Extract kernel
+do_kernel_extract()
+{
+ # TBD verify linux_disable_build_relocs is run
+ CT_ExtractPatch HURD
+ CT_ExtractPatch GNUMACH
+ CT_ExtractPatch MIG
+}
+
+# Install kernel headers using headers_install from kernel sources.
+do_kernel_headers()
+{
+ CT_DoStep INFO "Installing kernel headers"
+
+ for component in gnumach mig hurd; do
+ local build_dir="${CT_BUILD_DIR}/${component}"
+ local src_dir="${CT_SRC_DIR}/${component}"
+
+ CT_mkdir_pushd "${build_dir}"
+ CT_DoLog EXTRA "crupest PATH $PATH"
+
+ case ${component} in
+ gnumach)
+ CT_DoLog EXTRA "Installing GNU Mach headers"
+ CT_DoExecLog ALL \
+ ${src_dir}/configure \
+ --host="${CT_TARGET}" \
+ --prefix="/usr"
+ CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" install-data
+ ;;
+ mig)
+ CT_DoLog EXTRA "Installing GNU MIG"
+ CT_DoExecLog ALL \
+ ${src_dir}/configure \
+ --target="${CT_TARGET}" \
+ --prefix="/usr"
+ CT_DoExecLog ALL \
+ make TARGET_CFLAGS="-isysroot ${CT_SYSROOT_DIR}" install
+ ;;
+ hurd)
+ CT_DoLog EXTRA "Installing Hurd headers"
+ CT_DoExecLog ALL \
+ ${src_dir}/configure \
+ --host="${CT_TARGET}" \
+ --prefix="/usr"
+ CT_DoExecLog ALL make prefix="${CT_SYSROOT_DIR}/usr" install-data-local-headers
+ ;;
+ esac
+
+ CT_Popd
+ done
+
+ CT_EndStep
+}
diff --git a/scripts/build/libc/glibc.sh b/scripts/build/libc/glibc.sh
index 34da4cfe..043660c1 100644
--- a/scripts/build/libc/glibc.sh
+++ b/scripts/build/libc/glibc.sh
@@ -182,6 +182,10 @@ glibc_backend_once()
# or even after they get installed...
echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache
+ if [ "${CT_GLIBC_MAKEINFO_WORKAROUND}" = "y" ]; then
+ echo "ac_cv_prog_MAKEINFO=" >>config.cache
+ fi
+
CT_SymlinkToolsMultilib
# Configure with --prefix the way we want it on the target...
diff --git a/scripts/build/test_suite/gcc.sh b/scripts/build/test_suite/gcc.sh
index 6c6e5a72..25eee5ad 100644
--- a/scripts/build/test_suite/gcc.sh
+++ b/scripts/build/test_suite/gcc.sh
@@ -21,8 +21,17 @@ do_test_suite_gcc_build() {
"${CT_SRC_DIR}/gcc/gcc/testsuite" \
"${CT_TEST_SUITE_DIR}/gcc"
- CT_DoExecLog ALL sed -i -r -e "s/@@DG_TARGET@@/${CT_TARGET}/g;" \
- "${CT_TEST_SUITE_DIR}/gcc/Makefile"
+ DG_QEMU_ARGS=`echo "${CT_TEST_SUITE_GCC_QEMU_ARGS}" | sed 's/@SYSROOT@/$(SYSROOT)/'`
+
+ CT_DoExecLog ALL sed -i -r \
+ -e "s/@@DG_TARGET@@/${CT_TARGET}/g" \
+ -e "s/@@DG_SSH@@/${CT_TEST_SUITE_GCC_SSH}/g" \
+ -e "s/@@DG_QEMU@@/${CT_TEST_SUITE_GCC_QEMU}/g" \
+ -e "s/@@DG_TARGET_HOSTNAME@@/${CT_TEST_SUITE_GCC_TARGET_HOSTNAME}/g" \
+ -e "s/@@DG_TARGET_USERNAME@@/${CT_TEST_SUITE_GCC_TARGET_USERNAME}/g" \
+ -e "s/@@DG_QEMU_PROGRAM@@/${CT_TEST_SUITE_GCC_QEMU_PROGRAM}/g" \
+ -e "s/@@DG_QEMU_ARGS@@/${DG_QEMU_ARGS}/g" \
+ "${CT_TEST_SUITE_DIR}/gcc/default.cfg"
CT_EndStep
}