# $NetBSD: cross.mk,v 1.40 2009/06/14 22:57:58 joerg Exp $ # Shared definitions for building a cross-compile environment. .include "../../mk/bsd.prefs.mk" DISTNAME= cross-${TARGET_ARCH}-${DISTVERSION} CATEGORIES+= cross lang USE_CROSSBASE= yes PLIST_SRC= ${WRKDIR}/.PLIST_SRC HOMEPAGE?= http://egcs.cygnus.com/ TARGET_DIR= ${PREFIX}/${TARGET_ARCH} COMMON_DIR= ${PKGSRCDIR}/cross/COMMON PLIST_PRE?= ${PKGDIR}/PLIST MESSAGE_SUBST+= CROSSBASE=${CROSSBASE} pre-install: pre-install-dirs pre-install-dirs: ${INSTALL_DATA_DIR} ${PREFIX} ${INSTALL_DATA_DIR} ${PREFIX}/bin ${INSTALL_DATA_DIR} ${PREFIX}/lib ${INSTALL_DATA_DIR} ${TARGET_DIR} ${INSTALL_DATA_DIR} ${TARGET_DIR}/bin ${INSTALL_DATA_DIR} ${TARGET_DIR}/include ${INSTALL_DATA_DIR} ${TARGET_DIR}/lib .if defined(USE_CROSS_BINUTILS) BINUTILS_DISTNAME= binutils-2.15 BINUTILS_WRKSRC= ${WRKDIR}/${BINUTILS_DISTNAME} # Don't use optimizations taken from /etc/mk.conf for the native compiler CFLAGS= # empty CXXFLAGS= # empty CROSS_DISTFILES+= ${BINUTILS_DISTNAME}.tar.gz SITES.${BINUTILS_DISTNAME}.tar.gz+= ${MASTER_SITE_GNU:=binutils/} CONFIGURE_ARGS+= --with-gnu-as --with-gnu-ld DEPENDS+= cross-binutils>=2.15.0.0:../../cross/binutils PLIST_PRE+= ${COMMON_DIR}/PLIST-binutils AS_FOR_TARGET= ${BINUTILS_WRKSRC}/gas/as-new AR_FOR_TARGET= ${WRKDIR}/ar NM_FOR_TARGET= ${WRKDIR}/nm RANLIB_FOR_TARGET= ${WRKDIR}/ranlib LD_FOR_TARGET= ${WRKDIR}/ld USE_TOOLS+= patch pre-patch: binutils-patch pre-configure: binutils-configure do-build: binutils-build do-install: binutils-install binutils-patch: @for i in ${COMMON_DIR}/patches-binutils/patch-*; do \ ${PATCH} -d ${BINUTILS_WRKSRC} --forward --quiet -E < $$i; \ done BFD64ARG= --enable-64-bit-bfd binutils-configure: @cd ${BINUTILS_WRKSRC} && ${SETENV} CC="${CC}" ac_cv_path_CC="${CC}" \ CFLAGS="${CFLAGS}" ${CONFIGURE_ENV} ./configure \ --prefix=${PREFIX} --host=${MACHINE_GNU_ARCH}--netbsd \ --target=${TARGET_ARCH} ${BFD64ARG} cd ${BINUTILS_WRKSRC} && ${MAKE_PROGRAM} configure-bfd cd ${BINUTILS_WRKSRC} && ${MAKE_PROGRAM} configure-libiberty cd ${BINUTILS_WRKSRC} && ${MAKE_PROGRAM} configure-intl cd ${BINUTILS_WRKSRC} && ${MAKE_PROGRAM} configure-gas binutils-build: @cd ${BINUTILS_WRKSRC}/bfd && ${SETENV} ${MAKE_ENV} \ ${MAKE_PROGRAM} ${MAKE_FLAGS} bfd.h @cd ${BINUTILS_WRKSRC}/libiberty && ${SETENV} ${MAKE_ENV} \ ${MAKE_PROGRAM} ${MAKE_FLAGS} all @cd ${BINUTILS_WRKSRC}/intl && ${SETENV} ${MAKE_ENV} \ ${MAKE_PROGRAM} ${MAKE_FLAGS} all @cd ${BINUTILS_WRKSRC}/gas && ${SETENV} ${MAKE_ENV} \ ${MAKE_PROGRAM} ${MAKE_FLAGS} as-new ${TEST} -x ${WRKDIR}/ar || ${LINK.c} -o ${WRKDIR}/ar \ -DPREFIX=\"${PREFIX}\" \ -DGNUTARGET=\"${BINUTILS_GNUTARGET}\" \ ${COMMON_DIR}/buwrapper.c @cd ${WRKDIR} && \ ${LN} -f ar nm && \ ${LN} -f ar ranlib ${TEST} -x ${WRKDIR}/ld || ${LINK.c} -o ${WRKDIR}/ld \ -DPREFIX=\"${PREFIX}\" \ -DGNUTARGET=\"${BINUTILS_GNUTARGET}\" \ -DLDEMULATION=\"${BINUTILS_LDEMULATION}\" \ -DLD_RPATH_LINK=\"${TARGET_DIR}/lib\" \ ${COMMON_DIR}/buwrapper.c binutils-install: ${INSTALL_PROGRAM} ${BINUTILS_WRKSRC}/gas/as-new ${TARGET_DIR}/bin/as ${INSTALL_PROGRAM} ${WRKDIR}/ar ${TARGET_DIR}/bin/ar ${INSTALL_PROGRAM} ${WRKDIR}/ld ${TARGET_DIR}/bin/ld for i in addr2line nm objcopy objdump ranlib size strings strip ${BINUTILS_EXTRAS}; do \ ${LN} -f ${TARGET_DIR}/bin/ar ${TARGET_DIR}/bin/$$i; \ done for i in addr2line ar as ld nm objcopy objdump ranlib size strings strip ${BINUTILS_EXTRAS}; do \ ${LN} -f ${TARGET_DIR}/bin/$$i ${PREFIX}/bin/${TARGET_ARCH}-$$i; \ done .endif .if defined(USE_CROSS_EGCS) EGCS_DISTNAME= egcs-1.1.1 EGCS_DISTDIR= releases/${EGCS_DISTNAME} EGCS_INTVERSION= egcs-2.91.60 EGCS_PATCHBUNDLE= ${EGCS_DISTNAME}-NetBSD-19980104.diff.gz EGCS_WRKSRC= ${WRKDIR}/${EGCS_DISTNAME} EGCS_LANGUAGES= c # add to these below # only using autoheader; 2.13 and 2.54 both work fine USE_TOOLS+= autoconf .if defined(EGCS_MULTILIB) EGCS_INSTALL_LIB=install-multilib .else EGCS_INSTALL_LIB=install-libgcc .endif .if defined(EGCS_NO_RUNTIME) || defined(EGCS_FAKE_RUNTIME) EGCS_NO_CXX_RUNTIME= yes EGCS_NO_F77_RUNTIME= yes EGCS_NO_OBJC_RUNTIME= yes .endif .if !defined(EGCS_NO_CXX) CXX_CONFIGURE_ARGS+= --with-gxx-include-dir=${TARGET_DIR}/include/g++ EGCS_LANGUAGES+= c++ PLIST_PRE+= ${COMMON_DIR}/PLIST-egcs-cxx .if !defined(EGCS_NO_CXX_RUNTIME) PLIST_PRE+= ${COMMON_DIR}/PLIST-egcs-cxx-runtime .endif .endif .if !defined(EGCS_NO_F77) EGCS_LANGUAGES+= f77 PLIST_PRE+= ${COMMON_DIR}/PLIST-egcs-f77 .if !defined(EGCS_NO_F77_RUNTIME) PLIST_PRE+= ${COMMON_DIR}/PLIST-egcs-f77-runtime .endif .endif .if !defined(EGCS_NO_OBJC) EGCS_LANGUAGES+= objc PLIST_PRE+= ${COMMON_DIR}/PLIST-egcs-objc .if !defined(EGCS_NO_OBJC_RUNTIME) PLIST_PRE+= ${COMMON_DIR}/PLIST-egcs-objc-runtime .endif .endif # the main PLIST needs to go last to get the @dirrm's right PLIST_PRE+= ${COMMON_DIR}/PLIST-egcs CROSS_DISTFILES+= ${EGCS_DISTNAME}.tar.gz ${EGCS_PATCHBUNDLE} SITES.${EGCS_DISTNAME}.tar.gz= # no known-good site; fall back to distfiles mirrors SITES.${EGCS_PATCHBUNDLE}= ${MASTER_SITE_LOCAL} USE_TOOLS+= gmake pax CC_FOR_TARGET= ${EGCS_WRKSRC}/gcc/xgcc -B${EGCS_WRKSRC}/gcc/ ${CFLAGS_FOR_TARGET} CXX_FOR_TARGET= ${CC_FOR_TARGET} USE_TOOLS+= chmod EGCS_MAKE_FLAGS= CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" \ CC_FOR_TARGET="${CC_FOR_TARGET}" \ GCC_FOR_TARGET="${CC_FOR_TARGET}" \ CXX_FOR_TARGET="${CXX_FOR_TARGET}" \ AS_FOR_TARGET="${AS_FOR_TARGET}" \ AR_FOR_TARGET="${AR_FOR_TARGET}" \ NM_FOR_TARGET="${NM_FOR_TARGET}" \ RANLIB_FOR_TARGET="${RANLIB_FOR_TARGET}" \ LDFLAGS_FOR_TARGET="${LDFLAGS_FOR_TARGET}" \ LANGUAGES="${EGCS_LANGUAGES}" \ INSTALL="${INSTALL} -c -o ${BINOWN} -g ${BINGRP}" \ INSTALL_PROGRAM="${INSTALL_PROGRAM}" \ ac_cv_path_ac_cv_prog_chmod="${TOOLS_CHMOD}" EGCS_MAKE= ${SETENV} ${MAKE_ENV} \ ${MAKE_PROGRAM} ${MAKE_FLAGS} ${EGCS_MAKE_FLAGS} .if defined(EGCS_FAKE_RUNTIME) CROSS_SYS_INCLUDE= ${WRKDIR}/include .endif .if defined(CROSS_SYS_INCLUDE) CFLAGS_FOR_TARGET+= -idirafter ${CROSS_SYS_INCLUDE} EGCS_MAKE_FLAGS+= SYSTEM_HEADER_DIR="${CROSS_SYS_INCLUDE}" .endif .if defined(SYS_LIB) LDFLAGS_FOR_TARGET+= -L${SYS_LIB} .endif pre-patch: egcs-patch pre-configure: egcs-configure do-build: egcs-build do-install: egcs-install egcs-patch: @${GZCAT} ${_DISTDIR}/${EGCS_PATCHBUNDLE} | \ ${PATCH} -d ${EGCS_WRKSRC} --forward --quiet -E @for i in ${COMMON_DIR}/patches-egcs/patch-*; do \ ${PATCH} -d ${EGCS_WRKSRC} --forward --quiet -E < $$i; \ done egcs-configure: @cd ${EGCS_WRKSRC} && ${SETENV} CC="${CC}" ac_cv_path_CC="${CC}" \ CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" LDFLAGS="${LDFLAGS}" \ INSTALL="${INSTALL} -c -o ${BINOWN} -g ${BINGRP}" \ INSTALL_PROGRAM="${INSTALL_PROGRAM}" \ ./configure --prefix=${PREFIX} \ --host=${MACHINE_GNU_ARCH}--netbsd --target=${TARGET_ARCH} \ ${CXX_CONFIGURE_ARGS} .if defined(EGCS_FAKE_RUNTIME) @${MKDIR} ${CROSS_SYS_INCLUDE} ${CROSS_SYS_INCLUDE}/machine \ ${CROSS_SYS_INCLUDE}/sys @cd ${CROSS_SYS_INCLUDE} && ${TOUCH} ${TOUCH_FLAGS} machine/ansi.h \ sys/time.h stdlib.h unistd.h .endif egcs-build: @${LN} -sf ${AS_FOR_TARGET} ${EGCS_WRKSRC}/gcc/as @${LN} -sf ${LD_FOR_TARGET} ${EGCS_WRKSRC}/gcc/ld @cd ${EGCS_WRKSRC}/gcc && ${EGCS_MAKE} all .if !defined(EGCS_NO_CXX) && !defined(EGCS_NO_CXX_RUNTIME) @cd ${EGCS_WRKSRC} && ${EGCS_MAKE} configure-target-libio configure-target-libstdc++ all-target-libio all-target-libstdc++ .endif .if !defined(EGCS_NO_F77) && !defined(EGCS_NO_F77_RUNTIME) @cd ${EGCS_WRKSRC} && ${EGCS_MAKE} configure-target-libf2c all-target-libf2c .endif .if !defined(EGCS_NO_OBJC) && !defined(EGCS_NO_OBJC_RUNTIME) @cd ${EGCS_WRKSRC}/gcc && ${EGCS_MAKE} objc-runtime .endif egcs-install: @cd ${EGCS_WRKSRC}/gcc && ${SETENV} ${MAKE_ENV} \ ${MAKE_PROGRAM} ${MAKE_FLAGS} ${EGCS_MAKE_FLAGS} \ install-common install-headers ${EGCS_INSTALL_LIB} install-driver ${CHOWN} -R ${BINOWN}:${BINGRP} ${PREFIX}/lib/gcc-lib/${TARGET_ARCH}/${EGCS_INTVERSION} ${LN} -f ${PREFIX}/bin/${TARGET_ARCH}-gcc ${PREFIX}/bin/${TARGET_ARCH}-cc ${LN} -f ${PREFIX}/bin/${TARGET_ARCH}-gcc ${TARGET_DIR}/bin/cc .if !defined(EGCS_NO_F77) .if !defined(EGCS_NO_F77_RUNTIME) @cd ${EGCS_WRKSRC} && ${EGCS_MAKE} install-target-libf2c .endif ${LN} -f ${PREFIX}/bin/${TARGET_ARCH}-g77 ${PREFIX}/bin/${TARGET_ARCH}-f77 ${LN} -f ${PREFIX}/bin/${TARGET_ARCH}-g77 ${PREFIX}/bin/${TARGET_ARCH}-fort77 for file in f77 fort77 g77; do \ ${LN} -f ${PREFIX}/bin/${TARGET_ARCH}-$$file ${TARGET_DIR}/bin/$$file; \ done .endif .if !defined(EGCS_NO_CXX) .if !defined(EGCS_NO_CXX_RUNTIME) @${MKDIR} ${TARGET_DIR}/include/g++/std @cd ${EGCS_WRKSRC} && ${EGCS_MAKE} install-target-libstdc++ .endif for file in c++ c++filt g++; do \ ${LN} -f ${PREFIX}/bin/${TARGET_ARCH}-$$file ${TARGET_DIR}/bin/$$file; \ done .endif @${RMDIR} -p ${PREFIX}/info 2>/dev/null || ${TRUE} @${RMDIR} -p ${PREFIX}/man/man1 2>/dev/null || ${TRUE} .endif .if defined(CROSS_DISTFILES) DISTFILES+= ${CROSS_DISTFILES} .if defined(EXTRACT_ONLY) EXTRACT_ONLY+= ${CROSS_DISTFILES:N*.diff.gz} .else EXTRACT_ONLY= ${DISTFILES:N*.diff.gz} .endif .endif .if defined(CROSS_SYS_INCLUDE) && !defined(EGCS_FAKE_RUNTIME) pre-install: pre-install-includes pre-install-includes: cd ${CROSS_SYS_INCLUDE} && pax -rw . ${TARGET_DIR}/include .endif .if defined(SYS_LIB) pre-install: pre-install-lib pre-install-lib: cd ${SYS_LIB} && pax -rw . ${TARGET_DIR}/lib .endif post-install: post-install-plist post-install-plist: @${SED} -e 's|$${TARGET_ARCH}|${TARGET_ARCH}|' \ -e 's|$${EGCS_INTVERSION}|${EGCS_INTVERSION}|' \ ${PLIST_PRE} >${PLIST_SRC} @${ECHO} '@pkgdir ${TARGET_ARCH}/include' >>${PLIST_SRC} @${ECHO} '@pkgdir ${TARGET_ARCH}/lib' >>${PLIST_SRC} .include "../../mk/bsd.pkg.mk" EXTRACT_BEFORE_ARGS:= -X ${COMMON_DIR}/exclude ${EXTRACT_BEFORE_ARGS}