aboutsummaryrefslogtreecommitdiffstats
path: root/lang
diff options
context:
space:
mode:
authorgerald <gerald@FreeBSD.org>2017-04-02 04:36:09 +0800
committergerald <gerald@FreeBSD.org>2017-04-02 04:36:09 +0800
commit85afc1fd5fb5f6fbd8188b641e578f4953d87cc4 (patch)
treef872e00e3c628c2a6b14f0b793be6d64842b3a30 /lang
parentded3c7ac2d97eb37d64b369dd8d98d10cd8e0956 (diff)
downloadfreebsd-ports-gnome-85afc1fd5fb5f6fbd8188b641e578f4953d87cc4.tar.gz
freebsd-ports-gnome-85afc1fd5fb5f6fbd8188b641e578f4953d87cc4.tar.zst
freebsd-ports-gnome-85afc1fd5fb5f6fbd8188b641e578f4953d87cc4.zip
Add support for aarch64.
Submitted by: andreast
Diffstat (limited to 'lang')
-rw-r--r--lang/gcc/Makefile4
-rw-r--r--lang/gcc/files/patch-aarch64-support186
2 files changed, 188 insertions, 2 deletions
diff --git a/lang/gcc/Makefile b/lang/gcc/Makefile
index 20eb08c80729..b350545b42cd 100644
--- a/lang/gcc/Makefile
+++ b/lang/gcc/Makefile
@@ -29,7 +29,7 @@ CPE_VENDOR= gnu
# once installed.
GCC_VERSION= ${PORTVERSION}
SUFFIX= ${PORTVERSION:C/([0-9]+).*/\1/}
-ONLY_FOR_ARCHS= amd64 arm armv6 i386 powerpc powerpc64 sparc64
+ONLY_FOR_ARCHS= aarch64 amd64 arm armv6 i386 powerpc powerpc64 sparc64
USES= compiler cpe gmake iconv libtool makeinfo perl5 tar:bzip2
USE_BINUTILS= yes
USE_PERL5= build
@@ -64,7 +64,7 @@ CONFIGURE_TARGET= x86_64-portbld-${OPSYS:tl}${OSREL}
CONFIGURE_ENV+= UNAME_m="powerpc64"
.endif
-.if ${ARCH} == "armv6"
+.if ${ARCH} == "armv6" || ${ARCH} == "aarch64"
. if ${COMPILER_TYPE} == clang
. if empty(PORT_OPTIONS:MBOOTSTRAP)
MAKE_ARGS+=CXXFLAGS=-fbracket-depth=512
diff --git a/lang/gcc/files/patch-aarch64-support b/lang/gcc/files/patch-aarch64-support
new file mode 100644
index 000000000000..7272a1382b30
--- /dev/null
+++ b/lang/gcc/files/patch-aarch64-support
@@ -0,0 +1,186 @@
+--- UTC
+Index: configure
+===================================================================
+--- configure (revision 240731)
++++ configure (working copy)
+@@ -3455,6 +3455,9 @@
+ *-*-vxworks*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
++ aarch64*-*-freebsd*)
++ noconfigdirs="$noconfigdirs ${libgcj}"
++ ;;
+ alpha*-*-*vms*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+Index: configure.ac
+===================================================================
+--- configure.ac (revision 240731)
++++ configure.ac (working copy)
+@@ -802,6 +802,9 @@
+ *-*-vxworks*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
++ aarch64*-*-freebsd*)
++ noconfigdirs="$noconfigdirs ${libgcj}"
++ ;;
+ alpha*-*-*vms*)
+ noconfigdirs="$noconfigdirs ${libgcj}"
+ ;;
+Index: gcc/config/aarch64/aarch64-freebsd.h
+===================================================================
+--- gcc/config/aarch64/aarch64-freebsd.h (nonexistent)
++++ gcc/config/aarch64/aarch64-freebsd.h (working copy)
+@@ -0,0 +1,94 @@
++/* Definitions for AArch64 running FreeBSD
++ Copyright (C) 2016 Free Software Foundation, Inc.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ GCC is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef GCC_AARCH64_FREEBSD_H
++#define GCC_AARCH64_FREEBSD_H
++
++#undef SUBTARGET_CPP_SPEC
++#define SUBTARGET_CPP_SPEC FBSD_CPP_SPEC
++
++#if TARGET_BIG_ENDIAN_DEFAULT
++#define TARGET_LINKER_EMULATION "aarch64fbsdb"
++#else
++#define TARGET_LINKER_EMULATION "aarch64fbsd"
++#endif
++
++#undef SUBTARGET_EXTRA_LINK_SPEC
++#define SUBTARGET_EXTRA_LINK_SPEC " -m" TARGET_LINKER_EMULATION
++
++#undef FBSD_TARGET_LINK_SPEC
++#define FBSD_TARGET_LINK_SPEC " \
++ %{p:%nconsider using `-pg' instead of `-p' with gprof (1) } \
++ %{v:-V} \
++ %{assert*} %{R*} %{rpath*} %{defsym*} \
++ %{shared:-Bshareable %{h*} %{soname*}} \
++ %{symbolic:-Bsymbolic} \
++ %{static:-Bstatic} \
++ %{!static: \
++ %{rdynamic:-export-dynamic} \
++ %{!shared:-dynamic-linker " FBSD_DYNAMIC_LINKER " }} \
++ -X" SUBTARGET_EXTRA_LINK_SPEC " \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}"
++
++#if TARGET_FIX_ERR_A53_835769_DEFAULT
++#define CA53_ERR_835769_SPEC \
++ " %{!mno-fix-cortex-a53-835769:--fix-cortex-a53-835769}"
++#else
++#define CA53_ERR_835769_SPEC \
++ " %{mfix-cortex-a53-835769:--fix-cortex-a53-835769}"
++#endif
++
++#ifdef TARGET_FIX_ERR_A53_843419_DEFAULT
++#define CA53_ERR_843419_SPEC \
++ " %{!mno-fix-cortex-a53-843419:--fix-cortex-a53-843419}"
++#else
++#define CA53_ERR_843419_SPEC \
++ " %{mfix-cortex-a53-843419:--fix-cortex-a53-843419}"
++#endif
++
++#undef LINK_SPEC
++#define LINK_SPEC FBSD_TARGET_LINK_SPEC \
++ CA53_ERR_835769_SPEC \
++ CA53_ERR_843419_SPEC
++
++#define GNU_USER_TARGET_MATHFILE_SPEC \
++ "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"
++
++#undef ENDFILE_SPEC
++#define ENDFILE_SPEC \
++ GNU_USER_TARGET_MATHFILE_SPEC " " \
++ FBSD_ENDFILE_SPEC
++
++#undef TARGET_OS_CPP_BUILTINS
++#define TARGET_OS_CPP_BUILTINS() \
++ do \
++ { \
++ FBSD_TARGET_OS_CPP_BUILTINS (); \
++ } \
++ while (false)
++
++#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
++
++/* Uninitialized common symbols in non-PIE executables, even with
++ strong definitions in dependent shared libraries, will resolve
++ to COPY relocated symbol in the executable. See PR65780. */
++#undef TARGET_BINDS_LOCAL_P
++#define TARGET_BINDS_LOCAL_P default_binds_local_p_2
++
++#endif /* GCC_AARCH64_FREEBSD_H */
+Index: gcc/config/aarch64/t-aarch64-freebsd
+===================================================================
+--- gcc/config/aarch64/t-aarch64-freebsd (nonexistent)
++++ gcc/config/aarch64/t-aarch64-freebsd (working copy)
+@@ -0,0 +1,21 @@
++# Machine description for AArch64 architecture.
++# Copyright (C) 2016 Free Software Foundation, Inc.
++#
++# This file is part of GCC.
++#
++# GCC is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3, or (at your option)
++# any later version.
++#
++# GCC is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GCC; see the file COPYING3. If not see
++# <http://www.gnu.org/licenses/>.
++
++LIB1ASMSRC = aarch64/lib1funcs.asm
++LIB1ASMFUNCS = _aarch64_sync_cache_range
+Index: gcc/config.gcc
+===================================================================
+--- gcc/config.gcc (revision 240731)
++++ gcc/config.gcc (working copy)
+@@ -914,6 +914,11 @@
+ done
+ TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'`
+ ;;
++aarch64*-*-freebsd*)
++ tm_file="${tm_file} dbxelf.h elfos.h ${fbsd_tm_file}"
++ tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-freebsd.h"
++ tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-freebsd"
++ ;;
+ aarch64*-*-linux*)
+ tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h"
+ tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-linux.h"
+Index: libgcc/config.host
+===================================================================
+--- libgcc/config.host (revision 240731)
++++ libgcc/config.host (working copy)
+@@ -328,6 +328,11 @@
+ tmake_file="${tmake_file} ${cpu_type}/t-aarch64"
+ tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm"
+ ;;
++aarch64*-*-freebsd*)
++ extra_parts="$extra_parts crtfastmath.o"
++ tmake_file="${tmake_file} ${cpu_type}/t-aarch64"
++ tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm"
++ ;;
+ aarch64*-*-linux*)
+ extra_parts="$extra_parts crtfastmath.o"
+ md_unwind_header=aarch64/linux-unwind.h