diff mbox

gcc-cross: Fix linker and fortran symlinks

Message ID 20170711140546.23414-1-raj.khem@gmail.com
State Accepted
Commit f84614c082406287e608860741a82edd2f3c9bca
Headers show

Commit Message

Khem Raj July 11, 2017, 2:05 p.m. UTC
If we used -fuse-ld gcc option, then it does not work
ending in

collect2: fatal error: cannot find 'ld'                                                                                                                                                                                                       compilation terminated.

This is because we are not creating proper symlinks for BFD
and Gold linker in gcc installation

Secondly, we end up with dangling fortran compiler symlinks
if fortran is not enabled when confguring gcc, therefore
create these symlinks only when fortran support is enabled
in gcc

Signed-off-by: Khem Raj <raj.khem@gmail.com>

---
 meta/recipes-devtools/gcc/gcc-cross.inc | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

-- 
2.13.2

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Comments

Martin Jansa July 11, 2017, 2:16 p.m. UTC | #1
Shouldn't the symlink be created in ${D}${STAGING_DIR_NATIVE} as suggested
in:
http://lists.openembedded.org/pipermail/openembedded-core/2014-April/091480.html

On Tue, Jul 11, 2017 at 3:05 PM, Khem Raj <raj.khem@gmail.com> wrote:

> If we used -fuse-ld gcc option, then it does not work

> ending in

>

> collect2: fatal error: cannot find 'ld'

>

>

>            compilation terminated.

>

> This is because we are not creating proper symlinks for BFD

> and Gold linker in gcc installation

>

> Secondly, we end up with dangling fortran compiler symlinks

> if fortran is not enabled when confguring gcc, therefore

> create these symlinks only when fortran support is enabled

> in gcc

>

> Signed-off-by: Khem Raj <raj.khem@gmail.com>

> ---

>  meta/recipes-devtools/gcc/gcc-cross.inc | 10 ++++++----

>  1 file changed, 6 insertions(+), 4 deletions(-)

>

> diff --git a/meta/recipes-devtools/gcc/gcc-cross.inc

> b/meta/recipes-devtools/gcc/gcc-cross.inc

> index b08bc197ba..1e184a60db 100644

> --- a/meta/recipes-devtools/gcc/gcc-cross.inc

> +++ b/meta/recipes-devtools/gcc/gcc-cross.inc

> @@ -161,17 +161,19 @@ do_install () {

>

>         install -d ${D}${target_base_libdir}

>         install -d ${D}${target_libdir}

> -

> +

>         # Link gfortran to g77 to satisfy not-so-smart configure or hard

> coded g77

>         # gfortran is fully backwards compatible. This is a safe and

> practical solution.

> -       ln -sf ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}gfortran

> ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}g77 || true

> +       if [ -n "${@d.getVar('FORTRAN')}" ]; then

> +               ln -sf ${STAGING_DIR_NATIVE}${prefix_

> native}/bin/${TARGET_PREFIX}gfortran ${STAGING_DIR_NATIVE}${prefix_

> native}/bin/${TARGET_PREFIX}g77 || true

> +               fortsymlinks="g77 gfortran"

> +       fi

>

> -

>         # Insert symlinks into libexec so when tools without a prefix are

> searched for, the correct ones are

>         # found. These need to be relative paths so they work in different

> locations.

>         dest=${D}${libexecdir}/gcc/${TARGET_SYS}/${BINV}/

>         install -d $dest

> -       for t in ar as ld nm objcopy objdump ranlib strip g77 gcc cpp

> gfortran; do

> +       for t in ar as ld ld.bfd ld.gold nm objcopy objdump ranlib strip

> gcc cpp $fortsymlinks; do

>                 ln -sf ${BINRELPATH}/${TARGET_PREFIX}$t $dest$t

>                 ln -sf ${BINRELPATH}/${TARGET_PREFIX}$t

> ${dest}${TARGET_PREFIX}$t

>         done

> --

> 2.13.2

>

> --

> _______________________________________________

> Openembedded-core mailing list

> Openembedded-core@lists.openembedded.org

> http://lists.openembedded.org/mailman/listinfo/openembedded-core

>
-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core
Khem Raj July 11, 2017, 2:27 p.m. UTC | #2
On Tue, Jul 11, 2017 at 7:16 AM, Martin Jansa <martin.jansa@gmail.com> wrote:
> Shouldn't the symlink be created in ${D}${STAGING_DIR_NATIVE} as suggested

> in:

> http://lists.openembedded.org/pipermail/openembedded-core/2014-April/091480.html


unrelated to this change but I agree, probably we can get by creating relative
symlink in ${D}${STAGING_DIR_NATIVE}${prefix_native}/bin

>

