aboutsummaryrefslogtreecommitdiffstats
path: root/classes
diff options
context:
space:
mode:
authorSamuli Piippo <samuli.piippo@qt.io>2016-11-10 10:06:11 +0200
committerSamuli Piippo <samuli.piippo@qt.io>2016-11-21 08:39:46 +0000
commit1a9ad4899efb2f3054ec0d676e41a85e01d8f806 (patch)
tree0db9018d6d7e3c6caa71fe4710e94e25021e041d /classes
parent3ee5d97e4de4356d416dad28239324ab757ec27a (diff)
Add support for creating QBSP package
QBSP is a Qt specific Board Support Package that can be installed with the Qt SDK or MaintenanceTool and contains a system image and a toolchain. The toolchain is automatically registered to the QtCreator. The recipes used for creating the system image and the toolchain can be configured with QBSP_IMAGE_TASK and QBSP_SDK_TASK. The files wanted for the system image can be further configured with QBSP_IMAGE_CONTENT, with a list of files located in DEPLOY_DIR_IMAGE folder. By default, .img and .conf files are used from the selected image recipe. QBSP_INSTALLER_COMPONENT defines the location in the Qt installer tree where the QBSP is shown and QBSP_VERSION defines the version for the components. The QBSP is installed to path defined by QBSP_INSTALL_PATH. The regular SDK creation can now reuse the same image package .7z, so update upload script to use it instead of creating new package. Task-number: QTBUG-57018 Change-Id: Id1e7cc4ab3998a7d450f23ed603b8e676b314d63 Reviewed-by: Iikka Eklund <iikka.eklund@qt.io> Reviewed-by: Teemu Holappa <teemu.holappa@qt.io>
Diffstat (limited to 'classes')
-rw-r--r--classes/qbsp-image.bbclass53
-rw-r--r--classes/qbsp.bbclass151
2 files changed, 204 insertions, 0 deletions
diff --git a/classes/qbsp-image.bbclass b/classes/qbsp-image.bbclass
new file mode 100644
index 00000000..c80aa233
--- /dev/null
+++ b/classes/qbsp-image.bbclass
@@ -0,0 +1,53 @@
+############################################################################
+##
+## Copyright (C) 2016 The Qt Company Ltd.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the Boot to Qt meta layer.
+##
+## $QT_BEGIN_LICENSE:GPL$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 3 or (at your option) any later version
+## approved by the KDE Free Qt Foundation. The licenses are as published by
+## the Free Software Foundation and appearing in the file LICENSE.GPL3
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+############################################################################
+
+QBSP_IMAGE_CONTENT ??= ""
+
+fakeroot do_qbsp_image () {
+ if [ -z "${QBSP_IMAGE_CONTENT}" ]; then
+ exit 0
+ fi
+
+ mkdir -p ${S}/qbsp
+
+ for item in ${QBSP_IMAGE_CONTENT}; do
+ src=`echo $item | awk -F':' '{ print $1 }'`
+ dst=`echo $item | awk -F':' '{ print $2 }'`
+
+ install -D -m 0755 ${DEPLOY_DIR_IMAGE}/$src ${S}/qbsp/$dst
+ done
+
+ cd ${S}/qbsp
+ 7z a ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.7z .
+
+ rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.7z
+ ln -s ${IMAGE_NAME}.7z ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.7z
+}
+
+IMAGE_POSTPROCESS_COMMAND += "do_qbsp_image;"
diff --git a/classes/qbsp.bbclass b/classes/qbsp.bbclass
new file mode 100644
index 00000000..6707ce37
--- /dev/null
+++ b/classes/qbsp.bbclass
@@ -0,0 +1,151 @@
+############################################################################
+##
+## Copyright (C) 2016 The Qt Company Ltd.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the Boot to Qt meta layer.
+##
+## $QT_BEGIN_LICENSE:GPL$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 3 or (at your option) any later version
+## approved by the KDE Free Qt Foundation. The licenses are as published by
+## the Free Software Foundation and appearing in the file LICENSE.GPL3
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+############################################################################
+
+inherit meta nopackages abi-arch
+
+FILESEXTRAPATHS_prepend := "${B2QTBASE}/files/qbsp:"
+
+SRC_URI = "\
+ file://base_package.xml \
+ file://image_package.xml \
+ file://toolchain_package.xml \
+ file://toolchain_installscript.qs \
+ "
+
+INHIBIT_DEFAULT_DEPS = "1"
+do_qbsp[depends] += "\
+ installer-framework:do_populate_sysroot \
+ ${QBSP_SDK_TASK}:do_populate_sdk \
+ ${QBSP_IMAGE_TASK}:do_image_complete \
+ "
+
+QBSP_VERSION ?= "${PV}${VERSION_AUTO_INCREMENT}"
+QBSP_INSTALLER_COMPONENT ?= "${MACHINE}"
+QBSP_INSTALL_PATH ?= "/Extras/${MACHINE}"
+
+QBSP_LICENSE_DEPENDENCY ?= ""
+QBSP_LICENSE_DEPENDENCY_imx = "qt.embedded.b2qt.freescalelicense"
+
+VERSION_AUTO_INCREMENT = "-0-${DATETIME}"
+VERSION_AUTO_INCREMENT[vardepsexclude] = "DATETIME"
+
+DEPLOY_CONF_NAME ?= "${MACHINE}"
+RELEASEDATE = "${@time.strftime('%Y-%m-%d',time.gmtime())}"
+
+IMAGE_PACKAGE = "${QBSP_IMAGE_TASK}-${MACHINE}.7z"
+SDK_NAME = "${DISTRO}-${SDK_MACHINE}-${QBSP_SDK_TASK}-${MACHINE}.${SDK_POSTFIX}"
+SDK_POSTFIX = "sh"
+SDK_POSTFIX_sdkmingw32 = "7z"
+REAL_MULTIMACH_TARGET_SYS = "${TUNE_PKGARCH}${TARGET_VENDOR}-${TARGET_OS}"
+SDK_MACHINE = "${@d.getVar('SDKMACHINE', True) or '${SDK_ARCH}'}"
+
+B = "${WORKDIR}/build"
+
+patch_installer_files() {
+ sed -e 's#@NAME@#${DEPLOY_CONF_NAME}#' \
+ -e 's#@VERSION@#${QBSP_VERSION}#' \
+ -e 's#@RELEASEDATE@#${RELEASEDATE}#' \
+ -e 's#@MACHINE@#${MACHINE}#' \
+ -e 's#@SYSROOT@#${REAL_MULTIMACH_TARGET_SYS}#' \
+ -e 's#@TARGET@#${TARGET_SYS}#' \
+ -e 's#@ABI@#${ABI}#' \
+ -e 's#@INSTALLPATH@#${QBSP_INSTALL_PATH}#' \
+ -e 's#@SDKPATH@#${SDKPATH}#' \
+ -e 's#@SDKFILE@#${SDK_NAME}#' \
+ -e 's#@LICENSEDEPENDENCY@#${QBSP_LICENSE_DEPENDENCY}#' \
+ -i ${1}/*
+}
+
+prepare_qbsp() {
+ # Toolchain component
+ TOOLCHAIN_PATH="${B}/pkg/${QBSP_INSTALLER_COMPONENT}.toolchain"
+ mkdir -p ${TOOLCHAIN_PATH}/meta
+ mkdir -p ${TOOLCHAIN_PATH}/data
+
+ cp ${WORKDIR}/toolchain_package.xml ${TOOLCHAIN_PATH}/meta/package.xml
+ cp ${WORKDIR}/toolchain_installscript.qs ${TOOLCHAIN_PATH}/meta/installscript.qs
+ patch_installer_files ${TOOLCHAIN_PATH}/meta
+
+ mkdir -p ${B}/toolchain/${QBSP_INSTALL_PATH}/toolchain
+ if [ "${SDK_POSTFIX}" == "7z" ]; then
+ 7z x ${DEPLOY_DIR}/sdk/${SDK_NAME} -o${B}/toolchain/${QBSP_INSTALL_PATH}/toolchain/
+ else
+ cp ${DEPLOY_DIR}/sdk/${SDK_NAME} ${B}/toolchain/${QBSP_INSTALL_PATH}/toolchain/
+ fi
+
+ cd ${B}/toolchain
+ archivegen ${TOOLCHAIN_PATH}/data/toolchain.7z *
+
+ # Image component
+ IMAGE_PATH="${B}/pkg/${QBSP_INSTALLER_COMPONENT}.system"
+ mkdir -p ${IMAGE_PATH}/meta
+ mkdir -p ${IMAGE_PATH}/data
+
+ cp ${WORKDIR}/image_package.xml ${IMAGE_PATH}/meta/package.xml
+ patch_installer_files ${IMAGE_PATH}/meta
+
+ mkdir -p ${B}/images/${QBSP_INSTALL_PATH}/images
+ 7z x ${DEPLOY_DIR_IMAGE}/${IMAGE_PACKAGE} -o${B}/images/${QBSP_INSTALL_PATH}/images/
+
+ cd ${B}/images
+ archivegen ${IMAGE_PATH}/data/image.7z *
+
+ # Base component
+ BASE_PATH="${B}/pkg/${QBSP_INSTALLER_COMPONENT}"
+ mkdir -p ${BASE_PATH}/meta
+
+ cp ${WORKDIR}/base_package.xml ${BASE_PATH}/meta/package.xml
+ patch_installer_files ${BASE_PATH}/meta
+}
+
+create_qbsp() {
+ prepare_qbsp
+
+ # Repository creation
+ repogen -p ${B}/pkg ${B}/repository
+
+ mkdir -p ${DEPLOY_DIR}/qbsp
+ rm -f ${DEPLOY_DIR}/qbsp/${PN}-${MACHINE}.qbsp
+
+ cd ${B}/repository
+ archivegen ${DEPLOY_DIR}/qbsp/${PN}-${SDK_MACHINE}-${MACHINE}.qbsp *
+}
+
+python do_qbsp() {
+ bb.build.exec_func('create_qbsp', d)
+}
+
+addtask qbsp after do_unpack before do_build
+
+do_qbsp[cleandirs] += "${B}"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+do_populate_sysroot[noexec] = "1"
+do_populate_lic[noexec] = "1"