4659a31171
Like lang/gcc5-aux, gcc-aux was failing to build on NetBSD 7.0-beta due to a "operation not permitted" error emitted by pkgsrc gold linker. The root cause isn't known (problem with NetBSD 7 full-stop? problem with binutils, but only NetBSD7?). However, the base binutils which is version 2.23 is sufficient (barely) for gcc 4.9. The build failure is solved by using base binutils for NetBSD 7*. No revbump required because there is no change for platforms on which gcc-aux has already potentially been built. NOTE: As noted on gcc5-aux, stack-checks that passed on NetBSD 5 and 6 are now failing on GNAT on NetBSD 7. This is because the signal trampoline has apparently changed and the pattern the unwinder was looking for is never found, resulting in a segfault instead of a frame unwind. The fix would be to determine the new signal trampoline pattern and have it switch based on param.h version (or something like that).
344 lines
11 KiB
Makefile
344 lines
11 KiB
Makefile
# $NetBSD: Makefile,v 1.25 2015/06/15 18:22:55 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
|
|
|
|
LANGS= c ada c++
|
|
USE_TOOLS+= gmake sed:run perl makeinfo bzip2 patch pod2man tar
|
|
APPLY_DIFFS= core ada cxx
|
|
|
|
.include "Makefile.version"
|
|
.include "Makefile.testsuite"
|
|
.include "../../mk/bsd.prefs.mk"
|
|
.include "options.mk"
|
|
|
|
# Requires bootstrap compiler, which is only available for on selected systems
|
|
# Disable SunOS for now until multilib version can be built and tested.
|
|
|
|
ONLY_FOR_PLATFORM= DragonFly-*-x86_64 \
|
|
FreeBSD-*-i386 \
|
|
FreeBSD-*-x86_64 \
|
|
NetBSD-[5-9]*-i386 \
|
|
NetBSD-[5-9]*-x86_64 \
|
|
SunOS-5.1[1-9]*-i386 \
|
|
SunOS-5.1[1-9]*-x86_64
|
|
|
|
GARCH= ${MACHINE_ARCH:S/amd64/x86_64/}
|
|
BLD_TARGET= ${GARCH}-aux-${LOWER_OPSYS}${OS_VERSION}
|
|
OS_LABEL4VERS= [${OPSYS}${GARCH:M*64:S/amd_//:S/x86_//}]
|
|
FULL_GNATGCC= NOT SET
|
|
FULL_PATH= /sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/gcc-aux/bin:${PREFIX}/sbin:${PREFIX}/bin
|
|
|
|
.if ${OPSYS} == DragonFly
|
|
BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.dragonfly.36A.tar.bz2
|
|
.endif
|
|
|
|
.if ${OPSYS} == FreeBSD
|
|
MODERN_BINUTILS= yes
|
|
. if !empty(OS_VERSION:M[678].*)
|
|
BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.freebsd.84.tar.bz2
|
|
. else
|
|
BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.freebsd.100B.tar.bz2
|
|
. endif
|
|
.endif
|
|
|
|
.if ${OPSYS} == NetBSD
|
|
. if !empty(OS_VERSION:M6.99.*)
|
|
NSUFF= 7.0_DEV
|
|
. elif !empty(OS_VERSION:M7.99.*)
|
|
NSUFF= 8.0_DEV
|
|
. else
|
|
NSUFF= ${OS_VERSION}
|
|
. endif
|
|
. if ${GARCH} == i386
|
|
NELF= elf
|
|
. endif
|
|
XLDF= -lm
|
|
. if ${OS_VERSION:R} < 7
|
|
MODERN_BINUTILS= yes
|
|
. endif
|
|
BOOTSTRAP_COMPILER= ada-bootstrap.${GARCH}.netbsd.614.tar.bz2
|
|
BLD_TARGET= ${MACHINE_ARCH}-aux-netbsd${NELF}${NSUFF}
|
|
. if ${OS_VERSION:R} == 5
|
|
CORRECTIONS= g-socthi-bsd.adb
|
|
CRXN= C5
|
|
. else
|
|
CORRECTIONS= g-socthi-bsd.adb g-socthi.ads \
|
|
s-osinte-netbsd.ads s-osprim-posix.adb
|
|
CRXN= C6
|
|
. endif
|
|
C5_g-socthi-bsd.adb= Syscall_Socket/__socket30
|
|
C6_g-socthi-bsd.adb= Syscall_Socket/__socket30
|
|
C6_g-socthi.ads= C_Select/__select50
|
|
C6_s-osinte-netbsd.ads= nanosleep/__nanosleep50 \
|
|
clock_getres/__clock_getres50 \
|
|
clock_gettime/__clock_gettime50
|
|
C6_s-osprim-posix.adb= nanosleep/__nanosleep50 \
|
|
gettimeofday/__gettimeofday50
|
|
.endif
|
|
|
|
.if ${OPSYS} == SunOS
|
|
SOL_OSV!= expr substr ${OS_VERSION} 3 2
|
|
BLD_TARGET= ${MACHINE_ARCH}-aux-${LOWER_OPSYS}2.${SOL_OSV}
|
|
BOOTSTRAP_COMPILER= ada-bootstrap.x86_64.solaris.511.tar.bz2
|
|
. if ${ABI} == 64
|
|
EXTRA_CONFARGS+= --enable-multilib
|
|
. else
|
|
COMPILER_ABI_SWITCH= -m32
|
|
. endif
|
|
MY_CONFIGURE_ENV+= OBJDUMP=${PREFIX}/bin/gobjdump
|
|
MODERN_BINUTILS= yes
|
|
NATIVE_LINKER!= which ld
|
|
.endif
|
|
|
|
.if defined(MODERN_BINUTILS)
|
|
BUILDLINK_DEPMETHOD.binutils= full
|
|
.include "../../devel/binutils/buildlink3.mk"
|
|
EXTRA_CONFARGS+= --with-gnu-as --with-as=${PREFIX}/bin/gas
|
|
MY_CONFIGURE_ENV+= AR=${PREFIX}/bin/gar
|
|
MY_CONFIGURE_ENV+= AS=${PREFIX}/bin/gas
|
|
MY_CONFIGURE_ENV+= NM=${PREFIX}/bin/gnm
|
|
MY_CONFIGURE_ENV+= RANLIB=${PREFIX}/bin/granlib
|
|
. if defined(NATIVE_LINKER)
|
|
EXTRA_CONFARGS+= --without-gnu-ld --with-ld=${NATIVE_LINKER}
|
|
. else
|
|
EXTRA_CONFARGS+= --with-gnu-ld --with-ld=${PREFIX}/bin/gld.gold
|
|
MY_CONFIGURE_ENV+= LD=${PREFIX}/bin/gld.gold
|
|
. endif
|
|
.else
|
|
EXTRA_CONFARGS+= --with-gnu-ld --with-ld=/usr/bin/ld
|
|
EXTRA_CONFARGS+= --with-gnu-as --with-as=/usr/bin/as
|
|
.endif
|
|
|
|
|
|
# define some important directories and files
|
|
WRKSRC= ${WRKDIR}/gcc-${GCC_VERSION}
|
|
BUILDDIR= ${WRKDIR}/build
|
|
NEWBSDIR= ${WRKDIR}/newbs/bootstrap
|
|
SYSLIBDIR= ${WRKDIR}/lib
|
|
CFG_SCRIPT= ${WRKSRC}/configure
|
|
REVFILE= ${WRKSRC}/gcc/REVISION
|
|
BOOTSTRAP_PREFIX= ${WRKDIR}/bootstrap
|
|
PKG_PREFIX= ${PREFIX}/gcc-aux
|
|
BSFILENAME= ada-bootstrap.${GARCH}.${LOWER_OPSYS}.${OS_VERSION:C/[A-Z_.-]//g}.tar
|
|
|
|
|
|
# testing if gcc-aux is already installed - if so, use this compiler along with
|
|
# its gnatlink, gnatbind, and gnatmake rather than the older bootstrap versions
|
|
.if exists(${LOCALBASE}/gcc-aux/bin/ada)
|
|
FULL_GNATGCC=${LOCALBASE}/gcc-aux/bin/ada
|
|
FULL_GNATGXX=${LOCALBASE}/gcc-aux/bin/g++
|
|
.endif
|
|
|
|
|
|
.if ${FULL_GNATGCC} == "NOT SET"
|
|
# here we know we need to install the bootstrap compiler
|
|
. if defined(BOOTSTRAP_TRIPLET)
|
|
FULL_GNATGCC=${BOOTSTRAP_PREFIX}/bin/gnatgcc
|
|
. else
|
|
FULL_GNATGCC=${BOOTSTRAP_PREFIX}/bin/gcc ${COMPILER_ABI_SWITCH}
|
|
FULL_GNATGXX=${BOOTSTRAP_PREFIX}/bin/g++ ${COMPILER_ABI_SWITCH}
|
|
. endif
|
|
DISTFILES+= ${BOOTSTRAP_COMPILER}
|
|
SITES.${BOOTSTRAP_COMPILER}= http://downloads.dragonlace.net/src/
|
|
FULL_PATH=${BOOTSTRAP_PREFIX}/bin:/sbin:/bin:/usr/sbin:/usr/bin:${PREFIX}/sbin:${PREFIX}/bin
|
|
.endif
|
|
|
|
|
|
# for port maintenance, invoke "make mdi PLUS_BOOTSTRAPS=1"
|
|
.if defined(PLUS_BOOTSTRAPS)
|
|
MASTER_SITES= http://downloads.dragonlace.net/src/ \
|
|
${MASTER_SITE_GNU:=gcc/gcc-${GCC_VERSION}/}
|
|
DISTFILES= \
|
|
${DISTNAME}.tar.bz2 \
|
|
ada-bootstrap.i386.dragonfly.36A.tar.bz2 \
|
|
ada-bootstrap.i386.freebsd.84.tar.bz2 \
|
|
ada-bootstrap.i386.freebsd.100B.tar.bz2 \
|
|
ada-bootstrap.i386.netbsd.614.tar.bz2 \
|
|
ada-bootstrap.x86_64.dragonfly.36A.tar.bz2 \
|
|
ada-bootstrap.x86_64.freebsd.84.tar.bz2 \
|
|
ada-bootstrap.x86_64.freebsd.100B.tar.bz2 \
|
|
ada-bootstrap.x86_64.netbsd.614.tar.bz2 \
|
|
ada-bootstrap.x86_64.solaris.511.tar.bz2
|
|
.endif
|
|
|
|
# establish ada-aware compiler for use
|
|
MY_CONFIGURE_ENV+= CC=${FULL_GNATGCC:Q}
|
|
MY_CONFIGURE_ENV+= CXX=${FULL_GNATGXX:Q}
|
|
MY_CONFIGURE_ENV+= PATH=${FULL_PATH}
|
|
MY_CONFIGURE_ENV+= LDFLAGS="${XLDF} ${COMPILER_RPATH_FLAG}${PREFIX}/lib"
|
|
MY_MAKE_ENV+= PATH=${FULL_PATH}
|
|
MY_MAKE_ENV+= LD_LIBRARY_PATH=${BUILDDIR}/gcc${EXTRA_LLP}
|
|
# ${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+= --enable-threads=posix
|
|
CONFIGURE_ARGS+= --enable-checking=release
|
|
CONFIGURE_ARGS+= --disable-libmudflap
|
|
CONFIGURE_ARGS+= --disable-libgomp
|
|
CONFIGURE_ARGS+= --disable-libssp
|
|
CONFIGURE_ARGS+= --disable-libcilkrts
|
|
CONFIGURE_ARGS+= --disable-libitm
|
|
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
|
|
${MKDIR} ${WRKSRC}/libstdc++-v3/config/locale/dragonfly
|
|
${MKDIR} ${WRKSRC}/libstdc++-v3/config/os/bsd/dragonfly
|
|
# 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
|
|
(cd ${WRKSRC}/libstdc++-v3/testsuite && ${PERL5} -i \
|
|
-pe 's|\*-\*-freebsd\*|*-*-dragonfly* *-*-freebsd*|' ${CXXTS4DF})
|
|
(cd ${WRKSRC}/libstdc++-v3/testsuite/22_locale && ${PERL5} -i \
|
|
-pe 's|ISO-8859|ISO8859|g;' \
|
|
-pe 's|ja_JP.eucjp|ja_JP.eucJP|g;' \
|
|
-pe 's|en_HK|zh_HK|g;' \
|
|
-pe 's|en_PH|en_NZ|g;' \
|
|
-pe 's|se_NO|no_NO|g;' \
|
|
-pe 's|es_MX|es_ES|g;' \
|
|
-pe 's|ru_RU.UTF8|ru_RU.UTF-8|g' ${LOCALE22FIX})
|
|
.if ${OPSYS} == NetBSD
|
|
. for sysfile in ${CORRECTIONS}
|
|
. for pair in ${${CRXN}_${sysfile}}
|
|
${PERL5} -pi -e 's|C, ${pair:H}, ".*"|C, ${pair:H}, "${pair:T}"|' \
|
|
${WRKSRC}/gcc/ada/${sysfile}
|
|
. endfor
|
|
. endfor
|
|
. if ${CRXN} == C5
|
|
${PERL5} -pi -e 's|new int64_t|new int|' \
|
|
${WRKSRC}/gcc/ada/s-osinte-netbsd.ads
|
|
${PERL5} -pi -e 's|new Long_Integer|new Integer|' \
|
|
${WRKSRC}/gcc/ada/s-osprim-posix.adb
|
|
. endif
|
|
.endif
|
|
.if defined(STATIC_BUILD) || !empty(PKG_OPTIONS:Mbootstrap)
|
|
. if ${OPSYS} != SunOS
|
|
# Ensure GNAT tools are built statically
|
|
${PERL5} -pi -e 's/^GCC_LINK_FLAGS=.*/GCC_LINK_FLAGS=-static/' \
|
|
${WRKSRC}/gcc/ada/gcc-interface/Makefile.in
|
|
. endif
|
|
.endif
|
|
.if !exists(${LOCALBASE}/gcc-aux/bin/ada) && ${OPSYS} == SunOS
|
|
# In case /usr/pkg/bin/gas doesn't exist, establish fallback
|
|
${LN} -s ${PREFIX}/bin/gas ${BOOTSTRAP_PREFIX}/bin/as
|
|
.endif
|
|
# Illumos /usr/ccs binaries are symlinked to /usr/bin
|
|
# elfdump was present on OmniOS but not in Joyent dev area
|
|
${PERL5} -i -pe 's|/usr/ccs/bin|/usr/bin|g;' \
|
|
-pe 's|readelf -s|greadelf -s|' ${WRKSRC}/contrib/make_sunver.pl
|
|
# Update LINK_SPEC to add gcc-aux lib runpath in every binary
|
|
@${ECHO} "Configuring LINK_SPEC runpath"
|
|
${PERL5} -pi -e 's;\@PREFIX\@;${PREFIX};' \
|
|
${WRKSRC}/gcc/config/dragonfly.h \
|
|
${WRKSRC}/gcc/config/i386/freebsd.h \
|
|
${WRKSRC}/gcc/config/i386/netbsd-elf.h
|
|
|
|
.if defined(BOOTSTRAP_TRIPLET)
|
|
# 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.
|
|
# No longer used, only here to support future SunOS bootstrap generation
|
|
|
|
${MKDIR} ${BOOTSTRAP_PREFIX}
|
|
${MV} ${BOOTSTRAP_PREFIX}/../bin ${BOOTSTRAP_PREFIX}
|
|
${MV} ${BOOTSTRAP_PREFIX}/../lib ${BOOTSTRAP_PREFIX}
|
|
${MV} ${BOOTSTRAP_PREFIX}/../libexec ${BOOTSTRAP_PREFIX}
|
|
${RM} -rf ${BOOTSTRAP_PREFIX}/lib/gcc/${BOOTSTRAP_TRIPLET}/include-fixed
|
|
.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
|
|
|
|
|
|
.if !empty(PKG_OPTIONS:Mtestsuite) && empty(PKG_OPTIONS:Mbootstrap)
|
|
do-test: build test-ada test-fortran test-objc test-cxx test-c
|
|
|
|
test-ada:
|
|
.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} DEJAGNU_TIMEOUT=30 \
|
|
${GMAKE} -sk check-ada
|
|
.endif
|
|
|
|
test-fortran:
|
|
.if !empty(PKG_OPTIONS:Mfortran)
|
|
cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-fortran
|
|
.endif
|
|
|
|
test-objc:
|
|
.if !empty(PKG_OPTIONS:Mobjc)
|
|
cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-objc
|
|
.endif
|
|
|
|
test-cxx:
|
|
# libstdc++ always ends with error status, so ignore it
|
|
cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk \
|
|
check-c++ || ${TRUE}
|
|
|
|
test-c:
|
|
cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} -sk check-c
|
|
.endif
|
|
|
|
do-install:
|
|
cd ${BUILDDIR} && ${SETENV} ${MY_MAKE_ENV} ${GMAKE} install-strip \
|
|
DESTDIR=${DESTDIR}
|
|
${MV} ${DESTDIR}${PKG_PREFIX}/share ${WRKDIR}/moved_share
|
|
|
|
.if !empty(PKG_OPTIONS:Mbootstrap)
|
|
create-bootstrap: stage-install
|
|
${MKDIR} ${NEWBSDIR}
|
|
${CP} -RpP ${DESTDIR}${PKG_PREFIX}/bin ${NEWBSDIR}/
|
|
${CP} -RpP ${DESTDIR}${PKG_PREFIX}/lib ${NEWBSDIR}/
|
|
${CP} -RpP ${DESTDIR}${PKG_PREFIX}/include ${NEWBSDIR}/
|
|
${CP} -RpP ${DESTDIR}${PKG_PREFIX}/libexec ${NEWBSDIR}/
|
|
${RM} ${NEWBSDIR}/bin/${GARCH}*
|
|
${RM} -rf ${NEWBSDIR}/lib/gcc/${BLD_TARGET}/${GCC_VERSION}/include-fixed
|
|
(cd ${NEWBSDIR}/.. ; \
|
|
${TAR} -cf ${BSFILENAME} bootstrap; ${BZIP2} ${BSFILENAME})
|
|
.endif
|
|
|
|
.include "../../mk/bsd.pkg.mk"
|