Ошибка bitbake do_package_qa: неверное расположение - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь собрать openblas-0.3.5 с Yocto (Rocko) для моего 64-битного Armv8-A. Я нашел этот рецепт в Интернете, и я немного подправил его. Но я получил следующую ошибку:

Ошибка:

ERROR: openblas-0.3.5-r0 do_package_qa: QA Issue: non -dev/-dbg/nativesdk- package contains symlink .so: openblas path '/work/aarch64-poky-linux/openblas/0.3.5-r0/packages-split/openblas/usr/lib/libopenblas.so' [dev-so]
WARNING: openblas-0.3.5-r0 do_package_qa: QA Issue: openblas: found library in wrong location: /usr/lib/libopenblas.so.0
openblas: found library in wrong location: /usr/lib/libopenblas_armv8-r0.3.5.so
openblas: found library in wrong location: /usr/lib/libopenblas.so [libdir]
ERROR: openblas-0.3.5-r0 do_package_qa: QA run found fatal errors. Please consider fixing them.
ERROR: openblas-0.3.5-r0 do_package_qa: Function failed: do_package_qa

Ниже мой файл openblas.bb:

#
#   Copyright (c) 2016 Intel Corporation. All rights reserved.
#   Copyright (c) 2019 Luxoft Sweden AB
#
#   SPDX-License-Identifier: MIT
#

DESCRIPTION = "OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version."
SUMMARY = "OpenBLAS : An optimized BLAS library"
AUTHOR = "Alexander Leiva <norxander@gmail.com>"
HOMEPAGE = "http://www.openblas.net/"
SECTION = "libs"
LICENSE = "BSD-3-Clause"

DEPENDS = "make"

LIC_FILES_CHKSUM = "file://LICENSE;md5=5adf4792c949a00013ce25d476a2abc0"

SRC_URI = "https://github.com/xianyi/OpenBLAS/archive/v${PV}.tar.gz"
SRC_URI[md5sum] = "579bda57f68ea6e9074bf5780e8620bb"
SRC_URI[sha256sum] = "0950c14bd77c90a6427e26210d6dab422271bc86f9fc69126725833ecdaa0e85"

S = "${WORKDIR}/OpenBLAS-${PV}"

do_compile () {
        oe_runmake HOSTCC="${BUILD_CC}" \
        CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}" \
        CROSS_SUFFIX=${HOST_PREFIX} \
        ONLY_CBLAS=1 USE_THREAD=0 \
        HOSTCC="${BUILD_CC}" \
        TARGET=ARMV8 BINARY=64
}

do_install() {
        oe_runmake HOSTCC="${BUILD_CC}" \
        CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}" \
        CROSS_SUFFIX=${HOST_PREFIX} \
        ONLY_CBLAS=1 USE_THREAD=0 \
        HOSTCC="${BUILD_CC}" \
        TARGET=ARMV8 BINARY=64 \
        PREFIX=${D}/usr \
        install     

        rm -rf ${D}${bindir}
        rm -rf ${D}${libdir}/cmake
} 

FILES_${PN} += "${libdir}/*"
FILES_${PN} += "/usr/lib/*"
#FILES_${PN}-dev = "${libdir}/* ${includedir}"

INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"

INSANE_SKIP_${PN} += "staticdev"

Альтернативный способ устранения ошибок: Я заменил -

PREFIX=${D}/usr \ 

на

PREFIX="${D}/opt/${PN}" \

и

FILES_${PN} += "${libdir}/*"
FILES_${PN} += "/usr/lib/*"
#FILES_${PN}-dev = "${libdir}/* ${includedir}" 

на

FILES_${PN}     += "/opt/${PN}"
FILES_${PN}-dev += "/opt/${PN}/lib/lib${PN}.so"
#FILES_${PN}-dbg += "/opt/${PN}/lib/.debug"

ВОПРОСЫ:

1) После этого openblas был собран без ошибок. Но, когда мне пришлось работать с openblas, после загрузки платы мне пришлось вручную скопировать все файлы из / opt / openblas в / usr / lib64 / и /usr/include/.

2) Я не смог найти openblas в моей папке sysroots-components в build/tmp/sysroots-components/aarch64/openblas.

3) Невозможно использовать openblas в качестве зависимости от любого другого рецепта. поскольку он был установлен в / opt, а не в / usr. (нет openblas в sysroots-компонентах)

Итак, мой вопрос: как мне решить эти проблемы и установить openblas в /usr/lib64 вместо /usr/lib или /opt ??

Ответы [ 3 ]

1 голос
/ 07 апреля 2020

рецепт для ARMV8

DESCRIPTION = "OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version."
SUMMARY = "OpenBLAS : An optimized BLAS library"
AUTHOR = "Alexander Leiva <norxander@gmail.com>"
HOMEPAGE = "http://www.openblas.net/"
SECTION = "libs"
LICENSE = "BSD-3-Clause"

RDEPENDS_${PN} += "libgfortran"
DEPENDS += " make libgfortran"

LIC_FILES_CHKSUM = "file://LICENSE;md5=5adf4792c949a00013ce25d476a2abc0"

SRC_URI = "https://github.com/xianyi/OpenBLAS/archive/v${PV}.tar.gz"
SRC_URI[md5sum] = "48637eb29f5b492b91459175dcc574b1"
SRC_URI[sha256sum] = "5ef38b15d9c652985774869efd548b8e3e972e1e99475c673b25537ed7bcf394"

S = "${WORKDIR}/OpenBLAS-${PV}"

