diff options
author | Gerald Pfeifer <gerald@FreeBSD.org> | 2018-07-14 21:59:21 +0000 |
---|---|---|
committer | Gerald Pfeifer <gerald@FreeBSD.org> | 2018-07-14 21:59:21 +0000 |
commit | a2226726bfba08585cc369bab34ffcd64b7c5d50 (patch) | |
tree | d642fa80fbe4ac0837634c49f5f629849a37f222 /lang/gcc8 | |
parent | 9a631e331caf0591493c8061f60e4b43f9012666 (diff) | |
download | ports-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/Makefile | 143 | ||||
-rw-r--r-- | lang/gcc8/distinfo | 3 | ||||
-rw-r--r-- | lang/gcc8/files/patch-arm-unwind-cxx-support | 106 | ||||
-rw-r--r-- | lang/gcc8/files/patch-spe-config | 15 | ||||
-rw-r--r-- | lang/gcc8/files/pkg-message.in | 7 | ||||
-rw-r--r-- | lang/gcc8/pkg-descr | 7 | ||||
-rw-r--r-- | lang/gcc8/pkg-plist | 33 |
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 |