-
Notifications
You must be signed in to change notification settings - Fork 729
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
GCC, the GNU Compiler Collection, supports a number of languages. This port installs the C, C++, and Fortran front ends as gcc15, g++15, and gfortran15, respectively. This is the first snapshot from trunk with the GCC 15 designation. It largely is a copy of lang/gcc14-devel.
- Loading branch information
1 parent
76cc0f4
commit 220cbe0
Showing
15 changed files
with
532 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,189 @@ | ||
PORTNAME= gcc | ||
PORTVERSION= 15.0.0.s20240428 | ||
CATEGORIES= lang | ||
MASTER_SITES= GCC/snapshots/${DIST_VERSION} | ||
PKGNAMESUFFIX= ${SUFFIX}-devel | ||
DISTNAME= gcc-${DIST_VERSION} | ||
|
||
MAINTAINER= salvadore@FreeBSD.org | ||
COMMENT= GNU Compiler Collection 15 | ||
WWW= https://gcc.gnu.org | ||
|
||
LICENSE= GPLv3 GPLv3RLE | ||
LICENSE_COMB= multi | ||
|
||
ONLY_FOR_ARCHS= aarch64 amd64 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 | ||
|
||
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/} | ||
SUFFIX= ${PORTVERSION:C/([0-9]+).*/\1/} | ||
CFLAGS:= ${CFLAGS:N-mretpoline} -D__USE_ISOC11 | ||
CXXFLAGS:= ${CXXFLAGS:N-mretpoline} | ||
|
||
OPTIONS_DEFINE= GRAPHITE | ||
OPTIONS_DEFAULT_aarch64=STANDARD_BOOTSTRAP | ||
OPTIONS_DEFAULT_amd64= STANDARD_BOOTSTRAP | ||
OPTIONS_DEFAULT_i386= STANDARD_BOOTSTRAP | ||
OPTIONS_DEFAULT_powerpc=LTO_BOOTSTRAP | ||
OPTIONS_DEFAULT_powerpc64=LTO_BOOTSTRAP | ||
OPTIONS_DEFAULT_powerpc64le=LTO_BOOTSTRAP | ||
OPTIONS_SINGLE= BOOTSTRAP | ||
OPTIONS_SINGLE_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 | ||
|
||
.if defined(CPUTYPE) && ${CPUTYPE:Mg[3-5]} | ||
CFLAGS:= ${CFLAGS:S/mcpu=g/mcpu=G/} | ||
CXXFLAGS:= ${CFLAGS:S/mcpu=g/mcpu=G/} | ||
.endif | ||
|
||
.include <bsd.port.pre.mk> | ||
|
||
.if ${ARCH} == amd64 | ||
CONFIGURE_TARGET= x86_64-portbld-${OPSYS:tl}${OSREL} | ||
|
||
.elif ${ARCH} == powerpc64 | ||
CONFIGURE_ARGS+= --with-abi=elfv2 | ||
USE_GCC= yes | ||
|
||
.elif ${ARCH} == powerpc64le | ||
USE_GCC= yes | ||
.endif | ||
|
||
.if ${ARCH} == i386 | ||
LANGUAGES:= c,c++,objc,fortran | ||
.else | ||
LANGUAGES:= c,c++,objc,fortran,jit | ||
.endif | ||
TARGLIB= ${PREFIX}/lib/gcc${SUFFIX} | ||
TARGLIB32= ${PREFIX}/lib32 # The version information is added later | ||
LIBEXEC= ${PREFIX}/libexec/gcc${SUFFIX} | ||
GNU_CONFIGURE= yes | ||
GNU_CONFIGURE_MANPREFIX=${PREFIX}/share | ||
CONFIGURE_OUTSOURCE= yes | ||
.if ${PORT_OPTIONS:MLTO_BOOTSTRAP} | ||
CONFIGURE_ARGS+=--with-build-config=bootstrap-lto-noplugin | ||
ALL_TARGET= bootstrap-lean | ||
PIE_UNSAFE= yes | ||
.else | ||
CONFIGURE_ARGS+=--with-build-config=bootstrap-debug | ||
ALL_TARGET= bootstrap-lean | ||
PIE_UNSAFE= yes | ||
.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-gxx-libcxx-include-dir=/usr/include/c++/v1 \ | ||
--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 | ||
.if ${ARCH} == amd64 || ${ARCH} == i386 | ||
INFO+= gcc${SUFFIX}/libquadmath | ||
.endif | ||
.if ${ARCH} == amd64 || ${ARCH} == i386 || ${ARCH} == aarch64 | ||
INFO+= gcc${SUFFIX}/libitm | ||
.endif | ||
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}/share/man/man7/* | ||
${RM} -r ${STAGEDIR}${TARGLIB}/gcc/*/${GCC_VERSION}/include-fixed/ | ||
# Install ISO_Fortran_binding.h in an easily findable directory | ||
${MKDIR} ${STAGEDIR}${PREFIX}/include/gcc${SUFFIX} | ||
${INSTALL_DATA} ${STAGEDIR}${PREFIX}/lib/gcc${SUFFIX}/gcc/${CONFIGURE_TARGET}/${GCC_VERSION}/include/ISO_Fortran_binding.h \ | ||
${STAGEDIR}${PREFIX}/include/gcc${SUFFIX} | ||
# 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 <bsd.port.post.mk> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
TIMESTAMP = 1714396941 | ||
SHA256 (gcc-15-20240428.tar.xz) = e31cdd424a22d132bbe66bb1a2d061033e5e5d5b62d82a1cd3e0711665b87f26 | ||
SIZE (gcc-15-20240428.tar.xz) = 87999896 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
--- gcc/Makefile.in.orig 2024-02-25 22:32:27 UTC | ||
+++ gcc/Makefile.in | ||
@@ -671,6 +671,8 @@ libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/ | ||
|
||
# Directory in which the compiler finds libraries etc. | ||
libsubdir = $(libdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) | ||
+# Directory in which the compiler finds headers. | ||
+libsubincludedir = $(libdir)/gcc/$(target_alias)/$(version)/include | ||
# Directory in which the compiler finds executables | ||
libexecsubdir = $(libexecdir)/gcc/$(real_target_noncanonical)/$(version)$(accel_dir_suffix) | ||
# Directory in which all plugin resources are installed | ||
@@ -3821,6 +3823,7 @@ installdirs: | ||
# $(libdir)/gcc/include isn't currently searched by cpp. | ||
installdirs: | ||
$(mkinstalldirs) $(DESTDIR)$(libsubdir) | ||
+ $(mkinstalldirs) $(DESTDIR)$(libsubincludedir) | ||
$(mkinstalldirs) $(DESTDIR)$(libexecsubdir) | ||
$(mkinstalldirs) $(DESTDIR)$(bindir) | ||
$(mkinstalldirs) $(DESTDIR)$(includedir) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
Enable support for .init_array and .fini_array, which FreeBSD supports | ||
since commit 83aa9cc00c2d83d05a0efe7a1496d8aab4a153bb in the src | ||
repository. | ||
|
||
There __FreeBSD_version is 1000009, so we start enabling the support | ||
from __FreeBSD_version == 1000010. | ||
--- gcc/configure.orig 2023-05-11 22:33:34 UTC | ||
+++ gcc/configure | ||
@@ -24214,6 +24214,13 @@ EOF | ||
#else | ||
# if defined __sun__ && defined __svr4__ | ||
/* Solaris ld.so.1 supports .init_array/.fini_array since Solaris 8. */ | ||
+# elif defined __FreeBSD__ | ||
+# include <sys/param.h> | ||
+# if __FreeBSD_version >= 1000010 | ||
+ /* FreeBSD supports .init_array/.fini_array since FreeBSD 10. */ | ||
+# else | ||
+# error The C library not known to support .init_array/.fini_array | ||
+# endif | ||
# else | ||
# error The C library not known to support .init_array/.fini_array | ||
# endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
--- gcc/jit/Make-lang.in.orig 2024-02-25 22:32:31 UTC | ||
+++ gcc/jit/Make-lang.in | ||
@@ -360,9 +360,9 @@ jit.install-headers: installdirs | ||
# Install hooks: | ||
jit.install-headers: installdirs | ||
$(INSTALL_DATA) $(srcdir)/jit/libgccjit.h \ | ||
- $(DESTDIR)$(includedir)/libgccjit.h | ||
+ $(DESTDIR)$(libsubincludedir)/libgccjit.h | ||
$(INSTALL_DATA) $(srcdir)/jit/libgccjit++.h \ | ||
- $(DESTDIR)$(includedir)/libgccjit++.h | ||
+ $(DESTDIR)$(libsubincludedir)/libgccjit++.h | ||
|
||
ifneq (,$(findstring mingw,$(target))) | ||
jit.install-common: installdirs jit.install-headers |
Oops, something went wrong.