From 348209ec02e2fd576608b2293da806e3dd84b4e6 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Sun, 9 Aug 2015 14:39:51 -0400 Subject: [PATCH] Add a gcc5 starting attempt --- disabled-packages/gcc5/build.sh | 67 ++++++++++ disabled-packages/gcc5/g++.subpackage.sh | 3 + disabled-packages/gcc5/gcc.patch | 34 +++++ disabled-packages/gcc5/gcov.subpackage.sh | 3 + disabled-packages/gcc5/system.h.patch | 154 ++++++++++++++++++++++ 5 files changed, 261 insertions(+) create mode 100755 disabled-packages/gcc5/build.sh create mode 100644 disabled-packages/gcc5/g++.subpackage.sh create mode 100644 disabled-packages/gcc5/gcc.patch create mode 100644 disabled-packages/gcc5/gcov.subpackage.sh create mode 100644 disabled-packages/gcc5/system.h.patch diff --git a/disabled-packages/gcc5/build.sh b/disabled-packages/gcc5/build.sh new file mode 100755 index 000000000..0fa071807 --- /dev/null +++ b/disabled-packages/gcc5/build.sh @@ -0,0 +1,67 @@ +TERMUX_PKG_HOMEPAGE=http://gcc.gnu.org/ +TERMUX_PKG_DESCRIPTION="GNU C compiler" +TERMUX_PKG_DEPENDS="binutils, libgmp, libmpfr, libmpc, ndk-sysroot" +TERMUX_PKG_VERSION=5.2.0 +TERMUX_PKG_SRCURL=ftp://ftp.fu-berlin.de/unix/languages/gcc/releases/gcc-${TERMUX_PKG_VERSION}/gcc-${TERMUX_PKG_VERSION}.tar.bz2 +TERMUX_PKG_EXTRA_CONFIGURE_ARGS="--enable-languages=c,c++ --with-system-zlib --disable-multilib --disable-lto" +TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-gmp=$TERMUX_PREFIX --with-mpfr=$TERMUX_PREFIX --with-mpc=$TERMUX_PREFIX" +# To build gcc as a PIE binary: +TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-stage1-ldflags=\"-specs=$TERMUX_SCRIPTDIR/termux.spec\"" +# TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --without-headers --with-local-prefix=$TERMUX_PREFIX/include" # FIXME: gcc5 trying +if [ "$TERMUX_ARCH" = "arm" ]; then + TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-arch=armv7-a --with-fpu=neon --with-float=hard" +elif [ "$TERMUX_ARCH" = "i686" ]; then + # -mstackrealign -msse3 -m32 + TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --with-arch=i686 --with-tune=atom --with-fpmath=sse" +fi +TERMUX_PKG_KEEP_STATIC_LIBRARIES="true" +TERMUX_PKG_RM_AFTER_INSTALL="bin/gcc-ar bin/gcc-ranlib bin/c++ bin/gcc-nm bin/*-linux-* lib/gcc/*-linux-*/${TERMUX_PKG_VERSION}/plugin lib/gcc/*-linux-*/${TERMUX_PKG_VERSION}/include-fixed lib/gcc/*-linux-*/$TERMUX_PKG_VERSION/install-tools libexec/gcc/*-linux-*/${TERMUX_PKG_VERSION}/plugin libexec/gcc/*-linux-*/${TERMUX_PKG_VERSION}/install-tools share/man/man7" + +export AR_FOR_TARGET="$AR" +export AS_FOR_TARGET="$AS" +export CC_FOR_TARGET="$CC" +export CFLAGS_FOR_TARGET="$CFLAGS" +export CPP_FOR_TARGET="$CPP" +export CPPFLAGS_FOR_TARGET="$CPPFLAGS" +export CXXFLAGS_FOR_TARGET="$CXXFLAGS" +export CXX_FOR_TARGET="$CXX" +export LDFLAGS_FOR_TARGET="$LDFLAGS" +export LD_FOR_TARGET="$LD" +export PKG_CONFIG_FOR_TARGET="$PKG_CONFIG" +export RANLIB_FOR_TARGET="$RANLIB" + +unset AR +unset AS +unset CC +unset CFLAGS +unset CPP +unset CPPFLAGS +unset CXXFLAGS +unset CXX +unset LDFLAGS +unset LD +unset PKG_CONFIG +unset RANLIB + +# TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" --host=x86-linux-android" + +termux_step_make () { + make -j $TERMUX_MAKE_PROCESSES all-gcc + make -j $TERMUX_MAKE_PROCESSES all-target-libgcc +} + +termux_step_make_install () { + make install-gcc + make install-target-libgcc +} + +termux_step_post_make_install () { + if [ $TERMUX_ARCH = "arm" ]; then + # Note that moving to $TERMUX_PREFIX/lib/gcc/arm-linux-androideabi/${TERMUX_PKG_VERSION}/ + # allows compilation but fails to link at runtime + mv $TERMUX_PREFIX/lib/armv7-a/hard/libgcc_s* $TERMUX_PREFIX/lib/ + fi + + # Android 5.0 only supports PIE binaries, so build that by default with a specs file: + cp $TERMUX_SCRIPTDIR/termux.spec $TERMUX_PREFIX/lib/gcc/$TERMUX_HOST_PLATFORM/$TERMUX_PKG_VERSION/specs +} diff --git a/disabled-packages/gcc5/g++.subpackage.sh b/disabled-packages/gcc5/g++.subpackage.sh new file mode 100644 index 000000000..4a6c964f0 --- /dev/null +++ b/disabled-packages/gcc5/g++.subpackage.sh @@ -0,0 +1,3 @@ +TERMUX_SUBPKG_INCLUDE="bin/g++ share/man/man1/g++.1 libexec/gcc/arm-linux-androideabi/4.9.2/cc1plus" +TERMUX_SUBPKG_DESCRIPTION="GNU C++ compiler" +TERMUX_SUBPKG_DEPENDS="gcc,ndk-stl" diff --git a/disabled-packages/gcc5/gcc.patch b/disabled-packages/gcc5/gcc.patch new file mode 100644 index 000000000..e86025746 --- /dev/null +++ b/disabled-packages/gcc5/gcc.patch @@ -0,0 +1,34 @@ +diff -u -r ../gcc-4.8.2/libcpp/files.c ./libcpp/files.c +--- ../gcc-4.8.2/libcpp/files.c 2013-03-06 17:18:40.000000000 +0100 ++++ ./libcpp/files.c 2014-01-09 00:29:34.940181542 +0100 +@@ -716,11 +716,13 @@ + cpp_error (pfile, CPP_DL_WARNING, + "%s is shorter than expected", file->path); + ++ off_t ot = (off_t) &file->st.st_size; + file->buffer = _cpp_convert_input (pfile, + CPP_OPTION (pfile, input_charset), + buf, size + 16, total, + &file->buffer_start, +- &file->st.st_size); ++ &ot); ++ file->st.st_size = ot; + file->buffer_valid = true; + + return true; +diff -u -r ../gcc-4.8.2/libcpp/macro.c ./libcpp/macro.c +--- ../gcc-4.8.2/libcpp/macro.c 2013-01-14 19:13:59.000000000 +0100 ++++ ./libcpp/macro.c 2014-01-09 00:30:49.416179764 +0100 +@@ -245,8 +245,10 @@ + looks like "Sun Sep 16 01:03:52 1973". */ + struct tm *tb = NULL; + struct stat *st = _cpp_get_file_stat (file); +- if (st) +- tb = localtime (&st->st_mtime); ++ if (st) { ++ const time_t mtime = (const time_t) st->st_mtime; ++ tb = localtime (&mtime); ++ } + if (tb) + { + char *str = asctime (tb); diff --git a/disabled-packages/gcc5/gcov.subpackage.sh b/disabled-packages/gcc5/gcov.subpackage.sh new file mode 100644 index 000000000..49dedd0c7 --- /dev/null +++ b/disabled-packages/gcc5/gcov.subpackage.sh @@ -0,0 +1,3 @@ +TERMUX_SUBPKG_INCLUDE="bin/gcov share/man/man1/gcov.1 lib/gcc/arm-linux-androideabi/4.9.1/libgcov.a" +TERMUX_SUBPKG_DESCRIPTION="GNU coverage testing tool" +TERMUX_SUBPKG_DEPENDS="gcc" diff --git a/disabled-packages/gcc5/system.h.patch b/disabled-packages/gcc5/system.h.patch new file mode 100644 index 000000000..7bb11e027 --- /dev/null +++ b/disabled-packages/gcc5/system.h.patch @@ -0,0 +1,154 @@ +diff -u -r ../gcc-5.2.0/gcc/system.h ./gcc/system.h +--- ../gcc-5.2.0/gcc/system.h 2015-01-05 07:33:28.000000000 -0500 ++++ ./gcc/system.h 2015-08-09 09:11:10.048889012 -0400 +@@ -50,150 +50,6 @@ + #define NULL 0 + #endif + +-/* Use the unlocked open routines from libiberty. */ +- +-/* Some of these are #define on some systems, e.g. on AIX to redirect +- the names to 64bit capable functions for LARGE_FILES support. These +- redefs are pointless here so we can override them. */ +- +-#undef fopen +-#undef freopen +- +-#define fopen(PATH, MODE) fopen_unlocked (PATH, MODE) +-#define fdopen(FILDES, MODE) fdopen_unlocked (FILDES, MODE) +-#define freopen(PATH, MODE, STREAM) freopen_unlocked (PATH, MODE, STREAM) +- +-/* The compiler is not a multi-threaded application and therefore we +- do not have to use the locking functions. In fact, using the locking +- functions can cause the compiler to be significantly slower under +- I/O bound conditions (such as -g -O0 on very large source files). +- +- HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio +- code is multi-thread safe by default. If it is set to 0, then do +- not worry about using the _unlocked functions. +- +- fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are +- extensions and need to be prototyped by hand (since we do not +- define _GNU_SOURCE). */ +- +-#if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED +- +-# ifdef HAVE_PUTC_UNLOCKED +-# undef putc +-# define putc(C, Stream) putc_unlocked (C, Stream) +-# endif +-# ifdef HAVE_PUTCHAR_UNLOCKED +-# undef putchar +-# define putchar(C) putchar_unlocked (C) +-# endif +-# ifdef HAVE_GETC_UNLOCKED +-# undef getc +-# define getc(Stream) getc_unlocked (Stream) +-# endif +-# ifdef HAVE_GETCHAR_UNLOCKED +-# undef getchar +-# define getchar() getchar_unlocked () +-# endif +-# ifdef HAVE_FPUTC_UNLOCKED +-# undef fputc +-# define fputc(C, Stream) fputc_unlocked (C, Stream) +-# endif +- +-#ifdef __cplusplus +-extern "C" { +-#endif +- +-# ifdef HAVE_CLEARERR_UNLOCKED +-# undef clearerr +-# define clearerr(Stream) clearerr_unlocked (Stream) +-# if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED +-extern void clearerr_unlocked (FILE *); +-# endif +-# endif +-# ifdef HAVE_FEOF_UNLOCKED +-# undef feof +-# define feof(Stream) feof_unlocked (Stream) +-# if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED +-extern int feof_unlocked (FILE *); +-# endif +-# endif +-# ifdef HAVE_FILENO_UNLOCKED +-# undef fileno +-# define fileno(Stream) fileno_unlocked (Stream) +-# if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED +-extern int fileno_unlocked (FILE *); +-# endif +-# endif +-# ifdef HAVE_FFLUSH_UNLOCKED +-# undef fflush +-# define fflush(Stream) fflush_unlocked (Stream) +-# if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED +-extern int fflush_unlocked (FILE *); +-# endif +-# endif +-# ifdef HAVE_FGETC_UNLOCKED +-# undef fgetc +-# define fgetc(Stream) fgetc_unlocked (Stream) +-# if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED +-extern int fgetc_unlocked (FILE *); +-# endif +-# endif +-# ifdef HAVE_FGETS_UNLOCKED +-# undef fgets +-# define fgets(S, n, Stream) fgets_unlocked (S, n, Stream) +-# if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED +-extern char *fgets_unlocked (char *, int, FILE *); +-# endif +-# endif +-# ifdef HAVE_FPUTS_UNLOCKED +-# undef fputs +-# define fputs(String, Stream) fputs_unlocked (String, Stream) +-# if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED +-extern int fputs_unlocked (const char *, FILE *); +-# endif +-# endif +-# ifdef HAVE_FERROR_UNLOCKED +-# undef ferror +-# define ferror(Stream) ferror_unlocked (Stream) +-# if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED +-extern int ferror_unlocked (FILE *); +-# endif +-# endif +-# ifdef HAVE_FREAD_UNLOCKED +-# undef fread +-# define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream) +-# if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED +-extern size_t fread_unlocked (void *, size_t, size_t, FILE *); +-# endif +-# endif +-# ifdef HAVE_FWRITE_UNLOCKED +-# undef fwrite +-# define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream) +-# if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED +-extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *); +-# endif +-# endif +-# ifdef HAVE_FPRINTF_UNLOCKED +-# undef fprintf +-/* We can't use a function-like macro here because we don't know if +- we have varargs macros. */ +-# define fprintf fprintf_unlocked +-# if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED +-extern int fprintf_unlocked (FILE *, const char *, ...); +-# endif +-# endif +- +-#ifdef __cplusplus +-} +-#endif +- +-#endif +- +-/* ??? Glibc's fwrite/fread_unlocked macros cause +- "warning: signed and unsigned type in conditional expression". */ +-#undef fread_unlocked +-#undef fwrite_unlocked +- + /* Include before "safe-ctype.h" to avoid GCC poisoning + the ctype macros through safe-ctype.h */ +