FLOATABI = "${@bb.utils.contains("TUNE_FEATURES", "vfp", bb.utils.contains("TUNE_FEATURES", "callconvention-hard", " -mfloat-abi=hard", " -mfloat-abi=softfp", d), "" ,d)}"


def map_arch(a, d):
  import re
  if re.match('i.86$', a): return 'ATOM'
  elif re.match('x86_64$', a): return 'ATOM'
  elif re.match('aarch32$', a): return 'ARMV7'
  elif re.match('aarch64$', a): return 'ARMV8'
  return a

def map_bits(a, d):
  import re
  if re.match('i.86$', a): return 32
  elif re.match('x86_64$', a): return 64
  elif re.match('aarch32$', a): return 32
  elif re.match('aarch64$', a): return 64
  return 64

do_compile () {
  oe_runmake HOSTCC="${BUILD_CC} " \
                     CC="${TARGET_PREFIX}gcc ${FLOATABI} ${TOOLCHAIN_OPTIONS}" \
                     PREFIX=${exec_prefix} \
                     CROSS_SUFFIX=${HOST_PREFIX} \
                     ONLY_CBLAS=1 BINARY='${@map_bits(d.getVar('TARGET_ARCH', True), d)}' \
                     TARGET='ARMV8'
}

do_install() {
  install -d ${D}${libdir}
  install -d ${D}${libdir}/cmake
  install -d ${D}${libdir}/pkgconfig
  oe_runmake HOSTCC="${BUILD_CC}" \
                     CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}" \
                     PREFIX=${exec_prefix} \
                     CROSS_SUFFIX=${HOST_PREFIX} \
                     ONLY_CBLAS=1 BINARY='${@map_bits(d.getVar('TARGET_ARCH', True), d)}' \
                     TARGET='${@map_arch(d.getVar('TARGET_ARCH', True), d)}' \
                     DESTDIR=${D} \
                     install

  cp -r ${D}/usr/lib/* ${D}/usr/lib64/
  rm -rf ${D}/usr/lib
  rm -rf ${D}/usr/bin
}

RDEPENDS_${PN}-dev = ""
RDEPENDS_${PN}-staticdev = ""

FILES_${PN}-libs = "${libdir}/*"

FILES_${PN}     += "/usr/lib64"
FILES_${PN}-dev = "${includedir} ${libdir}/lib${PN}.so"

INSANE_SKIP_${PN} += "staticdev"
0 голосов
/ 06 апреля 2020

Я использую эту библиотеку, я использую этот рецепт:

DESCRIPTION = "OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version."
SUMMARY = "OpenBLAS : An optimized BLAS library"
AUTHOR = "Alexander Leiva <norxander@gmail.com>"
HOMEPAGE = "http://www.openblas.net/"
SECTION = "libs"
LICENSE = "BSD-3-Clause"

RDEPENDS_${PN} += "libgfortran"
DEPENDS += " make libgfortran"

LIC_FILES_CHKSUM = "file://LICENSE;md5=5adf4792c949a00013ce25d476a2abc0"

SRC_URI = "https://github.com/xianyi/OpenBLAS/archive/v${PV}.tar.gz"
SRC_URI[md5sum] = "48637eb29f5b492b91459175dcc574b1"
SRC_URI[sha256sum] = "5ef38b15d9c652985774869efd548b8e3e972e1e99475c673b25537ed7bcf394"

S = "${WORKDIR}/OpenBLAS-${PV}"

FLOATABI = "${@bb.utils.contains("TUNE_FEATURES", "vfp", bb.utils.contains("TUNE_FEATURES", "callconvention-hard", " -mfloat-abi=hard", " -mfloat-abi=softfp", d), "" ,d)}"


def map_arch(a, d):
  import re
  if re.match('i.86$', a): return 'ATOM'
  elif re.match('x86_64$', a): return 'ATOM'
  elif re.match('aarch32$', a): return 'ARMV7'
  elif re.match('aarch64$', a): return 'ARMV8'
  return a

def map_bits(a, d):
  import re
  if re.match('i.86$', a): return 32
  elif re.match('x86_64$', a): return 64
  elif re.match('aarch32$', a): return 32
  elif re.match('aarch64$', a): return 64
  return 32

do_compile () {
  oe_runmake HOSTCC="${BUILD_CC} " \
                     CC="${TARGET_PREFIX}gcc ${FLOATABI} ${TOOLCHAIN_OPTIONS}" \
                     PREFIX=${exec_prefix} \
                     CROSS_SUFFIX=${HOST_PREFIX} \
                     ONLY_CBLAS=1 BINARY='${@map_bits(d.getVar('TARGET_ARCH', True), d)}' \
                     TARGET='ARMV7'
}

do_install() {
  oe_runmake HOSTCC="${BUILD_CC}" \
                     CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}" \
                     PREFIX=${exec_prefix} \
                     CROSS_SUFFIX=${HOST_PREFIX} \
                     ONLY_CBLAS=1 BINARY='${@map_bits(d.getVar('TARGET_ARCH', True), d)}' \
                     TARGET='${@map_arch(d.getVar('TARGET_ARCH', True), d)}' \
                     DESTDIR=${D} \
                     install

  rm -rf ${D}${bindir}
  rm -rf ${D}${libdir}/cmake
}

FILES_${PN}     = "${libdir}/*"
FILES_${PN}-dev = "${includedir} ${libdir}/lib${PN}.so"

0 голосов
/ 06 апреля 2020

do_install необходимо передать правильный ${libdir}, поскольку Makefile предполагает, что $PREFIX/lib является правильным, если для вашей платформы это не так.

Вдоль стороны PREFIX также передайте OPENBLAS_LIBRARY_DIR=${libdir}.

...