%{?scl_package:%global scl gcc-toolset-13} %global scl_prefix gcc-toolset-13- BuildRequires: scl-utils-build %global __python /usr/bin/python3 %{?scl:%global __strip %%{_scl_root}/usr/bin/strip} %{?scl:%global __objdump %%{_scl_root}/usr/bin/objdump} %{?scl:%scl_package gcc} %global DATE 20240611 %global gitrev 03b1a31f9807251f378fcecb29c4669eed357eb2 %global gcc_version 13.3.1 %global gcc_major 13 # Note, gcc_release must be integer, if you want to add suffixes to # %%{release}, append them after %%{gcc_release} on Release: line. %global gcc_release 2 %global nvptx_tools_gitrev aa3404ad5a496cda5d79a50bedb1344fd63e8763 %global newlib_cygwin_gitrev 9e09d6ed83cce4777a5950412647ccc603040409 %global mpc_version 1.0.3 %global isl_version 0.24 %global mpfr_version 3.1.4 %global gmp_version 6.1.0 %global doxygen_version 1.8.0 %global _unpackaged_files_terminate_build 0 %if 0%{?fedora} > 27 || 0%{?rhel} > 7 # Until annobin is fixed (#1519165). %undefine _annotated_build %endif # Strip will fail on nvptx-none *.a archives and the brp-* scripts will # fail randomly depending on what is stripped last. %if 0%{?__brp_strip_static_archive:1} %global __brp_strip_static_archive %{__brp_strip_static_archive} || : %endif %if 0%{?__brp_strip_lto:1} %global __brp_strip_lto %{__brp_strip_lto} || : %endif %if 0%{?fedora} < 32 && 0%{?rhel} < 8 %global multilib_64_archs sparc64 ppc64 ppc64p7 x86_64 %else %global multilib_64_archs sparc64 ppc64 ppc64p7 x86_64 %endif %if 0%{?rhel} > 7 %global build_ada 0 %global build_objc 0 %global build_go 0 %global build_d 0 %global build_m2 0 %else %ifarch %{ix86} x86_64 ia64 ppc %{power64} alpha s390x %{arm} aarch64 riscv64 %global build_ada 0 %else %global build_ada 0 %endif %global build_objc 0 %ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %{mips} riscv64 %global build_go 0 %else %global build_go 0 %endif %ifarch %{ix86} x86_64 %{arm} aarch64 %{mips} s390 s390x riscv64 %global build_d 1 %else %global build_d 0 %endif %ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %{mips} riscv64 %global build_m2 1 %else %global build_m2 0 %endif %endif # Only so that rpmbuild doesn't complain on Fedora. %if 0%{?fedora} > 18 %global build_libquadmath 0 %endif %global build_libitm 0 %ifarch %{ix86} x86_64 ia64 ppc ppc64 ppc64le %global build_libquadmath 1 %else %global build_libquadmath 0 %endif %ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %global build_libasan 1 %else %global build_libasan 0 %endif %ifarch x86_64 aarch64 %global build_libhwasan 1 %else %global build_libhwasan 0 %endif %ifarch x86_64 ppc64 ppc64le aarch64 s390x %global build_libtsan 1 %else %global build_libtsan 0 %endif %ifarch x86_64 ppc64 ppc64le aarch64 s390x %global build_liblsan 1 %else %global build_liblsan 0 %endif %ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %global build_libubsan 1 %else %global build_libubsan 0 %endif %ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %{mips} riscv64 %global build_libatomic 1 %else %global build_libatomic 0 %endif %ifarch %{ix86} x86_64 %{arm} alpha ppc ppc64 ppc64le ppc64p7 s390 s390x aarch64 %global build_libitm 1 %else %global build_libitm 0 %endif %if 0%{?rhel} > 8 %global build_isl 0 %else %global build_isl 1 %endif %global build_libstdcxx_docs 1 %ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %{mips} %global attr_ifunc 1 %else %global attr_ifunc 0 %endif %ifarch x86_64 ppc64le %global build_offload_nvptx 1 %else %global build_offload_nvptx 0 %endif %if 0%{?fedora} < 32 && 0%{?rhel} < 8 %ifarch s390x %global multilib_32_arch s390 %endif %endif %ifarch sparc64 %global multilib_32_arch sparcv9 %endif %ifarch ppc64 ppc64p7 %global multilib_32_arch ppc %endif %ifarch x86_64 %global multilib_32_arch i686 %endif %if 0%{?fedora} >= 36 || 0%{?rhel} >= 8 %global build_annobin_plugin 1 %else %global build_annobin_plugin 0 %endif Summary: GCC version %{gcc_major} Name: %{?scl_prefix}gcc Version: %{gcc_version} Release: %{gcc_release}.2%{?dist} # libgcc, libgfortran, libgomp, libstdc++ and crtstuff have # GCC Runtime Exception. License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD # The source for this package was pulled from upstream's vcs. # %%{gitrev} is some commit from the # https://gcc.gnu.org/git/?p=gcc.git;h=refs/vendors/redhat/heads/gcc-%%{gcc_major}-branch # branch. Use the following commands to generate the tarball: # git clone --depth 1 git://gcc.gnu.org/git/gcc.git gcc-dir.tmp # git --git-dir=gcc-dir.tmp/.git fetch --depth 1 origin %%{gitrev} # git --git-dir=gcc-dir.tmp/.git archive --prefix=%%{name}-%%{version}-%%{DATE}/ %%{gitrev} | xz -9e > %%{name}-%%{version}-%%{DATE}.tar.xz # rm -rf gcc-dir.tmp Source0: gcc-%{version}-%{DATE}.tar.xz Source1: https://gcc.gnu.org/pub/gcc/infrastructure/isl-%{isl_version}.tar.bz2 #Source2: http://www.multiprecision.org/mpc/download/mpc-%%{mpc_version}.tar.gz #Source3: ftp://ftp.stack.nl/pub/users/dimitri/doxygen-%%{doxygen_version}.src.tar.gz # The source for nvptx-tools package was pulled from upstream's vcs. Use the # following commands to generate the tarball: # git clone --depth 1 git://github.com/MentorEmbedded/nvptx-tools.git nvptx-tools-dir.tmp # git --git-dir=nvptx-tools-dir.tmp/.git fetch --depth 1 origin %%{nvptx_tools_gitrev} # git --git-dir=nvptx-tools-dir.tmp/.git archive --prefix=nvptx-tools-%%{nvptx_tools_gitrev}/ %%{nvptx_tools_gitrev} | xz -9e > nvptx-tools-%%{nvptx_tools_gitrev}.tar.xz # rm -rf nvptx-tools-dir.tmp Source4: nvptx-tools-%{nvptx_tools_gitrev}.tar.xz # The source for nvptx-newlib package was pulled from upstream's vcs. Use the # following commands to generate the tarball: # git clone git://sourceware.org/git/newlib-cygwin.git newlib-cygwin-dir.tmp # git --git-dir=newlib-cygwin-dir.tmp/.git archive --prefix=newlib-cygwin-%%{newlib_cygwin_gitrev}/ %%{newlib_cygwin_gitrev} ":(exclude)newlib/libc/sys/linux/include/rpc/*.[hx]" | xz -9e > newlib-cygwin-%%{newlib_cygwin_gitrev}.tar.xz # rm -rf newlib-cygwin-dir.tmp Source5: newlib-cygwin-%{newlib_cygwin_gitrev}.tar.xz Source6: libgomp_nonshared.c #Source7: http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-%%{mpfr_version}.tar.bz2 #Source8: http://gcc.gnu.org/pub/gcc/infrastructure/gmp-%%{gmp_version}.tar.bz2 URL: http://gcc.gnu.org # Need binutils with -pie support >= 2.14.90.0.4-4 # Need binutils which can omit dot symbols and overlap .opd on ppc64 >= 2.15.91.0.2-4 # Need binutils which handle -msecure-plt on ppc >= 2.16.91.0.2-2 # Need binutils which support .weakref >= 2.16.91.0.3-1 # Need binutils which support --hash-style=gnu >= 2.17.50.0.2-7 # Need binutils which support mffgpr and mftgpr >= 2.17.50.0.2-8 # Need binutils which support --build-id >= 2.17.50.0.17-3 # Need binutils which support %%gnu_unique_object >= 2.19.51.0.14 # Need binutils which support .cfi_sections >= 2.19.51.0.14-33 # Need binutils which support --no-add-needed >= 2.20.51.0.2-12 # Need binutils which support -plugin # Need binutils which support .loc view >= 2.30 # Need binutils which support --generate-missing-build-notes=yes >= 2.31 BuildRequires: %{?scl_prefix}binutils >= 2.31 BuildRequires: %{?scl_prefix}gdb >= 7.4.50 # While gcc doesn't include statically linked binaries, during testing # -static is used several times. BuildRequires: glibc-static BuildRequires: zlib-devel, gettext, dejagnu, bison, flex, sharutils BuildRequires: texinfo, texinfo-tex, /usr/bin/pod2man #BuildRequires: systemtap-sdt-devel >= 1.3 #BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 3.1.0, libmpc-devel >= 0.8.1 #BuildRequires: python3-devel, /usr/bin/python BuildRequires: gcc, gcc-c++, make %if 0%{?rhel} == 7 BuildRequires: python3 %endif # For VTA guality testing BuildRequires: gdb # Make sure pthread.h doesn't contain __thread tokens # Make sure glibc supports stack protector # Make sure glibc supports DT_GNU_HASH BuildRequires: glibc-devel >= 2.4.90-13 BuildRequires: elfutils-devel >= 0.147 BuildRequires: elfutils-libelf-devel >= 0.147 %if 0%{?rhel} >= 8 BuildRequires: libzstd-devel %endif %ifarch ppc ppc64 ppc64le ppc64p7 s390 s390x sparc sparcv9 alpha # Make sure glibc supports TFmode long double BuildRequires: glibc >= 2.3.90-35 %endif %ifarch %{multilib_64_archs} sparcv9 ppc # Ensure glibc{,-devel} is installed for both multilib arches BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so %endif %ifarch ia64 BuildRequires: libunwind >= 0.98 %endif # Need .eh_frame ld optimizations # Need proper visibility support # Need -pie support # Need --as-needed/--no-as-needed support # On ppc64, need omit dot symbols support and --non-overlapping-opd # Need binutils that owns /usr/bin/c++filt # Need binutils that support .weakref # Need binutils that supports --hash-style=gnu # Need binutils that support mffgpr/mftgpr # Need binutils that support --build-id # Need binutils that support %%gnu_unique_object # Need binutils that support .cfi_sections # Need binutils that support --no-add-needed # Need binutils that support -plugin # Need binutils that support .loc view >= 2.30 # Need binutils which support --generate-missing-build-notes=yes >= 2.31 Requires: %{?scl_prefix}binutils >= 2.22.52.0.1 # Make sure gdb will understand DW_FORM_strp Conflicts: gdb < 5.1-2 Requires: glibc-devel >= 2.2.90-12 %ifarch ppc ppc64 ppc64le ppc64p7 s390 s390x sparc sparcv9 alpha # Make sure glibc supports TFmode long double Requires: glibc >= 2.3.90-35 %endif BuildRequires: gmp-devel >= 4.3.2 BuildRequires: mpfr-devel >= 3.1.0 BuildRequires: libmpc-devel >= 0.8.1 %if %{build_libstdcxx_docs} BuildRequires: libxml2 BuildRequires: graphviz BuildRequires: doxygen >= 1.7.1 BuildRequires: dblatex, texlive-collection-latex, docbook-style-xsl %endif Requires: libgcc >= 4.1.2-43 Requires: libgomp >= 4.4.4-13 # lto-wrapper invokes make Requires: make %{?scl:Requires:%scl_runtime} AutoReq: true # Various libraries are imported. #1859893 asks us to list them all. Provides: bundled(libiberty) Provides: bundled(libbacktrace) Provides: bundled(libffi) Provides: gcc(major) = %{gcc_major} %ifarch sparc64 ppc64 ppc64le s390x x86_64 ia64 aarch64 Provides: liblto_plugin.so.0()(64bit) %else Provides: liblto_plugin.so.0 %endif %global oformat %{nil} %global oformat2 %{nil} %ifarch %{ix86} %global oformat OUTPUT_FORMAT(elf32-i386) %endif %ifarch x86_64 %global oformat OUTPUT_FORMAT(elf64-x86-64) %global oformat2 OUTPUT_FORMAT(elf32-i386) %endif %ifarch ppc %global oformat OUTPUT_FORMAT(elf32-powerpc) %global oformat2 OUTPUT_FORMAT(elf64-powerpc) %endif %ifarch ppc64 %global oformat OUTPUT_FORMAT(elf64-powerpc) %global oformat2 OUTPUT_FORMAT(elf32-powerpc) %endif %ifarch s390 %global oformat OUTPUT_FORMAT(elf32-s390) %endif %ifarch s390x %global oformat OUTPUT_FORMAT(elf64-s390) %global oformat2 OUTPUT_FORMAT(elf32-s390) %endif %ifarch ia64 %global oformat OUTPUT_FORMAT(elf64-ia64-little) %endif %ifarch ppc64le %global oformat OUTPUT_FORMAT(elf64-powerpcle) %endif %ifarch aarch64 %global oformat OUTPUT_FORMAT(elf64-littleaarch64) %endif %if 0%{?rhel} == 7 ExclusiveArch: x86_64 %endif Patch0: gcc13-hack.patch Patch2: gcc13-sparc-config-detection.patch Patch3: gcc13-libgomp-omp_h-multilib.patch Patch4: gcc13-libtool-no-rpath.patch Patch5: gcc13-isl-dl.patch Patch6: gcc13-isl-dl2.patch Patch7: gcc13-libstdc++-docs.patch Patch8: gcc13-no-add-needed.patch Patch9: gcc13-Wno-format-security.patch Patch10: gcc13-rh1574936.patch Patch11: gcc13-d-shared-libphobos.patch Patch12: gcc13-znver5.patch Patch13: gcc13-pr107071.patch Patch14: gcc13-vector-merge-1.patch Patch15: gcc13-vector-merge-2.patch Patch16: gcc13-vector-merge-3.patch Patch50: isl-rh2155127.patch Patch100: gcc13-fortran-fdec-duplicates.patch Patch1000: gcc13-libstdc++-compat.patch Patch1001: gcc13-libgfortran-compat.patch Patch3000: 0001-basic_string-reserve-n-semantics-are-not-available-i.patch Patch3001: 0004-operator-istream-char-N-eofbit-fixes-are-not-availab.patch Patch3002: 0005-Disable-tests-for-PR-libstdc-79820-and-PR-libstdc-81.patch Patch3003: 0006-Don-t-assume-has_facet-codecvt_c16-when-run-against-.patch Patch3004: 0008-testsuite-build-plugins-with-std-c-11.patch Patch3005: 0009-Fix-22_locale-locale-cons-unicode.cc-when-run-under-.patch Patch3006: 0010-Don-t-verify-exception-handling-in-basic_filebuf-clo.patch Patch3007: 0011-Add-dts.exp-and-use-it-to-fix-22_locale-messages-136.patch Patch3008: 0012-dts.exp-use-usr-bin-gcc.patch Patch3009: 0013-Rename-__CXXSTDLIB_SO_VERSION__-to-__LIBSTDCXX_SO_VE.patch Patch3010: 0014-Conditionalize-tests-for-PR-libstdc-98466-on-__LIBST.patch Patch3011: 0015-Conditionalize-test-for-PR-libstdc-87135-on-__LIBSTD.patch Patch3012: 0016-Conditionalize-test-for-hashtable-bucket-sizes-on-__.patch Patch3013: 0017-Conditionalize-test-for-PR-libstdc-71181-on-__LIBSTD.patch Patch3014: gcc13-dg-ice-fixes.patch Patch3015: 0018-Use-CXX11-ABI.patch Patch3016: 0019-xfails.patch Patch3017: 0020-more-fixes.patch Patch3018: 0021-libstdc++-disable-tests.patch Patch3019: 0022-libstdc++-revert-behavior.patch Patch3021: gcc13-testsuite-p10.patch Patch3023: gcc13-testsuite-dwarf.patch %if 0%{?rhel} == 9 %global nonsharedver 110 %endif %if 0%{?rhel} == 8 %global nonsharedver 80 %endif %if 0%{?rhel} == 7 %global nonsharedver 48 %endif %if 0%{?rhel} == 6 %global nonsharedver 44 %endif %if 0%{?scl:1} %global _gnu %{nil} %else %global _gnu -gnueabi %endif %ifarch sparcv9 %global gcc_target_platform sparc64-%{_vendor}-%{_target_os} %endif %ifarch ppc ppc64p7 %global gcc_target_platform ppc64-%{_vendor}-%{_target_os} %endif %ifnarch sparcv9 ppc ppc64p7 %global gcc_target_platform %{_target_platform} %endif %description The %{?scl_prefix}gcc%{!?scl:13} package contains the GNU Compiler Collection version %{gcc_major}. %package -n libgcc Summary: GCC version %{gcc_major} shared support library Autoreq: false %description -n libgcc This package contains GCC shared support library which is needed e.g. for exception handling support. %package c++ Summary: C++ support for GCC version %{gcc_major} Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} Requires: libstdc++ Requires: %{?scl_prefix}libstdc++%{!?scl:13}-devel = %{version}-%{release} Autoreq: true %description c++ This package adds C++ support to the GNU Compiler Collection version %{gcc_major}. It includes support for most of the current C++ specification and a lot of support for the upcoming C++ specification. %package -n libstdc++ Summary: GNU Standard C++ Library Autoreq: true Requires: glibc >= 2.10.90-7 %description -n libstdc++ The libstdc++ package contains a rewritten standard compliant GCC Standard C++ Library. %package -n %{?scl_prefix}libstdc++%{!?scl:13}-devel Summary: Header files and libraries for C++ development Requires: libstdc++%{?_isa} Autoreq: true %description -n %{?scl_prefix}libstdc++%{!?scl:13}-devel This is the GNU implementation of the standard C++ libraries. This package includes the header files and libraries needed for C++ development. This includes rewritten implementation of STL. %package -n %{?scl_prefix}libstdc++-docs Summary: Documentation for the GNU standard C++ library Autoreq: true %description -n %{?scl_prefix}libstdc++-docs Manual, doxygen generated API information and Frequently Asked Questions for the GNU standard C++ library. %package gfortran Summary: Fortran support for GCC %{gcc_major} Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} %if 0%{?rhel} > 7 Requires: libgfortran >= 8.1.1 %else Requires: libgfortran5 >= 8.1.1 %endif Autoreq: true %if %{build_libquadmath} %if 0%{!?scl:1} Requires: libquadmath %endif Requires: %{?scl_prefix}libquadmath-devel = %{version}-%{release} %endif Autoreq: true %description gfortran The %{?scl_prefix}gcc%{!?scl:13}-gfortran package provides support for compiling Fortran programs with the GNU Compiler Collection. %package gdb-plugin Summary: GCC %{gcc_major} plugin for GDB Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} %description gdb-plugin This package contains GCC %{gcc_major} plugin for GDB C expression evaluation. %package -n %{?scl_prefix}libgccjit Summary: Library for embedding GCC inside programs and libraries Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} %description -n %{?scl_prefix}libgccjit This package contains shared library with GCC %{gcc_major} JIT front-end. %package -n %{?scl_prefix}libgccjit-devel Summary: Support for embedding GCC inside programs and libraries Group: Development/Libraries Requires: %{?scl_prefix}libgccjit = %{version}-%{release} # We don't build it anymore. See #2213635/#2213634. #Requires: %%{?scl_prefix}libgccjit-docs = %%{version}-%%{release} %description -n %{?scl_prefix}libgccjit-devel This package contains header files for GCC %{gcc_major} JIT front end. %package -n %{?scl_prefix}libgccjit-docs Summary: Documentation for embedding GCC inside programs and libraries Group: Development/Libraries %if 0%{?rhel} > 7 BuildRequires: python3-sphinx %else BuildRequires: python-sphinx %endif Requires(post): /sbin/install-info Requires(preun): /sbin/install-info %description -n %{?scl_prefix}libgccjit-docs This package contains documentation for GCC %{gcc_major} JIT front-end. %package -n libquadmath Summary: GCC %{gcc_major} __float128 shared support library Requires(post): /sbin/install-info Requires(preun): /sbin/install-info %description -n libquadmath This package contains GCC shared support library which is needed for __float128 math support and for Fortran REAL*16 support. %package -n %{?scl_prefix}libquadmath-devel Summary: GCC %{gcc_major} __float128 support Group: Development/Libraries %if 0%{!?scl:1} Requires: %{?scl_prefix}libquadmath%{_isa} = %{version}-%{release} %else Requires: libquadmath%{_isa} %endif Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} %description -n %{?scl_prefix}libquadmath-devel This package contains headers for building Fortran programs using REAL*16 and programs using __float128 math. %package -n libitm Summary: The GNU Transactional Memory library Group: System Environment/Libraries Requires(post): /sbin/install-info Requires(preun): /sbin/install-info %description -n libitm This package contains the GNU Transactional Memory library which is a GCC transactional memory support runtime library. %package -n %{?scl_prefix}libitm-devel Summary: The GNU Transactional Memory support Requires: libitm%{_isa} >= 4.7.0-1 Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} %description -n %{?scl_prefix}libitm-devel This package contains headers and support files for the GNU Transactional Memory library. %package plugin-devel Summary: Support for compiling GCC plugins Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} Requires: gmp-devel >= 4.3.2 Requires: mpfr-devel >= 3.1.0 Requires: libmpc-devel >= 0.8.1 %description plugin-devel This package contains header files and other support files for compiling GCC %{gcc_major} plugins. The GCC plugin ABI is currently not stable, so plugins must be rebuilt any time GCC is updated. %package -n libatomic Summary: The GNU Atomic library Group: System Environment/Libraries Requires(post): /sbin/install-info Requires(preun): /sbin/install-info %description -n libatomic This package contains the GNU Atomic library which is a GCC support runtime library for atomic operations not supported by hardware. %package -n %{?scl_prefix}libatomic-devel Summary: The GNU Atomic static library Requires: libatomic%{_isa} >= 4.8.0 %description -n %{?scl_prefix}libatomic-devel This package contains GNU Atomic static libraries. %package -n libasan8 Summary: The Address Sanitizer runtime library from GCC %{gcc_major} %description -n libasan8 This package contains the Address Sanitizer library from GCC %{gcc_major} which is used for -fsanitize=address instrumented programs. %package -n %{?scl_prefix}libasan-devel Summary: The Address Sanitizer static library Requires: libasan8%{_isa} >= 12.1.1 Obsoletes: libasan5 <= 8.3.1 %description -n %{?scl_prefix}libasan-devel This package contains Address Sanitizer static runtime library. %package -n libhwasan Summary: The Hardware-assisted Address Sanitizer runtime library %description -n libhwasan This package contains the Hardware-assisted Address Sanitizer library which is used for -fsanitize=hwaddress instrumented programs. %package -n %{?scl_prefix}libhwasan-devel Summary: The Hardware-assisted Address Sanitizer static library Requires: libhwasan >= 13.1.1 %description -n %{?scl_prefix}libhwasan-devel This package contains Hardware-assisted Address Sanitizer static runtime library. %package -n libtsan2 Summary: The Thread Sanitizer runtime library %description -n libtsan2 This package contains the Thread Sanitizer library which is used for -fsanitize=thread instrumented programs. %package -n %{?scl_prefix}libtsan-devel Summary: The Thread Sanitizer static library Requires: libtsan2%{_isa} >= 12.1.1 %description -n %{?scl_prefix}libtsan-devel This package contains Thread Sanitizer static runtime library. %package -n libubsan1 Summary: The Undefined Behavior Sanitizer runtime library %description -n libubsan1 This package contains the Undefined Behavior Sanitizer library which is used for -fsanitize=undefined instrumented programs. %package -n %{?scl_prefix}libubsan-devel Summary: The Undefined Behavior Sanitizer static library %if 0%{?rhel} > 7 Requires: libubsan%{_isa} >= 8.3.1 Obsoletes: libubsan1 <= 8.3.1 %else Requires: libubsan1%{_isa} >= 8.3.1 %endif %description -n %{?scl_prefix}libubsan-devel This package contains Undefined Behavior Sanitizer static runtime library. %package -n liblsan Summary: The Leak Sanitizer runtime library Requires(post): /sbin/install-info Requires(preun): /sbin/install-info %description -n liblsan This package contains the Leak Sanitizer library which is used for -fsanitize=leak instrumented programs. %package -n %{?scl_prefix}liblsan-devel Summary: The Leak Sanitizer static library Requires: liblsan%{_isa} >= 5.1.1 %description -n %{?scl_prefix}liblsan-devel This package contains Leak Sanitizer static runtime library. %package -n %{?scl_prefix}offload-nvptx Summary: Offloading compiler to NVPTX Requires: gcc >= 8.3.1 Requires: libgomp-offload-nvptx >= 8.3.1 %description -n %{?scl_prefix}offload-nvptx The gcc-offload-nvptx package provides offloading support for NVidia PTX. OpenMP and OpenACC programs linked with -fopenmp will by default add PTX code into the binaries, which can be offloaded to NVidia PTX capable devices if available. %if %{build_annobin_plugin} %package -n %{?scl_prefix}gcc-plugin-annobin Summary: The annobin plugin for gcc, built by the installed version of gcc Requires: %{?scl_prefix}gcc = %{version}-%{release} BuildRequires: rpm-devel, binutils-devel, xz %description -n %{?scl_prefix}gcc-plugin-annobin This package adds a version of the annobin plugin for gcc. This version of the plugin is explicitly built by the same version of gcc that is installed so that there cannot be any synchronization problems. %endif %prep %setup -q -n gcc-%{version}-%{DATE} -a 1 -a 4 -a 5 %patch -P0 -p0 -b .hack~ %patch -P2 -p0 -b .sparc-config-detection~ %patch -P3 -p0 -b .libgomp-omp_h-multilib~ %patch -P4 -p0 -b .libtool-no-rpath~ %if %{build_isl} %patch -P5 -p0 -b .isl-dl~ %patch -P6 -p0 -b .isl-dl2~ %endif %if %{build_libstdcxx_docs} %patch -P7 -p0 -b .libstdc++-docs~ %endif %patch -P8 -p0 -b .no-add-needed~ %patch -P9 -p0 -b .Wno-format-security~ %if 0%{?fedora} >= 29 || 0%{?rhel} > 7 %patch -P10 -p0 -b .rh1574936~ %endif %patch -P11 -p0 -b .d-shared-libphobos~ %patch -P12 -p1 -b .znver5~ %patch -P13 -p1 -b .pr107071~ %patch -P14 -p1 -b .vector-merge-1~ %patch -P15 -p1 -b .vector-merge-2~ %patch -P16 -p1 -b .vector-merge-3~ %if 0%{?rhel} >= 6 %patch -P100 -p1 -b .fortran-fdec-duplicates~ %endif %ifarch %{arm} rm -f gcc/testsuite/go.test/test/fixedbugs/issue19182.go %endif %if 0%{?rhel} <= 8 # Requires pthread_cond_clockwait, only present in glibc 2.30. rm -f gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C %endif rm -f libphobos/testsuite/libphobos.gc/forkgc2.d #rm -rf libphobos/testsuite/libphobos.gc %patch -P1000 -p0 -b .libstdc++-compat~ %patch -P1001 -p0 -b .libgfortran-compat~ %if %{build_isl} %patch -P50 -p0 -b .isl-rh2155127~ %endif # Apply DTS-specific testsuite patches. %patch -P3000 -p1 -b .dts-test-0~ %patch -P3001 -p1 -b .dts-test-1~ %patch -P3002 -p1 -b .dts-test-2~ %patch -P3003 -p1 -b .dts-test-3~ %patch -P3004 -p1 -b .dts-test-4~ %patch -P3005 -p1 -b .dts-test-5~ %patch -P3006 -p1 -b .dts-test-6~ %patch -P3007 -p1 -b .dts-test-7~ %patch -P3008 -p1 -b .dts-test-8~ %patch -P3009 -p1 -b .dts-test-9~ %patch -P3010 -p1 -b .dts-test-10~ %patch -P3011 -p1 -b .dts-test-11~ %patch -P3012 -p1 -b .dts-test-12~ %patch -P3013 -p1 -b .dts-test-13~ %patch -P3014 -p1 -b .dts-test-14~ %patch -P3015 -p1 -b .dts-test-15~ %patch -P3016 -p1 -b .dts-test-16~ %patch -P3017 -p1 -b .dts-test-17~ %patch -P3018 -p1 -b .dts-test-18~ %if 0%{?rhel} <= 7 %patch -P3019 -p1 -b .dts-test-19~ %endif %patch -P3021 -p1 -b .dts-test-21~ %patch -P3023 -p1 -b .dts-test-23~ find gcc/testsuite -name \*.pr96939~ | xargs rm -f echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE %if 0%{?rhel} <= 8 # Default to -gdwarf-4 rather than -gdwarf-5 sed -i '/define DWARF_VERSION_DEFAULT/s/5/4/' gcc/defaults.h sed -i 's/\(version for most targets is \)5 /\14 /' gcc/doc/invoke.texi %endif cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h cp -a libstdc++-v3/config/cpu/i{4,3}86/opt echo 'TM_H += $(srcdir)/config/rs6000/rs6000-modes.h' >> gcc/config/rs6000/t-rs6000 ./contrib/gcc_update --touch LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi sed -i -e 's/Common Driver Var(flag_report_bug)/& Init(1)/' gcc/common.opt sed -i -e 's/context->report_bug = false;/context->report_bug = true;/' gcc/diagnostic.cc %ifarch ppc if [ -d libstdc++-v3/config/abi/post/powerpc64-linux-gnu ]; then mkdir -p libstdc++-v3/config/abi/post/powerpc64-linux-gnu/64 mv libstdc++-v3/config/abi/post/powerpc64-linux-gnu/{,64/}baseline_symbols.txt mv libstdc++-v3/config/abi/post/powerpc64-linux-gnu/{32/,}baseline_symbols.txt rm -rf libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32 fi %endif %ifarch sparc if [ -d libstdc++-v3/config/abi/post/sparc64-linux-gnu ]; then mkdir -p libstdc++-v3/config/abi/post/sparc64-linux-gnu/64 mv libstdc++-v3/config/abi/post/sparc64-linux-gnu/{,64/}baseline_symbols.txt mv libstdc++-v3/config/abi/post/sparc64-linux-gnu/{32/,}baseline_symbols.txt rm -rf libstdc++-v3/config/abi/post/sparc64-linux-gnu/32 fi %endif # This test causes fork failures, because it spawns way too many threads rm -f gcc/testsuite/go.test/test/chan/goroutines.go # These tests get stuck and don't timeout. %ifarch ppc ppc64 ppc64le rm -f libgomp/testsuite/libgomp.c/target-*.c rm -rf libgomp/testsuite/libgomp.oacc* rm -rf libgomp/testsuite/libgomp.graphite* # This uses a removed file (#2093997). rm -rf libgomp/testsuite/libgomp.fortran/pr90030.f90 %endif # This test gets stuck. %ifarch %{ix86} ppc64 s390x rm -f libstdc++-v3/testsuite/30_threads/future/members/poll.cc %endif # Disable jQuery use (CVE-2020-11023). sed -i '/^SEARCHENGINE/s/YES/NO/' libstdc++-v3/doc/doxygen/user.cfg.in sed -i '/^GENERATE_TREEVIEW/s/YES/NO/' libstdc++-v3/doc/doxygen/user.cfg.in %build # Undo the broken autoconf change in recent Fedora versions export CONFIG_SITE=NONE CC=gcc CXX=g++ OPT_FLAGS="%{optflags}" OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=[123]//g'` OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[123]//g'` OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/\(-Wp,\)\?-U_FORTIFY_SOURCE//g'` OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-flto=auto//g;s/-flto//g;s/-ffat-lto-objects//g'` OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-m64//g;s/-m32//g;s/-m31//g'` OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mfpmath=sse/-mfpmath=sse -msse2/g'` OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/ -pipe / /g'` OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-fno-omit-frame-pointer//g;s/-mbackchain//g;s/-mno-omit-leaf-frame-pointer//g'` OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-Werror=format-security/-Wformat-security/g'` %ifarch sparc OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mcpu=ultrasparc/-mtune=ultrasparc/g;s/-mcpu=v[78]//g'` %endif %ifarch %{ix86} OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-march=i.86//g'` %endif OPT_FLAGS=`echo "$OPT_FLAGS" | sed -e 's/[[:blank:]]\+/ /g'` case "$OPT_FLAGS" in *-fasynchronous-unwind-tables*) sed -i -e 's/-fno-exceptions /-fno-exceptions -fno-asynchronous-unwind-tables /' \ libgcc/Makefile.in ;; esac %if %{build_offload_nvptx} mkdir obji IROOT=`pwd`/obji cd nvptx-tools-%{nvptx_tools_gitrev} rm -rf obj-%{gcc_target_platform} mkdir obj-%{gcc_target_platform} cd obj-%{gcc_target_platform} CC="$CC" CXX="$CXX" CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" \ ../configure --prefix=%{_prefix} make %{?_smp_mflags} make install prefix=${IROOT}%{_prefix} cd ../.. ln -sf newlib-cygwin-%{newlib_cygwin_gitrev}/newlib newlib rm -rf obj-offload-nvptx-none mkdir obj-offload-nvptx-none cd obj-offload-nvptx-none CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \ CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \ | sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \ XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \ ../configure --disable-bootstrap --disable-sjlj-exceptions \ --enable-newlib-io-long-long --with-build-time-tools=${IROOT}%{_prefix}/nvptx-none/bin \ --target nvptx-none --enable-as-accelerator-for=%{gcc_target_platform} \ --enable-languages=c,c++,fortran,lto \ --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \ --with-bugurl=http://bugzilla.redhat.com/bugzilla \ --enable-checking=release --with-system-zlib \ --with-gcc-major-version-only --without-isl make %{?_smp_mflags} cd .. rm -f newlib %endif rm -rf obj-%{gcc_target_platform} mkdir obj-%{gcc_target_platform} cd obj-%{gcc_target_platform} %if %{build_isl} mkdir isl-build isl-install %ifarch s390 s390x ISL_FLAG_PIC=-fPIC %else ISL_FLAG_PIC=-fpic %endif cd isl-build sed -i 's|libisl\([^-]\)|libgcc13privateisl\1|g' \ ../../isl-%{isl_version}/Makefile.{am,in} # Prevent regenerating aclocal.m4 and other configure files, because we don't # want to require aclocal-1.16 and similar. isl-rh2155127.patch modifies # 'configure' so the Makefile would attempt to regenerate various files. # See . touch ../../isl-%{isl_version}/{m4/*,aclocal.m4,Makefile.in,configure,isl_config.h.in} ../../isl-%{isl_version}/configure \ CC=/usr/bin/gcc CXX=/usr/bin/g++ \ CFLAGS="${CFLAGS:-%optflags} $ISL_FLAG_PIC" --prefix=`cd ..; pwd`/isl-install # Make sure we build with -g (#2155127). sed -i -e 's/CFLAGS =.*/& -g/' Makefile make %{?_smp_mflags} make install cd ../isl-install/lib rm libgcc13privateisl.so{,.23} mv libgcc13privateisl.so.23.1.0 libisl.so.23 ln -sf libisl.so.23 libisl.so cd ../.. %endif # Disabled on Intel because of: # https://bugzilla.redhat.com/show_bug.cgi?id=2091571#c1 %if 0%{?rhel} == 8 %ifnarch %{ix86} x86_64 %{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} %endif %else %{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} %endif # We're going to use the old long double format (double double) until RHEL10. # Only -static-lib{stdc++,gfortran}/libgcc would work with IEEE double. # Upstream also uses the old long double format, but Fedora uses the new # format. To make things clearer, --with-long-double-format=ibm is used # explicitly. CONFIGURE_OPTS="\ --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \ --with-bugurl=http://bugzilla.redhat.com/bugzilla \ --enable-shared --enable-threads=posix --enable-checking=release \ %ifarch ppc64le --enable-targets=powerpcle-linux \ %endif %ifarch ppc64le %{mips} s390x --disable-multilib \ %else --enable-multilib \ %endif --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \ --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only \ --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=%{_root_datadir}/zoneinfo \ %ifnarch %{mips} --with-linker-hash-style=gnu \ %endif %if 0%{?rhel} <= 7 --with-default-libstdcxx-abi=gcc4-compatible \ %endif --enable-plugin --enable-initfini-array \ %if %{build_isl} --with-isl=`pwd`/isl-install \ %else --without-isl \ %endif %if %{build_offload_nvptx} --enable-offload-targets=nvptx-none \ --without-cuda-driver --enable-offload-defaulted \ %endif %if 0%{?fedora} >= 21 || 0%{?rhel} >= 7 %if %{attr_ifunc} --enable-gnu-indirect-function \ %endif %endif %ifarch %{arm} --disable-sjlj-exceptions \ %endif %ifarch ppc ppc64 ppc64le ppc64p7 --enable-secureplt \ %endif %ifarch sparc sparcv9 sparc64 ppc ppc64 ppc64le ppc64p7 s390 s390x alpha --with-long-double-128 \ %endif %ifarch ppc64le --with-long-double-format=ibm \ %endif %ifarch sparc --disable-linux-futex \ %endif %ifarch sparc64 --with-cpu=ultrasparc \ %endif %ifarch sparc sparcv9 --host=%{gcc_target_platform} --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=v7 %endif %ifarch ppc ppc64 ppc64p7 %if 0%{?rhel} >= 7 --with-cpu-32=power7 --with-tune-32=power7 --with-cpu-64=power7 --with-tune-64=power7 \ %endif %if 0%{?rhel} == 6 --with-cpu-32=power4 --with-tune-32=power6 --with-cpu-64=power4 --with-tune-64=power6 \ %endif %endif %ifarch ppc64le %if 0%{?rhel} >= 9 --with-cpu-32=power9 --with-tune-32=power9 --with-cpu-64=power9 --with-tune-64=power9 \ %else --with-cpu-32=power8 --with-tune-32=power8 --with-cpu-64=power8 --with-tune-64=power8 \ %endif %endif %ifarch ppc --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=default32 %endif %ifarch %{ix86} x86_64 %if 0%{?rhel} >= 8 --enable-cet \ %endif --with-tune=generic \ %endif %if 0%{?rhel} >= 7 %ifarch %{ix86} --with-arch=x86-64 \ %endif %ifarch x86_64 %if 0%{?rhel} > 8 --with-arch_64=x86-64-v2 \ %endif --with-arch_32=x86-64 \ %endif %else %ifarch %{ix86} --with-arch=i686 \ %endif %ifarch x86_64 --with-arch_32=i686 \ %endif %endif %ifarch s390 s390x %if 0%{?rhel} >= 7 %if 0%{?rhel} > 7 %if 0%{?rhel} > 8 %if 0%{?rhel} >= 9 --with-arch=z14 --with-tune=z15 \ %else --with-arch=z13 --with-tune=arch13 \ %endif %else --with-arch=z13 --with-tune=z14 \ %endif %else --with-arch=z196 --with-tune=zEC12 \ %endif %else %if 0%{?fedora} >= 38 --with-arch=z13 --with-tune=z14 \ %else %if 0%{?fedora} >= 26 --with-arch=zEC12 --with-tune=z13 \ %else --with-arch=z9-109 --with-tune=z10 \ %endif %endif %endif --enable-decimal-float \ %endif %ifarch armv7hl --with-tune=generic-armv7-a --with-arch=armv7-a \ --with-float=hard --with-fpu=vfpv3-d16 --with-abi=aapcs-linux \ %endif %ifarch mips mipsel --with-arch=mips32r2 --with-fp-32=xx \ %endif %ifarch mips64 mips64el --with-arch=mips64r2 --with-abi=64 \ %endif %ifarch riscv64 --with-arch=rv64gc --with-abi=lp64d --with-multilib-list=lp64d \ %endif %ifnarch sparc sparcv9 ppc --build=%{gcc_target_platform} \ %endif %if 0%{?fedora} >= 35 || 0%{?rhel} >= 9 %ifnarch %{arm} --with-build-config=bootstrap-lto --enable-link-serialization=1 \ %endif %endif " CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \ CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \ | sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \ XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \ ../configure --enable-bootstrap \ --enable-languages=c,c++,fortran,lto \ $CONFIGURE_OPTS %ifarch sparc sparcv9 sparc64 make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" LDFLAGS_FOR_TARGET=-Wl,-z,relro,-z,now bootstrap %else make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" LDFLAGS_FOR_TARGET=-Wl,-z,relro,-z,now profiledbootstrap %endif echo '/* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ %{oformat} INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/%{_lib}/libstdc++.so.6 -lstdc++_nonshared%{nonsharedver} )' \ > %{gcc_target_platform}/libstdc++-v3/src/.libs/libstdc++_system.so %if 0 # Relink libcc1 against -lstdc++_nonshared: sed -i -e '/^postdeps/s/-lstdc++/-lstdc++_system/' libcc1/libtool rm -f libcc1/libcc1.la make -C libcc1 libcc1.la %endif CC="`%{gcc_target_platform}/libstdc++-v3/scripts/testsuite_flags --build-cc`" CXX="`%{gcc_target_platform}/libstdc++-v3/scripts/testsuite_flags --build-cxx` `%{gcc_target_platform}/libstdc++-v3/scripts/testsuite_flags --build-includes`" # Build libgccjit separately, so that normal compiler binaries aren't -fpic # unnecessarily. mkdir objlibgccjit cd objlibgccjit CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \ CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \ | sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \ XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \ ../../configure --disable-bootstrap --enable-host-shared \ --enable-languages=jit $CONFIGURE_OPTS make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" all-gcc cp -a gcc/libgccjit.so* ../gcc/ cd ../gcc/ ln -sf xgcc %{gcc_target_platform}-gcc-%{gcc_major} cp -a Makefile{,.orig} sed -i -e '/^CHECK_TARGETS/s/$/ check-jit/' Makefile touch -r Makefile.orig Makefile rm Makefile.orig # No longer works. See #2213635/#2213634. #make jit.sphinx.html #make jit.sphinx.install-html jit_htmldir=`pwd`/../../rpm.doc/libgccjit-devel/html cd .. %if %{build_isl} cp -a isl-install/lib/libisl.so.23 gcc/ %endif # Make generated man pages even if Pod::Man is not new enough perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl for i in ../gcc/doc/*.texi; do cp -a $i $i.orig; sed 's/ftable/table/' $i.orig > $i done make -C gcc generated-manpages for i in ../gcc/doc/*.texi; do mv -f $i.orig $i; done # Make generated doxygen pages. %if %{build_libstdcxx_docs} cd %{gcc_target_platform}/libstdc++-v3 make doc-html-doxygen make doc-man-doxygen cd ../.. %endif # Copy various doc files here and there cd .. mkdir -p rpm.doc/gfortran rpm.doc/libquadmath rpm.doc/libitm mkdir -p rpm.doc/changelogs/{gcc/cp,gcc/jit,libstdc++-v3,libgomp,libatomic,libsanitizer} for i in {gcc,gcc/cp,gcc/jit,libstdc++-v3,libgomp,libatomic,libsanitizer}/ChangeLog*; do cp -p $i rpm.doc/changelogs/$i done (cd gcc/fortran; for i in ChangeLog*; do cp -p $i ../../rpm.doc/gfortran/$i done) (cd libgfortran; for i in ChangeLog*; do cp -p $i ../rpm.doc/gfortran/$i.libgfortran done) %if %{build_libquadmath} (cd libquadmath; for i in ChangeLog* COPYING.LIB; do cp -p $i ../rpm.doc/libquadmath/$i.libquadmath done) %endif %if %{build_libitm} (cd libitm; for i in ChangeLog*; do cp -p $i ../rpm.doc/libitm/$i.libitm done) %endif rm -f rpm.doc/changelogs/gcc/ChangeLog.[1-9] find rpm.doc -name \*ChangeLog\* | xargs bzip2 -9 %if %{build_annobin_plugin} mkdir annobin-plugin cd annobin-plugin tar xf %{_usrsrc}/annobin/latest-annobin.tar.xz cd annobin* touch aclocal.m4 configure Makefile.in */configure */config.h.in */Makefile.in ANNOBIN_FLAGS=../../obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/scripts/testsuite_flags ANNOBIN_CFLAGS1="%build_cflags -I %{_builddir}/gcc-%{version}-%{DATE}/gcc" ANNOBIN_CFLAGS1="$ANNOBIN_CFLAGS1 -I %{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/gcc" ANNOBIN_CFLAGS2="-I %{_builddir}/gcc-%{version}-%{DATE}/include -I %{_builddir}/gcc-%{version}-%{DATE}/libcpp/include" ANNOBIN_LDFLAGS="%build_ldflags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/src/.libs" CC="`$ANNOBIN_FLAGS --build-cc`" CXX="`$ANNOBIN_FLAGS --build-cxx`" \ CFLAGS="$ANNOBIN_CFLAGS1 $ANNOBIN_CFLAGS2 $ANNOBIN_LDFLAGS" \ CXXFLAGS="$ANNOBIN_CFLAGS1 `$ANNOBIN_FLAGS --build-includes` $ANNOBIN_CFLAGS2 $ANNOBIN_LDFLAGS" \ ./configure --with-gcc-plugin-dir=%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/plugin \ --without-annocheck --without-tests --without-docs --disable-rpath --without-debuginfod \ --without-clang-plugin --without-llvm-plugin make cd ../.. %endif # Test the nonshared bits. mkdir libstdc++_compat_test cd libstdc++_compat_test readelf -Ws %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/%{_lib}/libstdc++.so.6 | sed -n '/\.symtab/,$d;/ UND /d;/@GLIBC_PRIVATE/d;/\(GLOBAL\|WEAK\|UNIQUE\)/p' | awk '{ if ($4 == "OBJECT") { printf "%s %s %s %s %s\n", $8, $4, $5, $6, $3 } else { printf "%s %s %s %s\n", $8, $4, $5, $6 }}' | sed 's/ UNIQUE / GLOBAL /;s/ WEAK / GLOBAL /;s/@@GLIBCXX_\(LDBL_\)\?[0-9.]*//;s/@@CXXABI_TM_[0-9.]*//;s/@@CXXABI_FLOAT128//;s/@@CXXABI_\(LDBL_\)\?[0-9.]*//' | LC_ALL=C sort -u > system.abilist readelf -Ws ../obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/src/.libs/libstdc++.so.6 | sed -n '/\.symtab/,$d;/ UND /d;/@GLIBC_PRIVATE/d;/\(GLOBAL\|WEAK\|UNIQUE\)/p' | awk '{ if ($4 == "OBJECT") { printf "%s %s %s %s %s\n", $8, $4, $5, $6, $3 } else { printf "%s %s %s %s\n", $8, $4, $5, $6 }}' | sed 's/ UNIQUE / GLOBAL /;s/ WEAK / GLOBAL /;s/@@GLIBCXX_\(LDBL_\)\?[0-9.]*//;s/@@CXXABI_TM_[0-9.]*//;s/@@CXXABI_FLOAT128//;s/@@CXXABI_\(LDBL_\)\?[0-9.]*//' | LC_ALL=C sort -u > vanilla.abilist diff -up system.abilist vanilla.abilist | awk '/^\+\+\+/{next}/^\+/{print gensub(/^+(.*)$/,"\\1","1",$0)}' > system2vanilla.abilist.diff ../obj-%{gcc_target_platform}/gcc/xgcc -B ../obj-%{gcc_target_platform}/gcc/ -shared -o libstdc++_nonshared.so -Wl,--whole-archive ../obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/src/.libs/libstdc++_nonshared%{nonsharedver}.a -Wl,--no-whole-archive %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/%{_lib}/libstdc++.so.6 readelf -Ws libstdc++_nonshared.so | sed -n '/\.symtab/,$d;/ UND /d;/@GLIBC_PRIVATE/d;/\(GLOBAL\|WEAK\|UNIQUE\)/p' | awk '{ if ($4 == "OBJECT") { printf "%s %s %s %s %s\n", $8, $4, $5, $6, $3 } else { printf "%s %s %s %s\n", $8, $4, $5, $6 }}' | sed 's/ UNIQUE / GLOBAL /;s/ WEAK / GLOBAL /;s/@@GLIBCXX_\(LDBL_\)\?[0-9.]*//;s/@@CXXABI_TM_[0-9.]*//;s/@@CXXABI_FLOAT128//;s/@@CXXABI_\(LDBL_\)\?[0-9.]*//' | LC_ALL=C sort -u > nonshared.abilist echo ====================NONSHARED========================= ldd -d -r ./libstdc++_nonshared.so || : ldd -u ./libstdc++_nonshared.so || : diff -up system2vanilla.abilist.diff nonshared.abilist || : readelf -Ws ../obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/src/.libs/libstdc++_nonshared%{nonsharedver}.a | grep HIDDEN.*UND | grep -v __dso_handle || : echo ====================NONSHARED END===================== rm -f libstdc++_nonshared.so cd .. %install rm -rf %{buildroot} mkdir -p %{buildroot} # RISC-V ABI wants to install everything in /lib64/lp64d or /usr/lib64/lp64d. # Make these be symlinks to /lib64 or /usr/lib64 respectively. See: # https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/DRHT5YTPK4WWVGL3GIN5BF2IKX2ODHZ3/ %ifarch riscv64 for d in %{buildroot}%{_libdir} %{buildroot}/%{_lib} \ %{buildroot}%{_datadir}/gdb/auto-load/%{_prefix}/%{_lib} \ %{buildroot}%{_prefix}/include/c++/%{gcc_major}/%{gcc_target_platform}/%{_lib}; do mkdir -p $d (cd $d && ln -sf . lp64d) done %endif %if %{build_offload_nvptx} cd nvptx-tools-%{nvptx_tools_gitrev} cd obj-%{gcc_target_platform} make install prefix=%{buildroot}%{_prefix} cd ../.. ln -sf newlib-cygwin-%{newlib_cygwin_gitrev}/newlib newlib cd obj-offload-nvptx-none make prefix=%{buildroot}%{_prefix} mandir=%{buildroot}%{_mandir} \ infodir=%{buildroot}%{_infodir} install rm -rf %{buildroot}%{_prefix}/libexec/gcc/nvptx-none/%{gcc_major}/install-tools rm -rf %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/{install-tools,plugin,cc1,cc1plus,f951} rm -rf %{buildroot}%{_infodir} %{buildroot}%{_mandir}/man7 %{buildroot}%{_prefix}/share/locale rm -rf %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/{install-tools,plugin} rm -rf %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/{install-tools,plugin,include-fixed} rm -rf %{buildroot}%{_prefix}/%{_lib}/libc[cp]1* mv -f %{buildroot}%{_prefix}/nvptx-none/lib/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/ mv -f %{buildroot}%{_prefix}/nvptx-none/lib/mgomp/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/mgomp/ mv -f %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/ mv -f %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/mgomp/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/mgomp/ find %{buildroot}%{_prefix}/lib/gcc/nvptx-none %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none \ %{buildroot}%{_prefix}/nvptx-none/lib -name \*.la | xargs rm cd .. rm -f newlib %endif %{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} # Also set LD_LIBRARY_PATH so that DTS eu-strip (called from find-debuginfo.sh) # can find the libraries it needs. %{?scl:export LD_LIBRARY_PATH=%{_libdir}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}} perl -pi -e \ 's~href="l(ibstdc|atest)~href="http://gcc.gnu.org/onlinedocs/libstdc++/l\1~' \ libstdc++-v3/doc/html/api.html cd obj-%{gcc_target_platform} TARGET_PLATFORM=%{gcc_target_platform} # There are some MP bugs in libstdc++ Makefiles make -C %{gcc_target_platform}/libstdc++-v3 %if 0%{?scl:1} rm -f gcc/libgcc_s.so echo '/* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ %{oformat} GROUP ( /%{_lib}/libgcc_s.so.1 libgcc.a )' > gcc/libgcc_s.so %endif make prefix=%{buildroot}%{_prefix} mandir=%{buildroot}%{_mandir} \ infodir=%{buildroot}%{_infodir} install %if 0%{?scl:1} rm -f gcc/libgcc_s.so ln -sf libgcc_s.so.1 gcc/libgcc_s.so %endif FULLPATH=%{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major} FULLEPATH=%{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major} %if 0%{?scl:1} ln -sf ../../../../bin/ar $FULLEPATH/ar ln -sf ../../../../bin/as $FULLEPATH/as ln -sf ../../../../bin/ld $FULLEPATH/ld ln -sf ../../../../bin/ld.bfd $FULLEPATH/ld.bfd ln -sf ../../../../bin/ld.gold $FULLEPATH/ld.gold ln -sf ../../../../bin/nm $FULLEPATH/nm ln -sf ../../../../bin/objcopy $FULLEPATH/objcopy ln -sf ../../../../bin/ranlib $FULLEPATH/ranlib ln -sf ../../../../bin/strip $FULLEPATH/strip %endif %if %{build_isl} cp -a isl-install/lib/libisl.so.23 $FULLPATH/ %endif # fix some things ln -sf gcc %{buildroot}%{_prefix}/bin/cc mkdir -p %{buildroot}/lib ln -sf ..%{_prefix}/bin/cpp %{buildroot}/lib/cpp ln -sf gfortran %{buildroot}%{_prefix}/bin/f95 rm -f %{buildroot}%{_infodir}/dir gzip -9 %{buildroot}%{_infodir}/*.info* ln -sf gcc %{buildroot}%{_prefix}/bin/gnatgcc mkdir -p %{buildroot}%{_fmoddir} cxxconfig="`find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h`" for i in `find %{gcc_target_platform}/[36]*/libstdc++-v3/include -name c++config.h 2>/dev/null`; do if ! diff -up $cxxconfig $i; then cat > %{buildroot}%{_prefix}/include/c++/%{gcc_major}/%{gcc_target_platform}/bits/c++config.h < #if __WORDSIZE == 32 %ifarch %{multilib_64_archs} `cat $(find %{gcc_target_platform}/32/libstdc++-v3/include -name c++config.h)` %else `cat $(find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h)` %endif #else %ifarch %{multilib_64_archs} `cat $(find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h)` %else `cat $(find %{gcc_target_platform}/64/libstdc++-v3/include -name c++config.h)` %endif #endif #endif EOF break fi done for f in `find %{buildroot}%{_prefix}/include/c++/%{gcc_major}/%{gcc_target_platform}/ -name c++config.h`; do for i in 1 2 4 8; do sed -i -e 's/#define _GLIBCXX_ATOMIC_BUILTINS_'$i' 1/#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_'$i'\ &\ #endif/' $f done %if 0%{?rhel} <= 7 # Force the old ABI unconditionally, the new one does not work in the # libstdc++_nonshared.a model against RHEL 6/7 libstdc++.so.6. sed -i -e 's/\(define[[:blank:]]*_GLIBCXX_USE_DUAL_ABI[[:blank:]]*\)1/\10/' $f %endif done # Nuke bits/*.h.gch dirs # 1) there is no bits/*.h header installed, so when gch file can't be # used, compilation fails # 2) sometimes it is hard to match the exact options used for building # libstdc++-v3 or they aren't desirable # 3) there are multilib issues, conflicts etc. with this # 4) it is huge # People can always precompile on their own whatever they want, but # shipping this for everybody is unnecessary. rm -rf %{buildroot}%{_prefix}/include/c++/%{gcc_major}/%{gcc_target_platform}/bits/*.h.gch %if %{build_libstdcxx_docs} libstdcxx_doc_builddir=%{gcc_target_platform}/libstdc++-v3/doc/doxygen mkdir -p ../rpm.doc/libstdc++-v3 cp -r -p ../libstdc++-v3/doc/html ../rpm.doc/libstdc++-v3/html cp -r -p $libstdcxx_doc_builddir/html ../rpm.doc/libstdc++-v3/html/api mkdir -p %{buildroot}%{_mandir}/man3 cp -r -p $libstdcxx_doc_builddir/man/man3/* %{buildroot}%{_mandir}/man3/ find ../rpm.doc/libstdc++-v3 -name \*~ | xargs rm # We don't want to ship jQuery in the libstdc++-docs package. find ../rpm.doc/libstdc++-v3 -name jquery.js | xargs rm find ../rpm.doc/libstdc++-v3/html -name '*.html' | xargs sed -i '/