Similar to lang/gnatdroid-armv7, lang/gnatdroid-x86 is a cross-compiler targetting Android. The former targets ARMv7 processors while the latter targets Android on x86 (32-bit). The latter also runs on Virtualbox as a bonus. The new ports are implemented as slaves to the ARMv7 versions. The GNAT ACATS were run, and it passed every test except CXG2024, "accuracy of multiplication and division of mixed decimal and binary fixed point numbers". subtest 13: expected -51.00 got 50.0 subtest 14: expected 51.0 got 50.0 This is probably a rounding error unique to 32-bit x86. Overall this version passed better than gnatdroid-armv7 because unwind is supported, enabling check check support. Also added: lang/gnatdroid-sysroot-x86 (KitKat and Lollipop API) lang/gnatdroid-binutils-x86 Despite the desciption, C++, Fortran and Objective-C should also work well (in addition to advertised C and Ada frontends). === The gnatdroid-x86 port builds a C/Ada cross-compiler based on GCC 4.9 that targets the Android operating system (up to version 5.0, API level 21) running on x86 or x86_64 architecture (version 7). This produces binaries that run natively on x86-based Android devices.
159 lines
4.9 KiB
Makefile
159 lines
4.9 KiB
Makefile
# Created by: John Marino <marino@FreeBSD.org>
|
|
# $FreeBSD$
|
|
|
|
PORTNAME?= armv7
|
|
PORTVERSION= ${SNAPSHOT}
|
|
PORTREVISION?= ${ARMV7_PR}
|
|
CATEGORIES= lang
|
|
MASTER_SITES= GCC/releases/gcc-${GCC_VERSION}
|
|
PKGNAMEPREFIX= gnatdroid-
|
|
DISTFILES= ${IDENTIFICATION}.tar.bz2
|
|
|
|
MAINTAINER?= marino@FreeBSD.org
|
|
COMMENT?= C/Ada cross-compiler, target: Android ARMv7
|
|
|
|
LICENSE= GPLv3 GPLv3RLE
|
|
LICENSE_COMB= multi
|
|
|
|
BUILD_DEPENDS= ${SYSROOT}>=19:${PORTSDIR}/lang/${SYSROOT} \
|
|
${GDBINUTILS}>=2.21:${PORTSDIR}/lang/${GDBINUTILS}
|
|
RUN_DEPENDS:= ${BUILD_DEPENDS}
|
|
|
|
NO_LICENSES_INSTALL= yes
|
|
|
|
.include "${.CURDIR}/../gcc-aux/Makefile.common"
|
|
|
|
USES+= ada:49 gmake
|
|
LANGS= c c++ ada
|
|
APPLY_DIFFS= core ada cxx ada-testsuite
|
|
NO_MTREE= YES
|
|
DISTINFO_FILE= ${.CURDIR}/../gcc-aux/distinfo
|
|
|
|
OPTIONS_DEFINE= FORT OBJC
|
|
OPTIONS_SUB= yes
|
|
FORT_DESC= Also build Fortran language
|
|
OBJC_DESC= Also build Objective-C language
|
|
|
|
DROID_TARGET?= arm-aux-linux-androideabi
|
|
CPUVERSION?= ARMv7
|
|
ARG_ARCH?= --with-arch=armv7-a
|
|
ARG_FPU?= --with-fpu=neon
|
|
ARG_FLOATSOFT?= --with-float=soft
|
|
ALL_TARGET= all
|
|
GARCH= ${ARCH:S/amd64/x86_64/}
|
|
BITS= ${GARCH:S/x86_64/64/:S/i386/32/}
|
|
OS_LABEL4VERS= [${OPSYS}${BITS} x Android ${CPUVERSION}]
|
|
WRKSRC= ${WRKDIR}/${IDENTIFICATION}
|
|
BUILD_WRKSRC= ${WRKDIR}/build
|
|
PATCHDIR= ${.CURDIR}/../gcc-aux/files
|
|
CFG_SCRIPT= ${WRKSRC}/configure
|
|
REVFILE= ${WRKSRC}/gcc/REVISION
|
|
SRPREFIX?= ${LOCALBASE}/android
|
|
PREFIX= ${SRPREFIX}/${CPUVERSION}
|
|
SYSROOT?= gnatdroid-sysroot
|
|
GDBINUTILS?= gnatdroid-binutils
|
|
PLIST_SUB+= TARGET="${DROID_TARGET}"
|
|
PLIST_SUB+= GCCVERS="${GCC_VERSION}"
|
|
SUB_FILES= pkg-message
|
|
SUB_LIST= TARGET="${DROID_TARGET}"
|
|
EXTRA_PATCHES= ${FILESDIR}/acats.diff
|
|
CROSS= gnat gnatbind gnatchop gnatclean gnatfind gnatkr \
|
|
gnatlink gnatls gnatmake gnatprep gnatxref
|
|
|
|
.include <bsd.port.options.mk>
|
|
|
|
.if ${PORT_OPTIONS:MFORT}
|
|
LANGS+= fortran
|
|
APPLY_DIFFS+= fortran
|
|
.endif
|
|
|
|
.if ${PORT_OPTIONS:MOBJC}
|
|
LANGS+= objc
|
|
.endif
|
|
|
|
INSTALL_ENV= ${MAKE_ENV:C/^PATH=/&${SRPREFIX}\/${CPUVERSION}\/bin:/}
|
|
|
|
ADA_CONFIG_ARGS= --enable-languages=${LANGS:Q}
|
|
ADA_CONFIG_ARGS+= --target=${DROID_TARGET}
|
|
ADA_CONFIG_ARGS+= --program-prefix=${DROID_TARGET}-
|
|
ADA_CONFIG_ARGS+= --prefix=${PREFIX}
|
|
ADA_CONFIG_ARGS+= ${ARG_ARCH}
|
|
ADA_CONFIG_ARGS+= --with-system-zlib
|
|
ADA_CONFIG_ARGS+= --with-gmp=${LOCALBASE}
|
|
ADA_CONFIG_ARGS+= --with-mpfr=${LOCALBASE}
|
|
ADA_CONFIG_ARGS+= --with-mpc=${LOCALBASE}
|
|
ADA_CONFIG_ARGS+= ${ICONV_CONFIGURE_ARG}
|
|
ADA_CONFIG_ARGS+= --with-sysroot=${SRPREFIX}
|
|
ADA_CONFIG_ARGS+= ${ARG_FLOATSOFT}
|
|
ADA_CONFIG_ARGS+= ${ARG_FPU}
|
|
ADA_CONFIG_ARGS+= --enable-target-optspace
|
|
ADA_CONFIG_ARGS+= --enable-threads=posix
|
|
ADA_CONFIG_ARGS+= --enable-cxx-flags=-frtti
|
|
ADA_CONFIG_ARGS+= --disable-bootstrap
|
|
ADA_CONFIG_ARGS+= --disable-shared
|
|
ADA_CONFIG_ARGS+= --disable-libssp
|
|
ADA_CONFIG_ARGS+= --disable-libgomp
|
|
ADA_CONFIG_ARGS+= --disable-libmudflap
|
|
ADA_CONFIG_ARGS+= --disable-libquadmath
|
|
ADA_CONFIG_ARGS+= --disable-libsanitizer
|
|
ADA_CONFIG_ARGS+= --disable-libitm
|
|
ADA_CONFIG_ARGS+= --disable-sjlj-exceptions
|
|
ADA_CONFIG_ARGS+= --disable-tls
|
|
ADA_CONFIG_ARGS+= --disable-nls
|
|
|
|
post-extract:
|
|
# Personalize GNAT for each different machine
|
|
@${ECHO} "-=> GNAT AUX ${OS_LABEL4VERS}" > ${REVFILE}
|
|
${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 < ${PATCHDIR}/diff-${suffix}
|
|
.endfor
|
|
@(cd ${WRKSRC}/gcc/testsuite/ada/acats && \
|
|
${CP} run_remote.sh run_all.sh)
|
|
${REINPLACE_CMD} -e 's|@REMOTE_TARGET@|${DROID_TARGET}|' \
|
|
${WRKSRC}/gcc/testsuite/ada/acats/run_all.sh
|
|
${REINPLACE_CMD} -e 's|<syscall.h>|<sys/syscall.h>|' \
|
|
${WRKSRC}/libstdc++-v3/libsupc++/guard.cc
|
|
|
|
do-configure:
|
|
${MKDIR} ${BUILD_WRKSRC}
|
|
(cd ${BUILD_WRKSRC} && ${SETENV} ${CONFIGURE_ENV} \
|
|
${CFG_SCRIPT} ${ADA_CONFIG_ARGS})
|
|
|
|
do-install:
|
|
# Buggy makefile; seems to have forgotten this is a cross compiler
|
|
# Manually rename products so it doesn't rebuild them with new name
|
|
.for X in ${CROSS}
|
|
. if !exists(${BUILD_WRKSRC}/gcc/${X})
|
|
${CP} -a ${BUILD_WRKSRC}/gcc/${X}-cross ${BUILD_WRKSRC}/gcc/${X}
|
|
. endif
|
|
.endfor
|
|
(cd ${BUILD_WRKSRC} && ${SETENV} ${INSTALL_ENV} \
|
|
${MAKE_CMD} install-strip DESTDIR=${STAGEDIR})
|
|
${MV} ${STAGEDIR}${PREFIX}/bin/ada \
|
|
${STAGEDIR}${PREFIX}/bin/${DROID_TARGET}-ada
|
|
|
|
post-stage:
|
|
.for loop in A B
|
|
(cd ${STAGEDIR}${PREFIX}; ${FIND} * -type d -empty | \
|
|
${SORT} -dr | ${XARGS} ${RMDIR})
|
|
.endfor
|
|
(cd ${STAGEDIR}${PREFIX}; \
|
|
${FIND} * \( -type f -or -type l \) | ${SORT} | \
|
|
${SED} -e '/^bin\//d' -e '/^${DROID_TARGET}\/bin\//d' \
|
|
>> ${TMPPLIST})
|
|
|
|
acats: build
|
|
(cd ${BUILD_WRKSRC}/gcc && ${SETENV} \
|
|
PATH=${LOCALBASE}/gcc-aux/bin:${PATH}:${PREFIX}/bin \
|
|
${GMAKE} -sk check-acats)
|
|
|
|
gnatdg: build
|
|
(cd ${BUILD_WRKSRC}/gcc && ${SETENV} \
|
|
PATH=${LOCALBASE}/gcc-aux/bin:${PATH}:${PREFIX}/bin \
|
|
${GMAKE} -sk check-gnat RUNTESTFLAGS=--target_board=gnatdroid)
|
|
|
|
.include <bsd.port.mk>
|