diff options
Diffstat (limited to 'lang/gcc-aux/Makefile')
-rw-r--r-- | lang/gcc-aux/Makefile | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/lang/gcc-aux/Makefile b/lang/gcc-aux/Makefile new file mode 100644 index 00000000000..c06d744abed --- /dev/null +++ b/lang/gcc-aux/Makefile @@ -0,0 +1,337 @@ +# $NetBSD: Makefile,v 1.1 2012/07/08 19:30:38 marino Exp $ +# + +PKGNAME= gcc-aux-${SNAPSHOT} +DISTNAME= gcc-${GCC_VERSION} +CATEGORIES= lang +MASTER_SITES= ${MASTER_SITE_GNU:=gcc/gcc-${GCC_VERSION}/} +DISTFILES= ${DISTNAME}.tar.bz2 + +MAINTAINER= draco@marino.st +HOMEPAGE= http://www.dragonlace.net/ +COMMENT= GNAT Ada compiler based on GCC ${GCC_BRANCH} +LICENSE= gnu-gpl-v3 AND gnu-lgpl-v3 + +SNAPSHOT= 20120614 +GCC_BRANCH= 4.7 +GCC_POINT= 1 +GCC_VERSION= ${GCC_BRANCH}.${GCC_POINT} +LANGS= c + +PKG_DESTDIR_SUPPORT= user-destdir + +USE_TOOLS+= gmake sed:run perl makeinfo bzip2 patch pod2man +USE_BUILTIN.iconv= no +APPLY_DIFFS= core + +.include "../../mk/bsd.prefs.mk" +.include "options.mk" + +# Requires bootstrap compiler, which is only available for NetBSD i386/AMD64 +# DragonFly i386/AMD64 and SunOS i386 Bootstrap compilers for OpenBSD and +# FreeBSD also exist, but are currently reserved for the native package systems +# of those platforms. + +ONLY_FOR_PLATFORM= DragonFly-*-* \ + NetBSD-[5-9]*-i386 \ + NetBSD-[5-9]*-x86_64 \ + SunOS-5.1[1-9]*-i386 + +BLD_TARGET= ${MACHINE_ARCH}-aux-${LOWER_OPSYS}${OS_VERSION} +THREAD_MODEL= posix +OS_LABEL4VERS= [pkgsrc] +BOOTSTRAP_COMPILER= NOT_REQUIRED +INTENDED_COMPILER= NATIVE +BOOTSTRAP_TRIPLET= NOT SET +FULL_GNATGCC= NOT SET +FULL_PATH= /sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/sbin:${PREFIX}/bin:${PREFIX}/gcc-aux/bin +OLD_EH= register_frame +REBUILD_LIB= Rebuild the following library first: +STICONV= ${PREFIX}/lib/libiconv.a +STINTL= \$${top_builddir}/../intl/libintl.a + + +.if ${OPSYS} == "DragonFly" +.if ${MACHINE_ARCH} == "i386" + OS_LABEL4VERS= [DragonFly] + BOOTSTRAP_TRIPLET= i386-bootstrap-dragonfly2.8/4.6.0 +.endif +.if ${MACHINE_ARCH} == "x86_64" + OS_LABEL4VERS= [DragonFly64] + BOOTSTRAP_TRIPLET= x86_64-bootstrap-dragonfly2.8/4.6.0 +.endif +BOOTSTRAP_COMPILER= gnat-bootstrap.${MACHINE_ARCH}.dragonfly.tar.bz2 +LINK_HEADER= /usr/include/sys/link_elf.h +.endif + + +.if ${OPSYS} == "NetBSD" +.if !empty(OS_VERSION:M5.99.*) + NSUFF= 6.0_DEV +.elif !empty(OS_VERSION:M6.99.*) + NSUFF= 7.0_DEV +.else + NSUFF= ${OS_VERSION} +.endif +.if ${MACHINE_ARCH} == "i386" + OS_LABEL4VERS= [NetBSD] + BOOTSTRAP_TRIPLET= i386-bootstrap-netbsdelf5.1/4.6.0 + BLD_TARGET= ${MACHINE_ARCH}-aux-netbsdelf${NSUFF} +.endif +.if ${MACHINE_ARCH} == "x86_64" + OS_LABEL4VERS= [NetBSD64] + BOOTSTRAP_TRIPLET= x86_64-bootstrap-netbsd5.1/4.6.0 + BLD_TARGET= ${MACHINE_ARCH}-aux-netbsd${NSUFF} +.endif +BOOTSTRAP_COMPILER= gnat-bootstrap.${MACHINE_ARCH}.netbsd.tar.bz2 +LINK_HEADER= /usr/include/link_elf.h +.endif + + +.if ${OPSYS} == "SunOS" +.if ${MACHINE_ARCH} == "i386" + OS_LABEL4VERS= [Solaris] + BOOTSTRAP_TRIPLET= i386-bootstrap-solaris5.11/4.6.1 +.endif +SOL_OSV= `expr substr ${OS_VERSION} 3 2` +BLD_TARGET= ${MACHINE_ARCH}-aux-${LOWER_OPSYS}2.${SOL_OSV} +BOOTSTRAP_COMPILER= gnat-bootstrap.${MACHINE_ARCH}.solaris.tar.bz2 +MY_CONFIGURE_ENV+= OBJDUMP=/usr/sfw/bin/gobjdump +. if exists(/usr/sfw/bin/gld) +EXTRA_CONFARGS+= --with-gnu-ld --with-ld=/usr/sfw/bin/gld +. else +EXTRA_CONFARGS+= --without-gnu-ld --with-ld=/usr/ccs/bin/ld +. endif +. if exists(/usr/sfw/bin/gas) +EXTRA_CONFARGS+= --with-gnu-as --with-as=/usr/sfw/bin/gas +. else +EXTRA_CONFARGS+= --without-gnu-as --with-as=/usr/ccs/bin/as +. endif +.endif + + +# define some important directories and files +BUILDDIR= ${WRKDIR}/build +WRKSRC= ${WRKDIR}/gcc-${GCC_VERSION} +PKG_PREFIX= ${PREFIX}/gcc-aux +CFG_SCRIPT= ${WRKSRC}/configure +BOOTSTRAP_PREFIX= ${WRKDIR}/bootstrap +REVFILE= ${WRKSRC}/gcc/REVISION +BASELIB= ${PREFIX}/lib + + + +# testing if gcc-aux, gnatlink, gnatbind and gnatmake are in standard location +# exists function will NOT expand any variable, so it has to be hard-coded +.if exists(/usr/pkg/gcc-aux/bin/ada) || exists(/opt/ipp/pkg/gcc-aux/bin/ada) +.if exists(/usr/pkg/gcc-aux/bin/gnatbind) || exists(/opt/ipp/pkg/gcc-aux/bin/gnatbind) +.if exists(/usr/pkg/gcc-aux/bin/gnatlink) || exists(/opt/ipp/pkg/gcc-aux/bin/gnatlink) +.if exists(/usr/pkg/gcc-aux/bin/gnatmake) || exists(/opt/ipp/pkg/gcc-aux/bin/gnatmake) +FULL_GNATGCC=${PREFIX}/gcc-aux/bin/ada +.endif #gnatmake +.endif #gnatlink +.endif #gnatbind +.endif #gnatgcc + + +.if ${FULL_GNATGCC} == "NOT SET" +# here we know we need to install the bootstrap compiler +INTENDED_COMPILER=BOOTSTRAP +FULL_GNATGCC=${BOOTSTRAP_PREFIX}/bin/gnatgcc +DISTFILES+= ${BOOTSTRAP_COMPILER} +SITES.${BOOTSTRAP_COMPILER}= http://downloads.dragonlace.net/src/ \ + http://dragonlace.mirrors.ada.cx/src/ +FULL_PATH=${BOOTSTRAP_PREFIX}/bin:/sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/sbin:${PREFIX}/bin +.endif + + +# For pkg maintenance, uncomment to invoke "bmake mdi" +#DISTFILES+= \ +# gnat-bootstrap.i386.dragonfly.tar.bz2 \ +# gnat-bootstrap.x86_64.dragonfly.tar.bz2 \ +# gnat-bootstrap.i386.netbsd.tar.bz2 \ +# gnat-bootstrap.x86_64.netbsd.tar.bz2 \ +# gnat-bootstrap.i386.solaris.tar.bz2 + + +# establish ada-aware compiler for use +MY_CONFIGURE_ENV+= CC=${FULL_GNATGCC} +MY_CONFIGURE_ENV+= PATH=${FULL_PATH} +MY_MAKE_ENV= PATH=${FULL_PATH} +MY_MAKE_ENV+= ICONVPREFIX=${PREFIX} +MY_MAKE_ENV+= LD_LIBRARY_PATH=${BUILDDIR}/gcc +# ${WRKSRC}/fixincludes/ looks for sed and compiles the path to sed into +# a binary so we need to make sure we give it the installed sed and not +# the tool wrapped one. +MY_MAKE_ENV+= ac_cv_path_SED=${TOOLS_SED} +MY_MAKE_ENV+= lt_cv_path_SED=${TOOLS_SED} + + +# The standard configuration options +CONFIGURE_ARGS= --enable-languages=${LANGS:Q} +CONFIGURE_ARGS+= --build=${BLD_TARGET} +CONFIGURE_ARGS+= --prefix=${PKG_PREFIX:Q} +CONFIGURE_ARGS+= --with-system-zlib +CONFIGURE_ARGS+= --with-gmp=${BUILDLINK_PREFIX.gmp} +CONFIGURE_ARGS+= --with-mpfr=${BUILDLINK_PREFIX.mpfr} +CONFIGURE_ARGS+= --with-mpc=${BUILDLINK_PREFIX.mpcomplex} +CONFIGURE_ARGS+= --with-libiconv-prefix=${PREFIX} +CONFIGURE_ARGS+= --enable-shared +CONFIGURE_ARGS+= --enable-threads=${THREAD_MODEL} +CONFIGURE_ARGS+= --disable-bootstrap +CONFIGURE_ARGS+= --disable-libmudflap +CONFIGURE_ARGS+= --disable-libgomp +CONFIGURE_ARGS+= --disable-libssp +CONFIGURE_ARGS+= ${EXTRA_CONFARGS} + +# Automatic package list generation +GENERATE_PLIST= cd ${DESTDIR}${PREFIX}; +GENERATE_PLIST+= ${FIND} * \( -type f -or -type l \) | ${SORT} -dr; + + +post-extract: + # Personalize GNAT for each different machine + @${ECHO} "-=> GCC AUX ${OS_LABEL4VERS}" > ${REVFILE} + + # Create new directories in preparation of applying diff files +.if !empty(PKG_OPTIONS:Mcxx) + ${MKDIR} ${WRKSRC}/libstdc++-v3/config/locale/dragonfly + ${MKDIR} ${WRKSRC}/libstdc++-v3/config/os/bsd/dragonfly +.endif + + # Apply required composite diff files +.for suffix in ${APPLY_DIFFS} + @${ECHO} "Applying composite patch diff-${suffix}" + @${PATCH} -d ${WRKSRC} -s -E < ${FILESDIR}/diff-${suffix} +.endfor + +.if !empty(PKG_OPTIONS:Mstatic) || ${OPSYS} == "NetBSD" + @${ECHO} "Reconfiguring GCC Makefile to build compiler statically" + @${PATCH} -d ${WRKSRC} -s -E < ${FILESDIR}/diff-static-version +.if empty(PKG_OPTIONS:Mnls) + @perl -pi -e 's;\@LIBICONV\@;${STICONV};' \ + ${WRKSRC}/gcc/Makefile.in \ + ${WRKSRC}/libcpp/Makefile.in \ + ${WRKSRC}/gcc/ada/gcc-interface/Makefile.in +.else + @perl -pi -e 's;\@LIBINTL\@;${STINTL} ${STICONV};' ${WRKSRC}/intl/config.intl.in + @perl -pi -e 's;\@LIBICONV\@;;' \ + ${WRKSRC}/gcc/Makefile.in \ + ${WRKSRC}/libcpp/Makefile.in \ + ${WRKSRC}/gcc/ada/gcc-interface/Makefile.in +.endif +.endif + +.if ${INTENDED_COMPILER} == "BOOTSTRAP" + # Bootstrap compiler has statically linked z, gmp, mpc, mpfr and iconv + # The only shared lib is libc.so.7, so it should work for a long time. + # It is at least 28MB and doesn't come with shared libraries. + + ${MKDIR} ${BOOTSTRAP_PREFIX} + mv ${BOOTSTRAP_PREFIX}/../bin ${BOOTSTRAP_PREFIX} + mv ${BOOTSTRAP_PREFIX}/../lib ${BOOTSTRAP_PREFIX} + mv ${BOOTSTRAP_PREFIX}/../libexec ${BOOTSTRAP_PREFIX} + + # Bootstrap compiler malfunctions in NetBSD 6 unless include-fixed + # directory is removed first. It will eventually cause problems + # for DragonFly and Solaris as well, so just unconditionally kill it. + ${RM} -rf ${BOOTSTRAP_PREFIX}/lib/gcc/${BOOTSTRAP_TRIPLET}/include-fixed +.endif + + +pre-configure: +# NetBSD's system compiler is not configured to use dl_iterate_phdr which is +# required to build shared libraries if gnat-aux handles exceptions via +# dl_iterate_phdr. Therefore the feature requires statically built +# gmp, mpc, mpfr, and iconv libraries in order to build on NetBSD. +# DragonFly introduced this functionality with 2.11, but it's possible the +# shared libraries were built with an earlier compiler in the case of an +# upgrade. We need to detect this situation on shared library builds and +# stop the build if the libraries need to be rebuilt. +.if ${OPSYS} == "DragonFly" && empty(PKG_OPTIONS:Mstatic) + @if ${GREP} dl_iterate_phdr ${LINK_HEADER} > /dev/null; then \ + if ${GREP} ${OLD_EH} ${BASELIB}/libmpc.so > /dev/null; then \ + ${ERROR_MSG} "${REBUILD_LIB} math/mpcomplex"; \ + exit 101; \ + fi; \ + if ${GREP} ${OLD_EH} ${BASELIB}/libmpfr.so > /dev/null; then \ + ${ERROR_MSG} "${REBUILD_LIB} math/mpfr"; \ + exit 102; \ + fi; \ + if ${GREP} ${OLD_EH} ${BASELIB}/libgmp.so > /dev/null; then \ + ${ERROR_MSG} "${REBUILD_LIB} devel/gmp"; \ + exit 103; \ + fi; \ + if ${GREP} ${OLD_EH} ${BASELIB}/libiconv.so > /dev/null; then \ + ${ERROR_MSG} "${REBUILD_LIB} converters/libiconv"; \ + exit 104; \ + fi; \ + fi +.endif + + +do-configure: + ${MKDIR} ${BUILDDIR} + cd ${BUILDDIR} && ${SETENV} ${MY_CONFIGURE_ENV} \ + ${CFG_SCRIPT} ${CONFIGURE_ARGS} + + +do-build: + # The unlimited stacksize is for NetBSD64 + cd ${BUILDDIR} && \ + ${ULIMIT_CMD_stacksize} && \ + ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -j${MAKE_JOBS:U1:Q} all + + +do-test: build test-ada test-fortran test-objc test-cxx test-c + +test-ada: +.if !empty(PKG_OPTIONS:Mtestsuite) && !empty(PKG_OPTIONS:Mada) +.if (${OPSYS} == "NetBSD") && (${MACHINE_ARCH} == "x86_64") + # NetBSD has an extremely small default stacksize of 2MB, which is + # insufficient for the gnat.dg testsuite. + # specifically: entry_queues test on AMD64 + # Unlimiting stack resources on i386-netbsdelf* will result in + # failure of gnat.dg/task_stack_align.adb execution test. + cd ${BUILDDIR} && \ + ${ULIMIT_CMD_stacksize} && \ + ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-ada +.else + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-ada +.endif +.endif + +test-fortran: +.if !empty(PKG_OPTIONS:Mtestsuite) && !empty(PKG_OPTIONS:Mfortran) + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-fortran +.endif + +test-objc: +.if !empty(PKG_OPTIONS:Mtestsuite) && !empty(PKG_OPTIONS:Mobjc) + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-objc +.endif + +test-cxx: +.if !empty(PKG_OPTIONS:Mtestsuite) && !empty(PKG_OPTIONS:Mcxx) + # libstdc++ always ends with error status, so ignore it + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk \ + check-c++ || ${TRUE} +.endif + +test-c: +.if !empty(PKG_OPTIONS:Mtestsuite) + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-c +.endif + + +do-install: + cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} install-strip \ + DESTDIR=${DESTDIR} + + + +.include "../../converters/libiconv/buildlink3.mk" +.include "../../devel/gmp/buildlink3.mk" +.include "../../math/mpfr/buildlink3.mk" +.include "../../math/mpcomplex/buildlink3.mk" +.include "../../mk/bsd.pkg.mk" |