While it is not clear how to depend on the libbacktrace in such a way
that it will be in the sysroot for a build, it is possible to generate
the library and header on the fly which will have the same c linkage
to the shared object as the one provided internally with gcc by asking
it to build at the time libgfortran is building.

The build of libgfortran fails as follows when fortran is enabled in
the local.conf with:

   FORTRAN_forcevariable = ",fortran"

Error text:

  libtool: compile: x86_64-wrs-linux-gcc -m64 -march=core2 -mtune=core2
  -msse3 -mfpmath=sse
  --sysroot=/opt/build/libgfortran/7.2.0-r0/recipe-sysroot
  -DHAVE_CONFIG_H
  -I. -I../../../../../../../../work-shared/gcc-7.2.0-r0/gcc-7.2.0/libgfortran
  
-iquote../../../../../../../../work-shared/gcc-7.2.0-r0/gcc-7.2.0/libgfortran/io
  
-I../../../../../../../../work-shared/gcc-7.2.0-r0/gcc-7.2.0/libgfortran/../gcc
  
-I../../../../../../../../work-shared/gcc-7.2.0-r0/gcc-7.2.0/libgfortran/../gcc/config
  
-I/opt/build/libgfortran/7.2.0-r0/gcc-7.2.0/build.x86_64-wrs-linux.x86_64-wrs-linux/x86_64-wrs-linux/libgfortran/../.././gcc
  
-I../../../../../../../../work-shared/gcc-7.2.0-r0/gcc-7.2.0/libgfortran/../libgcc
  
-I/opt/build/libgfortran/7.2.0-r0/gcc-7.2.0/build.x86_64-wrs-linux.x86_64-wrs-linux/x86_64-wrs-linux/libgfortran/../libgcc
  
-I../../../../../../../../work-shared/gcc-7.2.0-r0/gcc-7.2.0/libgfortran/../libbacktrace
  
-I/opt/build/libgfortran/7.2.0-r0/gcc-7.2.0/build.x86_64-wrs-linux.x86_64-wrs-linux/x86_64-wrs-linux/libgfortran/../libbacktrace
  -I../libbacktrace -std=gnu11 -Wall -Wstrict-prototypes
  -Wmissing-prototypes -Wold-style-definition -Wextra -Wwrite-strings
  -Werror=implicit-function-declaration -Werror=vla -fcx-fortran-rules
  -ffunction-sections -fdata-sections -std=gnu11 -O2 -pipe -g
  -Wunknown-pragmas -c
  
../../../../../../../../work-shared/gcc-7.2.0-r0/gcc-7.2.0/libgfortran/runtime/backtrace.c
  -fPIC -DPIC -o .libs/backtrace.o
  
../../../../../../../../work-shared/gcc-7.2.0-r0/gcc-7.2.0/libgfortran/runtime/backtrace.c:36:10:
  fatal error: backtrace-supported.h: No such file or directory #include
  "backtrace-supported.h"

This problem was also reported here over a year ago:
https://lists.yoctoproject.org/pipermail/yocto/2016-November/033228.html

Using this patch I was able to build fortan and use it to build a
working version of Atlas on the target system.

Signed-off-by: Jason Wessel <jason.wes...@windriver.com>
---
 meta/recipes-devtools/gcc/libgfortran.inc | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/meta/recipes-devtools/gcc/libgfortran.inc 
b/meta/recipes-devtools/gcc/libgfortran.inc
index 5f5d4af758..2f806e12e0 100644
--- a/meta/recipes-devtools/gcc/libgfortran.inc
+++ b/meta/recipes-devtools/gcc/libgfortran.inc
@@ -15,6 +15,13 @@ do_configure () {
        # Easiest way to stop bad RPATHs getting into the library since we have 
a
        # broken libtool here
        sed -i -e 's/hardcode_into_libs=yes/hardcode_into_libs=no/' 
${B}/${TARGET_SYS}/libgfortran/libtool
+       # Setup libbacktrace and build it because it is needed for the compile 
phase
+       # This is a work around for the proper libbacktrace integration for 
fortran
+       mkdir -p ${B}/${TARGET_SYS}/libbacktrace
+       cd ${B}/${TARGET_SYS}/libbacktrace
+       btrelpath=${@os.path.relpath("${S}/libbacktrace", 
"${B}/${TARGET_SYS}/libbacktrace")}
+       $btrelpath/configure ${CONFIGUREOPTS} ${EXTRA_OECONF}
+       oe_runmake MULTIBUILDTOP=${B}/${TARGET_SYS}/libbacktrace/
 }
 EXTRACONFFUNCS += "extract_stashed_builddir"
 do_configure[depends] += "${COMPILERDEP}"
-- 
2.11.0

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

Reply via email to