diff --git a/srcpkgs/gcc/patches/ada-shared.patch b/srcpkgs/gcc/patches/ada-shared.patch new file mode 100644 index 00000000000..7b4280620fe --- /dev/null +++ b/srcpkgs/gcc/patches/ada-shared.patch @@ -0,0 +1,28 @@ +--- gcc/ada/link.c ++++ gcc/ada/link.c +@@ -105,9 +105,9 @@ + + #elif defined (__FreeBSD__) + const char *__gnat_object_file_option = "-Wl,@"; +-const char *__gnat_run_path_option = "-Wl,-rpath,"; +-char __gnat_shared_libgnat_default = STATIC; +-char __gnat_shared_libgcc_default = STATIC; ++const char *__gnat_run_path_option = ""; ++char __gnat_shared_libgnat_default = SHARED; ++char __gnat_shared_libgcc_default = SHARED; + int __gnat_link_max = 8192; + unsigned char __gnat_objlist_file_supported = 1; + const char *__gnat_object_library_extension = ".a"; +@@ -127,9 +127,9 @@ + + #elif defined (linux) || defined(__GLIBC__) + const char *__gnat_object_file_option = "-Wl,@"; +-const char *__gnat_run_path_option = "-Wl,-rpath,"; +-char __gnat_shared_libgnat_default = STATIC; +-char __gnat_shared_libgcc_default = STATIC; ++const char *__gnat_run_path_option = ""; ++char __gnat_shared_libgnat_default = SHARED; ++char __gnat_shared_libgcc_default = SHARED; + int __gnat_link_max = 8192; + unsigned char __gnat_objlist_file_supported = 1; + const char *__gnat_object_library_extension = ".a"; diff --git a/srcpkgs/gcc/patches/musl-ada.patch b/srcpkgs/gcc/patches/musl-ada.patch new file mode 100644 index 00000000000..54cd1041a4c --- /dev/null +++ b/srcpkgs/gcc/patches/musl-ada.patch @@ -0,0 +1,181 @@ +diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c +index 3b0aea9..ee0bb69 100644 +--- gcc/ada/adaint.c ++++ gcc/ada/adaint.c +@@ -76,6 +76,11 @@ + #include + #include + #endif ++ ++#if defined (linux) ++#define _GNU_SOURCE 1 ++#include ++#endif + + #ifdef __PikeOS__ + #define __BSD_VISIBLE 1 +@@ -3255,7 +3260,6 @@ __gnat_lwp_self (void) + #endif + + #if defined (__linux__) +-#include + + /* glibc versions earlier than 2.7 do not define the routines to handle + dynamically allocated CPU sets. For these targets, we use the static +@@ -3265,7 +3269,7 @@ __gnat_lwp_self (void) + + /* Dynamic cpu sets */ + +-cpu_set_t * ++void * + __gnat_cpu_alloc (size_t count) + { + return CPU_ALLOC (count); +@@ -3278,33 +3282,33 @@ __gnat_cpu_alloc_size (size_t count) + } + + void +-__gnat_cpu_free (cpu_set_t *set) ++__gnat_cpu_free (void *set) + { +- CPU_FREE (set); ++ CPU_FREE ((cpu_set_t *) set); + } + + void +-__gnat_cpu_zero (size_t count, cpu_set_t *set) ++__gnat_cpu_zero (size_t count, void *set) + { +- CPU_ZERO_S (count, set); ++ CPU_ZERO_S (count, (cpu_set_t *) set); + } + + void +-__gnat_cpu_set (int cpu, size_t count, cpu_set_t *set) ++__gnat_cpu_set (int cpu, size_t count, void *set) + { + /* Ada handles CPU numbers starting from 1, while C identifies the first + CPU by a 0, so we need to adjust. */ +- CPU_SET_S (cpu - 1, count, set); ++ CPU_SET_S (cpu - 1, count, (cpu_set_t *) set); + } + + #else /* !CPU_ALLOC */ + + /* Static cpu sets */ + +-cpu_set_t * ++void * + __gnat_cpu_alloc (size_t count ATTRIBUTE_UNUSED) + { +- return (cpu_set_t *) xmalloc (sizeof (cpu_set_t)); ++ return xmalloc (sizeof (cpu_set_t)); + } + + size_t +@@ -3314,23 +3318,23 @@ __gnat_cpu_alloc_size (size_t count ATTRIBUTE_UNUSED) + } + + void +-__gnat_cpu_free (cpu_set_t *set) ++__gnat_cpu_free (void *set) + { + free (set); + } + + void +-__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) ++__gnat_cpu_zero (size_t count ATTRIBUTE_UNUSED, void *set) + { +- CPU_ZERO (set); ++ CPU_ZERO ((cpu_set_t *) set); + } + + void +-__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, cpu_set_t *set) ++__gnat_cpu_set (int cpu, size_t count ATTRIBUTE_UNUSED, void *set) + { + /* Ada handles CPU numbers starting from 1, while C identifies the first + CPU by a 0, so we need to adjust. */ +- CPU_SET (cpu - 1, set); ++ CPU_SET (cpu - 1, (cpu_set_t *) set); + } + #endif /* !CPU_ALLOC */ + #endif /* __linux__ */ +diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h +index 0d12f7e..a063b47 100644 +--- gcc/ada/adaint.h ++++ gcc/ada/adaint.h +@@ -316,13 +316,11 @@ extern void *__gnat_lwp_self (void); + + /* Routines for interface to required CPU set primitives */ + +-#include +- +-extern cpu_set_t *__gnat_cpu_alloc (size_t); ++extern void * __gnat_cpu_alloc (size_t); + extern size_t __gnat_cpu_alloc_size (size_t); +-extern void __gnat_cpu_free (cpu_set_t *); +-extern void __gnat_cpu_zero (size_t, cpu_set_t *); +-extern void __gnat_cpu_set (int, size_t, cpu_set_t *); ++extern void __gnat_cpu_free (void *); ++extern void __gnat_cpu_zero (size_t, void *); ++extern void __gnat_cpu_set (int, size_t, void *); + #endif + + #if defined (_WIN32) +diff --git a/gcc/ada/terminals.c b/gcc/ada/terminals.c +index 7025f57..207b50d 100644 +--- gcc/ada/terminals.c ++++ gcc/ada/terminals.c +@@ -1108,13 +1108,6 @@ __gnat_setup_winsize (void *desc, int rows, int columns) + #include + #include + +-/* On some system termio is either absent or including it will disable termios +- (HP-UX) */ +-#if !defined (__hpux__) && !defined (BSD) && !defined (__APPLE__) \ +- && !defined (__rtems__) && !defined (__QNXNTO__) +-# include +-#endif +- + #include + #include + #include +diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in +index ebb955e..08cfbee 100644 +--- gcc/ada/gcc-interface/Makefile.in ++++ gcc/ada/gcc-interface/Makefile.in +@@ -1574,7 +1574,7 @@ ifeq ($(strip $(filter-out powerpc% linux%,$(target_cpu) $(target_os))),) + endif + + # ARM linux, GNU eabi +-ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),) ++ifeq ($(strip $(filter-out arm% linux-gnueabi% linux-musleabi% linux-muslgnueabi%,$(target_cpu) $(target_os))),) + LIBGNAT_TARGET_PAIRS = \ + a-intnam.ads - #endif - diff --git a/srcpkgs/gcc/template b/srcpkgs/gcc/template index 08cea7ca852..c023a18fc5a 100644 --- a/srcpkgs/gcc/template +++ b/srcpkgs/gcc/template @@ -64,7 +64,13 @@ if [ "$build_option_gnatboot" ]; then ;; esac fi -if [ -n "$CHROOT_READY" ]; then + +subpackages+=" libstdc++-devel libstdc++ libgcc-devel" +if [ "$build_option_gnatboot" -o "$build_option_ada" ]; then + subpackages+=" gcc-ada libada-devel libada" +fi + +if [ "$CHROOT_READY" ]; then subpackages+=" gcc-fortran libgfortran-devel libgfortran" if [ -z "$CROSS_BUILD" ]; then subpackages+=" gcc-objc gcc-objc++ libobjc-devel libobjc" @@ -77,11 +83,6 @@ if [ -n "$CHROOT_READY" ]; then fi fi -subpackages+=" libstdc++-devel libstdc++ libgcc-devel" -if [ "$build_option_gnatboot" -o "$build_option_ada" ]; then - subpackages+=" gcc-ada libada-devel libada" -fi - case "$XBPS_TARGET_MACHINE" in i686) _triplet="i686-pc-linux-gnu";; i686-musl) _triplet="i686-linux-musl";; @@ -118,9 +119,12 @@ case "$XBPS_TARGET_MACHINE" in x86_64*|i686) subpackages+=" libitm libitm-devel libmpx libmpx-devel";; *) subpackages+=" libitm libitm-devel";; esac -if [ -n "$CROSS_BUILD" ]; then +if [ "$CROSS_BUILD" ]; then hostmakedepends+=" cross-${_triplet}" export GFORTRAN_FOR_TARGET=" ${_triplet}-gfortran" + if [ "$build_option_ada" ]; then + hostmakedepends+=" gcc-ada libada-devel" + fi fi post_extract() { @@ -176,7 +180,7 @@ do_configure() { _langs="c,c++,lto" fi - if [ -n "$CROSS_BUILD" ]; then + if [ "$CROSS_BUILD" ]; then export CC_FOR_TARGET="$CC" export GCC_FOR_TARGET="$CC" export CXX_FOR_TARGET="$CXX"