From 0e5b0cef4e76fe2053dd497ed8f4638471f8c1d5 Mon Sep 17 00:00:00 2001 From: Ralf Hubert Date: Wed, 4 Dec 2024 21:26:55 +0000 Subject: [PATCH 1/4] gcc: add option to disable libada build Libada is the runtime library needed to run ada applications on different systems. It is enabled by default if `ada` is an enabled language. But o build libada a crt0 is needed which is not available if a newlib based toolchain is build, so linking libada failes. Add a switch to disable it in these cases. A separate (bare) runtime must be used for bare metal ada. --- recipes/devel/gcc.yaml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/recipes/devel/gcc.yaml b/recipes/devel/gcc.yaml index 31ac0327..66c8f37a 100644 --- a/recipes/devel/gcc.yaml +++ b/recipes/devel/gcc.yaml @@ -65,7 +65,7 @@ checkoutScript: | buildVars: [AUTOCONF_BUILD, AUTOCONF_HOST, AUTOCONF_TARGET, GCC_TARGET_ABI, GCC_TARGET_ARCH, GCC_TARGET_FLOAT_ABI, GCC_TARGET_FPU, - GCC_MULTILIB, GCC_EXTRA_OPTIONS] + GCC_MULTILIB, GCC_EXTRA_OPTIONS, GCC_ENABLE_LIBADA] buildToolsWeak: [m4] buildScript: | GCC_SRC=$(pwd)/src @@ -82,6 +82,11 @@ buildScript: | { pushd build if [[ $GCC_SRC/configure -nt .configure.stamp ]] ; then + ADDITIONAL_OPTIONS=() + if [[ ${GCC_ENABLE_LIBADA:-yes} == no ]]; then + ADDITIONAL_OPTIONS+=("--disable-libada") + fi + $GCC_SRC/configure \ --build=${AUTOCONF_BUILD} \ --host=${AUTOCONF_HOST:-${AUTOCONF_BUILD}} \ @@ -101,6 +106,7 @@ buildScript: | --disable-documentation \ --disable-debug \ --disable-nls \ + ${ADDITIONAL_OPTIONS[@]} \ --with-xmlto=no \ --with-fop=no \ --with-gmp-include=${BOB_DEP_PATHS[libs::gmp-dev]}/usr/include \ @@ -238,7 +244,7 @@ multiPackage: See https://gcc.gnu.org/install/configure.html for more detauls. buildTools: [binutils] - buildVars: [GCC_LIBC, GCC_ENABLE_LANGUAGES] + buildVars: [GCC_LIBC, GCC_ENABLE_LANGUAGES, GCC_ENABLE_LIBADA] buildScript: | if [[ -z "${GCC_MULTILIB:-}" ]] ; then OPTIONS=( --disable-multilib ) @@ -311,6 +317,9 @@ multiPackage: ADDITIONAL_INSTALL=(install-gnattools) fi makeParallel -C build all-gcc ${ADDITIONAL_MAKE[@]} + if [[ ${GCC_ENABLE_LIBADA:-yes} == no ]]; then + makeParallel -C build/gcc cross-gnattools ada.all.cross + fi makeSequential -C build install-gcc ${ADDITIONAL_INSTALL[@]} DESTDIR="$PWD/install" native: From b06957fd586c8130f75d5a41e7f84e6940651c40 Mon Sep 17 00:00:00 2001 From: Ralf Hubert Date: Wed, 4 Dec 2024 21:42:47 +0000 Subject: [PATCH 2/4] cross-toolchain: add x86_64-unknown-elf-ada --- recipes/devel/cross-toolchain.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/recipes/devel/cross-toolchain.yaml b/recipes/devel/cross-toolchain.yaml index 159eb5b4..d574b30e 100644 --- a/recipes/devel/cross-toolchain.yaml +++ b/recipes/devel/cross-toolchain.yaml @@ -179,6 +179,14 @@ multiPackage: GCC_LIBC: "glibc" GCC_ENABLE_LANGUAGES: "c,c++,ada" + x86_64-unknown-elf-ada: + environment: + AUTOCONF_TARGET: "x86_64-unknown-elf" + ARCH: "x86_64" + GCC_LIBC: "newlib" + GCC_ENABLE_LANGUAGES: "c,c++,ada" + GCC_ENABLE_LIBADA: "no" + # ARMv7 Linux CortexA toolchain with hard floating point arm-linux-gnueabihf: environment: From fd8cba0a234152d2150bf04543e877dbddebc45c Mon Sep 17 00:00:00 2001 From: Ralf Hubert Date: Wed, 4 Dec 2024 21:31:46 +0000 Subject: [PATCH 3/4] gcc: install libbacktrace Having libbacktrace a programm can print out it's own backtrace. --- recipes/devel/gcc.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/recipes/devel/gcc.yaml b/recipes/devel/gcc.yaml index 66c8f37a..bd11df5a 100644 --- a/recipes/devel/gcc.yaml +++ b/recipes/devel/gcc.yaml @@ -65,7 +65,8 @@ checkoutScript: | buildVars: [AUTOCONF_BUILD, AUTOCONF_HOST, AUTOCONF_TARGET, GCC_TARGET_ABI, GCC_TARGET_ARCH, GCC_TARGET_FLOAT_ABI, GCC_TARGET_FPU, - GCC_MULTILIB, GCC_EXTRA_OPTIONS, GCC_ENABLE_LIBADA] + GCC_MULTILIB, GCC_EXTRA_OPTIONS, GCC_ENABLE_LIBADA, + PKG_VERSION] buildToolsWeak: [m4] buildScript: | GCC_SRC=$(pwd)/src @@ -127,6 +128,11 @@ buildScript: | configureGcc "$@" makeParallel -C build makeSequential -C build install DESTDIR="$PWD/install" + + #add libbacktrace + cp build/libbacktrace/.libs/libbacktrace.a \ + install/${GCC_PREFIX:-usr}/lib/gcc/${AUTOCONF_TARGET:-${AUTOCONF_HOST}}/${PKG_VERSION}/ + cp $GCC_SRC/libbacktrace/backtrace.h install/${GCC_PREFIX:-usr}/include } packageScript: | From 6cad7beb59644a8db75f1fe7377cbcb7effdba7b Mon Sep 17 00:00:00 2001 From: Ralf Hubert Date: Wed, 4 Dec 2024 21:46:04 +0000 Subject: [PATCH 4/4] compat-gcc: install libbacktrace --- recipes/devel/compat/gcc.yaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/recipes/devel/compat/gcc.yaml b/recipes/devel/compat/gcc.yaml index cfd92b24..9e62ef92 100644 --- a/recipes/devel/compat/gcc.yaml +++ b/recipes/devel/compat/gcc.yaml @@ -29,7 +29,7 @@ checkoutScript: | buildTools: [host-toolchain, target-toolchain] buildToolsWeak: [m4] buildVars: [AUTOCONF_BUILD, AUTOCONF_HOST, AUTOCONF_TARGET, - GCC_TARGET_ARCH, GCC_TARGET_FLOAT_ABI, GCC_TARGET_FPU] + GCC_TARGET_ARCH, GCC_TARGET_FLOAT_ABI, GCC_TARGET_FPU, PKG_VERSION] buildScript: | GCC_SRC=$1 @@ -79,6 +79,11 @@ buildScript: | makeParallel makeSequential install DESTDIR=${PWD}/../install popd + #add libbacktrace + cp build/libbacktrace/.libs/libbacktrace.a \ + install/${GCC_PREFIX:-usr}/lib/gcc/${AUTOCONF_TARGET:-${AUTOCONF_HOST}}/${PKG_VERSION}/ + cp $GCC_SRC/libbacktrace/backtrace.h install/${GCC_PREFIX:-usr}/include + } packageScript: |