Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Oct 2019 17:44:28 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r515276 - in head/devel: aarch64-none-elf-gcc arm-none-eabi-gcc powerpc64-gcc powerpc64-gcc/files
Message-ID:  <201910231744.x9NHiSXk069086@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhb (src,doc committer)
Date: Wed Oct 23 17:44:28 2019
New Revision: 515276
URL: https://svnweb.freebsd.org/changeset/ports/515276

Log:
  Divorce the ARM bare-metal GCC ports from the FreeBSD GCC xtoolchain ports.
  
  In the past, changes to the FreeBSD GCC xtoolchain ports have broken
  the ARM bare-metal GCC ports by accident.  In addition, we'd like to
  move to having multiple FreeBSD GCC xtoolchain ports for different GCC
  versions.  It seems best if we make the two groups of ports
  independent so that changes to one do not affect the other.
  
  Reviewed by:	manu
  Differential Revision:	https://reviews.freebsd.org/D22064

Added:
  head/devel/aarch64-none-elf-gcc/distinfo   (contents, props changed)
  head/devel/aarch64-none-elf-gcc/pkg-descr   (contents, props changed)
  head/devel/powerpc64-gcc/files/patch-freebsd-format-extensions
     - copied unchanged from r515275, head/devel/powerpc64-gcc/files/freebsd-format-extensions
  head/devel/powerpc64-gcc/files/patch-freebsd-libdir
     - copied unchanged from r515275, head/devel/powerpc64-gcc/files/freebsd-libdir
Deleted:
  head/devel/powerpc64-gcc/files/freebsd-format-extensions
  head/devel/powerpc64-gcc/files/freebsd-libdir
Modified:
  head/devel/aarch64-none-elf-gcc/Makefile
  head/devel/arm-none-eabi-gcc/Makefile
  head/devel/powerpc64-gcc/Makefile

Modified: head/devel/aarch64-none-elf-gcc/Makefile
==============================================================================
--- head/devel/aarch64-none-elf-gcc/Makefile	Wed Oct 23 17:19:56 2019	(r515275)
+++ head/devel/aarch64-none-elf-gcc/Makefile	Wed Oct 23 17:44:28 2019	(r515276)
@@ -1,22 +1,99 @@
 # $FreeBSD$
 
-PKGNAMEPREFIX=	aarch64-none-elf-
+PORTNAME=	gcc
+PORTVERSION=	6.4.0
+PORTREVISION=	7
+CATEGORIES=	devel
+MASTER_SITES=	GCC
+PKGNAMEPREFIX?=	aarch64-none-elf-
+
+MAINTAINER=	ports@FreeBSD.org
 COMMENT=	GNU Compiler Collection for bare metal arm cross-development
-GCC_TARGET=	aarch64-none-elf
-PLIST=	${.CURDIR}/pkg-plist
 
