# $FreeBSD$ PORTNAME?= gcc PORTVERSION= 4.5.4 PORTREVISION= 1 CATEGORIES= devel MASTER_SITES= ${MASTER_SITE_GCC:S,$,:gcc,} \ ${MASTER_SITE_SOURCEWARE:S,$,:newlib,} MASTER_SITE_SUBDIR= releases/${DISTNAME}/:gcc newlib/:newlib PKGNAMEPREFIX= ${TGTARCH}-${TGTABI}- DISTFILES= ${DISTNAME}${EXTRACT_SUFX}:gcc \ newlib-${NEWLIB_VERSION}${NEWLIB_EXTRACT_SUFX}:newlib EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX} PATCH_SITES= ftp://ftp.rtems.com/pub/rtems/SOURCES/4.11/ PATCH_DIST_STRIP= -p1 MAINTAINER= ports@FreeBSD.org COMMENT= GCC for cross-target development LIB_DEPENDS= libgmp.so:${PORTSDIR}/math/gmp \ libmpfr.so:${PORTSDIR}/math/mpfr \ libmpc.so:${PORTSDIR}/math/mpc # If using this as a master port, override BUILD_DEPENDS and # RUN_DEPENDS with the appropriate specific binutils port. BUILD_DEPENDS?= ${OURTARGET}-as:${PORTSDIR}/devel/cross-binutils RUN_DEPENDS?= ${OURTARGET}-as:${PORTSDIR}/devel/cross-binutils USES= bison iconv gmake makeinfo tar:bzip2 STRIP= #empty GNU_CONFIGURE= yes ALL_TARGET= all info MAKE_JOBS_UNSAFE=yes DEPENDS_ARGS= TGTARCH="${TGTARCH}" TGTABI="${TGTABI}" CONFIGURE_WRKSRC= ${WRKDIR}/build BUILD_WRKSRC= ${CONFIGURE_WRKSRC} INSTALL_WRKSRC= ${CONFIGURE_WRKSRC} CONFIGURE_SCRIPT= ../${WRKSRC:C,^${WRKDIR}/?,,}/configure # # Newlib version to use # NEWLIB_VERSION= 1.19.0 NEWLIB_EXTRACT_SUFX=.tar.gz OURTARGET= ${TGTARCH}-${TGTABI} # # override user-defined settings in make.conf # WITHOUT_CPU_CFLAGS= yes MAKE_ENV= NO_CPU_CFLAGS=true CONFIGURE_ARGS= --target=${OURTARGET} \ --enable-languages="${TGTLANGS}" \ --datadir="${TGT_DATADIR}" \ --with-system-zlib \ --disable-nls \ ${ICONV_CONFIGURE_ARG} \ --without-included_gettext \ --with-newlib \ --with-dwarf2 \ --with-gxx-include-dir=${TGT_LIBDIR}/include/cxx/ \ --disable-shared \ --with-gmp="${LOCALBASE}" \ --with-mpfr="${LOCALBASE}" \ --with-mpc="${LOCALBASE}" MAN1= ${MANPAGES:S,^,${OURTARGET}-,} INFO= ${OURTARGET}-cpp \ ${OURTARGET}-cppinternals \ ${OURTARGET}-gcc \ ${OURTARGET}-gccint GCC_AUTODIRS= ${OURTARGET}/include \ ${OURTARGET}/lib \ ${OURTARGET}/share \ libexec/gcc/${OURTARGET} \ lib/gcc/${OURTARGET} MANPAGES= cpp.1 g++.1 gcc.1 gcov.1 PLIST_FILES= bin/${OURTARGET}-cpp \ bin/${OURTARGET}-gcc \ bin/${OURTARGET}-gcc-${GCCVER} \ bin/${OURTARGET}-gccbug \ bin/${OURTARGET}-gcov \ ${OURTARGET}/bin/gcc # Build C by default TGTLANGS= c TGT_LIBDIR= ${PREFIX}/${OURTARGET}/lib/gcc/ TGT_DATADIR= ${PREFIX}/${OURTARGET}/share LN_BINARIES= addr2line ar as c++filt ld \ nm objcopy objdump ranlib \ readelf size strings strip GCCVER= ${PORTVERSION} .if defined(WITH_CPU) CONFIGURE_ARGS+=--with-cpu=${WITH_CPU} \ --enable-cxx-flags=${WITH_CPU} .endif .if defined(WITH_FLOAT_TYPE) CONFIGURE_ARGS+=--with-float=${WITH_FLOAT_TYPE} .endif .if defined(WITH_OPTARGS) CONFIGURE_ARGS+= ${WITH_OPTARGS} .endif # # Macro to fix up info referencies # FIXREFS= ${SH} -c '${REINPLACE_CMD} -E \ -e "s,(^|[[:space:]/])$$0\.(texi|info),\1${OURTARGET}-$$0.\2,g"\ -e "s,(@file)\{$$0\},\1\{${OURTARGET}-$$0\},g" \ -e "s,\($$0\),\(${OURTARGET}-$$0\),g" $$*' -- .if !defined(TGTARCH) || !defined(TGTABI) PKGNAMEPREFIX= cross- OURTARGET= cross # to generate a correct index line IGNORE= you should select TGTARCH and TGTABI to build port .endif OPTIONS_DEFINE= CXX OBJC FORTRAN RTEMS_PATCHES OPTIONS_DEFAULT= CXX OBJC RTEMS_PATCHES_DESC= Apply RTEMS patches NO_STAGE= yes .include .if defined(TGTARCH) .if ${TGTARCH} == "i386" && ${ARCH} == "amd64" BROKEN= Does not link .endif .endif PKG_ARGS= -v -c -${COMMENT:Q} -d ${DESCR} -f ${TMPPLIST} -p ${PREFIX} -P "`cd ${PORTSDIR}/devel/cross-binutils && ${MAKE} ${DEPENDS_ARGS} -V PKGNAME`:devel/cross-binutils" ${EXTRA_PKG_ARGS} $${_LATE_PKG_ARGS} -m ${MTREE_FILE} -o ${PKGORIGIN} .if ${PORT_OPTIONS:MCXX} TGTLANGS:= "${TGTLANGS},c++" PLIST_FILES+= bin/${OURTARGET}-c++ \ bin/${OURTARGET}-g++ \ ${OURTARGET}/bin/c++ \ ${OURTARGET}/bin/g++ .endif .if ${PORT_OPTIONS:MOBJC} TGTLANGS:= "${TGTLANGS},objc" .endif .if ${PORT_OPTIONS:MFORTRAN} TGTLANGS:= "${TGTLANGS},fortran" PLIST_FILES+= bin/${OURTARGET}-gfortran \ ${OURTARGET}/bin/gfortran .endif .if ${PORT_OPTIONS:MRTEMS_PATCHES} PATCHFILES+= gcc-core-${PORTVERSION}-rtems4.11-20120703.diff \ newlib-${NEWLIB_VERSION}-rtems4.11-20110109.diff .endif pre-everything:: @${ECHO_MSG} @${ECHO_MSG} "---------------------------------------------------------" @${ECHO_MSG} "You can specify target architectur using TGTARCH switch," @${ECHO_MSG} "and ABI using TGTABI switch." @${ECHO_MSG} @${ECHO_MSG} "Default CPU module can be set using WITH_CPU, FPU type is" @${ECHO_MSG} "selectable through WITH_FLOAT_TYPE" @${ECHO_MSG} @${ECHO_MSG} "NOTE: not all options combinations are supported. For full" @${ECHO_MSG} "list of supported values refer to binutils documentation" @${ECHO_MSG} "---------------------------------------------------------" @${ECHO_MSG} post-extract: @(cd ${WRKSRC} && ${TAR} -xzf \ ${DISTDIR}/newlib-${NEWLIB_VERSION}${NEWLIB_EXTRACT_SUFX}) @${LN} -sf ${WRKSRC}/newlib-${NEWLIB_VERSION}/newlib ${WRKSRC}/newlib @${LN} -sf ${WRKSRC}/newlib-${NEWLIB_VERSION}/libgloss \ ${WRKSRC}/libgloss ${MKDIR} ${CONFIGURE_WRKSRC}/ post-patch: # # Fix INFO references # .for FILE in cpp cppinternals gcc gccint @${FIXREFS} ${FILE} ${WRKSRC}/gcc/doc/*.texi ${WRKSRC}/gcc/Makefile.in @${MV} ${WRKSRC}/gcc/doc/${FILE}.texi \ ${WRKSRC}/gcc/doc/${OURTARGET}-${FILE}.texi .endfor # pr ports/159001 @${MKDIR} ${WRKSRC}/include/sys @${INSTALL_DATA} /usr/include/sys/sysctl.h ${WRKSRC}/include/sys # # Do not install manpages # @${REINPLACE_CMD} -E -e '/^install:/,/^$$/s,install-man,,' \ ${WRKSRC}/gcc/Makefile.in # # Do not install unneeded infofiles # @${REINPLACE_CMD} -E \ -e '/\$$\(DESTDIR\)\$$\(infodir\)\/gccinstall.info/d' \ ${WRKSRC}/gcc/Makefile.in # # Do not install libiberty # @${REINPLACE_CMD} -E -e 's,^(install:).*,\1,' \ ${WRKSRC}/libiberty/Makefile.in post-install: # # Install manpages # .for FILE in ${MANPAGES} ${INSTALL_MAN} ${WRKSRC}/gcc/doc/${FILE} \ ${MAN1PREFIX}/man/man1/${OURTARGET}-${FILE} .endfor # # Generate symlinks for binutils binaries to let gcc found them # .for F in ${LN_BINARIES} @${LN} -sf ../../../../bin/${PKGNAMEPREFIX}$F \ ${PREFIX}/libexec/gcc/${OURTARGET}/${PORTVERSION}/$F .endfor # # Build pkg-plist # .for DIR in ${GCC_AUTODIRS:S,^,${PREFIX}/,} @${FIND} ${DIR} ! -type d ! -regex .*/ldscripts/[^/]* |\ ${SED} 's,^${PREFIX}/,,' >> ${TMPPLIST} @${FIND} ${DIR} -type d ! -name ldscripts | ${SORT} -r | \ ${SED} -E -e 's,(.*),@unexec rmdir \1 2>/dev/null || true,' >> \ ${TMPPLIST} .endfor @${ECHO_CMD} "@unexec rmdir ${PREFIX}/${OURTARGET}/bin 2>/dev/null " \ "|| true" >> ${TMPPLIST} @${ECHO_CMD} "@unexec rmdir ${PREFIX}/${OURTARGET} 2>/dev/null || true"\ >> ${TMPPLIST} @${ECHO_CMD} "@unexec rmdir ${PREFIX}/libexec/gcc 2>/dev/null || true" \ >> ${TMPPLIST} @${ECHO_CMD} "@unexec rmdir ${PREFIX}/lib/gcc 2>/dev/null || true" \ >> ${TMPPLIST} .include