diff options
author | gerald <gerald@FreeBSD.org> | 2017-08-15 07:20:34 +0800 |
---|---|---|
committer | gerald <gerald@FreeBSD.org> | 2017-08-15 07:20:34 +0800 |
commit | 3316683a44f8ad626ae754b73616aa6b43364f2e (patch) | |
tree | 9d8bebdffd577cd893d3eef6c0c534586f68bdfe /lang | |
parent | 2e128802fd27d6f263929071e072404d98b07d91 (diff) | |
download | freebsd-ports-gnome-3316683a44f8ad626ae754b73616aa6b43364f2e.tar.gz freebsd-ports-gnome-3316683a44f8ad626ae754b73616aa6b43364f2e.tar.zst freebsd-ports-gnome-3316683a44f8ad626ae754b73616aa6b43364f2e.zip |
Welcome GCC 7.1, the first release of the GCC 7 series!
In terms of optimizations, GCC now uses a new local register allocator
(LRA) for most targets (now also including PowerPC and SPARC), a new
store merging pass, is able to determine the return value or range of
return values of some calls to the sprintf family of functions as
input for futher passes, features improved code hoisting, new
interprocedural bitwise constant propagation, interprocedural value
range propagation, new loop splitting, improved shrink-wrapping that
separates portions of prologues and epilogues, and many more.
DWARF 5 is supported through the -gdwarf-5, while DWARF 4 remains the
default for the time being.
The C and C++ frontends have gained a large number of additional
warnings such as -Wpointer-compare, -Wduplicated-branches, -Wrestrict,
-Wmemset-elt-size, -Wint-in-bool-context, -Wswitch-unreachable,
-Wexpansion-to-defined, -Wregister, -Wvla-larger-than=N,
-Wduplicate-decl-specifier, -Wdangling-else, many of which are
enabled by default or at least with -Wall.
The -Wshadow warning has been split into -Wshadow=global, -Wshadow=local,
and -Wshadow=compatible-local .
GCC 7 also brings a number of enhancements that help detect buffer
overflow and other forms of invalid memory accesses, among others
enabled by the -Walloc-size-larger-than= -Walloc-zero, -Walloca, and
-Walloca-larger-than= command-line options.
-Wformat-overflow=level option detects certain and likely buffer
overflow in calls to the sprintf family of formatted output functions;
and -Wformat-truncation= and -Wstringop-overflow= have been added as
well and -Wnunnull enahcned.
So-called fixit hints, that is, notes on how to possibly address
a warning or error have seen signficant improvements.
The command-line option -fdiagnostics-generate-patch will print a
patch in "unified" format after any diagnostics are printed, showing
the result of applying all fix-it hints.
The C front end now supports type names _FloatN for floating-point
types with IEEE interchange formats and _FloatNx for floating-point
types with IEEE extended formats.
The C++ front end has experimental support for all of the current
C++17 draft with the -std=c++1z or -std=gnu++1z flags, including if
constexpr, class template argument deduction, auto template parameters,
and structured bindings. Experimental support for C++17 is in libstdc++
with lots of new features.
libstdc++ Profile Mode and Cilk+ extensions to the C and C++ languages
have been deprecated.
Fortran added a number of extensions for compatibility with legacy code
and improved and add various features.
GCC 7 provides a complete implementation of the Go 1.8.1 user package.
Notably this release ends the history of Java (GCJ and libgcj) as part
of GCC; all traces thereof and options have been removed in favor of
OpenJDK, quite simplifying and streamlining building this port,
Many new processors such as ARM Cortex-A73, Broadcom Vulcan, Cavium
ThunderX models, Qualcomm Falkor (all on the ARM side) and features
such as AVX-512 enhancements (on x86-64) as well as optimization
changes have been added.
On ARM targets (arm*-*-*), a bug introduced in GCC 5 that affects
conformance to the procedure call standard (AAPCS) has been fixed. The
bug affects some C++ code where class objects are passed by value to
functions and could result in incorrect or inconsistent code being
generated. This is an ABI change. If the option -Wpsabi is enabled
(on by default) the compiler will emit a diagnostic note for code that
might be affected.
https://gcc.gnu.org/gcc-7/changes.html has a comprehensive set of
changes and https://gcc.gnu.org/gcc-7/porting_to.html has a helpful
overview of issue you may encountering porting to this new version.
PR: 220794
Diffstat (limited to 'lang')
-rw-r--r-- | lang/Makefile | 1 | ||||
-rw-r--r-- | lang/gcc7/Makefile | 145 | ||||
-rw-r--r-- | lang/gcc7/distinfo | 3 | ||||
-rw-r--r-- | lang/gcc7/files/patch-arm-unwind-cxx-support | 106 | ||||
-rw-r--r-- | lang/gcc7/files/pkg-message.in | 7 | ||||
-rw-r--r-- | lang/gcc7/pkg-descr | 7 | ||||
-rw-r--r-- | lang/gcc7/pkg-plist | 33 |
7 files changed, 302 insertions, 0 deletions
diff --git a/lang/Makefile b/lang/Makefile index 3f4975224dbb..a5828dd4c9ab 100644 --- a/lang/Makefile +++ b/lang/Makefile @@ -105,6 +105,7 @@ SUBDIR += gcc6 SUBDIR += gcc6-aux SUBDIR += gcc6-devel + SUBDIR += gcc7 SUBDIR += gcc7-devel SUBDIR += gcc8-devel SUBDIR += gcl diff --git a/lang/gcc7/Makefile b/lang/gcc7/Makefile new file mode 100644 index 000000000000..7a86ffbd7fb7 --- /dev/null +++ b/lang/gcc7/Makefile @@ -0,0 +1,145 @@ +# Created by: Gerald Pfeifer <gerald@FreeBSD.org> +# $FreeBSD$ + +PORTNAME= gcc +PORTVERSION= 7.1.0 +CATEGORIES= lang +MASTER_SITES= GCC/releases/gcc-${DISTVERSION} +PKGNAMESUFFIX= ${SUFFIX} + +MAINTAINER= gerald@FreeBSD.org +COMMENT= GNU Compiler Collection 7 + +LICENSE= GPLv3 GPLv3RLE +LICENSE_COMB= multi + +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 + +CPE_VENDOR= gnu + +GCC_VERSION= ${PORTVERSION} +SUFFIX= ${PORTVERSION:C/([0-9]+).*/\1/} +ONLY_FOR_ARCHS= aarch64 amd64 arm armv6 i386 powerpc powerpc64 sparc64 +USES= compiler cpe gmake iconv libtool makeinfo perl5 tar:bzip2 +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} +.endif + +.if ${ARCH} == powerpc64 +CONFIGURE_ENV+= UNAME_m="powerpc64" +USE_GCC= yes +.endif + +.if ${ARCH} == "armv6" +. if ${COMPILER_TYPE} == clang +. if empty(PORT_OPTIONS:MBOOTSTRAP) +MAKE_ARGS+=CXXFLAGS+=-fbracket-depth=512 +. else +MAKE_ARGS+=STAGE1_CXXFLAGS+=-fbracket-depth=512 +. endif +. endif +.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 +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 +.if ${ARCH} == "amd64" || ${ARCH} == "i386" +INFO+= gcc${SUFFIX}/libquadmath \ + 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}/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/gcc7/distinfo b/lang/gcc7/distinfo new file mode 100644 index 000000000000..29d6b0ee476a --- /dev/null +++ b/lang/gcc7/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1495977669 +SHA256 (gcc-7.1.0.tar.bz2) = 8a8136c235f64c6fef69cac0d73a46a1a09bb250776a050aec8f9fc880bebc17 +SIZE (gcc-7.1.0.tar.bz2) = 84303533 diff --git a/lang/gcc7/files/patch-arm-unwind-cxx-support b/lang/gcc7/files/patch-arm-unwind-cxx-support new file mode 100644 index 000000000000..ec6959b9655c --- /dev/null +++ b/lang/gcc7/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/gcc7/files/pkg-message.in b/lang/gcc7/files/pkg-message.in new file mode 100644 index 000000000000..433c37a3f89b --- /dev/null +++ b/lang/gcc7/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/gcc7/pkg-descr b/lang/gcc7/pkg-descr new file mode 100644 index 000000000000..24a2627db47d --- /dev/null +++ b/lang/gcc7/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 gcc7, g++7, +and gfortran7, respectively. + +WWW: https://gcc.gnu.org + +Gerald Pfeifer <gerald@FreeBSD.org> diff --git a/lang/gcc7/pkg-plist b/lang/gcc7/pkg-plist new file mode 100644 index 000000000000..8d302f0800b8 --- /dev/null +++ b/lang/gcc7/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 |