+LICENSE=	GPLv3 GPLv3RLE
+LICENSE_COMB=	multi
+
+BROKEN_mips=		configure: error: cannot compute suffix of object files: cannot compile
+BROKEN_mips64=		configure: error: cannot compute suffix of object files: cannot compile
+
+LIB_DEPENDS=	libgmp.so:math/gmp \
+		libmpfr.so:math/mpfr \
+		libmpc.so:math/mpc
+BUILD_DEPENDS=	${GCC_TARGET}-as:devel/${PKGNAMEPREFIX}binutils
+RUN_DEPENDS=	${GCC_TARGET}-as:devel/${PKGNAMEPREFIX}binutils
+
+USES=	gmake iconv libtool tar:xz makeinfo compiler:c++11-lang
+
+PLIST_SUB=	TARGETARCH=${PKGNAMEPREFIX:C/-//g} \
+		OPSYS=${OPSYS:tl} \
+		GCC_TARGET=${GCC_TARGET} \
+		GCC_VERSION=${PORTVERSION}
+
+TARGETARCH=	${PKGNAMEPREFIX:C/-//g}
+
+GCC_TARGET?=	aarch64-none-elf
+
+GNU_CONFIGURE=	yes
+CONFIGURE_OUTSOURCE=	yes
+CONFIGURE_ARGS+=--target=${GCC_TARGET} --disable-nls --enable-languages=c,c++ \
+		--enable-gnu-indirect-function \
+		--without-headers \
+		--with-gmp=${LOCALBASE} \
+		--with-pkgversion="FreeBSD Ports Collection for ${PKGNAMEPREFIX:C/-//g}" \
+		--with-system-zlib \
+		--with-gxx-include-dir=/usr/include/c++/v1/ \
+		--with-sysroot="/" \
+		--with-as=${LOCALBASE}/bin/${GCC_TARGET}-as \
+		--with-ld=${LOCALBASE}/bin/${GCC_TARGET}-ld
+
 # U-Boot requires libgcc, crossbuild and install it along with the compiler.
 ALL_TARGET=	all-gcc all-target-libgcc
 INSTALL_TARGET=	install-gcc install-target-libgcc
 
-BROKEN_mips=		configure: error: cannot compute suffix of object files: cannot compile
-BROKEN_mips64=		configure: error: cannot compute suffix of object files: cannot compile
+.include <bsd.port.pre.mk>
 
-MASTERDIR=	${.CURDIR}/../powerpc64-gcc
+post-patch:
+	@${REINPLACE_CMD} -e '/LIBSTDCXX/ s/stdc\+\+/c\+\+/g ' \
+		${WRKSRC}//gcc/cp/g++spec.c
+	@${REINPLACE_CMD} -e '/LOCAL_INCLUDE_DIR/ d ' \
+		${WRKSRC}//gcc/Makefile.in
 
-.include "${MASTERDIR}/Makefile"
+.if ${ARCH} == "amd64"
+CONFIGURE_TARGET=	x86_64-unknown-${OPSYS:tl}${OSREL}
+.else
+CONFIGURE_TARGET=	${ARCH}-unknown-${OPSYS:tl}${OSREL}
+.endif
 
 # The following is required for clang to bootstrap gcc.
 .if ${COMPILER_TYPE} == clang
 MAKE_ARGS+=	CXXFLAGS=-fbracket-depth=512
 .endif
+
+.if ${ARCH} == "aarch64"
+PLIST_SUB+=	PLUGINS="@comment plugin does not build"
+.else
+PLIST_SUB+=	PLUGINS=""
+.endif
+
+post-install:
+.for f in cpp gcov gcov-dump gcov-tool
+	@if [ -f ${STAGEDIR}${PREFIX}/bin/$f ] ; then \
+		${MV} ${STAGEDIR}${PREFIX}/bin/$f  \
+		    ${STAGEDIR}${PREFIX}/bin/${GCC_TARGET}-$f ; \
+	fi
+.endfor
+.for f in c++ cpp g++ gcc gcc-ar gcc-nm gcc-ranlib gcov gcov-dump gcov-tool
+	@if [ ! -f ${STAGEDIR}${PREFIX}/man/man1/${GCC_TARGET}-$f.1 ] ; then \
+		if [ -f ${STAGEDIR}${PREFIX}/man/man1/$f.1 ] ; then \
+			${CP} ${STAGEDIR}${PREFIX}/man/man1/$f.1  \
+			    ${STAGEDIR}${PREFIX}/man/man1/${GCC_TARGET}-$f.1 ; \
+		fi \
+	fi
+	@${RM} ${STAGEDIR}${PREFIX}/bin/$f
+	@${RM} ${STAGEDIR}${PREFIX}/man/man1/$f.1
+	@${RM} ${STAGEDIR}${PREFIX}/man/man1/$f.1.gz
+.endfor
+	@${RM} ${STAGEDIR}${PREFIX}/share/info/*
+	@${RM} ${STAGEDIR}${PREFIX}/man/man7/*
+
+.include <bsd.port.post.mk>

Added: head/devel/aarch64-none-elf-gcc/distinfo
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/aarch64-none-elf-gcc/distinfo	Wed Oct 23 17:44:28 2019	(r515276)
@@ -0,0 +1,3 @@
+TIMESTAMP = 1514072608
+SHA256 (gcc-6.4.0.tar.xz) = 850bf21eafdfe5cd5f6827148184c08c4a0852a37ccf36ce69855334d2c914d4
+SIZE (gcc-6.4.0.tar.xz) = 76156220

Added: head/devel/aarch64-none-elf-gcc/pkg-descr
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/aarch64-none-elf-gcc/pkg-descr	Wed Oct 23 17:44:28 2019	(r515276)
@@ -0,0 +1,4 @@
+GCC, the GNU Compiler Collection supporting C and C++ for arm bare metal
+crossbuilding.
+
+WWW: http://gcc.gnu.org/

Modified: head/devel/arm-none-eabi-gcc/Makefile
==============================================================================
--- head/devel/arm-none-eabi-gcc/Makefile	Wed Oct 23 17:19:56 2019	(r515275)
+++ head/devel/arm-none-eabi-gcc/Makefile	Wed Oct 23 17:44:28 2019	(r515276)
@@ -1,26 +1,13 @@
 # $FreeBSD$
 
 PKGNAMEPREFIX=	arm-none-eabi-
-COMMENT=	GNU Compiler Collection for bare metal arm cross-development
 GCC_TARGET=	arm-none-eabi
 PLIST=	${.CURDIR}/pkg-plist
 
-# U-Boot requires libgcc, crossbuild and install it along with the compiler.
-ALL_TARGET=	all-gcc all-target-libgcc
-INSTALL_TARGET=	install-gcc install-target-libgcc
-
 # libstdcxx won't build, but we don't need it or multiple float-abi libs.
 CONFIGURE_ARGS=	--disable-libstdcxx \
 		--disable-multilib
 
-BROKEN_mips=		configure: error: cannot compute suffix of object files: cannot compile
-BROKEN_mips64=		configure: error: cannot compute suffix of object files: cannot compile
+MASTERDIR=	${.CURDIR}/../aarch64-none-elf-gcc
 
-MASTERDIR=	${.CURDIR}/../powerpc64-gcc
-
 .include "${MASTERDIR}/Makefile"
-
-# The following is required for clang to bootstrap gcc.
-.if ${COMPILER_TYPE} == clang
-MAKE_ARGS+=	CXXFLAGS=-fbracket-depth=512
-.endif

Modified: head/devel/powerpc64-gcc/Makefile
==============================================================================
--- head/devel/powerpc64-gcc/Makefile	Wed Oct 23 17:19:56 2019	(r515275)
+++ head/devel/powerpc64-gcc/Makefile	Wed Oct 23 17:44:28 2019	(r515276)
@@ -27,18 +27,14 @@ PLIST_SUB=	TARGETARCH=${PKGNAMEPREFIX:C/-//g} \
 
 TARGETARCH=	${PKGNAMEPREFIX:C/-//g}
 
-.if empty(GCC_TARGET)
-# We are building for a FreeBSD target
 GCC_TARGET=	${PKGNAMEPREFIX:S/amd64/x86_64/}unknown-${OPSYS:tl}${OSREL}
-EXTRA_PATCHES+= ${FILESDIR}/freebsd-format-extensions \
-		${FILESDIR}/freebsd-libdir
-.endif
 BU_PREFIX?=	${GCC_TARGET}
 
 GNU_CONFIGURE=	yes
 CONFIGURE_OUTSOURCE=	yes
 CONFIGURE_ARGS+=--target=${GCC_TARGET} --disable-nls --enable-languages=c,c++ \
 		--enable-gnu-indirect-function \
+		--enable-initfini-array \
 		--without-headers \
 		--with-gmp=${LOCALBASE} \
 		--with-pkgversion="FreeBSD Ports Collection for ${PKGNAMEPREFIX:C/-//g}" \
@@ -48,16 +44,11 @@ CONFIGURE_ARGS+=--target=${GCC_TARGET} --disable-nls -
 		--with-as=${LOCALBASE}/bin/${BU_PREFIX}-as \
 		--with-ld=${LOCALBASE}/bin/${BU_PREFIX}-ld
 
-ALL_TARGET?=	all-gcc
-INSTALL_TARGET?=	install-gcc
+ALL_TARGET=	all-gcc
+INSTALL_TARGET=	install-gcc
 
-.include <bsd.port.options.mk>
 .include <bsd.port.pre.mk>
 
-.if ${GCC_TARGET:M*${OPSYS:tl}*} != ""
-CONFIGURE_ARGS+= --enable-initfini-array
-.endif
-
 post-patch:
 	@${REINPLACE_CMD} -e '/LIBSTDCXX/ s/stdc\+\+/c\+\+/g ' \
 		${WRKSRC}//gcc/cp/g++spec.c
@@ -102,9 +93,7 @@ post-install:
 .endfor
 	@${RM} ${STAGEDIR}${PREFIX}/share/info/*
 	@${RM} ${STAGEDIR}${PREFIX}/man/man7/*
-.if empty(PKGNAMEPREFIX:M*-*-)
 	@${RM} -r ${STAGEDIR}${PREFIX}/lib/gcc/${GCC_TARGET}/${PORTVERSION}/include-fixed
-.endif
 .if ${TARGETARCH} == "amd64" || ${TARGETARCH} == "i386"
 	# Conflicts with sys/x86/include/float.h
 	${RM} ${STAGEDIR}${PREFIX}/lib/gcc/${GCC_TARGET}/${PORTVERSION}/include/float.h

Copied: head/devel/powerpc64-gcc/files/patch-freebsd-format-extensions (from r515275, head/devel/powerpc64-gcc/files/freebsd-format-extensions)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/powerpc64-gcc/files/patch-freebsd-format-extensions	Wed Oct 23 17:44:28 2019	(r515276, copy of r515275, head/devel/powerpc64-gcc/files/freebsd-format-extensions)
@@ -0,0 +1,117 @@
+Index: gcc/c-family/c-format.c
+===================================================================
+--- gcc/c-family/c-format.c	(revision 216017)
++++ gcc/c-family/c-format.c	(working copy)
+@@ -622,6 +622,26 @@
+   { NULL,  0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
+ };
+ 
++static const format_char_info fbsd_ext_char_info =
++{ NULL,   1, STD_EXT, { T89_C,  BADLEN,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN, BADLEN }, "",      "cR", NULL };
++
++static const format_char_info fbsd_print_char_table[] =
++{
++  /* BSD conversion specifiers.  */
++  /* FreeBSD kernel extensions (src/sys/kern/subr_prf.c).
++     The format %b is supported to decode error registers.
++     Its usage is:	printf("reg=%b\n", regval, "<base><arg>*");
++     which produces:	reg=3<BITTWO,BITONE>
++     The format %D provides a hexdump given a pointer and separator string:
++     ("%6D", ptr, ":")		-> XX:XX:XX:XX:XX:XX
++     ("%*D", len, ptr, " ")	-> XX XX XX XX ...
++   */
++  { "D",   1, STD_EXT, { T89_V,  BADLEN,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN }, "-wp",      "cR", &fbsd_ext_char_info },
++  { "b",   0, STD_EXT, { T89_I,  BADLEN,   BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp",      "",   &fbsd_ext_char_info },
++  { "ry",  0, STD_EXT, { T89_I,  BADLEN,   BADLEN,   T89_L,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN,  BADLEN  }, "-wp0 +#",  "i",  NULL  },
++  { NULL,  0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
++};
++
+ static const format_char_info asm_fprintf_char_table[] =
+ {
+   /* C89 conversion specifiers.  */
+@@ -872,6 +892,12 @@
+     strfmon_flag_specs, strfmon_flag_pairs,
+     FMT_FLAG_ARG_CONVERT, 'w', '#', 'p', 0, 'L', 0,
+     NULL, NULL
++  },
++  { "printf0",  printf_length_specs,  print_char_table, " +#0-'I", NULL,
++    printf_flag_specs, printf_flag_pairs,
++    FMT_FLAG_ARG_CONVERT|FMT_FLAG_DOLLAR_MULTIPLE|FMT_FLAG_USE_DOLLAR|FMT_FLAG_EMPTY_PREC_OK|FMT_FLAG_NULL_FORMAT_OK,
++    'w', 0, 'p', 0, 'L', 0,
++    &integer_type_node, &integer_type_node
+   }
+ };
+ 
+@@ -1426,6 +1452,9 @@
+ 
+   if (integer_zerop (format_tree))
+     {
++      if (!(format_types[info->format_type].flags & FMT_FLAG_NULL_FORMAT_OK))
++	warning (OPT_Wformat_, "null format string");
++
+       /* Skip to first argument to check, so we can see if this format
+ 	 has any arguments (it shouldn't).  */
+       while (arg_num + 1 < info->first_arg_num)
+@@ -1926,6 +1955,14 @@
+ 	  while (fli->name != 0
+  		 && strncmp (fli->name, format_chars, strlen (fli->name)))
+ 	      fli++;
++	  /*
++	   * Make sure FreeBSD's D format char takes preference
++	   * over new DD length specifier if FreeBSD format
++	   * extensions are requested.
++	   */
++	  if (fli->index == FMT_LEN_D && flag_format_extensions
++	    && fki->conversion_specs == print_char_table)
++	  	while (fli->name != 0) fli++;
+ 	  if (fli->name != 0)
+ 	    {
+  	      format_chars += strlen (fli->name);
+@@ -1993,6 +2030,14 @@
+       while (fci->format_chars != 0
+ 	     && strchr (fci->format_chars, format_char) == 0)
+ 	  ++fci;
++      if (fci->format_chars == 0 && flag_format_extensions
++	  && fki->conversion_specs == print_char_table)
++	{
++	  fci = fbsd_print_char_table;
++	  while (fci->format_chars != 0
++		 && strchr (fci->format_chars, format_char) == 0)
++	      ++fci;
++	}
+       if (fci->format_chars == 0)
+ 	{
+ 	  if (ISGRAPH (format_char))
+Index: gcc/c-family/c-format.h
+===================================================================
+--- gcc/c-family/c-format.h	(revision 216017)
++++ gcc/c-family/c-format.h	(working copy)
+@@ -75,11 +75,12 @@
+   FMT_FLAG_DOLLAR_GAP_POINTER_OK = 128,
+   /* The format arg is an opaque object that will be parsed by an external
+      facility.  */
+-  FMT_FLAG_PARSE_ARG_CONVERT_EXTERNAL = 256
++  FMT_FLAG_PARSE_ARG_CONVERT_EXTERNAL = 256,
+   /* Not included here: details of whether width or precision may occur
+      (controlled by width_char and precision_char); details of whether
+      '*' can be used for these (width_type and precision_type); details
+      of whether length modifiers can occur (length_char_specs).  */
++  FMT_FLAG_NULL_FORMAT_OK = 512
+ };
+ 
+ /* Structure describing a length modifier supported in format checking, and
+Index: gcc/config/freebsd.opt
+===================================================================
+--- gcc/config/freebsd.opt	(revision 216017)
++++ gcc/config/freebsd.opt	(working copy)
+@@ -34,6 +34,10 @@
+ defsym=
+ Driver JoinedOrMissing
+ 
++fformat-extensions
++Common Report Var(flag_format_extensions) Init(0)
++Allow FreeBSD kernel-specific printf format specifiers.
++
+ posix
+ Driver
+ 

Copied: head/devel/powerpc64-gcc/files/patch-freebsd-libdir (from r515275, head/devel/powerpc64-gcc/files/freebsd-libdir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/powerpc64-gcc/files/patch-freebsd-libdir	Wed Oct 23 17:44:28 2019	(r515276, copy of r515275, head/devel/powerpc64-gcc/files/freebsd-libdir)
@@ -0,0 +1,43 @@
+diff --git gcc/config/freebsd.h gcc/config/freebsd.h
+index e7ea42370c5..191e7da2071 100644
+--- gcc/config/freebsd.h
++++ gcc/config/freebsd.h
+@@ -44,6 +44,9 @@ along with GCC; see the file COPYING3.  If not see
+ #undef  LIB_SPEC
+ #define LIB_SPEC FBSD_LIB_SPEC
+ 
++#undef  STARTFILE_PREFIX_SPEC
++#define STARTFILE_PREFIX_SPEC "/usr/lib/ "
++
+ #if defined(HAVE_LD_EH_FRAME_HDR)
+ #define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} "
+ #endif
+diff --git gcc/gcc.c gcc/gcc.c
+index f70755679f4..890ef20fd43 100644
+--- gcc/gcc.c
++++ gcc/gcc.c
+@@ -4298,10 +4298,12 @@ process_command (unsigned int decoded_options_count,
+ 	}
+ 
+       set_std_prefix (gcc_exec_prefix, len);
++#if 0
+       add_prefix (&exec_prefixes, gcc_libexec_prefix, "GCC",
+ 		  PREFIX_PRIORITY_LAST, 0, 0);
+       add_prefix (&startfile_prefixes, gcc_exec_prefix, "GCC",
+ 		  PREFIX_PRIORITY_LAST, 0, 0);
++#endif
+     }
+ 
+   /* COMPILER_PATH and LIBRARY_PATH have values
+@@ -4585,9 +4587,11 @@ process_command (unsigned int decoded_options_count,
+   add_prefix (&exec_prefixes,
+ 	      concat (tooldir_prefix, "bin", dir_separator_str, NULL),
+ 	      "BINUTILS", PREFIX_PRIORITY_LAST, 0, 0);
++#if 0
+   add_prefix (&startfile_prefixes,
+ 	      concat (tooldir_prefix, "lib", dir_separator_str, NULL),
+ 	      "BINUTILS", PREFIX_PRIORITY_LAST, 0, 1);
++#endif
+   free (tooldir_prefix);
+ 
+ #if defined(TARGET_SYSTEM_ROOT_RELOCATABLE) && !defined(VMS)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201910231744.x9NHiSXk069086>