Index: head/lang/gcc10-devel/Makefile =================================================================== --- head/lang/gcc10-devel/Makefile (revision 501704) +++ head/lang/gcc10-devel/Makefile (revision 501705) @@ -1,157 +1,157 @@ # Created by: Gerald Pfeifer # $FreeBSD$ PORTNAME= gcc -PORTVERSION= 10.0.0.s20190505 +PORTVERSION= 10.0.0.s20190512 CATEGORIES= lang MASTER_SITES= GCC/snapshots/${DIST_VERSION} PKGNAMESUFFIX= ${SUFFIX}-devel DISTNAME= gcc-${DIST_VERSION} MAINTAINER= gerald@FreeBSD.org COMMENT= GNU Compiler Collection 10 LICENSE= GPLv3 GPLv3RLE LICENSE_COMB= multi ONLY_FOR_ARCHS= aarch64 amd64 arm armv6 armv7 i386 powerpc powerpc64 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 USES= compiler 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/} SSP_UNSAFE= yes CFLAGS:= ${CFLAGS:N-mretpoline} CXXFLAGS:= ${CXXFLAGS:N-mretpoline} 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_amd64+= MULTILIB OPTIONS_DEFAULT_amd64+= MULTILIB 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 .if ${ARCH} == amd64 CONFIGURE_TARGET= x86_64-portbld-${OPSYS:tl}${OSREL} .elif ${ARCH} == powerpc64 CONFIGURE_ENV+= UNAME_m="powerpc64" USE_GCC= yes .endif LANGUAGES:= c,c++,objc,fortran TARGLIB= ${PREFIX}/lib/gcc${SUFFIX} TARGLIB32= ${PREFIX}/lib32 # The version information is added later 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 .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 .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 Index: head/lang/gcc10-devel/distinfo =================================================================== --- head/lang/gcc10-devel/distinfo (revision 501704) +++ head/lang/gcc10-devel/distinfo (revision 501705) @@ -1,3 +1,3 @@ -TIMESTAMP = 1557174273 -SHA256 (gcc-10-20190505.tar.xz) = 5ef4500a9e440fd9469dabd0a7d2ece133932c199573a70eae38af09b0940a3e -SIZE (gcc-10-20190505.tar.xz) = 68789736 +TIMESTAMP = 1557768236 +SHA256 (gcc-10-20190512.tar.xz) = c24dd4e26a4e3c0cc57a32041afbe592faea6a7145d8cf0124a5bfba65d1798b +SIZE (gcc-10-20190512.tar.xz) = 68819180 Index: head/lang/gcc10-devel/files/patch-gfortran-libgcc =================================================================== --- head/lang/gcc10-devel/files/patch-gfortran-libgcc (nonexistent) +++ head/lang/gcc10-devel/files/patch-gfortran-libgcc (revision 501705) @@ -0,0 +1,70 @@ +GCC has two runtime libraries: The static library libgcc.a (-lgcc) and +the shared library libgcc_s.so (-lgcc_s). Both implement many of the +same functions but they also each have their unique functions. When +gcc links programs and libraries there are three possibilities: + +1. gcc -static-libgcc or gcc -static: -lgcc + => Just use libgcc.a. + +2. gcc -shared-libgcc: -lgcc_s -lgcc + => Link with libgcc_s first, so libgcc.a is only used for its unique + functions. + +3. gcc: -lgcc -Wl,--as-needed -lgcc_s -Wl,--no-as-needed + => Link with libgcc.a first so libgcc_s is only used for its unique + functions (_Unwind_* functions). + +Approach 3 is the default for gcc and it's also what clang and clang++ use; +approach 2 is the default for gfortran, g++ and probably other front ends. + +This patch makes 3 the default for gfortran. It significantly reduces +the use of libgcc_s. The _Unwind_* functions are also available in the +old base system libgcc_s which means this reduces the need for +-rpath /usr/local/lib/gccN in ports that depend on libraries built with +gfortran. Consider a dependency tree like this: + + prog -> libA -> libgcc_s (old base system libgcc_s is fine) + -> libB -> libgcc_s (libB built with gfortran, needs new libgcc_s) + +Here prog needs to be linked with -rpath /usr/local/lib/gccN even if it's +a normal C program compiled with clang. Without -rpath it will fail to +start because it loads old libgcc_s first as a dependency of libA and then +it fails to load libB. With this patch libB works with old base system +libgcc_s or may not need libgcc_s at all, so prog does not need to be +linked with -rpath. + +Upstream is unlikely accept a patch like this because libgfortran calls +some _Unwind_* functions and so always needs libgcc_s. Also because +every Fortran program and library links to libgfortran it makes sense +that option 2 above is the default. On FreeBSD where clang and GCC +compiled code can be mixed and where multiple libgcc_s may be installed, +option 3 is just a lot easier to deal with. + +The bug that sparked this is PR 208120 (but note there's a lot of +misleading information in that bug. CMake is not actually doing +anything wrong.) + +--- UTC +--- gcc/fortran/gfortranspec.c.orig 2015-06-26 17:47:23 UTC ++++ gcc/fortran/gfortranspec.c +@@ -404,7 +404,7 @@ For more information about these matters + } + } + +-#ifdef ENABLE_SHARED_LIBGCC ++#if 0 + if (library) + { + unsigned int i; + +--- libgfortran/Makefile.in.orig 2019-02-22 14:22:13.000000000 +0000 ++++ libgfortran/Makefile.in 2019-02-27 16:27:08.856408000 +0000 +@@ -625,7 +625,7 @@ + $(LTLDFLAGS) $(LIBQUADLIB) ../libbacktrace/libbacktrace.la \ + $(HWCAP_LDFLAGS) \ + -lm $(extra_ldflags_libgfortran) \ +- $(version_arg) -Wc,-shared-libgcc ++ $(version_arg) + + libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP) + cafexeclib_LTLIBRARIES = libcaf_single.la Property changes on: head/lang/gcc10-devel/files/patch-gfortran-libgcc ___________________________________________________________________ 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 Index: head/lang/gcc10-devel/pkg-plist =================================================================== --- head/lang/gcc10-devel/pkg-plist (revision 501704) +++ head/lang/gcc10-devel/pkg-plist (revision 501705) @@ -1,33 +1,34 @@ 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%% +bin/lto-dump%%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