Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F104112203
D39841.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
12 KB
Referenced Files
None
Subscribers
None
D39841.diff
View Options
diff --git a/lang/Makefile b/lang/Makefile
--- a/lang/Makefile
+++ b/lang/Makefile
@@ -93,6 +93,7 @@
SUBDIR += gcc11-devel
SUBDIR += gcc12
SUBDIR += gcc12-devel
+ SUBDIR += gcc13
SUBDIR += gcc13-devel
SUBDIR += gcc14-devel
SUBDIR += gcc48
diff --git a/lang/gcc13-devel/Makefile b/lang/gcc13-devel/Makefile
--- a/lang/gcc13-devel/Makefile
+++ b/lang/gcc13-devel/Makefile
@@ -27,6 +27,8 @@
USE_BINUTILS= yes
USE_PERL5= build
+CONFLICTS= gcc13
+
CPE_VENDOR= gnu
CPE_VERSION= ${GCC_VERSION}
diff --git a/lang/gcc13-devel/Makefile b/lang/gcc13/Makefile
copy from lang/gcc13-devel/Makefile
copy to lang/gcc13/Makefile
--- a/lang/gcc13-devel/Makefile
+++ b/lang/gcc13/Makefile
@@ -1,9 +1,8 @@
PORTNAME= gcc
-PORTVERSION= 13.0.1.s20230422
+PORTVERSION= 13.1.0
CATEGORIES= lang
-MASTER_SITES= GCC/snapshots/${DIST_VERSION}
-PKGNAMESUFFIX= ${SUFFIX}-devel
-DISTNAME= gcc-${DIST_VERSION}
+MASTER_SITES= GCC
+PKGNAMESUFFIX= ${SUFFIX}
MAINTAINER= salvadore@FreeBSD.org
COMMENT= GNU Compiler Collection 13
@@ -27,15 +26,12 @@
USE_BINUTILS= yes
USE_PERL5= build
+CONFLICTS= gcc13-devel
+
CPE_VENDOR= gnu
CPE_VERSION= ${GCC_VERSION}
-# DIST_VERSION relates to downloads, GCC_VERSION and SUFFIX to names
-# of executables and directories once installed. A PORTVERSION of
-# Y.2.1.s20140817 results in values of Y-20140817, Y.2.1, and Y
-# for these three.
-DIST_VERSION= ${PORTVERSION:C/([0-9]+).*\.s([0-9]+)/\1-\2/}
-GCC_VERSION= ${PORTVERSION:C/(.+)\.s[0-9]{8}/\1/}
+GCC_VERSION= ${PORTVERSION}
SUFFIX= ${PORTVERSION:C/([0-9]+).*/\1/}
CFLAGS:= ${CFLAGS:N-mretpoline}
CXXFLAGS:= ${CXXFLAGS:N-mretpoline}
@@ -127,10 +123,9 @@
gcc${SUFFIX}/gfortran \
gcc${SUFFIX}/libgccjit \
gcc${SUFFIX}/libgomp
-.if ${ARCH} == amd64 || ${ARCH} == i386
+# Release tarballs (as opposed to snapshots) always carry this.
INFO+= gcc${SUFFIX}/libquadmath \
gcc${SUFFIX}/libitm
-.endif
SUB_FILES= pkg-message
SUB_LIST+= TARGLIB=${TARGLIB}
diff --git a/lang/gcc13/distinfo b/lang/gcc13/distinfo
new file mode 100644
--- /dev/null
+++ b/lang/gcc13/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1682499412
+SHA256 (gcc-13.1.0.tar.xz) = 61d684f0aa5e76ac6585ad8898a2427aade8979ed5e7f85492286c4dfc13ee86
+SIZE (gcc-13.1.0.tar.xz) = 87451196
diff --git a/lang/gcc13/files/patch-arm-unwind-cxx-support b/lang/gcc13/files/patch-arm-unwind-cxx-support
new file mode 100644
--- /dev/null
+++ b/lang/gcc13/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/gcc13/files/patch-gfortran-libgcc b/lang/gcc13/files/patch-gfortran-libgcc
new file mode 100644
--- /dev/null
+++ b/lang/gcc13/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/gcc13/files/patch-libcxxrt b/lang/gcc13/files/patch-libcxxrt
new file mode 100644
--- /dev/null
+++ b/lang/gcc13/files/patch-libcxxrt
@@ -0,0 +1,18 @@
+libc++ on FreeBSD always uses PathScale libcxxrt and cannot change to
+LLVM libc++abi without breaking backward compatibility. Besides, mixing
+different C++ ABIs is not supported unless subset via DT_FILTER.
+
+https://github.com/llvm/llvm-project/commit/35479ffb1251
+https://github.com/freebsd/freebsd-src/commit/cf56074e5271
+
+--- gcc/cp/g++spec.cc.orig 2022-07-31 22:32:16 UTC
++++ gcc/cp/g++spec.cc
+@@ -60,7 +60,7 @@ along with GCC; see the file COPYING3. If not see
+ #endif
+
+ #ifndef LIBCXXABI
+-#define LIBCXXABI "c++abi"
++#define LIBCXXABI "cxxrt"
+ #endif
+ #ifndef LIBCXXABI_PROFILE
+ #define LIBCXXABI_PROFILE LIBCXXABI
diff --git a/lang/gcc13/files/pkg-message.in b/lang/gcc13/files/pkg-message.in
new file mode 100644
--- /dev/null
+++ b/lang/gcc13/files/pkg-message.in
@@ -0,0 +1,13 @@
+[
+{ type: install
+ message: <<EOD
+To ensure binaries built with this toolchain find appropriate versions
+of the necessary run-time libraries, you may want to link using
+
+ -Wl,-rpath=%%TARGLIB%%
+
+For ports leveraging USE_GCC, USES=compiler, or USES=fortran this happens
+transparently.
+EOD
+}
+]
diff --git a/lang/gcc13/pkg-descr b/lang/gcc13/pkg-descr
new file mode 100644
--- /dev/null
+++ b/lang/gcc13/pkg-descr
@@ -0,0 +1,3 @@
+GCC, the GNU Compiler Collection, supports a number of languages.
+This port installs the C, C++, and Fortran front ends as gcc13, g++13,
+and gfortran13, respectively.
diff --git a/lang/gcc13/pkg-help b/lang/gcc13/pkg-help
new file mode 100644
--- /dev/null
+++ b/lang/gcc13/pkg-help
@@ -0,0 +1,3 @@
+Building this port with LTO_BOOTSTRAP enabled requires significant amounts of
+memory and time. Consider disabling LTO_BOOTSTRAP in favor of STANDARD_BOOTSTRAP
+(or disabling BOOTSTRAP altogether) in case that is a problem.
diff --git a/lang/gcc13/pkg-plist b/lang/gcc13/pkg-plist
new file mode 100644
--- /dev/null
+++ b/lang/gcc13/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
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Dec 4, 5:12 PM (8 h, 27 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15027894
Default Alt Text
D39841.diff (12 KB)
Attached To
Mode
D39841: lang/gcc13: Add port
Attached
Detach File
Event Timeline
Log In to Comment