Patchwork gcc: Enable SPE & AltiVec generation on powepc*linux target.

login
register
mail settings
Submitter Alexandru-Cezar Sardan
Date March 3, 2014, 3:27 p.m.
Message ID <1393860475-31036-1-git-send-email-alexandru.sardan@freescale.com>
Download mbox | patch
Permalink /patch/67869/
State New
Headers show

Comments

Alexandru-Cezar Sardan - March 3, 2014, 3:27 p.m.
[ADT bug #5761] -- https://bugzilla.yoctoproject.org/show_bug.cgi?id=5761

Also this patch adds symlinks to libgcc such that a GCC configured
by passing the target parameter without LIBCEXTENSION and ABIEXTENSION
specifiers to find the correct startup files from a libgcc configured
with these variables.

(From OE-Core rev: 97f2a81d6796ddaf7bbaab86c2ab9039673c732c)

Signed-off-by: Alexandru-Cezar Sardan <alexandru.sardan@freescale.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 meta/recipes-devtools/gcc/gcc-4.8.inc              |    1 +
 ...AltiVec-generation-on-powepc-linux-target.patch |   42 ++++++++++++++++++++
 meta/recipes-devtools/gcc/libgcc.inc               |   24 ++++++++++-
 3 files changed, 66 insertions(+), 1 deletion(-)
 create mode 100644 meta/recipes-devtools/gcc/gcc-4.8/0049-Enable-SPE-AltiVec-generation-on-powepc-linux-target.patch
Alexandru-Cezar Sardan - March 3, 2014, 3:31 p.m.
I've added an additional check to make sure the symlink is not created in
a non-existent directory.

Alex

> -----Original Message-----
> From: Alexandru-Cezar Sardan [mailto:alexandru.sardan@freescale.com]
> Sent: Monday, March 03, 2014 5:28 PM
> To: openembedded-core@lists.openembedded.org
> Cc: Sardan Alexandru Cezar-B41700; Saul Wold; Richard Purdie
> Subject: [PATCH] gcc: Enable SPE & AltiVec generation on powepc*linux
> target.
> 
> [ADT bug #5761] -- https://bugzilla.yoctoproject.org/show_bug.cgi?id=5761
> 
> Also this patch adds symlinks to libgcc such that a GCC configured
> by passing the target parameter without LIBCEXTENSION and ABIEXTENSION
> specifiers to find the correct startup files from a libgcc configured
> with these variables.
> 
> (From OE-Core rev: 97f2a81d6796ddaf7bbaab86c2ab9039673c732c)
> 
> Signed-off-by: Alexandru-Cezar Sardan <alexandru.sardan@freescale.com>
> Signed-off-by: Saul Wold <sgw@linux.intel.com>
> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> ---
>  meta/recipes-devtools/gcc/gcc-4.8.inc              |    1 +
>  ...AltiVec-generation-on-powepc-linux-target.patch |   42
> ++++++++++++++++++++
>  meta/recipes-devtools/gcc/libgcc.inc               |   24 ++++++++++-
>  3 files changed, 66 insertions(+), 1 deletion(-)
>  create mode 100644 meta/recipes-devtools/gcc/gcc-4.8/0049-Enable-SPE-
> AltiVec-generation-on-powepc-linux-target.patch
> 
> diff --git a/meta/recipes-devtools/gcc/gcc-4.8.inc b/meta/recipes-
> devtools/gcc/gcc-4.8.inc
> index fdd0c12..f5e583d 100644
> --- a/meta/recipes-devtools/gcc/gcc-4.8.inc
> +++ b/meta/recipes-devtools/gcc/gcc-4.8.inc
> @@ -69,6 +69,7 @@ SRC_URI = "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-
> ${PV}.tar.bz2 \
>  	   file://0046-libatomic-deptracking.patch \
>  	   file://0047-repomembug.patch \
>  	   file://0048-PR58854_fix_arm_apcs_epilogue.patch \
> +	   file://0049-Enable-SPE-AltiVec-generation-on-powepc-linux-
> target.patch \
>  	  "
>  SRC_URI[md5sum] = "a3d7d63b9cb6b6ea049469a0c4a43c9d"
>  SRC_URI[sha256sum] =
> "09dc2276c73424bbbfda1dbddc62bbbf900c9f185acf7f3e1d773ce2d7e3cdc8"
> diff --git a/meta/recipes-devtools/gcc/gcc-4.8/0049-Enable-SPE-AltiVec-
> generation-on-powepc-linux-target.patch b/meta/recipes-devtools/gcc/gcc-
> 4.8/0049-Enable-SPE-AltiVec-generation-on-powepc-linux-target.patch
> new file mode 100644
> index 0000000..b98f8ff
> --- /dev/null
> +++ b/meta/recipes-devtools/gcc/gcc-4.8/0049-Enable-SPE-AltiVec-
> generation-on-powepc-linux-target.patch
> @@ -0,0 +1,42 @@
> +From 9e0e19eac2562f73858602fe26e2044eb8b20c47 Mon Sep 17 00:00:00 2001
> +From: Alexandru-Cezar Sardan <alexandru.sardan@freescale.com>
> +Date: Wed, 5 Feb 2014 16:52:31 +0200
> +Subject: [PATCH] Enable SPE & AltiVec generation on powepc*linux target
> +
> +When is configured with --target=powerpc-linux, the resulting GCC will
> +not be able to generate code for SPE targets (e500v1/v2).
> +GCC configured with --target=powerpc-linuxspe will not be able to
> +generate AltiVec instructions (for e6500).
> +This patch modifies the configured file such that SPE or AltiVec code
> +can be generated when gcc is configured with --target=powerpc-linux.
> +The ABI and speciffic instructions can be selected through the
> +"-mabi=spe or -mabi=altivec" and the "-mspe or -maltivec" parameters.
> +
> +Upstream-Status: Inappropriate [configuration]
> +
> +Signed-off-by: Alexandru-Cezar Sardan <alexandru.sardan@freescale.com>
> +---
> + gcc/config.gcc |    7 ++++++-
> + 1 file changed, 6 insertions(+), 1 deletion(-)
> +
> +diff --git a/gcc/config.gcc b/gcc/config.gcc
> +index cb7a94e..d392c2b 100644
> +--- a/gcc/config.gcc
> ++++ b/gcc/config.gcc
> +@@ -2068,7 +2068,12 @@ powerpc-*-rtems*)
> + 	tmake_file="rs6000/t-fprules rs6000/t-rtems t-rtems rs6000/t-
> ppccomm"
> + 	;;
> + powerpc*-*-linux*)
> +-	tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h rs6000/sysv4.h"
> ++	case ${target} in
> ++	    powerpc*-*-linux*spe* | powerpc*-*-linux*altivec*)
> ++		tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h
> rs6000/sysv4.h" ;;
> ++	    *)
> ++		tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h
> rs6000/sysv4.h rs6000/linuxaltivec.h rs6000/linuxspe.h rs6000/e500.h" ;;
> ++	esac
> + 	extra_options="${extra_options} rs6000/sysv4.opt"
> + 	tmake_file="rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-
> ppccomm"
> + 	case ${target} in
> +--
> +1.7.9.5
> +
> diff --git a/meta/recipes-devtools/gcc/libgcc.inc b/meta/recipes-
> devtools/gcc/libgcc.inc
> index fe98238..96f1969 100644
> --- a/meta/recipes-devtools/gcc/libgcc.inc
> +++ b/meta/recipes-devtools/gcc/libgcc.inc
> @@ -17,7 +17,8 @@ FILES_${PN}-dev = " \
>    ${libdir}/${TARGET_SYS}/${BINV}/32 \
>    ${libdir}/${TARGET_SYS}/${BINV}/x32 \
>    ${libdir}/${TARGET_SYS}/${BINV}/n32 \
> -  ${libdir}/${TARGET_SYS}/${BINV}/libgcc*"
> +  ${libdir}/${TARGET_SYS}/${BINV}/libgcc* \
> +  ${@base_conditional('TARGET_SYS_NO_EXTENSION', '${TARGET_SYS}', '',
> '${libdir}/${TARGET_SYS_NO_EXTENSION}', d)}"
>  FILES_libgcov-dev = " \
>    ${libdir}/${TARGET_SYS}/${BINV}/libgcov.a \
>    "
> @@ -141,3 +142,24 @@ python do_multilib_install() {
>              os.unlink(dest)
>          os.symlink(src, dest)
>  }
> +
> +addtask extra_symlinks after do_multilib_install before do_package
> do_populate_sysroot
> +python do_extra_symlinks() {
> +    targetsysnoext = d.getVar('TARGET_SYS_NO_EXTENSION', True)
> +
> +    if targetsysnoext != d.getVar('TARGET_SYS', True):
> +        dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' +
> targetsysnoext
> +        src = d.getVar('TARGET_SYS', True)
> +        if not os.path.lexists(dest) and os.path.lexists(d.getVar('D',
> True) + d.getVar('libdir', True)):
> +            os.symlink(src, dest)
> +}
> +
> +python () {
> +    targetsysnoext = d.getVar('TARGET_SYS', True)
> +
> +    for suffix in [d.getVar('ABIEXTENSION', True),
> d.getVar('LIBCEXTENSION', True)]:
> +        if suffix and targetsysnoext.endswith(suffix):
> +            targetsysnoext = targetsysnoext[:-len(suffix)]
> +
> +    d.setVar('TARGET_SYS_NO_EXTENSION', targetsysnoext)
> +}
> --
> 1.7.9.5
>
Richard Purdie - March 3, 2014, 3:32 p.m.
On Mon, 2014-03-03 at 15:31 +0000, alexandru.sardan@freescale.com wrote:
> I've added an additional check to make sure the symlink is not created in
> a non-existent directory.

