ports/160426: [new port] gnatdroid cross compiler (Android ARM v5)

John Marino freebsdml at marino.st
Sat Sep 3 14:20:10 UTC 2011


>Number:         160426
>Category:       ports
>Synopsis:       [new port] gnatdroid cross compiler (Android ARM v5)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sat Sep 03 14:20:10 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     John Marino
>Release:        
>Organization:
>Environment:
>Description:
This port builds a FreeBSD to Android (ARMv5) cross-compiler, which supports Ada and C.
ARMv5 is the highest version supported by the Android SDK emulator.
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	gnatdroid-armv5
#	gnatdroid-armv5/distinfo
#	gnatdroid-armv5/files
#	gnatdroid-armv5/files/patch-configure
#	gnatdroid-armv5/files/patch-gcc__ada__adaint.c
#	gnatdroid-armv5/files/patch-gcc__Makefile.in
#	gnatdroid-armv5/files/patch-libiberty__getpagesize.c
#	gnatdroid-armv5/files/patch-libiberty__setprotitle.c
#	gnatdroid-armv5/Makefile
#	gnatdroid-armv5/pkg-descr
#	gnatdroid-armv5/pkg-plist
#
echo c - gnatdroid-armv5
mkdir -p gnatdroid-armv5 > /dev/null 2>&1
echo x - gnatdroid-armv5/distinfo
sed 's/^X//' >gnatdroid-armv5/distinfo << 'END-of-gnatdroid-armv5/distinfo'
XSHA256 (arm-gnat-20110627.tar.bz2) = 3698806aabc63ab93a23e57c2fc4065f41f788e2ac9cff4a05ae501723e7499f
XSIZE (arm-gnat-20110627.tar.bz2) = 19133878
END-of-gnatdroid-armv5/distinfo
echo c - gnatdroid-armv5/files
mkdir -p gnatdroid-armv5/files > /dev/null 2>&1
echo x - gnatdroid-armv5/files/patch-configure
sed 's/^X//' >gnatdroid-armv5/files/patch-configure << 'END-of-gnatdroid-armv5/files/patch-configure'
X--- configure.orig	2011-07-18 00:12:43.000000000 +0200
X+++ configure	2011-07-18 00:13:35.000000000 +0200
X@@ -3233,7 +3233,7 @@
X     libgloss_dir=arm
X     ;;
X   arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* )
X-    noconfigdirs="$noconfigdirs target-libffi target-qthreads"
X+    noconfigdirs="$noconfigdirs target-libffi target-qthreads target-libstdc++-v3"
X     libgloss_dir=arm
X     ;;
X   arm*-*-linux-gnueabi)
END-of-gnatdroid-armv5/files/patch-configure
echo x - gnatdroid-armv5/files/patch-gcc__ada__adaint.c
sed 's/^X//' >gnatdroid-armv5/files/patch-gcc__ada__adaint.c << 'END-of-gnatdroid-armv5/files/patch-gcc__ada__adaint.c'
X--- gcc/ada/adaint.c.orig	2011-04-16 05:34:37.000000000 -0500
X+++ gcc/ada/adaint.c	2011-08-19 23:28:10.000000000 -0500
X@@ -1201,6 +1201,47 @@
X     free (pname);
X   }
X 
X+#elif defined (__ANDROID__)
X+
X+  /* 
X+   * ext2 /ext3/ext4/fat16/fat32 have no path limits 
X+   * /data/local/tmp normally requires rooted devices, if it even exists
X+   * /sdcard is the standard location for external storage.  Nativeactivity
X+   * manifest needs to authorize its use, otherwise it might not have the
X+   * proper permissions.
X+   */
X+
X+  int testfd;
X+  char *datadir = getenv ("ANDROID_DATA");
X+
X+  if (datadir == NULL)
X+    strcpy (tmp_filename, "/data/local/tmp/gnat-XXXXXX");
X+  else 
X+    sprintf (tmp_filename, "%s/local/tmp/gnat-XXXXXX", datadir);
X+
X+  testfd = mkstemp (tmp_filename);  
X+  if (testfd != -1)
X+    {
X+      close (testfd);
X+      return;
X+    }
X+
X+  char *sdcard = getenv ("EXTERNAL_STORAGE");
X+
X+  if (sdcard == NULL)
X+    strcpy (tmp_filename, "/sdcard/gnat-XXXXXX");      
X+  else
X+    sprintf (tmp_filename, "%s/gnat-XXXXXX", sdcard);
X+    
X+  testfd = mkstemp (tmp_filename);  
X+  if (testfd != -1)
X+    {
X+      close (testfd);
X+      return;
X+    }
X+       
X+  tmpnam (tmp_filename);
X+
X #elif defined (linux) || defined (__FreeBSD__) || defined (__NetBSD__) \
X   || defined (__DragonFly__) \
X   || defined (__OpenBSD__) || defined(__GLIBC__)
END-of-gnatdroid-armv5/files/patch-gcc__ada__adaint.c
echo x - gnatdroid-armv5/files/patch-gcc__Makefile.in
sed 's/^X//' >gnatdroid-armv5/files/patch-gcc__Makefile.in << 'END-of-gnatdroid-armv5/files/patch-gcc__Makefile.in'
X--- gcc/Makefile.in.orig	2011-01-09 00:44:20.000000000 +0100
X+++ gcc/Makefile.in	2011-01-09 00:53:28.000000000 +0100
X@@ -306,11 +306,11 @@
X # This is where we get zlib from.  zlibdir is -L../zlib and zlibinc is
X # -I../zlib, unless we were configured with --with-system-zlib, in which
X # case both are empty.
X-ZLIB = @zlibdir@ -lz
X+ZLIB = -Wl,-Bstatic @zlibdir@ -lz -Wl,-Bdynamic
X ZLIBINC = @zlibinc@
X 
X # How to find GMP
X-GMPLIBS = @GMPLIBS@
X+GMPLIBS = -Wl,-Bstatic @GMPLIBS@ -Wl,-Bdynamic
X GMPINC = @GMPINC@
X 
X # How to find PPL
X@@ -626,8 +626,8 @@
X LIBINTL_DEP = @LIBINTL_DEP@
X 
X # Character encoding conversion library.
X-LIBICONV = @LIBICONV@
X-LIBICONV_DEP = @LIBICONV_DEP@
X+LIBICONV = -Wl,-Bstatic -L/usr/local/lib -liconv -Wl,-Bdynamic
X+LIBICONV_DEP =
X 
X # The GC method to be used on this system.
X GGC=@GGC at .o
END-of-gnatdroid-armv5/files/patch-gcc__Makefile.in
echo x - gnatdroid-armv5/files/patch-libiberty__getpagesize.c
sed 's/^X//' >gnatdroid-armv5/files/patch-libiberty__getpagesize.c << 'END-of-gnatdroid-armv5/files/patch-libiberty__getpagesize.c'
X--- libiberty/getpagesize.c.orig	2011-01-29 06:55:10 +0100
X+++ libiberty/getpagesize.c	2011-01-29 07:07:40 +0100
X@@ -20,6 +20,7 @@
X 
X */
X 
X+#ifndef __ANDROID__
X #ifndef VMS
X 
X #include "config.h"
X@@ -88,3 +89,4 @@
X }
X 
X #endif /* VMS */
X+#endif /* __ANDROID__ */
END-of-gnatdroid-armv5/files/patch-libiberty__getpagesize.c
echo x - gnatdroid-armv5/files/patch-libiberty__setprotitle.c
sed 's/^X//' >gnatdroid-armv5/files/patch-libiberty__setprotitle.c << 'END-of-gnatdroid-armv5/files/patch-libiberty__setprotitle.c'
X--- libiberty/setproctitle.c.orig	2011-01-29 07:11:03 +0100
X+++ libiberty/setproctitle.c	2011-01-29 07:28:55 +0100
X@@ -40,9 +40,11 @@
X void
X setproctitle (const char *name ATTRIBUTE_UNUSED, ...)
X {
X+#ifndef __ANDROID__
X #ifdef PR_SET_NAME
X   /* On Linux this sets the top visible "comm", but not necessarily
X      the name visible in ps. */
X   prctl (PR_SET_NAME, name);
X #endif
X+#endif
X }
END-of-gnatdroid-armv5/files/patch-libiberty__setprotitle.c
echo x - gnatdroid-armv5/Makefile
sed 's/^X//' >gnatdroid-armv5/Makefile << 'END-of-gnatdroid-armv5/Makefile'
X# New ports collection makefile for:	gnatdroid-armv5
X# Date created:				20 July 2011
X# Whom:					John Marino <draco at marino>
X#
X# $FreeBSD$
X#
X
XPORTNAME=	armv5
XPORTVERSION=	20110627
XCATEGORIES=	lang
XMASTER_SITES=	http://downloads.dragonlace.net/src/ \
X		http://dragonlace.mirrors.ada.cx/src/
XPKGNAMEPREFIX=	gnatdroid-
XDISTNAME=	arm-gnat-${PORTVERSION}
X
XMAINTAINER=	draco at marino.st
XCOMMENT=	C/Ada cross-compiler, target: Android ARMv5
X
XBUILD_DEPENDS=	gnatdroid-sysroot>=9:${PORTSDIR}/lang/gnatdroid-sysroot \
X		gnatdroid-binutils>=2.21:${PORTSDIR}/lang/gnatdroid-binutils \
X		${LOCALBASE}/lib/libgmp.so:${PORTSDIR}/math/gmp \
X		${LOCALBASE}/lib/libmpfr.so:${PORTSDIR}/math/mpfr \
X		${LOCALBASE}/lib/libmpc.so:${PORTSDIR}/math/mpc
XRUN_DEPENDS:=	${BUILD_DEPENDS}
XBUILD_DEPENDS+=	gnat-aux>=20110325:${PORTSDIR}/lang/gnat-aux
X
XUSE_BZIP2=	YES
XUSE_GMAKE=	YES
XHAS_CONFIGURE=	YES
XUSE_ICONV=	YES
XUSE_BISON=	build
XALL_TARGET=	default
XNO_MTREE=	YES
XMAKE_JOBS_SAFE=	YES
X
XDROID_TARGET=		arm-android-eabi
XDROID_ARCH=		armv5te
XARMVERSION=		ARMv5
XFPU=			vfp
XGCC_BRANCH=		4.6
XGCC_VERSION=		4.6.1
XWRKSRC=			${WRKDIR}/gcc-${GCC_BRANCH}-${PORTVERSION}
XBUILDDIR=		${WRKDIR}/build
XCFG_SCRIPT=		${WRKSRC}/configure
XREVFILE=		${WRKSRC}/gcc/REVISION
XSRPREFIX=		${LOCALBASE}/android9
XPREFIX=			${SRPREFIX}/${ARMVERSION}
XFULL_GNATGCC=		${LOCALBASE}/bin/gnatgcc
XPLIST_SUB+=		TARGET="${DROID_TARGET}"
XPLIST_SUB+=		GCCVERS="${GCC_VERSION}"
X
XADA_CONFIGURE_ENV=	CC=${FULL_GNATGCC}
X
X.include <bsd.port.pre.mk>
X
X.if ${ARCH} == "amd64"
XOS_LABEL4VERS=	"[FreeBSD64 x Android ${ARMVERSION}]"
X.else
XOS_LABEL4VERS=	"[FreeBSD32 x Android ${ARMVERSION}]"
X.endif
X
XCONFIGURE_ARGS= 	--enable-languages=c,ada
XCONFIGURE_ARGS+=	--target=${DROID_TARGET}
XCONFIGURE_ARGS+=	--program-prefix=${DROID_TARGET}-
XCONFIGURE_ARGS+=	--prefix=${PREFIX}
XCONFIGURE_ARGS+=	--with-arch=${DROID_ARCH}
XCONFIGURE_ARGS+=	--with-system-zlib
XCONFIGURE_ARGS+=	--with-gmp=${LOCALBASE}
XCONFIGURE_ARGS+=	--with-mpfr=${LOCALBASE}
XCONFIGURE_ARGS+=	--with-mpc=${LOCALBASE}
XCONFIGURE_ARGS+=	--with-libiconv-prefix=${LOCALBASE}
XCONFIGURE_ARGS+=	--with-sysroot=${SRPREFIX}
XCONFIGURE_ARGS+=	--with-float=soft
XCONFIGURE_ARGS+=	--with-fpu=${FPU}
XCONFIGURE_ARGS+=	--enable-target-optspace
XCONFIGURE_ARGS+=	--enable-threads=posix
XCONFIGURE_ARGS+=	--disable-bootstrap
XCONFIGURE_ARGS+=	--disable-shared
XCONFIGURE_ARGS+=	--disable-libssp
XCONFIGURE_ARGS+=	--disable-libgomp
XCONFIGURE_ARGS+=	--disable-libmudflap
XCONFIGURE_ARGS+=	--disable-libquadmath
XCONFIGURE_ARGS+=	--disable-libstdcxx-pch
XCONFIGURE_ARGS+=	--disable-tls
XCONFIGURE_ARGS+=	--disable-nls
X
Xpost-extract:
X	# Personalize GNAT for each different machine
X	@${ECHO} "-=> GNAT AUX ${OS_LABEL4VERS}" > ${REVFILE}
X
Xdo-configure:
X	${MKDIR} ${BUILDDIR}
X	cd ${BUILDDIR} && ${SETENV} ${ADA_CONFIGURE_ENV} \
X	${CFG_SCRIPT} ${CONFIGURE_ARGS}
X
Xdo-build:
X	cd ${BUILDDIR} && ${GMAKE} ${_MAKE_JOBS} all
X
Xdo-install:
X	cd ${BUILDDIR} && ${GMAKE} install-strip DESTDIR=${DESTDIR}
X	mv ${PREFIX}/bin/${DROID_TARGET}-gcc \
X	   ${PREFIX}/bin/${DROID_TARGET}-gnatgcc
X	mv ${PREFIX}/${DROID_TARGET}/bin/gcc \
X	   ${PREFIX}/${DROID_TARGET}/bin/gnatgcc
X
Xpost-install:
X.for d in lib/gcc libexec/gcc share
X	cd ${PREFIX}; ${FIND} $d \( -type f -or -type l \) | ${SORT} >> ${TMPPLIST}
X	cd ${PREFIX}; ${FIND} $d -type d | ${SORT} -dr | \
X	   ${SED} -e 's/^/@dirrm /g' >> ${TMPPLIST}
X.endfor
X	@${ECHO} "@dirrm include" >> ${TMPPLIST}
X	@${ECHO} "@dirrm libexec" >> ${TMPPLIST}
X	@${ECHO} "@dirrm lib" >> ${TMPPLIST}
X	
X	@${ECHO} "============================================================"
X	@${ECHO} "  Add to path: ${PREFIX}/bin"
X	@${ECHO} "  All binaries have prefix of ${DROID_TARGET}-"
X	@${ECHO} "  e.g. ${DROID_TARGET}-gnatgcc"
X	@${ECHO} "       ${DROID_TARGET}-gnatmake"
X	@${ECHO} "============================================================"
X	
X.include <bsd.port.post.mk>
END-of-gnatdroid-armv5/Makefile
echo x - gnatdroid-armv5/pkg-descr
sed 's/^X//' >gnatdroid-armv5/pkg-descr << 'END-of-gnatdroid-armv5/pkg-descr'
XThe gnatdroid-armv5 port builds a C/Ada cross-compiler based on GCC 4.6 that
Xtargets the Android operating system (version 9) running on ARM architecture
X(version 5).  This produces binaries that run natively on Android devices as
Xwell as the Android SDK emulator.
X
XWWW: http://www.dragonlace.net
END-of-gnatdroid-armv5/pkg-descr
echo x - gnatdroid-armv5/pkg-plist
sed 's/^X//' >gnatdroid-armv5/pkg-plist << 'END-of-gnatdroid-armv5/pkg-plist'
Xbin/%%TARGET%%-gnatbind
Xbin/%%TARGET%%-gnatchop
Xbin/%%TARGET%%-gnat
Xbin/%%TARGET%%-gnatkr
Xbin/%%TARGET%%-gnatlink
Xbin/%%TARGET%%-gnatls
Xbin/%%TARGET%%-gnatmake
Xbin/%%TARGET%%-gnatname
Xbin/%%TARGET%%-gnatprep
Xbin/%%TARGET%%-gnatxref
Xbin/%%TARGET%%-gnatfind
Xbin/%%TARGET%%-gnatclean
Xbin/%%TARGET%%-gcov
Xbin/%%TARGET%%-cpp
Xbin/%%TARGET%%-gnatgcc
Xbin/%%TARGET%%-gcc-%%GCCVERS%%
Xlib/libiberty.a
X%%TARGET%%/bin/gnatbind
X%%TARGET%%/bin/gnatchop
X%%TARGET%%/bin/gnat
X%%TARGET%%/bin/gnatkr
X%%TARGET%%/bin/gnatlink
X%%TARGET%%/bin/gnatls
X%%TARGET%%/bin/gnatmake
X%%TARGET%%/bin/gnatprep
X%%TARGET%%/bin/gnatgcc
X%%TARGET%%/lib/armv7-a/thumb/libiberty.a
X%%TARGET%%/lib/armv7-a/libiberty.a
X%%TARGET%%/lib/thumb/libiberty.a
X%%TARGET%%/lib/libiberty.a
X at dirrm %%TARGET%%/lib/armv7-a/thumb
X at dirrm %%TARGET%%/lib/armv7-a
X at dirrm %%TARGET%%/lib/thumb
END-of-gnatdroid-armv5/pkg-plist
exit



>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list