diff options
Diffstat (limited to 'scripts/build')
-rw-r--r-- | scripts/build/arch/rx.sh | 5 | ||||
-rw-r--r-- | scripts/build/arch/sh.sh | 38 | ||||
-rw-r--r-- | scripts/build/cc/gcc.sh | 9 | ||||
-rw-r--r-- | scripts/build/companion_libs/100-gmp.sh | 4 | ||||
-rw-r--r-- | scripts/build/companion_libs/220-ncurses.sh | 4 | ||||
-rw-r--r-- | scripts/build/companion_libs/340-picolibc.sh | 27 | ||||
-rw-r--r-- | scripts/build/kernel/hurd.sh | 71 | ||||
-rw-r--r-- | scripts/build/libc/glibc.sh | 4 | ||||
-rw-r--r-- | scripts/build/test_suite/gcc.sh | 13 |
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 } |