> On Tue, Jul 11, 2017 at 3:05 PM, Khem Raj <raj.khem@gmail.com> wrote:

>>

>> If we used -fuse-ld gcc option, then it does not work

>> ending in

>>

>> collect2: fatal error: cannot find 'ld'

>> compilation terminated.

>>

>> This is because we are not creating proper symlinks for BFD

>> and Gold linker in gcc installation

>>

>> Secondly, we end up with dangling fortran compiler symlinks

>> if fortran is not enabled when confguring gcc, therefore

>> create these symlinks only when fortran support is enabled

>> in gcc

>>

>> Signed-off-by: Khem Raj <raj.khem@gmail.com>

>> ---

>>  meta/recipes-devtools/gcc/gcc-cross.inc | 10 ++++++----

>>  1 file changed, 6 insertions(+), 4 deletions(-)

>>

>> diff --git a/meta/recipes-devtools/gcc/gcc-cross.inc

>> b/meta/recipes-devtools/gcc/gcc-cross.inc

>> index b08bc197ba..1e184a60db 100644

>> --- a/meta/recipes-devtools/gcc/gcc-cross.inc

>> +++ b/meta/recipes-devtools/gcc/gcc-cross.inc

>> @@ -161,17 +161,19 @@ do_install () {

>>

>>         install -d ${D}${target_base_libdir}

>>         install -d ${D}${target_libdir}

>> -

>> +

>>         # Link gfortran to g77 to satisfy not-so-smart configure or hard

>> coded g77

>>         # gfortran is fully backwards compatible. This is a safe and

>> practical solution.

>> -       ln -sf

>> ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}gfortran

>> ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}g77 || true

>> +       if [ -n "${@d.getVar('FORTRAN')}" ]; then

>> +               ln -sf

>> ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}gfortran

>> ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}g77 || true

>> +               fortsymlinks="g77 gfortran"

>> +       fi

>>

>> -

>>         # Insert symlinks into libexec so when tools without a prefix are

>> searched for, the correct ones are

>>         # found. These need to be relative paths so they work in different

>> locations.

>>         dest=${D}${libexecdir}/gcc/${TARGET_SYS}/${BINV}/

>>         install -d $dest

>> -       for t in ar as ld nm objcopy objdump ranlib strip g77 gcc cpp

>> gfortran; do

>> +       for t in ar as ld ld.bfd ld.gold nm objcopy objdump ranlib strip

>> gcc cpp $fortsymlinks; do

>>                 ln -sf ${BINRELPATH}/${TARGET_PREFIX}$t $dest$t

>>                 ln -sf ${BINRELPATH}/${TARGET_PREFIX}$t

>> ${dest}${TARGET_PREFIX}$t

>>         done

>> --

>> 2.13.2

>>

>> --

>> _______________________________________________

>> Openembedded-core mailing list

>> Openembedded-core@lists.openembedded.org

>> http://lists.openembedded.org/mailman/listinfo/openembedded-core

>

>

-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core
diff mbox

Patch

diff --git a/meta/recipes-devtools/gcc/gcc-cross.inc b/meta/recipes-devtools/gcc/gcc-cross.inc
index b08bc197ba..1e184a60db 100644
--- a/meta/recipes-devtools/gcc/gcc-cross.inc
+++ b/meta/recipes-devtools/gcc/gcc-cross.inc
@@ -161,17 +161,19 @@  do_install () {
 
 	install -d ${D}${target_base_libdir}
 	install -d ${D}${target_libdir}
-    
+
 	# Link gfortran to g77 to satisfy not-so-smart configure or hard coded g77
 	# gfortran is fully backwards compatible. This is a safe and practical solution. 
-	ln -sf ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}gfortran ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}g77 || true
+	if [ -n "${@d.getVar('FORTRAN')}" ]; then
+		ln -sf ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}gfortran ${STAGING_DIR_NATIVE}${prefix_native}/bin/${TARGET_PREFIX}g77 || true
+		fortsymlinks="g77 gfortran"
+	fi
 
-	
 	# Insert symlinks into libexec so when tools without a prefix are searched for, the correct ones are
 	# found. These need to be relative paths so they work in different locations.
 	dest=${D}${libexecdir}/gcc/${TARGET_SYS}/${BINV}/
 	install -d $dest
-	for t in ar as ld nm objcopy objdump ranlib strip g77 gcc cpp gfortran; do
+	for t in ar as ld ld.bfd ld.gold nm objcopy objdump ranlib strip gcc cpp $fortsymlinks; do
 		ln -sf ${BINRELPATH}/${TARGET_PREFIX}$t $dest$t
 		ln -sf ${BINRELPATH}/${TARGET_PREFIX}$t ${dest}${TARGET_PREFIX}$t
 	done