Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ pygithub
catkin_pkg
rospkg
setuptools
packaging
15 changes: 8 additions & 7 deletions superflore/generators/bitbake/gen_packages.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@


def regenerate_pkg(
overlay, pkg, rosdistro, preserve_existing, srcrev_cache,
skip_keys
overlay, pkg, rosdistro, preserve_existing, yocto_release,
srcrev_cache, skip_keys
):
pkg_names = get_package_names(rosdistro)[0]
if pkg not in pkg_names:
Expand Down Expand Up @@ -106,7 +106,7 @@ def regenerate_pkg(
previous_version = existing[idx_version:].rstrip('.bb')
try:
current = oe_recipe(
rosdistro, pkg, srcrev_cache, skip_keys
rosdistro, yocto_release, pkg, srcrev_cache, skip_keys
)
except InvalidPackage as e:
err('Invalid package: ' + str(e))
Expand Down Expand Up @@ -159,7 +159,7 @@ def regenerate_pkg(


def _gen_recipe_for_package(
rosdistro, pkg_name, pkg, repo, ros_pkg,
rosdistro, yocto_release, pkg_name, pkg, repo, ros_pkg,
pkg_rosinstall, srcrev_cache, skip_keys
):
pkg_names = get_package_names(rosdistro)
Expand Down Expand Up @@ -189,6 +189,7 @@ def _gen_recipe_for_package(
pkg_name,
pkg_xml,
rosdistro,
yocto_release,
src_uri,
srcrev_cache,
skip_keys,
Expand Down Expand Up @@ -222,7 +223,7 @@ def _gen_recipe_for_package(

class oe_recipe(object):
def __init__(
self, rosdistro, pkg_name, srcrev_cache, skip_keys
self, rosdistro, yocto_release, pkg_name, srcrev_cache, skip_keys
):
pkg = rosdistro.release_packages[pkg_name]
repo = rosdistro.repositories[pkg.repository_name].release_repository
Expand All @@ -233,8 +234,8 @@ def __init__(
)

self.recipe = _gen_recipe_for_package(
rosdistro, pkg_name, pkg, repo, ros_pkg, pkg_rosinstall,
srcrev_cache, skip_keys
rosdistro, yocto_release, pkg_name, pkg, repo, ros_pkg,
pkg_rosinstall, srcrev_cache, skip_keys
)

def recipe_text(self):
Expand Down
10 changes: 10 additions & 0 deletions superflore/generators/bitbake/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from superflore.generate_installers import generate_installers
from superflore.generators.bitbake.gen_packages import regenerate_pkg
from superflore.generators.bitbake.ros_meta import RosMeta
from superflore.generators.bitbake.yocto_recipe import yocto_releases
from superflore.generators.bitbake.yocto_recipe import yoctoRecipe
from superflore.parser import get_parser
from superflore.repo_instance import RepoInstance
Expand Down Expand Up @@ -51,6 +52,13 @@ def main():
help='location to store archived packages',
type=str
)
parser.add_argument(
'--yocto-release',
help="create recipes for the specified Yocto release",
choices=yocto_releases.keys(),
required=False,
type=str
)
args = parser.parse_args(sys.argv[1:])
pr_comment = args.pr_comment
skip_keys = set(args.skip_keys) if args.skip_keys else set()
Expand Down Expand Up @@ -130,6 +138,7 @@ def main():
pkg,
distro,
False, # preserve_existing
args.yocto_release,
srcrev_cache,
skip_keys=skip_keys,
)
Expand Down Expand Up @@ -173,6 +182,7 @@ def main():
overlay,
regenerate_pkg,
preserve_existing,
args.yocto_release,
srcrev_cache,
skip_keys,
skip_keys=skip_keys,
Expand Down
31 changes: 28 additions & 3 deletions superflore/generators/bitbake/yocto_recipe.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import hashlib
from subprocess import DEVNULL, PIPE, Popen

from packaging.version import Version
from superflore.exceptions import NoPkgXml
from superflore.exceptions import UnresolvedDependency
from superflore.PackageMetadata import PackageMetadata
Expand All @@ -44,6 +45,19 @@
UNRESOLVED_DEP_PREFIX = 'ROS_UNRESOLVED_DEP-'
UNRESOLVED_DEP_REF_PREFIX = '${'+UNRESOLVED_DEP_PREFIX

yocto_releases = {
# name : version
'kirkstone': '4.0',
'langdale': '4.1',
'mickledore': '4.2',
'nanbield': '4.3',
'scarthgap': '5.0',
'styhead': '5.1',
'walnascar': '5.2',
'whinlatter': '5.3',
'wrynose': '6.0',
}


class yoctoRecipe(object):
"""
Expand All @@ -61,8 +75,8 @@ class yoctoRecipe(object):
max_component_name = 0

def __init__(
self, component_name, num_pkgs, pkg_name, pkg_xml, rosdistro, src_uri,
srcrev_cache, skip_keys
self, component_name, num_pkgs, pkg_name, pkg_xml, rosdistro,
yocto_release, src_uri, srcrev_cache, skip_keys
):
self.component = component_name
yoctoRecipe.max_component_name = max(
Expand All @@ -71,6 +85,7 @@ def __init__(
self.num_pkgs = num_pkgs
self.name = pkg_name
self.distro = rosdistro.name
self.release = yocto_release
self.version = get_pkg_version(rosdistro, pkg_name, is_oe=True)
self.src_uri = src_uri
self.pkg_xml = pkg_xml
Expand Down Expand Up @@ -495,12 +510,22 @@ def get_recipe_text(self, distributor):
ret += 'SRC_URI = "git://' + self.get_repo_src_uri() + \
';${ROS_BRANCH};protocol=https"\n'
ret += 'SRCREV = "' + self.srcrev + '"\n'
ret += 'S = "${WORKDIR}/git"\n\n'
if (self.release):
if Version(self._get_yocto_version(self.release)) < \
Version(yocto_releases['styhead']):
ret += 'S = "${WORKDIR}/git"\n\n'
ret += 'ROS_BUILD_TYPE = "' + self.build_type + '"\n'
# Inherits
ret += '\n' + self.get_bottom_inherit_line()
return ret

@staticmethod
def _get_yocto_version(release):
if release in yocto_releases:
return yocto_releases[release]
else:
return None

@staticmethod
def _get_ros_version(distro):
distros = get_distros()
Expand Down