From ff217ad58cfecc2eec61e86f086166ccfea4057d Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 10 Jun 2017 16:13:20 +0200 Subject: [PATCH] Add lc15-firmware package for sysmoBTS 2100 support --- classes/gitver-pkg.bbclass | 155 ++++++++++++++++++ classes/gitver-repo.bbclass | 139 ++++++++++++++++ .../firmware/lc15-firmware_git.bb | 48 ++++++ 3 files changed, 342 insertions(+) create mode 100644 classes/gitver-pkg.bbclass create mode 100644 classes/gitver-repo.bbclass create mode 100644 recipes-sysmobts/firmware/lc15-firmware_git.bb diff --git a/classes/gitver-pkg.bbclass b/classes/gitver-pkg.bbclass new file mode 100644 index 0000000..2576bde --- /dev/null +++ b/classes/gitver-pkg.bbclass @@ -0,0 +1,155 @@ +# gitver-pkg.bbclass +# +# Based on gitpkgv.bbclass from meta-openembedded + +PKGGITH = "${@get_pkg_gith(d, '${PN}')}" +PKGGITN = "${@get_pkg_gitn(d, '${PN}')}" +PKGGITV = "${@get_pkg_gitv(d, '${PN}')}" + +def gitpkgv_drop_tag_prefix(version): + import re + if re.match("v\d", version): + return version[1:] + else: + return version + +def get_pkg_gitv(d, pn): + import os + import bb + from pipes import quote + + src_uri = d.getVar('SRC_URI', 1).split() + fetcher = bb.fetch2.Fetch(src_uri, d) + ud = fetcher.ud + + ver = "0.0-0" + + for url in ud.values(): + if url.type == 'git' or url.type == 'gitsm': + for name, rev in url.revisions.items(): + if not os.path.exists(url.localpath): + return None + + vars = { 'repodir' : quote(url.localpath), + 'rev' : quote(rev) } + + # Verify of the hash is present + try: + bb.fetch2.runfetchcmd( + "cd %(repodir)s && " + "git describe %(rev)s --always 2>/dev/null" % vars, + d, quiet=True).strip() + + except Exception: + bb.fetch2.runfetchcmd( + "cd %(repodir)s && git fetch 2>/dev/null" % vars, + d, quiet=True).strip() + + # Try to get a version using git describe + try: + output = bb.fetch2.runfetchcmd( + "cd %(repodir)s && " + "git describe %(rev)s --long 2>/dev/null" % vars, + d, quiet=True).strip() + + ver = gitpkgv_drop_tag_prefix(output) + + except Exception: + try: + commits = bb.fetch2.runfetchcmd( + "cd %(repodir)s && " + "git rev-list %(rev)s --count 2> /dev/null " % vars, + d, quiet=True).strip() + + if commits == "": + commits = "0" + + rev = bb.fetch2.get_srcrev(d).split('+')[1] + + ver = "0.0-%s-g%s" % (commits, rev[:7]) + + except Exception: + pass + return ver + +def get_pkg_gitn(d, pn): + import os + import bb + from pipes import quote + + src_uri = d.getVar('SRC_URI', 1).split() + fetcher = bb.fetch2.Fetch(src_uri, d) + ud = fetcher.ud + + for url in ud.values(): + if url.type == 'git' or url.type == 'gitsm': + for name, rev in url.revisions.items(): + if not os.path.exists(url.localpath): + return None + + vars = { 'repodir' : quote(url.localpath), + 'rev' : quote(rev) } + + # Verify of the hash is present + try: + bb.fetch2.runfetchcmd( + "cd %(repodir)s && " + "git describe %(rev)s --always 2>/dev/null" % vars, + d, quiet=True).strip() + + except Exception: + bb.fetch2.runfetchcmd( + "cd %(repodir)s && git fetch 2>/dev/null" % vars, + d, quiet=True).strip() + + + try: + tag = bb.fetch2.runfetchcmd( + "cd %(repodir)s && " + "git describe --abbrev=0 %(rev)s 2>/dev/null" % vars, + d, quiet=True).strip() + + vars = { 'repodir' : quote(url.localpath), + 'rev' : quote(rev), + 'tag' : quote(tag) } + + commits = bb.fetch2.runfetchcmd( + "cd %(repodir)s && " + "git rev-list %(rev)s ^%(tag)s --count 2> /dev/null " % vars, + d, quiet=True).strip() + + return commits + + except Exception: + commits = bb.fetch2.runfetchcmd( + "cd %(repodir)s && " + "git rev-list %(rev)s --count 2> /dev/null " % vars, + d, quiet=True).strip() + + if commits == "": + commits = "0" + + return commits + + return '0' + + +def get_pkg_gith(d, pn): + import os + import bb + from pipes import quote + + src_uri = d.getVar('SRC_URI', 1).split() + fetcher = bb.fetch2.Fetch(src_uri, d) + ud = fetcher.ud + + for url in ud.values(): + if url.type == 'git' or url.type == 'gitsm': + for name, rev in url.revisions.items(): + if not os.path.exists(url.localpath): + return None + else: + return rev + + return None + diff --git a/classes/gitver-repo.bbclass b/classes/gitver-repo.bbclass new file mode 100644 index 0000000..85e22c6 --- /dev/null +++ b/classes/gitver-repo.bbclass @@ -0,0 +1,139 @@ +# gitver-repo.bbclass +# +# Based on gitpkgv.bbclass from meta-openembedded + +REPODIR ?= "${THISDIR}" + +REPOGITH = "${@get_repo_gith(d, '${REPODIR}')}" +REPOGITN = "${@get_repo_gitn(d, '${REPODIR}')}" +REPOGITV = "${@get_repo_gitv(d, '${REPODIR}')}" +REPOGITT = "${@get_repo_gitt(d, '${REPODIR}')}" +REPOGITFN = "${@get_repo_gitfn(d, '${REPODIR}', '${REPOFILE}')}" + +def gitver_repo_drop_tag_prefix(version): + import re + if re.match("v\d", version): + return version[1:] + else: + return version + +def get_repo_gitv(d, repodir): + import os + import bb + from pipes import quote + + vars = { 'repodir' : quote(repodir) } + + try: + output = bb.fetch2.runfetchcmd( + "git -C %(repodir)s describe --long 2>/dev/null" % vars, + d, quiet=True).strip() + + ver = gitver_repo_drop_tag_prefix(output) + + except Exception: + return None + + return ver + +def get_repo_gitn(d, repodir): + import os + import bb + from pipes import quote + + vars = { 'repodir' : quote(repodir) } + + try: + + tag = bb.fetch2.runfetchcmd( + "git -C %(repodir)s describe --abbrev=0 2>/dev/null" % vars, + d, quiet=False).strip() + + vars = { 'repodir' : quote(repodir), + 'tag' : quote(tag) } + + commits = bb.fetch2.runfetchcmd( + "git -C %(repodir)s rev-list %(tag)s.. --count 2> /dev/null" % vars, + d, quiet=True).strip() + + return commits + + except Exception: + commits = bb.fetch2.runfetchcmd( + "git -C %(repodir)s rev-list --count HEAD 2>/dev/null" % vars, + d, quiet=True).strip() + + if commits == "": + commits = "0" + + return commits + +def get_repo_gitt(d, repodir): + import os + import bb + from pipes import quote + + vars = { 'repodir' : quote(repodir) } + + try: + tag = bb.fetch2.runfetchcmd( + "git -C %(repodir)s describe --abbrev=0 2>/dev/null" % vars, + d, quiet=True).strip() + + return tag + + except Exception: + return None + +def get_repo_gith(d, repodir): + import os + import bb + from pipes import quote + + vars = { 'repodir' : quote(repodir) } + + try: + hash = bb.fetch2.runfetchcmd( + "git -C %(repodir)s rev-parse HEAD 2>/dev/null" % vars, + d, quiet=True).strip() + + return hash + + except Exception: + return None + +def get_repo_gitfn(d, repodir, repofile): + import os + import bb + from pipes import quote + + vars = { 'repodir' : quote(repodir), + 'repofile' : quote(repofile) } + + try: + + tag = bb.fetch2.runfetchcmd( + "git -C %(repodir)s describe --abbrev=0 2>/dev/null" % vars, + d, quiet=False).strip() + + vars = { 'repodir' : quote(repodir), + 'repofile' : quote(repofile), + 'tag' : quote(tag) } + + commits = bb.fetch2.runfetchcmd( + "git -C %(repodir)s rev-list --count %(tag)s.. %(repofile)s 2> /dev/null" % vars, + d, quiet=True).strip() + + return commits + + except Exception: + commits = bb.fetch2.runfetchcmd( + "git -C %(repodir)s rev-list --count HEAD %(repofile)s 2>/dev/null" % vars, + d, quiet=True).strip() + + if commits == "": + commits = "0" + + return commits + + diff --git a/recipes-sysmobts/firmware/lc15-firmware_git.bb b/recipes-sysmobts/firmware/lc15-firmware_git.bb new file mode 100644 index 0000000..9edea95 --- /dev/null +++ b/recipes-sysmobts/firmware/lc15-firmware_git.bb @@ -0,0 +1,48 @@ +SUMMARY = "Firmware files for Nuran Wireless Litecell 1.5 Mainboard" +LICENSE = "CLOSED" + +NRW_LC15_MIRROR ??= "git@gitlab.com/nrw_litecell15" + +S = "${WORKDIR}/git" + +inherit gitver-pkg gitver-repo + +REPODIR = "${THISDIR}" +REPOFILE = "lc15-firmware_git.bb" +PR := "r${REPOGITFN}" + +PV = "git${SRCPV}" +PKGV = "${PKGGITV}" + +DEV_BRANCH = "${@ 'nrw/litecell15-next' if d.getVar('NRW_BSP_DEVEL', False) == "next" else 'nrw/litecell15'}" +DEV_SRCREV = "${AUTOREV}" +DEV_SRCURI := "git://${NRW_LC15_MIRROR}/litecell15-fw.git;protocol=ssh;branch=${DEV_BRANCH}" + +REL_BRANCH = "nrw/litecell15" +REL_SRCREV = "68607b5c33a02883c50f9408f423234747407d99" +REL_SRCURI := "git://${NRW_LC15_MIRROR}/litecell15-fw.git;protocol=ssh;branch=${REL_BRANCH}" + +BRANCH = "${@ '${DEV_BRANCH}' if d.getVar('NRW_BSP_DEVEL', False) else '${REL_BRANCH}'}" +SRCREV = "${@ '${DEV_SRCREV}' if d.getVar('NRW_BSP_DEVEL', False) else '${REL_SRCREV}'}" +SRC_URI = "${@ '${DEV_SRCURI}' if d.getVar('NRW_BSP_DEVEL', False) else '${REL_SRCURI}'}" + +addtask showversion after do_compile before do_install +do_showversion() { + bbplain "${PN}: ${PKGGITV} => ${BRANCH}:${PKGGITH}" +} + +inherit allarch + +do_install() { + install -d ${D}${includedir}/nrw + install -d ${D}${includedir}/nrw/litecell15 + install -m 0644 ${S}/inc/nrw/litecell15/* ${D}${includedir}/nrw/litecell15 + + install -d ${D}${base_libdir}/firmware + install -m 0644 ${S}/bin/* ${D}${base_libdir}/firmware +} + +INSANE_SKIP_${PN} = "arch" + +FILES_${PN} = "${base_libdir}/firmware/*" +FILES_${PN}-dev = "${includedir}/nrw/litecell15/*"