Index: head/lang/gcc5/Makefile =================================================================== --- head/lang/gcc5/Makefile (revision 378043) +++ head/lang/gcc5/Makefile (revision 378044) @@ -1,155 +1,165 @@ # Created by: Gerald Pfeifer # $FreeBSD$ PORTNAME= gcc5 PORTVERSION= 5.0.s20150125 CATEGORIES= lang java MASTER_SITES= ${MASTER_SITE_GCC} MASTER_SITE_SUBDIR= snapshots/${DISTVERSION} DISTNAME= gcc-${DISTVERSION} MAINTAINER= gerald@FreeBSD.org COMMENT= GNU Compiler Collection 5 LICENSE= GPLv3 GPLv3RLE LICENSE_COMB= multi LIB_DEPENDS= libgmp.so:${PORTSDIR}/math/gmp \ libmpfr.so:${PORTSDIR}/math/mpfr \ libmpc.so:${PORTSDIR}/math/mpc BUILD_DEPENDS+= ${LOCALBASE}/bin/as:${PORTSDIR}/devel/binutils RUN_DEPENDS+= ${LOCALBASE}/bin/as:${PORTSDIR}/devel/binutils .if defined(MAINTAINER_MODE) BUILD_DEPENDS+= runtest:${PORTSDIR}/misc/dejagnu .endif # DISTVERSION relates to downloads, GCC_VERSION and SUFFIX to names # of executables and directories once installed. A PORTVERSION of # Y.2.s20140817 results in values of Y-20140817, Y.2.0, and Y # for these three. DISTVERSION= ${PORTVERSION:C/([0-9]+).*\.s([0-9]+)/\1-\2/} GCC_VERSION= ${PORTVERSION:C/(.+)\.s[0-9]{8}/\1.0/} SUFFIX= ${PORTVERSION:C/([0-9]+).*/\1/} -ONLY_FOR_ARCHS= amd64 i386 powerpc powerpc64 sparc64 +ONLY_FOR_ARCHS= amd64 i386 powerpc powerpc64 sparc64 arm armv6 armv6hf USES= gmake iconv libtool makeinfo perl5 tar:bzip2 USE_BINUTILS= yes USE_PERL5= build SSP_UNSAFE= yes PATCH_WRKSRC= ${SRCDIR} CONFIGURE_SCRIPT= ../${SRCDIR:S/${WRKDIR}\///}/configure # libffi is broken on FreeBSD i386 since 2015-01-11, cf. # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64779, so disable it. CONFIGURE_ARGS+=--without-libffi OPTIONS_DEFINE= BOOTSTRAP OPTIONS_DEFINE_i386= JAVA OPTIONS_DEFINE_amd64= JAVA OPTIONS_DEFAULT= BOOTSTRAP # Also disable the JAVA default on i386 for now. #OPTIONS_DEFAULT_i386= JAVA OPTIONS_DEFAULT_amd64= JAVA BOOTSTRAP_DESC= Build using a full bootstrap .include .if ${ARCH} == "amd64" CONFIGURE_TARGET= x86_64-portbld-${OPSYS:tl}${OSREL} .else CONFIGURE_TARGET= ${ARCH}-portbld-${OPSYS:tl}${OSREL} .endif .if ${ARCH} == powerpc64 CONFIGURE_ENV+= UNAME_m="powerpc64" +.endif + +.if ${ARCH} == "armv6" || ${ARCH} == "armv6hf" +. 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 SRCDIR= ${WRKDIR}/gcc-${DISTVERSION} WRKSRC= ${WRKDIR}/build TARGLIB= ${PREFIX}/lib/gcc${SUFFIX} LIBEXEC= ${PREFIX}/libexec/gcc${SUFFIX} GNU_CONFIGURE= 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} == "i386" || ${ARCH} == "amd64" INFO+= gcc${SUFFIX}/libquadmath \ gcc${SUFFIX}/libitm .endif SUB_FILES= pkg-message SUB_LIST+= TARGLIB=${TARGLIB} .if ${PORT_OPTIONS:MJAVA} ECJ_JAR= ${LOCALBASE}/share/java/ecj-4.5.jar BUILD_DEPENDS+= ${ECJ_JAR}:${PORTSDIR}/lang/gcc-ecj45 \ zip:${PORTSDIR}/archivers/zip RUN_DEPENDS+= ${ECJ_JAR}:${PORTSDIR}/lang/gcc-ecj45 EXTRA_PATCHES+= ${FILESDIR}/java-patch-hier CONFIGURE_ARGS+=--with-ecj-jar=${ECJ_JAR} LANGUAGES:= ${LANGUAGES},java INFO+= gcc${SUFFIX}/cp-tools \ gcc${SUFFIX}/gcj PLIST_SUB+= JAVA="" .else CONFIGURE_ARGS+=--disable-libgcj PLIST_SUB+= JAVA="@comment " .endif CONFIGURE_ARGS+=--enable-languages=${LANGUAGES} pre-everything:: @${ECHO_MSG} "Making GCC ${PORTVERSION} for ${CONFIGURE_TARGET} [${LANGUAGES}]" pre-configure: cd ${SRCDIR} ; contrib/gcc_update --touch @${RM} -f ${SRCDIR}/gcc/*/*.info* @${MKDIR} ${CONFIGURE_WRKSRC} .if defined(MAINTAINER_MODE) full-regression-test: build cd ${WRKSRC}; ${MAKE_CMD} -sk check \ ; ${SRCDIR}/contrib/test_summary .endif post-stage: ${RM} -f ${STAGEDIR}${PREFIX}/man/man7/* ${RM} -f ${STAGEDIR}${PREFIX}/bin/rebuild-gcj-db${SUFFIX} \ ${STAGEDIR}${PREFIX}/man/man1/rebuild-gcj-db${SUFFIX}.1 # Add target libraries and include files to packaging list. ${RM} -f ${WRKDIR}/PLIST.lib .for d in ${TARGLIB:S/^${PREFIX}\///} ${LIBEXEC:S/^${PREFIX}\///} include/gcj include/gnu include/java include/javax 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 Index: head/lang/gcc5/files/patch-arm-unwind-cxx-support =================================================================== --- head/lang/gcc5/files/patch-arm-unwind-cxx-support (nonexistent) +++ head/lang/gcc5/files/patch-arm-unwind-cxx-support (revision 378044) @@ -0,0 +1,105 @@ +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, Property changes on: head/lang/gcc5/files/patch-arm-unwind-cxx-support ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property