Since the change was merged, could you send an incremental patch against
master please?

Thanks,

Richard

Patch

diff --git a/meta/recipes-devtools/gcc/gcc-4.8.inc b/meta/recipes-devtools/gcc/gcc-4.8.inc
index fdd0c12..f5e583d 100644
--- a/meta/recipes-devtools/gcc/gcc-4.8.inc
+++ b/meta/recipes-devtools/gcc/gcc-4.8.inc
@@ -69,6 +69,7 @@  SRC_URI = "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \
 	   file://0046-libatomic-deptracking.patch \
 	   file://0047-repomembug.patch \
 	   file://0048-PR58854_fix_arm_apcs_epilogue.patch \
+	   file://0049-Enable-SPE-AltiVec-generation-on-powepc-linux-target.patch \ 
 	  "
 SRC_URI[md5sum] = "a3d7d63b9cb6b6ea049469a0c4a43c9d"
 SRC_URI[sha256sum] = "09dc2276c73424bbbfda1dbddc62bbbf900c9f185acf7f3e1d773ce2d7e3cdc8"
diff --git a/meta/recipes-devtools/gcc/gcc-4.8/0049-Enable-SPE-AltiVec-generation-on-powepc-linux-target.patch b/meta/recipes-devtools/gcc/gcc-4.8/0049-Enable-SPE-AltiVec-generation-on-powepc-linux-target.patch
new file mode 100644
index 0000000..b98f8ff
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.8/0049-Enable-SPE-AltiVec-generation-on-powepc-linux-target.patch
@@ -0,0 +1,42 @@ 
+From 9e0e19eac2562f73858602fe26e2044eb8b20c47 Mon Sep 17 00:00:00 2001
+From: Alexandru-Cezar Sardan <alexandru.sardan@freescale.com>
+Date: Wed, 5 Feb 2014 16:52:31 +0200
+Subject: [PATCH] Enable SPE & AltiVec generation on powepc*linux target
+
+When is configured with --target=powerpc-linux, the resulting GCC will 
+not be able to generate code for SPE targets (e500v1/v2).
+GCC configured with --target=powerpc-linuxspe will not be able to
+generate AltiVec instructions (for e6500).
+This patch modifies the configured file such that SPE or AltiVec code
+can be generated when gcc is configured with --target=powerpc-linux.
+The ABI and speciffic instructions can be selected through the
+"-mabi=spe or -mabi=altivec" and the "-mspe or -maltivec" parameters.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Alexandru-Cezar Sardan <alexandru.sardan@freescale.com>
+---
+ gcc/config.gcc |    7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/gcc/config.gcc b/gcc/config.gcc
+index cb7a94e..d392c2b 100644
+--- a/gcc/config.gcc
++++ b/gcc/config.gcc
+@@ -2068,7 +2068,12 @@ powerpc-*-rtems*)
+ 	tmake_file="rs6000/t-fprules rs6000/t-rtems t-rtems rs6000/t-ppccomm"
+ 	;;
+ powerpc*-*-linux*)
+-	tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h rs6000/sysv4.h"
++	case ${target} in
++	    powerpc*-*-linux*spe* | powerpc*-*-linux*altivec*)
++		tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h rs6000/sysv4.h" ;;
++	    *)
++		tm_file="${tm_file} dbxelf.h elfos.h freebsd-spec.h rs6000/sysv4.h rs6000/linuxaltivec.h rs6000/linuxspe.h rs6000/e500.h" ;;
++	esac
+ 	extra_options="${extra_options} rs6000/sysv4.opt"
+ 	tmake_file="rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm"
+ 	case ${target} in
+-- 
+1.7.9.5
+
diff --git a/meta/recipes-devtools/gcc/libgcc.inc b/meta/recipes-devtools/gcc/libgcc.inc
index fe98238..96f1969 100644
--- a/meta/recipes-devtools/gcc/libgcc.inc
+++ b/meta/recipes-devtools/gcc/libgcc.inc
@@ -17,7 +17,8 @@  FILES_${PN}-dev = " \
   ${libdir}/${TARGET_SYS}/${BINV}/32 \
   ${libdir}/${TARGET_SYS}/${BINV}/x32 \
   ${libdir}/${TARGET_SYS}/${BINV}/n32 \
-  ${libdir}/${TARGET_SYS}/${BINV}/libgcc*"
+  ${libdir}/${TARGET_SYS}/${BINV}/libgcc* \
+  ${@base_conditional('TARGET_SYS_NO_EXTENSION', '${TARGET_SYS}', '', '${libdir}/${TARGET_SYS_NO_EXTENSION}', d)}"
 FILES_libgcov-dev = " \
   ${libdir}/${TARGET_SYS}/${BINV}/libgcov.a \
   "
@@ -141,3 +142,24 @@  python do_multilib_install() {
             os.unlink(dest)
         os.symlink(src, dest)
 }
+
+addtask extra_symlinks after do_multilib_install before do_package do_populate_sysroot
+python do_extra_symlinks() {
+    targetsysnoext = d.getVar('TARGET_SYS_NO_EXTENSION', True)
+
+    if targetsysnoext != d.getVar('TARGET_SYS', True):
+        dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + targetsysnoext
+        src = d.getVar('TARGET_SYS', True)
+        if not os.path.lexists(dest) and os.path.lexists(d.getVar('D', True) + d.getVar('libdir', True)):
+            os.symlink(src, dest)
+}
+
+python () {
+    targetsysnoext = d.getVar('TARGET_SYS', True)
+
+    for suffix in [d.getVar('ABIEXTENSION', True), d.getVar('LIBCEXTENSION', True)]:
+        if suffix and targetsysnoext.endswith(suffix):
+            targetsysnoext = targetsysnoext[:-len(suffix)]
+
+    d.setVar('TARGET_SYS_NO_EXTENSION', targetsysnoext)
+}