From nobody Fri May 06 18:10:16 2022 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 635121ABBF77; Fri, 6 May 2022 18:10:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4KvzBJ2L0Kz4jGd; Fri, 6 May 2022 18:10:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1651860616; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=3wq2P7t7zCapz1zzde7By5nT0orqFT+0buZ0DACh+uE=; b=PUU5BJMI+XeEkJG7SUFbIj0tES42rcWroR7UdDrk9LfidIuNL0RYpsT5Mk/Bn7SMvyzxT4 ne1fbagM9Cej/AUCLmWkgx1mg/TOxoL6CTq36Ms1AACk4+Z5rcB4siZu8ilO6S6SIB/8RH ZIlRRhkQhVfwl2ltPntaDoxybTAAqjtLczeqAZmP9AXdUIqfGEqHQUFqydfY5RLnKnxrpy r5XkUMa3XgZO4b8YxvKIPzd0UVS/BvM/qin1MJlyHEfAe17IdgKG126H4GHCBlNH67tC8K LfMrTANIiqzctDBp78qAYel6dChXqpwlRa5ol/66uCKud8kIZYVpMK6ICGxxFw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2C6FC209AB; Fri, 6 May 2022 18:10:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 246IAGAL047124; Fri, 6 May 2022 18:10:16 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 246IAGl7047117; Fri, 6 May 2022 18:10:16 GMT (envelope-from git) Date: Fri, 6 May 2022 18:10:16 GMT Message-Id: <202205061810.246IAGl7047117@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Piotr Kubaj Subject: git: ca48c22e1c7a - main - lang/gcc12: add gcc 12 List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-main@freebsd.org X-BeenThere: dev-commits-ports-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pkubaj X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ca48c22e1c7a4e39244d6bea3b9f52cc17047592 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1651860616; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=3wq2P7t7zCapz1zzde7By5nT0orqFT+0buZ0DACh+uE=; b=xdFr4/1ul7WD6/lLO/xqV1b4sTgP2wJ78TJNqfsqe81yhvBmw1uJBWLzLUKCOomsaj5iVi bTNTWowRf7Ehvze1sDyKR9bWeHG7++cJPNb7AMyEub/DFF5xWCr6WgG9ca1Xtruv7u/NR4 hMhfyDGqStuo8gk7ZWVpc+0PXT6+eHz5bd/7R0PPrYJzWU3KOVJhcWHYcXg140momHQ5+7 WZASKhZf8OcYiFeVCCw9IDQOuypDrMF/OhHWYNg153dKAMPphxEsR8wrUtdw+wl2AxUrcS nKjPhLIKWSsP01HFotqBwh6ePZox8Kpq0pMdnAR+8tykZXUXwQzrdBytj6i6DQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1651860616; a=rsa-sha256; cv=none; b=lCdMZMIR0GZVeGtKu+YM2NsAnX/o9BYBLCVwpTnO3ArGCm68rKJOA6ulHBv9dZ3pTVx/zD 2KRb/p54BFT22eSJCT3mQjxk/BZSAwOJH2/7N3NUvmWz+MRi3qKlDPJAIgrSkcgwUNabdV 61F5jNdxo7IT3UjgM7Wn1XhIBoeOPDcVwEVJhZye7U4Pd7Wi3lmiN2RJL9uDK9F6FsiAbd DipHiaMBFD1DxV8YAnIyJGaJRS57dprToHHJlMLgKLY8JRYjGEq77gGjk1pkfJxV8+bYlt cj3bzBBxeL99CklsxeiyUw4rzEwCg6XEalpaK+1p9fqkmt1XRM3Z9O9bdeQYHg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by pkubaj: URL: https://cgit.FreeBSD.org/ports/commit/?id=ca48c22e1c7a4e39244d6bea3b9f52cc17047592 commit ca48c22e1c7a4e39244d6bea3b9f52cc17047592 Author: Piotr Kubaj AuthorDate: 2022-05-06 18:01:39 +0000 Commit: Piotr Kubaj CommitDate: 2022-05-06 18:01:39 +0000 lang/gcc12: add gcc 12 Changelog: https://gcc.gnu.org/gcc-12/changes.html --- lang/Makefile | 1 + lang/gcc12-devel/Makefile | 2 + lang/gcc12/Makefile | 163 ++++++++++++++++++++++++++ lang/gcc12/distinfo | 3 + lang/gcc12/files/patch-arm-unwind-cxx-support | 106 +++++++++++++++++ lang/gcc12/files/patch-clang-vec_step | 21 ++++ lang/gcc12/files/patch-gets-no-more | 47 ++++++++ lang/gcc12/files/patch-gfortran-libgcc | 69 +++++++++++ lang/gcc12/files/pkg-message.in | 13 ++ lang/gcc12/pkg-descr | 7 ++ lang/gcc12/pkg-plist | 37 ++++++ 11 files changed, 469 insertions(+) diff --git a/lang/Makefile b/lang/Makefile index 302eca00b9ce..2be03bef2a2f 100644 --- a/lang/Makefile +++ b/lang/Makefile @@ -91,6 +91,7 @@ SUBDIR += gcc10 SUBDIR += gcc11 SUBDIR += gcc11-devel + SUBDIR += gcc12 SUBDIR += gcc12-devel SUBDIR += gcc13-devel SUBDIR += gcc48 diff --git a/lang/gcc12-devel/Makefile b/lang/gcc12-devel/Makefile index a3a9500e484e..63ce75e9f4c5 100644 --- a/lang/gcc12-devel/Makefile +++ b/lang/gcc12-devel/Makefile @@ -28,6 +28,8 @@ USES= compiler:c++11-lang cpe gmake iconv libtool makeinfo perl5 tar:xz USE_BINUTILS= yes USE_PERL5= build +CONFLICTS= gcc12 + CPE_VENDOR= gnu CPE_VERSION= ${GCC_VERSION} diff --git a/lang/gcc12/Makefile b/lang/gcc12/Makefile new file mode 100644 index 000000000000..2f496b85e170 --- /dev/null +++ b/lang/gcc12/Makefile @@ -0,0 +1,163 @@ +# Created by: Gerald Pfeifer + +PORTNAME= gcc +PORTVERSION= 12.1.0 +CATEGORIES= lang +MASTER_SITES= GCC +PKGNAMESUFFIX= ${SUFFIX} + +MAINTAINER= toolchain@FreeBSD.org +COMMENT= GNU Compiler Collection 12 + +LICENSE= GPLv3 GPLv3RLE +LICENSE_COMB= multi + +ONLY_FOR_ARCHS= aarch64 amd64 arm armv6 armv7 i386 powerpc powerpc64 powerpc64le + +LIB_DEPENDS= libgmp.so:math/gmp \ + libmpfr.so:math/mpfr \ + libmpc.so:math/mpc +BUILD_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils +RUN_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils +.if defined(MAINTAINER_MODE) +BUILD_DEPENDS+= runtest:misc/dejagnu +.endif + +USES= compiler:c++11-lang cpe gmake iconv libtool makeinfo perl5 tar:xz +USE_BINUTILS= yes +USE_PERL5= build + +CONFLICTS= gcc12-devel + +CPE_VENDOR= gnu + +GCC_VERSION= ${PORTVERSION} +SUFFIX= ${PORTVERSION:C/([0-9]+).*/\1/} +CFLAGS:= ${CFLAGS:N-mretpoline} +CXXFLAGS:= ${CXXFLAGS:N-mretpoline} + +OPTIONS_DEFINE= GRAPHITE +OPTIONS_DEFAULT_aarch64=LTO_BOOTSTRAP +OPTIONS_DEFAULT_amd64= LTO_BOOTSTRAP +OPTIONS_DEFAULT_i386= LTO_BOOTSTRAP +OPTIONS_DEFAULT_powerpc=LTO_BOOTSTRAP +OPTIONS_DEFAULT_powerpc64= LTO_BOOTSTRAP +OPTIONS_DEFAULT_powerpc64le= LTO_BOOTSTRAP +OPTIONS_RADIO= BOOTSTRAP +OPTIONS_RADIO_BOOTSTRAP= LTO_BOOTSTRAP STANDARD_BOOTSTRAP +LTO_BOOTSTRAP_DESC= Build using a full LTO bootstrap +STANDARD_BOOTSTRAP_DESC= Build using a full bootstrap without LTO +GRAPHITE_DESC= Support for Graphite loop optimizations + +.if exists(/usr/lib32/libc.so) +OPTIONS_DEFINE_amd64+= MULTILIB +OPTIONS_DEFAULT_amd64+= MULTILIB +OPTIONS_DEFINE_powerpc64+= MULTILIB +#OPTIONS_DEFAULT_powerpc64+= MULTILIB # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105010 +MULTILIB_DESC= Build support for 32-bit and 64-bit targets +MULTILIB_CONFIGURE_ENABLE= multilib +.else +CONFIGURE_ARGS+= --disable-multilib +.endif + +.include + +.if ${ARCH} == amd64 +CONFIGURE_TARGET= x86_64-portbld-${OPSYS:tl}${OSREL} + +.elif defined(PPC_ABI) && ${PPC_ABI} == ELFv2 +CONFIGURE_ARGS+= --with-abi=elfv2 +.endif + +LANGUAGES:= c,c++,objc,fortran,jit +TARGLIB= ${PREFIX}/lib/gcc${SUFFIX} +TARGLIB32= ${PREFIX}/lib32 # The version information is added later +LIBEXEC= ${PREFIX}/libexec/gcc${SUFFIX} +GNU_CONFIGURE= yes +CONFIGURE_OUTSOURCE= yes +.if empty(PORT_OPTIONS:M*BOOTSTRAP) +CONFIGURE_ARGS+=--disable-bootstrap +.elif ${PORT_OPTIONS:MLTO_BOOTSTRAP} +CONFIGURE_ARGS+=--with-build-config=bootstrap-lto-noplugin +ALL_TARGET= bootstrap-lean +.else +CONFIGURE_ARGS+=--with-build-config=bootstrap-debug +ALL_TARGET= bootstrap-lean +.endif +INSTALL_TARGET= install-strip +.if ${UID} != 0 +BINMODE= 755 +.endif +CONFIGURE_ARGS+=--disable-nls \ + --enable-gnu-indirect-function \ + --enable-host-shared \ + --enable-plugin \ + --libdir=${TARGLIB} \ + --libexecdir=${LIBEXEC} \ + --program-suffix=${SUFFIX} \ + --with-as=${LOCALBASE}/bin/as \ + --with-gmp=${LOCALBASE} \ + --with-gxx-include-dir=${TARGLIB}/include/c++/ \ + --with-ld=${LOCALBASE}/bin/ld \ + ${ICONV_CONFIGURE_ARG} \ + --with-pkgversion="FreeBSD Ports Collection" \ + --with-system-zlib \ + --without-zstd +MAKE_ARGS+= MAKEINFOFLAGS="--no-split" +USE_LDCONFIG= ${TARGLIB} +PLIST_SUB+= GCC_VERSION=${GCC_VERSION} \ + GNU_HOST=${CONFIGURE_TARGET} \ + SUFFIX=${SUFFIX} +INFO= gcc${SUFFIX}/cpp \ + gcc${SUFFIX}/cppinternals \ + gcc${SUFFIX}/gcc \ + gcc${SUFFIX}/gccinstall \ + gcc${SUFFIX}/gccint \ + gcc${SUFFIX}/gfortran \ + gcc${SUFFIX}/libgccjit \ + gcc${SUFFIX}/libgomp +# Release tarballs (as opposed to snapshots) always carry this. +INFO+= gcc${SUFFIX}/libquadmath \ + gcc${SUFFIX}/libitm +SUB_FILES= pkg-message +SUB_LIST+= TARGLIB=${TARGLIB} + +.if ${PORT_OPTIONS:MGRAPHITE} +LIB_DEPENDS+= libisl.so:devel/isl +CONFIGURE_ARGS+=--with-isl=${LOCALBASE} +.endif + +CONFIGURE_ARGS+=--enable-languages=${LANGUAGES} + +pre-everything:: + @${ECHO_MSG} "Making GCC ${PORTVERSION} for ${CONFIGURE_TARGET} [${LANGUAGES}]" + +pre-configure: + cd ${WRKSRC} ; contrib/gcc_update --touch + @${RM} ${WRKSRC}/gcc/*/*.info* + +.if defined(MAINTAINER_MODE) +full-regression-test: build + cd ${TEST_WRKSRC}; ${MAKE_CMD} -sk check \ + ; ${WRKSRC}/contrib/test_summary +.endif + +post-stage: + ${RM} ${STAGEDIR}${PREFIX}/man/man7/* + ${RM} -r ${STAGEDIR}${TARGLIB}/gcc/*/${GCC_VERSION}/include-fixed/ + # Add target libraries and include files to packaging list. + ${RM} ${WRKDIR}/PLIST.lib + +.if (${ARCH} == amd64 || ${ARCH} == powerpc64) && ${PORT_OPTIONS:MMULTILIB} + ${MKDIR} ${STAGEDIR}${TARGLIB32} + ${MV} ${STAGEDIR}${PREFIX}/lib/lib32 ${STAGEDIR}${TARGLIB32}/gcc${SUFFIX} +.endif + +.for d in ${TARGLIB:S/^${PREFIX}\///} ${TARGLIB32:S/^${PREFIX}\///} ${LIBEXEC:S/^${PREFIX}\///} + cd ${STAGEDIR}${PREFIX} ; if [ -d $d ]; then \ + ${FIND} $d -type f -o -type l >>${WRKDIR}/PLIST.lib ;\ + fi +.endfor + cd ${WRKDIR} ; ${SED} -i -e "/PLIST.lib/ r PLIST.lib" ${TMPPLIST} + +.include diff --git a/lang/gcc12/distinfo b/lang/gcc12/distinfo new file mode 100644 index 000000000000..782760126f2e --- /dev/null +++ b/lang/gcc12/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1651847789 +SHA256 (gcc-12.1.0.tar.xz) = 62fd634889f31c02b64af2c468f064b47ad1ca78411c45abe6ac4b5f8dd19c7b +SIZE (gcc-12.1.0.tar.xz) = 82701928 diff --git a/lang/gcc12/files/patch-arm-unwind-cxx-support b/lang/gcc12/files/patch-arm-unwind-cxx-support new file mode 100644 index 000000000000..ec6959b9655c --- /dev/null +++ b/lang/gcc12/files/patch-arm-unwind-cxx-support @@ -0,0 +1,106 @@ +--- UTC +Index: gcc/ginclude/unwind-arm-common.h +=================================================================== +--- gcc/ginclude/unwind-arm-common.h (revision 219113) ++++ gcc/ginclude/unwind-arm-common.h (working copy) +@@ -82,7 +82,11 @@ + + struct _Unwind_Control_Block + { ++#ifdef __FreeBSD__ ++ unsigned exception_class __attribute__((__mode__(__DI__))); ++#else + char exception_class[8]; ++#endif + void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block *); + /* Unwinder cache, private fields for the unwinder's use */ + struct +@@ -181,7 +185,11 @@ + + /* Support functions for the PR. */ + #define _Unwind_Exception _Unwind_Control_Block ++#ifdef __FreeBSD__ ++ typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__))); ++#else + typedef char _Unwind_Exception_Class[8]; ++#endif + + void * _Unwind_GetLanguageSpecificData (_Unwind_Context *); + _Unwind_Ptr _Unwind_GetRegionStart (_Unwind_Context *); +Index: libstdc++-v3/libsupc++/unwind-cxx.h +=================================================================== +--- libstdc++-v3/libsupc++/unwind-cxx.h (revision 219147) ++++ libstdc++-v3/libsupc++/unwind-cxx.h (working copy) +@@ -235,7 +235,7 @@ + return reinterpret_cast<__cxa_dependent_exception *>(exc + 1) - 1; + } + +-#ifdef __ARM_EABI_UNWINDER__ ++#if defined(__ARM_EABI_UNWINDER__) && !defined(__FreeBSD__) + static inline bool + __is_gxx_exception_class(_Unwind_Exception_Class c) + { +@@ -309,13 +309,7 @@ + c[6] = 'R'; + c[7] = '\0'; + } +- +-static inline void* +-__gxx_caught_object(_Unwind_Exception* eo) +-{ +- return (void*)eo->barrier_cache.bitpattern[0]; +-} +-#else // !__ARM_EABI_UNWINDER__ ++#else // !__ARM_EABI_UNWINDER__ || __FreeBSD__ + // This is the primary exception class we report -- "GNUCC++\0". + const _Unwind_Exception_Class __gxx_primary_exception_class + = ((((((((_Unwind_Exception_Class) 'G' +@@ -339,6 +333,16 @@ + << 8 | (_Unwind_Exception_Class) '+') + << 8 | (_Unwind_Exception_Class) '\x01'); + ++const _Unwind_Exception_Class __gxx_forced_unwind_class ++= ((((((((_Unwind_Exception_Class) 'G' ++ << 8 | (_Unwind_Exception_Class) 'N') ++ << 8 | (_Unwind_Exception_Class) 'U') ++ << 8 | (_Unwind_Exception_Class) 'C') ++ << 8 | (_Unwind_Exception_Class) 'F') ++ << 8 | (_Unwind_Exception_Class) 'O') ++ << 8 | (_Unwind_Exception_Class) 'R') ++ << 8 | (_Unwind_Exception_Class) '\0'); ++ + static inline bool + __is_gxx_exception_class(_Unwind_Exception_Class c) + { +@@ -346,6 +350,12 @@ + || c == __gxx_dependent_exception_class; + } + ++static inline bool ++__is_gxx_forced_unwind_class(_Unwind_Exception_Class c) ++{ ++ return c == __gxx_forced_unwind_class; ++} ++ + // Only checks for primary or dependent, but not that it is a C++ exception at + // all. + static inline bool +@@ -357,7 +367,18 @@ + #define __GXX_INIT_PRIMARY_EXCEPTION_CLASS(c) c = __gxx_primary_exception_class + #define __GXX_INIT_DEPENDENT_EXCEPTION_CLASS(c) \ + c = __gxx_dependent_exception_class ++#define __GXX_INIT_FORCED_UNWIND_CLASS(c) c = __gxx_forced_unwind_class ++#endif // __ARM_EABI_UNWINDER__ && !__FreeBSD__ + ++#ifdef __ARM_EABI_UNWINDER__ ++static inline void* ++__gxx_caught_object(_Unwind_Exception* eo) ++{ ++ return (void*)eo->barrier_cache.bitpattern[0]; ++} ++ ++#else // !__ARM_EABI_UNWINDER__ ++ + // GNU C++ personality routine, Version 0. + extern "C" _Unwind_Reason_Code __gxx_personality_v0 + (int, _Unwind_Action, _Unwind_Exception_Class, diff --git a/lang/gcc12/files/patch-clang-vec_step b/lang/gcc12/files/patch-clang-vec_step new file mode 100644 index 000000000000..00607540eb2a --- /dev/null +++ b/lang/gcc12/files/patch-clang-vec_step @@ -0,0 +1,21 @@ +https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=239266 reports how +clang unfortunately poisons user namespace by default (without any +special options). + +Until that changes (or GCC changes) we need to avoid using vec_step +as a variable. + +--- UTC +Index: gcc/tree-vect-loop.cc +=================================================================== +--- gcc/tree-vect-loop.cc (revision 273856) ++++ gcc/tree-vect-loop.cc (working copy) +@@ -55,6 +55,8 @@ along with GCC; see the file COPYING3. If not see + #include "vec-perm-indices.h" + #include "tree-eh.h" + ++#define vec_step vec_step_ ++ + /* Loop Vectorization Pass. + + This pass tries to vectorize loops. diff --git a/lang/gcc12/files/patch-gets-no-more b/lang/gcc12/files/patch-gets-no-more new file mode 100644 index 000000000000..4b49aba3ca28 --- /dev/null +++ b/lang/gcc12/files/patch-gets-no-more @@ -0,0 +1,47 @@ +Disable the build/use of libssp/gets-chk since FreeBSD 12 and later +do not feature gets() any longer. + +--- UTC +Index: libssp/Makefile.am +=================================================================== +--- libssp/Makefile.am (revision 263319) ++++ libssp/Makefile.am (working copy) +@@ -42,7 +42,7 @@ + nobase_libsubinclude_HEADERS = ssp/ssp.h ssp/string.h ssp/stdio.h ssp/unistd.h + + libssp_la_SOURCES = \ +- ssp.c gets-chk.c memcpy-chk.c memmove-chk.c mempcpy-chk.c \ ++ ssp.c memcpy-chk.c memmove-chk.c mempcpy-chk.c \ + memset-chk.c snprintf-chk.c sprintf-chk.c stpcpy-chk.c \ + strcat-chk.c strcpy-chk.c strncat-chk.c strncpy-chk.c \ + vsnprintf-chk.c vsprintf-chk.c +Index: libssp/Makefile.in +=================================================================== +--- libssp/Makefile.in (revision 263319) ++++ libssp/Makefile.in (working copy) +@@ -108,7 +108,7 @@ + am__installdirs = "$(DESTDIR)$(toolexeclibdir)" \ + "$(DESTDIR)$(libsubincludedir)" + LTLIBRARIES = $(toolexeclib_LTLIBRARIES) +-am_libssp_la_OBJECTS = ssp.lo gets-chk.lo memcpy-chk.lo memmove-chk.lo \ ++am_libssp_la_OBJECTS = ssp.lo memcpy-chk.lo memmove-chk.lo \ + mempcpy-chk.lo memset-chk.lo snprintf-chk.lo sprintf-chk.lo \ + stpcpy-chk.lo strcat-chk.lo strcpy-chk.lo strncat-chk.lo \ + strncpy-chk.lo vsnprintf-chk.lo vsprintf-chk.lo +@@ -291,7 +291,7 @@ + libsubincludedir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include + nobase_libsubinclude_HEADERS = ssp/ssp.h ssp/string.h ssp/stdio.h ssp/unistd.h + libssp_la_SOURCES = \ +- ssp.c gets-chk.c memcpy-chk.c memmove-chk.c mempcpy-chk.c \ ++ ssp.c memcpy-chk.c memmove-chk.c mempcpy-chk.c \ + memset-chk.c snprintf-chk.c sprintf-chk.c stpcpy-chk.c \ + strcat-chk.c strcpy-chk.c strncat-chk.c strncpy-chk.c \ + vsnprintf-chk.c vsprintf-chk.c +@@ -452,7 +452,6 @@ + distclean-compile: + -rm -f *.tab.c + +-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gets-chk.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libssp_nonshared_la-ssp-local.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memcpy-chk.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memmove-chk.Plo@am__quote@ diff --git a/lang/gcc12/files/patch-gfortran-libgcc b/lang/gcc12/files/patch-gfortran-libgcc new file mode 100644 index 000000000000..fb7b66814f9c --- /dev/null +++ b/lang/gcc12/files/patch-gfortran-libgcc @@ -0,0 +1,69 @@ +GCC has two runtime libraries: The static library libgcc.a (-lgcc) and +the shared library libgcc_s.so (-lgcc_s). Both implement many of the +same functions but they also each have their unique functions. When +gcc links programs and libraries there are three possibilities: + +1. gcc -static-libgcc or gcc -static: -lgcc + => Just use libgcc.a. + +2. gcc -shared-libgcc: -lgcc_s -lgcc + => Link with libgcc_s first, so libgcc.a is only used for its unique + functions. + +3. gcc: -lgcc -Wl,--as-needed -lgcc_s -Wl,--no-as-needed + => Link with libgcc.a first so libgcc_s is only used for its unique + functions (_Unwind_* functions). + +Approach 3 is the default for gcc and it's also what clang and clang++ use; +approach 2 is the default for gfortran, g++ and probably other front ends. + +This patch makes 3 the default for gfortran. It significantly reduces +the use of libgcc_s. The _Unwind_* functions are also available in the +old base system libgcc_s which means this reduces the need for +-rpath /usr/local/lib/gccN in ports that depend on libraries built with +gfortran. Consider a dependency tree like this: + + prog -> libA -> libgcc_s (old base system libgcc_s is fine) + -> libB -> libgcc_s (libB built with gfortran, needs new libgcc_s) + +Here prog needs to be linked with -rpath /usr/local/lib/gccN even if it's +a normal C program compiled with clang. Without -rpath it will fail to +start because it loads old libgcc_s first as a dependency of libA and then +it fails to load libB. With this patch libB works with old base system +libgcc_s or may not need libgcc_s at all, so prog does not need to be +linked with -rpath. + +Upstream is unlikely accept a patch like this because libgfortran calls +some _Unwind_* functions and so always needs libgcc_s. Also because +every Fortran program and library links to libgfortran it makes sense +that option 2 above is the default. On FreeBSD where clang and GCC +compiled code can be mixed and where multiple libgcc_s may be installed, +option 3 is just a lot easier to deal with. + +The bug that sparked this is PR 208120 (but note there's a lot of +misleading information in that bug. CMake is not actually doing +anything wrong.) + +--- UTC +--- gcc/fortran/gfortranspec.cc.orig 2022-01-23 22:32:06.000000000 +0000 ++++ gcc/fortran/gfortranspec.cc 2022-02-06 08:56:31.018286000 +0000 +@@ -406,7 +406,7 @@ + } + } + +-#ifdef ENABLE_SHARED_LIBGCC ++#if 0 + if (library) + { + unsigned int i; +--- libgfortran/Makefile.in.orig ++++ libgfortran/Makefile.in +@@ -736,7 +736,7 @@ + $(LTLDFLAGS) $(LIBQUADLIB) ../libbacktrace/libbacktrace.la \ + $(HWCAP_LDFLAGS) \ + $(LIBM) $(extra_ldflags_libgfortran) \ +- $(version_arg) -Wc,-shared-libgcc ++ $(version_arg) + + libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP) + cafexeclib_LTLIBRARIES = libcaf_single.la diff --git a/lang/gcc12/files/pkg-message.in b/lang/gcc12/files/pkg-message.in new file mode 100644 index 000000000000..df3ea725ce59 --- /dev/null +++ b/lang/gcc12/files/pkg-message.in @@ -0,0 +1,13 @@ +[ +{ type: install + message: < diff --git a/lang/gcc12/pkg-plist b/lang/gcc12/pkg-plist new file mode 100644 index 000000000000..cada193c9907 --- /dev/null +++ b/lang/gcc12/pkg-plist @@ -0,0 +1,37 @@ +bin/%%GNU_HOST%%-c++%%SUFFIX%% +bin/%%GNU_HOST%%-g++%%SUFFIX%% +bin/%%GNU_HOST%%-gcc%%SUFFIX%% +bin/%%GNU_HOST%%-gcc-%%GCC_VERSION%% +bin/%%GNU_HOST%%-gcc-ar%%SUFFIX%% +bin/%%GNU_HOST%%-gcc-nm%%SUFFIX%% +bin/%%GNU_HOST%%-gcc-ranlib%%SUFFIX%% +bin/%%GNU_HOST%%-gfortran%%SUFFIX%% +bin/c++%%SUFFIX%% +bin/cpp%%SUFFIX%% +bin/g++%%SUFFIX%% +bin/gcc%%SUFFIX%% +bin/gcc-ar%%SUFFIX%% +bin/gcc-nm%%SUFFIX%% +bin/gcc-ranlib%%SUFFIX%% +bin/gcov%%SUFFIX%% +bin/gcov-dump%%SUFFIX%% +bin/gcov-tool%%SUFFIX%% +bin/gfortran%%SUFFIX%% +bin/lto-dump%%SUFFIX%% +include/libgccjit++.h +include/libgccjit.h +man/man1/cpp%%SUFFIX%%.1.gz +man/man1/g++%%SUFFIX%%.1.gz +man/man1/gcc%%SUFFIX%%.1.gz +man/man1/gcov%%SUFFIX%%.1.gz +man/man1/gcov-dump%%SUFFIX%%.1.gz +man/man1/gcov-tool%%SUFFIX%%.1.gz +man/man1/gfortran%%SUFFIX%%.1.gz +man/man1/lto-dump%%SUFFIX%%.1.gz +share/gcc-%%GCC_VERSION%%/python/libstdcxx/__init__.py +share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/__init__.py +share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/printers.py +share/gcc-%%GCC_VERSION%%/python/libstdcxx/v6/xmethods.py +@postexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi +@postunexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi +@comment Insert PLIST.lib here