aboutsummaryrefslogtreecommitdiff
path: root/lang/gcc8
diff options
context:
space:
mode:
authorGerald Pfeifer <gerald@FreeBSD.org>2018-07-14 21:59:21 +0000
committerGerald Pfeifer <gerald@FreeBSD.org>2018-07-14 21:59:21 +0000
commita2226726bfba08585cc369bab34ffcd64b7c5d50 (patch)
treed642fa80fbe4ac0837634c49f5f629849a37f222 /lang/gcc8
parent9a631e331caf0591493c8061f60e4b43f9012666 (diff)
downloadports-a2226726bfba08585cc369bab34ffcd64b7c5d50.tar.gz
ports-a2226726bfba08585cc369bab34ffcd64b7c5d50.zip
Welcome GCC 8.1, the first release of the GCC 8 series!
https://gcc.gnu.org/gcc-8/changes.html has a comprehensive overview of many changes in this release and https://gcc.gnu.org/gcc-8/porting_to.html addresses issues you may encounter porting to this new version. To provide a brief overview of some of the more noticable changes: On the optimization front inter-procedural optimizations (IPO) and profile driven optimizations (PDO) have been further improved and some classic loop nest optimization passes have been added: -floop-unroll-and-jam performs outer loop unrolling and fusing of the inner loop copies, while -floop-interchange exchanges loops in a loop nest to improve data locality. These, as well as an improved -ftree-loop-distribution pass are enabled by default at -O3 and above. A new pragma "GCC unroll" has been implemented in the C family of languages as well as Fortran to provide finer-grained control over loop unrolling. DWARF debugging information in the presence of link-time optimization now properly preserves language-specific information. The -gcolumn-info option is now enabled by default, so column information is part of DWARF debugging information in addition to filenames and line numbers. The C family compilers have gained options -Wmultistatement-macros (warning about unsafe macros expanding to multiple statements used as a body of a statement such as if, else, while, switch, or for), -Wstringop-truncation (warning for calls to bounded string manipulation functions such as strncat, strncpy, and stpncpy that might either truncate the copied string or leave the destination unchanged), -Wcast-function-type (warning when a function pointer is cast to an incompatible function pointer, enabled by -Wextra), and -Wsizeof-pointer-div (warning for suspicious divisions of the size of a pointer by the size of the elements it points to, which usually is an indication of a mistaken way to calculate the number of elements in an array, enabled by -Wall), among others. The existing -Warray-bounds and -Wrestrict options have been enhanced to detect many more instances, as have -Wformat-overflow and -Wformat-truncation. Error messages and warnings better highlight the locations of issues in many cases, and helpful "fix it" hints are provided more often. The C++ ABI (-fabi-version=12) introduces minor changes in a few fringe cases. The GCC 7 ABI can still be selected with -fabi-version=11. The C++ frontend as well as libstdc++ feature experimental support for many C++2a features and Fortran has seen a large number of improvements. Lots and lots of improvements for Arm and AArch64 targets, as well as the usual dose on x86 and powerpc. PR: 229681
Notes
Notes: svn path=/head/; revision=474650
Diffstat (limited to 'lang/gcc8')
-rw-r--r--lang/gcc8/Makefile143
-rw-r--r--lang/gcc8/distinfo3
-rw-r--r--lang/gcc8/files/patch-arm-unwind-cxx-support106
-rw-r--r--lang/gcc8/files/patch-spe-config15
-rw-r--r--lang/gcc8/files/pkg-message.in7
-rw-r--r--lang/gcc8/pkg-descr7
-rw-r--r--lang/gcc8/pkg-plist33
7 files changed, 314 insertions, 0 deletions
diff --git a/lang/gcc8/Makefile b/lang/gcc8/Makefile
new file mode 100644
index 000000000000..1b5bdcf23144
--- /dev/null
+++ b/lang/gcc8/Makefile
@@ -0,0 +1,143 @@
+# Created by: Gerald Pfeifer <gerald@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME= gcc
+PORTVERSION= 8.1.0
+CATEGORIES= lang
+MASTER_SITES= GCC
+PKGNAMESUFFIX= ${SUFFIX}
+
+MAINTAINER= gerald@FreeBSD.org
+COMMENT= GNU Compiler Collection 8
+
+LICENSE= GPLv3 GPLv3RLE
+LICENSE_COMB= multi
+
+ONLY_FOR_ARCHS= aarch64 amd64 arm armv6 armv7 i386 powerpc powerpc64 powerpcspe sparc64
+
+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
+
+CONFLICTS= gcc8-devel-8.*
+
+CPE_VENDOR= gnu
+
+GCC_VERSION= ${PORTVERSION}
+SUFFIX= ${PORTVERSION:C/([0-9]+).*/\1/}
+USES= compiler cpe gmake iconv libtool makeinfo perl5 tar:xz
+USE_BINUTILS= yes
+USE_PERL5= build
+SSP_UNSAFE= yes
+
+OPTIONS_DEFINE= BOOTSTRAP GRAPHITE
+OPTIONS_DEFAULT= BOOTSTRAP
+BOOTSTRAP_DESC= Build using a full bootstrap
+GRAPHITE_DESC= Support for Graphite loop optimizations
+
+.if exists(/usr/lib32/libc.so)
+OPTIONS_DEFINE_powerpc64+= MULTILIB
+OPTIONS_DEFAULT_powerpc64+= MULTILIB
+MULTILIB_DESC= Build support for 32-bit and 64-bit targets
+MULTILIB_CONFIGURE_ENABLE= multilib
+.else
+CONFIGURE_ARGS+= --disable-multilib
+.endif
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == amd64
+CONFIGURE_TARGET= x86_64-portbld-${OPSYS:tl}${OSREL}
+
+.elif ${ARCH} == powerpc64
+CONFIGURE_ENV+= UNAME_m="powerpc64"
+USE_GCC= yes
+
+.elif ${ARCH} == powerpcspe
+CONFIGURE_ARGS+= --with-cpu=8540 --enable-e500_double --without-fp
+.endif
+
+LANGUAGES:= c,c++,objc,fortran
+TARGLIB= ${PREFIX}/lib/gcc${SUFFIX}
+LIBEXEC= ${PREFIX}/libexec/gcc${SUFFIX}
+GNU_CONFIGURE= yes
+CONFIGURE_OUTSOURCE= yes
+.if empty(PORT_OPTIONS:MBOOTSTRAP)
+CONFIGURE_ARGS+=--disable-bootstrap
+.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 \
+ --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
+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}/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
+.for d in ${TARGLIB: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>
diff --git a/lang/gcc8/distinfo b/lang/gcc8/distinfo
new file mode 100644
index 000000000000..e58d50b54bb3
--- /dev/null
+++ b/lang/gcc8/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1525606464
+SHA256 (gcc-8.1.0.tar.xz) = 1d1866f992626e61349a1ccd0b8d5253816222cdc13390dcfaa74b093aa2b153
+SIZE (gcc-8.1.0.tar.xz) = 63372320
diff --git a/lang/gcc8/files/patch-arm-unwind-cxx-support b/lang/gcc8/files/patch-arm-unwind-cxx-support
new file mode 100644
index 000000000000..ec6959b9655c
--- /dev/null
+++ b/lang/gcc8/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/gcc8/files/patch-spe-config b/lang/gcc8/files/patch-spe-config
new file mode 100644
index 000000000000..16639828cfb4
--- /dev/null
+++ b/lang/gcc8/files/patch-spe-config
@@ -0,0 +1,15 @@
+--- UTC
+Index: gcc/config.gcc
+===================================================================
+--- gcc/config.gcc.old 2017-04-05 17:48:03.045750000 -0500
++++ gcc/config.gcc 2017-04-05 17:49:22.143572000 -0500
+@@ -2383,6 +2383,9 @@
+ tmake_file="${tmake_file} rs6000/t-freebsd64"
+ extra_options="${extra_options} rs6000/linux64.opt"
+ ;;
++ powerpcspe-*)
++ tm_file="${tm_file} powerpcspe/freebsd.h powerpcspe/linuxspe.h powerpcspe/e500.h"
++ ;;
+ *)
+ tm_file="${tm_file} rs6000/freebsd.h"
+ ;;
diff --git a/lang/gcc8/files/pkg-message.in b/lang/gcc8/files/pkg-message.in
new file mode 100644
index 000000000000..433c37a3f89b
--- /dev/null
+++ b/lang/gcc8/files/pkg-message.in
@@ -0,0 +1,7 @@
+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.
diff --git a/lang/gcc8/pkg-descr b/lang/gcc8/pkg-descr
new file mode 100644
index 000000000000..4685f20de855
--- /dev/null
+++ b/lang/gcc8/pkg-descr
@@ -0,0 +1,7 @@
+GCC, the GNU Compiler Collection, supports a number of languages. This
+port installs the C, C++, and Fortran front ends as gcc8, g++8, gfortran8,
+respectively.
+
+WWW: https://gcc.gnu.org
+
+Gerald Pfeifer <gerald@FreeBSD.org>
diff --git a/lang/gcc8/pkg-plist b/lang/gcc8/pkg-plist
new file mode 100644
index 000000000000..8d302f0800b8
--- /dev/null
+++ b/lang/gcc8/pkg-plist
@@ -0,0 +1,33 @@
+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%%
+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
+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