diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index eecaacbd6fea..ad4adaee5e29 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -728,12 +728,7 @@ stdenvNoCC.mkDerivation { '' # GCC NG friendly libc++ + optionalString (libcxx != null && libcxx.isGNU or false) '' - for dir in ${getDev libcxx}/include/c++/*; do - echo "-isystem $dir" >> $out/nix-support/libcxx-cxxflags - done - for dir in ${getDev libcxx}/include/c++/*/${targetPlatform.config}; do - echo "-isystem $dir" >> $out/nix-support/libcxx-cxxflags - done + echo "-isystem ${getDev libcxx}/include" >> $out/nix-support/libcxx-cxxflags '' ## diff --git a/pkgs/development/compilers/gcc/ng/15/gcc/custom-threading-model.patch b/pkgs/development/compilers/gcc/ng/15/gcc/custom-threading-model.patch deleted file mode 100644 index fb82e194263f..000000000000 --- a/pkgs/development/compilers/gcc/ng/15/gcc/custom-threading-model.patch +++ /dev/null @@ -1,162 +0,0 @@ -From 46280d27a5c96b2efa7a61f49ee8dc14f7e10d0c Mon Sep 17 00:00:00 2001 -From: John Ericson -Date: Sun, 22 Aug 2021 01:14:22 -0400 -Subject: [PATCH] Factor out thread model detection with `GCC_AC_THREAD_MODEL` -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This macro deduplicates the - - $CC -v 2>&1 | sed -n 's/^Thread model: //p' - -check that was occurring in various runtime libs. - -Additionally, as a bit of an Easter egg, this also allows overriding -what the compiler would return by setting the -`gcc_cv_target_thread_file` cache variable first. I admit that it is in -fact this Easter egg that led me to write the patch. The use-case for it -is for making multilib builds where the library sets do not all share -the same thread model easier. See also `THREAD_MODEL_SPEC` for more -about the varying thread models use-case. - -Arguably one could could try to define on `THREAD_MODEL_SPEC` on more -platforms (besides e.g. AIX) but the ramifications of this are a bit -unclear. Setting `gcc_cv_target_thread_file` directly is a "low tech" -solution that will work for now for sure. Of course, since setting a -cache variable like this a hacky trick, I will not expect this to be at -all stable/guaranteed to work, going forward. - -Thanks to Arsen who on IRC discussed these things with me, including in -particular making it a cache var not `--with-model` flag, to not -prematurely foster expectations that this is stable. - -Suggested-by: Arsen Arsenović ---- - config/gthr.m4 | 23 +++++++++++++++++++++++ - libatomic/configure.ac | 4 +--- - libgcc/configure.ac | 4 +--- - libphobos/m4/druntime/os.m4 | 2 +- - libstdc++-v3/acinclude.m4 | 8 +++----- - 5 files changed, 29 insertions(+), 12 deletions(-) - -diff --git a/config/gthr.m4 b/config/gthr.m4 -index 11996247f15..e8fac4a5721 100644 ---- a/config/gthr.m4 -+++ b/config/gthr.m4 -@@ -5,6 +5,26 @@ dnl Public License, this file may be distributed as part of a program - dnl that contains a configuration script generated by Autoconf, under - dnl the same distribution terms as the rest of that program. - -+dnl Define thread model -+ -+dnl usage: GCC_AC_THREAD_MODEL -+AC_DEFUN([GCC_AC_THREAD_MODEL], -+[ -+# Specify the threading model for this GCC runtime library -+# Pass with no value to take from compiler's metadata -+# Pass with a value to specify a thread package -+# 'single' means single threaded -- without threads. -+AC_CACHE_CHECK([for the threading model used by GCC], [gcc_cv_target_thread_file], [ -+ # Set new cache variable -+ gcc_cv_target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` -+]) -+# Set variable name (not prefixed enough to be a good cache variable -+# name) traditionally used for this purpose, to avoid having to change -+# a bunch of configure scripts. -+target_thread_file="$gcc_cv_target_thread_file" -+]) -+ -+ - dnl Define header location by thread model - - dnl usage: GCC_AC_THREAD_HEADER([thread_model]) -@@ -23,6 +43,9 @@ case $1 in - vxworks) thread_header=config/gthr-vxworks.h ;; - win32) thread_header=config/i386/gthr-win32.h ;; - mcf) thread_header=config/i386/gthr-mcf.h ;; -+ *) -+ AC_MSG_ERROR([No known header for threading model '$1'.]) -+ ;; - esac - AC_SUBST(thread_header) - ]) -diff --git a/libatomic/configure.ac b/libatomic/configure.ac -index aafae71028d..a1aa3bdf69f 100644 ---- a/libatomic/configure.ac -+++ b/libatomic/configure.ac -@@ -162,9 +162,7 @@ libtool_VERSION=3:0:2 - AC_SUBST(libtool_VERSION) - - # Check for used threading-model --AC_MSG_CHECKING([for thread model used by GCC]) --target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` --AC_MSG_RESULT([$target_thread_file]) -+GCC_AC_THREAD_MODEL - - case "$target" in - *aarch64*) -diff --git a/libgcc/configure.ac b/libgcc/configure.ac -index 85e4f1bc48b..d44493f9653 100644 ---- a/libgcc/configure.ac -+++ b/libgcc/configure.ac -@@ -305,9 +305,7 @@ AC_SUBST([use_tm_clone_registry]) - - AC_LIB_PROG_LD_GNU - --AC_MSG_CHECKING([for thread model used by GCC]) --target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` --AC_MSG_RESULT([$target_thread_file]) -+GCC_AC_THREAD_MODEL - - # Check for assembler CFI support. - AC_CACHE_CHECK([whether assembler supports CFI directives], [libgcc_cv_cfi], -diff --git a/libphobos/m4/druntime/os.m4 b/libphobos/m4/druntime/os.m4 -index ef8ca434407..7bb91362dbe 100644 ---- a/libphobos/m4/druntime/os.m4 -+++ b/libphobos/m4/druntime/os.m4 -@@ -32,7 +32,7 @@ case $1 in - # TODO: These targets need porting. - dce|mipssde|rtems|tpf|vxworks) - DCFG_THREAD_MODEL="Single" ;; -- *) as_fn_error "Thread implementation '$1' not recognised" "$LINENO" 5 ;; -+ *) AC_MSG_ERROR([Thread implementation '$1' not recognised]) ;; - esac - AC_SUBST(DCFG_THREAD_MODEL) - ]) -diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 -index a0094c2dd95..66fc3abe4fd 100644 ---- a/libstdc++-v3/acinclude.m4 -+++ b/libstdc++-v3/acinclude.m4 -@@ -4345,9 +4345,7 @@ dnl Substs: - dnl thread_header - dnl - AC_DEFUN([GLIBCXX_ENABLE_THREADS], [ -- AC_MSG_CHECKING([for thread model used by GCC]) -- target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'` -- AC_MSG_RESULT([$target_thread_file]) -+ GCC_AC_THREAD_MODEL - GCC_AC_THREAD_HEADER([$target_thread_file]) - ]) - -@@ -4357,7 +4355,8 @@ dnl Check if gthread implementation defines the types and functions - dnl required by the c++0x thread library. Conforming gthread - dnl implementations can define __GTHREADS_CXX0X to enable use with c++0x. - dnl --dnl GLIBCXX_ENABLE_SYMVERS must be done before this. -+dnl GLIBCXX_ENABLE_SYMVERS and GLIBCXX_ENABLE_THREADS must be done -+dnl before this. - dnl - AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [ - GLIBCXX_ENABLE(libstdcxx-threads,auto,,[enable C++11 threads support]) -@@ -4372,7 +4371,6 @@ AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [ - CXXFLAGS="$CXXFLAGS -fno-exceptions \ - -I${toplevel_srcdir}/libgcc -I${toplevel_builddir}/libgcc" - -- target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'` - case $target_thread_file in - posix) - CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS" --- -2.47.2 - diff --git a/pkgs/development/compilers/gcc/ng/15/libgcc/force-regular-dirs.patch b/pkgs/development/compilers/gcc/ng/15/libgcc/force-regular-dirs.patch new file mode 100644 index 000000000000..c67f2f4498ea --- /dev/null +++ b/pkgs/development/compilers/gcc/ng/15/libgcc/force-regular-dirs.patch @@ -0,0 +1,49 @@ +From bb3277895d3bd77bcacb7c489ebb1390478bbc12 Mon Sep 17 00:00:00 2001 +From: John Ericson +Date: Thu, 17 Jul 2025 11:00:07 -0400 +Subject: [PATCH 2/2] Force regular dirs + +Override directories in libgcc so they are normal $out/lib and +$dev/include. This is not suitable for upstreaming, but is done on top +of a different patch which is, and which makes this smaller. + +--- + libgcc/Makefile.in | 6 +++--- + libgcc/configure.ac | 3 --- + 2 files changed, 3 insertions(+), 6 deletions(-) + +diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in +index 4661c36703d..986cd035148 100644 +--- a/libgcc/Makefile.in ++++ b/libgcc/Makefile.in +@@ -202,10 +202,10 @@ STRIP = @STRIP@ + STRIP_FOR_TARGET = $(STRIP) + + # Used to install the shared libgcc. +-slibdir = @slibdir@ ++slibdir = $(libdir) + # Maybe used for DLLs on Windows targets. +-toolexecdir = @toolexecdir@ +-toolexeclibdir = @toolexeclibdir@ ++toolexecdir = $(bindir) ++toolexeclibdir = $(libdir) + + export AR_FOR_TARGET + export AR_CREATE_FOR_TARGET +diff --git a/libgcc/configure.ac b/libgcc/configure.ac +index 5fdac5d95f2..89044cb65c9 100644 +--- a/libgcc/configure.ac ++++ b/libgcc/configure.ac +@@ -479,9 +479,6 @@ if test x"$enable_as_accelerator_for" != x; then + accel_dir_suffix=/accel/${target_noncanonical} + real_host_noncanonical=${enable_as_accelerator_for} + fi +-# Directory in which the compiler finds libraries etc. +-libdir=${orig_libdir}/gcc/${real_host_noncanonical}/'$(version)'${accel_dir_suffix} +-includedir=${libdir}/include + + if test x"$enable_offload_targets" != x; then + extra_parts="${extra_parts} crtoffloadbegin.o crtoffloadend.o" +-- +2.47.2 + diff --git a/pkgs/development/compilers/gcc/ng/15/libgfortran/force-regular-dirs.patch b/pkgs/development/compilers/gcc/ng/15/libgfortran/force-regular-dirs.patch new file mode 100644 index 000000000000..fc7b69ea6e6e --- /dev/null +++ b/pkgs/development/compilers/gcc/ng/15/libgfortran/force-regular-dirs.patch @@ -0,0 +1,53 @@ +From 7a0c8ca8872a73c6886940448ba9b3203b13268d Mon Sep 17 00:00:00 2001 +From: John Ericson +Date: Mon, 21 Jul 2025 11:42:13 -0400 +Subject: [PATCH] libgfortran: Force regular include/lib dir + +--- + libgfortran/Makefile.am | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) + +diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am +index 21b35c76a06..3d38cde5b42 100644 +--- a/libgfortran/Makefile.am ++++ b/libgfortran/Makefile.am +@@ -42,14 +42,13 @@ extra_darwin_ldflags_libgfortran += -Wc,-nodefaultrpaths + extra_darwin_ldflags_libgfortran += -Wl,-rpath,@loader_path + endif + +-gfor_c_HEADERS = ISO_Fortran_binding.h +-gfor_cdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include ++include_HEADERS = ISO_Fortran_binding.h + + LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) \ + $(lt_host_flags) + +-toolexeclib_LTLIBRARIES = libgfortran.la +-toolexeclib_DATA = libgfortran.spec ++lib_LTLIBRARIES = libgfortran.la ++toolexeclib_DATA = libgfortran.spec # needs "exec" in name + libgfortran_la_LINK = $(LINK) $(libgfortran_la_LDFLAGS) + libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` \ + $(LTLDFLAGS) $(LIBQUADLIB) ../libbacktrace/libbacktrace.la \ +@@ -58,16 +57,14 @@ libgfortran_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` + $(version_arg) -Wc,-shared-libgcc + libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP) + +-cafexeclib_LTLIBRARIES = libcaf_single.la +-cafexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR) ++lib_LTLIBRARIES += libcaf_single.la + libcaf_single_la_SOURCES = caf/single.c + libcaf_single_la_LDFLAGS = -static + libcaf_single_la_DEPENDENCIES = caf/libcaf.h + libcaf_single_la_LINK = $(LINK) $(libcaf_single_la_LDFLAGS) + + if IEEE_SUPPORT +-fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude +-nodist_finclude_HEADERS = ieee_arithmetic.mod ieee_exceptions.mod ieee_features.mod ++nodist_include_HEADERS = ieee_arithmetic.mod ieee_exceptions.mod ieee_features.mod + endif + + ## io.h conflicts with a system header on some platforms, so +-- +2.47.2 + diff --git a/pkgs/development/compilers/gcc/ng/15/libssp/force-regular-dirs.patch b/pkgs/development/compilers/gcc/ng/15/libssp/force-regular-dirs.patch new file mode 100644 index 000000000000..4b15c9a1d8b0 --- /dev/null +++ b/pkgs/development/compilers/gcc/ng/15/libssp/force-regular-dirs.patch @@ -0,0 +1,30 @@ +From e7dac0e90f3e4363d858a6f147d7cc4f62815dd6 Mon Sep 17 00:00:00 2001 +From: John Ericson +Date: Fri, 18 Jul 2025 16:54:17 -0400 +Subject: [PATCH 3/3] Force regular dirs + +Override directories in libssp so they are normal $out/lib and +$dev/include. This is not suitable for upstreaming, but is done on top +of a different patch which is, and which makes this smaller. +--- + libssp/configure.ac | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/libssp/configure.ac b/libssp/configure.ac +index 5b9fa4fbecc..f1723dc33ce 100644 +--- a/libssp/configure.ac ++++ b/libssp/configure.ac +@@ -207,10 +207,6 @@ esac + AC_SUBST(toolexecdir) + AC_SUBST(toolexeclibdir) + +-# Directory in which the compiler finds libraries etc. +-libdir='$(toolexeclibdir)' +-includedir=${orig_libdir}/gcc/${host_noncanonical}/'$(version)/include' +- + if test ${multilib} = yes; then + multilib_arg="--enable-multilib" + else +-- +2.47.2 + diff --git a/pkgs/development/compilers/gcc/ng/15/libstdcxx/force-regular-dirs.patch b/pkgs/development/compilers/gcc/ng/15/libstdcxx/force-regular-dirs.patch new file mode 100644 index 000000000000..e80cffdce1e7 --- /dev/null +++ b/pkgs/development/compilers/gcc/ng/15/libstdcxx/force-regular-dirs.patch @@ -0,0 +1,120 @@ +From db427c55334dd2edc11397d3a92d55dc9c06d1c3 Mon Sep 17 00:00:00 2001 +From: John Ericson +Date: Sun, 20 Jul 2025 14:20:00 -0400 +Subject: [PATCH] libstdc++: Force regular include/lib dir + +Delete a bunch of unneeded logic to do this. +--- + libstdc++-v3/acinclude.m4 | 80 ++------------------------------ + libstdc++-v3/include/Makefile.am | 2 +- + 2 files changed, 4 insertions(+), 78 deletions(-) + +diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 +index a0094c2dd95..a0718dff394 100644 +--- a/libstdc++-v3/acinclude.m4 ++++ b/libstdc++-v3/acinclude.m4 +@@ -727,85 +727,11 @@ dnl + dnl This logic must match gcc/configure.ac's setting of gcc_gxx_include_dir. + dnl config/gxx-include-dir.m4 must be kept consistant with this as well. + AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [ +- glibcxx_toolexecdir=no +- glibcxx_toolexeclibdir=no ++ glibcxx_toolexecdir='$(libdir)' ++ glibcxx_toolexeclibdir='$(libdir)' ++ gxx_include_dir='$(includedir)' + glibcxx_prefixdir=$prefix + +- AC_MSG_CHECKING([for gxx-include-dir]) +- AC_ARG_WITH([gxx-include-dir], +- AC_HELP_STRING([--with-gxx-include-dir=DIR], +- [installation directory for include files]), +- [case "$withval" in +- yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;; +- no) gxx_include_dir=no ;; +- *) gxx_include_dir=$withval ;; +- esac], +- [gxx_include_dir=no]) +- AC_MSG_RESULT($gxx_include_dir) +- +- AC_MSG_CHECKING([for --enable-version-specific-runtime-libs]) +- AC_ARG_ENABLE([version-specific-runtime-libs], +- AC_HELP_STRING([--enable-version-specific-runtime-libs], +- [Specify that runtime libraries should be installed in a compiler-specific directory]), +- [case "$enableval" in +- yes) version_specific_libs=yes ;; +- no) version_specific_libs=no ;; +- *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);; +- esac], +- [version_specific_libs=no]) +- AC_MSG_RESULT($version_specific_libs) +- +- GCC_WITH_TOOLEXECLIBDIR +- +- # Default case for install directory for include files. +- if test $version_specific_libs = no && test $gxx_include_dir = no; then +- gxx_include_dir='include/c++/${gcc_version}' +- if test -n "$with_cross_host" && +- test x"$with_cross_host" != x"no"; then +- gxx_include_dir='${prefix}/${target_alias}/'"$gxx_include_dir" +- else +- gxx_include_dir='${prefix}/'"$gxx_include_dir" +- fi +- fi +- +- # Version-specific runtime libs processing. +- if test $version_specific_libs = yes; then +- # Need the gcc compiler version to know where to install libraries +- # and header files if --enable-version-specific-runtime-libs option +- # is selected. FIXME: these variables are misnamed, there are +- # no executables installed in _toolexecdir or _toolexeclibdir. +- if test x"$gxx_include_dir" = x"no"; then +- gxx_include_dir='${libdir}/gcc/${host_alias}/${gcc_version}/include/c++' +- fi +- glibcxx_toolexecdir='${libdir}/gcc/${host_alias}' +- glibcxx_toolexeclibdir='${toolexecdir}/${gcc_version}$(MULTISUBDIR)' +- fi +- +- # Calculate glibcxx_toolexecdir, glibcxx_toolexeclibdir +- # Install a library built with a cross compiler in tooldir, not libdir. +- if test x"$glibcxx_toolexecdir" = x"no"; then +- if test -n "$with_cross_host" && +- test x"$with_cross_host" != x"no"; then +- glibcxx_toolexecdir='${exec_prefix}/${host_alias}' +- case ${with_toolexeclibdir} in +- no) +- glibcxx_toolexeclibdir='${toolexecdir}/lib' +- ;; +- *) +- glibcxx_toolexeclibdir=${with_toolexeclibdir} +- ;; +- esac +- else +- glibcxx_toolexecdir='${libdir}/gcc/${host_alias}' +- glibcxx_toolexeclibdir='${libdir}' +- fi +- multi_os_directory=`$CXX -print-multi-os-directory` +- case $multi_os_directory in +- .) ;; # Avoid trailing /. +- *) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;; +- esac +- fi +- + AC_MSG_CHECKING([for install location]) + AC_MSG_RESULT($gxx_include_dir) + +diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am +index 537774c2668..c0bfeb43b44 100644 +--- a/libstdc++-v3/include/Makefile.am ++++ b/libstdc++-v3/include/Makefile.am +@@ -1048,7 +1048,7 @@ endif + + host_srcdir = ${glibcxx_srcdir}/$(OS_INC_SRCDIR) + host_builddir = ./${host_alias}/bits +-host_installdir = ${gxx_include_dir}/${host_alias}$(MULTISUBDIR)/bits ++host_installdir = ${gxx_include_dir}/bits + host_headers = \ + ${host_srcdir}/ctype_base.h \ + ${host_srcdir}/ctype_inline.h \ +-- +2.47.2 + diff --git a/pkgs/development/compilers/gcc/ng/common/libatomic/default.nix b/pkgs/development/compilers/gcc/ng/common/libatomic/default.nix index ab5632313b76..49fef931007a 100644 --- a/pkgs/development/compilers/gcc/ng/common/libatomic/default.nix +++ b/pkgs/development/compilers/gcc/ng/common/libatomic/default.nix @@ -5,35 +5,81 @@ release_version, version, getVersionFile, - autoreconfHook269, monorepoSrc ? null, + fetchpatch, + autoreconfHook269, runCommand, }: stdenv.mkDerivation (finalAttrs: { pname = "libatomic"; inherit version; - src = monorepoSrc; + src = runCommand "libatomic-src-${version}" { src = monorepoSrc; } '' + runPhase unpackPhase + + mkdir -p "$out/gcc" + cp gcc/BASE-VER "$out/gcc" + cp gcc/DATESTAMP "$out/gcc" + + cp -r libatomic "$out" + + cp -r config "$out" + cp -r multilib.am "$out" + cp -r libtool.m4 "$out" + + cp config.guess "$out" + cp config.rpath "$out" + cp config.sub "$out" + cp config-ml.in "$out" + cp ltmain.sh "$out" + cp install-sh "$out" + cp mkinstalldirs "$out" + + [[ -f MD5SUMS ]]; cp MD5SUMS "$out" + ''; patches = [ - (getVersionFile "gcc/custom-threading-model.patch") + (fetchpatch { + name = "custom-threading-model.patch"; + url = "https://inbox.sourceware.org/gcc-patches/20250716204545.1063669-1-git@JohnEricson.me/raw"; + hash = "sha256-kxNntY2r4i/+XHQSpf9bYV2Jg+FD/pD5TiMn5hd4ckk="; + includes = [ + "config/*" + "libatomic/*" + ]; + }) ]; + postUnpack = '' + mkdir -p ./build + buildRoot=$(readlink -e "./build") + ''; + + preAutoreconf = '' + sourceRoot=$(readlink -e "./libatomic") + cd $sourceRoot + ''; + enableParallelBuilding = true; nativeBuildInputs = [ autoreconfHook269 ]; - postPatch = '' - sourceRoot=$(readlink -e "./libatomic") - ''; + configurePlatforms = [ + "build" + "host" + ]; + + configureFlags = [ + "--disable-dependency-tracking" + "cross_compiling=true" + "--disable-multilib" + ]; preConfigure = '' - mkdir ../build - cd ../build + cd "$buildRoot" configureScript=$sourceRoot/configure - chmod +x "$configureScript" ''; doCheck = true; diff --git a/pkgs/development/compilers/gcc/ng/common/libgcc/default.nix b/pkgs/development/compilers/gcc/ng/common/libgcc/default.nix index 907534c8f6f8..a1372a69e123 100644 --- a/pkgs/development/compilers/gcc/ng/common/libgcc/default.nix +++ b/pkgs/development/compilers/gcc/ng/common/libgcc/default.nix @@ -6,6 +6,7 @@ version, getVersionFile, monorepoSrc ? null, + fetchpatch, autoreconfHook269, buildGccPackages, buildPackages, @@ -37,7 +38,32 @@ stdenv.mkDerivation (finalAttrs: { ]; patches = [ - (getVersionFile "gcc/custom-threading-model.patch") + (fetchpatch { + name = "delete-MACHMODE_H.patch"; + url = "https://github.com/gcc-mirror/gcc/commit/493aae4b034d62054d5e7e54dc06cd9a8be54e29.diff"; + hash = "sha256-oEk0lnI96RlpALWpb7J+GnrtgQsFVqDO57I/zjiqqTk="; + }) + (fetchpatch { + name = "custom-threading-model.patch"; + url = "https://inbox.sourceware.org/gcc-patches/20250716204545.1063669-1-git@JohnEricson.me/raw"; + hash = "sha256-NgiC4cFeFInXXg27me1XpSeImPaL0WHs50Tf1YHz4ps="; + }) + (fetchpatch { + name = "libgcc.mvars-less-0.patch"; + url = "https://inbox.sourceware.org/gcc-patches/20250716234028.1153560-1-John.Ericson@Obsidian.Systems/raw"; + hash = "sha256-NEcieDCsy+7IRU3qQKVD3i57OuwGZKB/rmNF8X2I1n0="; + }) + (fetchpatch { + name = "libgcc.mvars-less-1.patch"; + url = "https://inbox.sourceware.org/gcc-patches/20250716234028.1153560-2-John.Ericson@Obsidian.Systems/raw"; + hash = "sha256-nfRC4f6m3kHDro4+6E4y1ZPs+prxBQmn0H2rzIjaMWM="; + }) + (fetchpatch { + name = "regular-libdir-includedir.patch"; + url = "https://inbox.sourceware.org/gcc-patches/20250717174911.1536129-1-git@JohnEricson.me/raw"; + hash = "sha256-Cn7rvg1FI7H/26GzSe4pv5VW/gvwbwGqivAqEeawkwk="; + }) + (getVersionFile "libgcc/force-regular-dirs.patch") ]; autoreconfFlags = "--install --force --verbose . libgcc"; @@ -95,7 +121,6 @@ stdenv.mkDerivation (finalAttrs: { tm.h \ options.h \ insn-constants.h \ - insn-modes.h \ version.h ) mkdir -p "$buildRoot/gcc/include" @@ -186,11 +211,7 @@ stdenv.mkDerivation (finalAttrs: { makeFlags = [ "MULTIBUILDTOP:=../" ]; postInstall = '' - cp gthr-default.h "$out/lib/gcc/${stdenv.hostPlatform.config}/${version}/include" - moveToOutput "lib/gcc/${stdenv.hostPlatform.config}/${version}/include" "$dev" - mkdir -p "$out/lib" "$dev/include" - ln -s "$out/lib/gcc/${stdenv.hostPlatform.config}/${version}"/* "$out/lib" - ln -s "$dev/lib/gcc/${stdenv.hostPlatform.config}/${version}/include"/* "$dev/include/" + install -c -m 644 gthr-default.h "$dev/include" ''; doCheck = true; diff --git a/pkgs/development/compilers/gcc/ng/common/libgfortran/default.nix b/pkgs/development/compilers/gcc/ng/common/libgfortran/default.nix index 7e2c5bc4fcd7..5b77efbb4ce2 100644 --- a/pkgs/development/compilers/gcc/ng/common/libgfortran/default.nix +++ b/pkgs/development/compilers/gcc/ng/common/libgfortran/default.nix @@ -5,10 +5,11 @@ gcc_meta, release_version, version, + getVersionFile, monorepoSrc ? null, - buildPackages, autoreconfHook269, libiberty, + buildPackages, libgcc, libbacktrace, }: @@ -32,6 +33,10 @@ stdenv.mkDerivation (finalAttrs: { gfortran ]; + patches = [ + (getVersionFile "libgfortran/force-regular-dirs.patch") + ]; + autoreconfFlags = "--install --force --verbose . libgfortran"; postUnpack = '' @@ -161,6 +166,7 @@ stdenv.mkDerivation (finalAttrs: { "gcc_cv_target_thread_file=single" # $CC cannot link binaries, let alone run then "cross_compiling=true" + "--with-toolexeclibdir=${builtins.placeholder "dev"}/lib" ]; # Set the variable back the way it was, see corresponding code in @@ -171,13 +177,6 @@ stdenv.mkDerivation (finalAttrs: { makeFlags = [ "MULTIBUILDTOP:=../" ]; - postInstall = '' - moveToOutput "lib/gcc/${stdenv.hostPlatform.config}/${version}/include" "$dev" - mkdir -p "$out/lib" "$dev/include" - ln -s "$out/lib/gcc/${stdenv.hostPlatform.config}/${version}"/* "$out/lib" - ln -s "$dev/lib/gcc/${stdenv.hostPlatform.config}/${version}/include"/* "$dev/include/" - ''; - doCheck = true; passthru = { diff --git a/pkgs/development/compilers/gcc/ng/common/libssp/default.nix b/pkgs/development/compilers/gcc/ng/common/libssp/default.nix index 3c4cc19582c5..bcc5d4b9c2e3 100644 --- a/pkgs/development/compilers/gcc/ng/common/libssp/default.nix +++ b/pkgs/development/compilers/gcc/ng/common/libssp/default.nix @@ -4,7 +4,10 @@ gcc_meta, release_version, version, + getVersionFile, monorepoSrc ? null, + fetchpatch, + autoreconfHook269, runCommand, }: stdenv.mkDerivation (finalAttrs: { @@ -20,6 +23,9 @@ stdenv.mkDerivation (finalAttrs: { cp -r libssp "$out" + cp -r config "$out" + cp -r multilib.am "$out" + cp config.guess "$out" cp config.rpath "$out" cp config.sub "$out" @@ -31,23 +37,50 @@ stdenv.mkDerivation (finalAttrs: { [[ -f MD5SUMS ]]; cp MD5SUMS "$out" ''; - sourceRoot = "${finalAttrs.src.name}/libssp"; + outputs = [ + "out" + "dev" + ]; + + patches = [ + (fetchpatch { + name = "regular-libdir-includedir.patch"; + url = "https://inbox.sourceware.org/gcc-patches/20250720172933.2404828-1-git@JohnEricson.me/raw"; + hash = "sha256-W7dcy1Tm3O2reK7kx83DRv8W97qUfaqDbKLiLXIegRw="; + }) + (getVersionFile "libssp/force-regular-dirs.patch") + ]; + + postUnpack = '' + mkdir -p ./build + buildRoot=$(readlink -e "./build") + ''; + + preAutoreconf = '' + sourceRoot=$(readlink -e "./libssp") + cd $sourceRoot + ''; + + enableParallelBuilding = true; + + nativeBuildInputs = [ + autoreconfHook269 + ]; configurePlatforms = [ "build" "host" ]; + configureFlags = [ "--disable-dependency-tracking" - "--with-toolexeclibdir=${builtins.placeholder "out" + "/lib"}" "cross_compiling=true" "--disable-multilib" ]; preConfigure = '' - mkdir ../../build - cd ../../build - configureScript=../$sourceRoot/configure + cd "$buildRoot" + configureScript=$sourceRoot/configure ''; hardeningDisable = [ diff --git a/pkgs/development/compilers/gcc/ng/common/libstdcxx/default.nix b/pkgs/development/compilers/gcc/ng/common/libstdcxx/default.nix index c8fbc047c515..c7108fced4f4 100644 --- a/pkgs/development/compilers/gcc/ng/common/libstdcxx/default.nix +++ b/pkgs/development/compilers/gcc/ng/common/libstdcxx/default.nix @@ -6,25 +6,62 @@ version, getVersionFile, monorepoSrc ? null, - runCommand, + fetchpatch, autoreconfHook269, + runCommand, gettext, }: stdenv.mkDerivation (finalAttrs: { pname = "libstdcxx"; inherit version; - src = monorepoSrc; + src = runCommand "libstdcxx-src-${version}" { src = monorepoSrc; } '' + runPhase unpackPhase - enableParallelBuilding = true; + mkdir -p "$out/gcc" + cp gcc/BASE-VER "$out/gcc" + cp gcc/DATESTAMP "$out/gcc" - nativeBuildInputs = [ - autoreconfHook269 - gettext + mkdir -p "$out/libgcc" + cp libgcc/gthr*.h "$out/libgcc" + cp libgcc/unwind-pe.h "$out/libgcc" + + cp -r libstdc++-v3 "$out" + + cp -r libiberty "$out" + cp -r include "$out" + cp -r contrib "$out" + + cp -r config "$out" + cp -r multilib.am "$out" + + cp config.guess "$out" + cp config.rpath "$out" + cp config.sub "$out" + cp config-ml.in "$out" + cp ltmain.sh "$out" + cp install-sh "$out" + cp mkinstalldirs "$out" + + [[ -f MD5SUMS ]]; cp MD5SUMS "$out" + ''; + + outputs = [ + "out" + "dev" ]; patches = [ - (getVersionFile "gcc/custom-threading-model.patch") + (fetchpatch { + name = "custom-threading-model.patch"; + url = "https://inbox.sourceware.org/gcc-patches/20250716204545.1063669-1-git@JohnEricson.me/raw"; + hash = "sha256-jPP0+MoPLtCwWcW6doO6KHCppwAYK40qNVyriLXcGOg="; + includes = [ + "config/*" + "libstdc++-v3/*" + ]; + }) + (getVersionFile "libstdcxx/force-regular-dirs.patch") ]; postUnpack = '' @@ -37,12 +74,12 @@ stdenv.mkDerivation (finalAttrs: { cd $sourceRoot ''; - postPatch = '' - sed -i \ - -e 's/AM_ENABLE_MULTILIB(/AM_ENABLE_MULTILIB(NOPE/' \ - -e 's#glibcxx_toolexeclibdir=no#glibcxx_toolexeclibdir=${builtins.placeholder "out"}/libexec#' \ - configure.ac - ''; + enableParallelBuilding = true; + + nativeBuildInputs = [ + autoreconfHook269 + gettext + ]; preConfigure = '' cd "$buildRoot" @@ -50,9 +87,13 @@ stdenv.mkDerivation (finalAttrs: { chmod +x "$configureScript" ''; + configurePlatforms = [ + "build" + "host" + ]; + configureFlags = [ "--disable-dependency-tracking" - "--with-toolexeclibdir=${builtins.placeholder "out"}/lib" "gcc_cv_target_thread_file=posix" "cross_compiling=true" "--disable-multilib" @@ -64,16 +105,15 @@ stdenv.mkDerivation (finalAttrs: { "--with-default-libstdcxx-abi=new" ]; - outputs = [ - "out" - "dev" - ]; - hardeningDisable = [ # PATH_MAX "fortify" ]; + postInstall = '' + moveToOutput lib/libstdc++.modules.json "$dev" + ''; + doCheck = true; passthru = { diff --git a/pkgs/development/compilers/gcc/ng/common/patches.nix b/pkgs/development/compilers/gcc/ng/common/patches.nix index d69ec0098fab..81d3be9f68bf 100644 --- a/pkgs/development/compilers/gcc/ng/common/patches.nix +++ b/pkgs/development/compilers/gcc/ng/common/patches.nix @@ -32,9 +32,29 @@ } ]; - # Submitted: https://gcc.gnu.org/pipermail/gcc-patches/2025-July/689429.html - # In Git: https://github.com/Ericson2314/gcc/tree/libgcc-custom-threading-model-15 - "gcc/custom-threading-model.patch" = [ + # In Git: https://github.com/Ericson2314/gcc/tree/regular-dirs-in-libgcc-15 + "libgcc/force-regular-dirs.patch" = [ + { + after = "15"; + path = ../15; + } + ]; + # In Git: https://github.com/Ericson2314/gcc/tree/regular-dirs-in-libssp-15 + "libssp/force-regular-dirs.patch" = [ + { + after = "15"; + path = ../15; + } + ]; + # In Git: https://github.com/Ericson2314/gcc/tree/libstdcxx-force-regular-dirs-15 + "libstdcxx/force-regular-dirs.patch" = [ + { + after = "15"; + path = ../15; + } + ]; + # In Git: https://github.com/Ericson2314/gcc/tree/libgfortran-force-regular-dirs-15 + "libgfortran/force-regular-dirs.patch" = [ { after = "15"; path = ../15;