Complete Yocto mirror with license table for TQMa6UL (2038-compliance)
- 264 license table entries with exact download URLs (224/264 resolved) - Complete sources/ directory with all BitBake recipes - Build configuration: tqma6ul-multi-mba6ulx, spaetzle (musl) - Full traceability for Softwarefreigabeantrag - GCC 13.4.0, Linux 6.6.102, U-Boot 2023.04, musl 1.2.4 - License distribution: GPL-2.0 (24), MIT (23), GPL-2.0+ (18), BSD-3 (16)
This commit is contained in:
0
sources/poky/meta/lib/oeqa/sdkext/__init__.py
Normal file
0
sources/poky/meta/lib/oeqa/sdkext/__init__.py
Normal file
24
sources/poky/meta/lib/oeqa/sdkext/case.py
Normal file
24
sources/poky/meta/lib/oeqa/sdkext/case.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#
|
||||
# Copyright (C) 2016 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
from oeqa.utils import avoid_paths_in_environ
|
||||
from oeqa.sdk.case import OESDKTestCase
|
||||
|
||||
class OESDKExtTestCase(OESDKTestCase):
|
||||
def _run(self, cmd):
|
||||
# extensible sdk shows a warning if found bitbake in the path
|
||||
# because can cause contamination, i.e. use devtool from
|
||||
# poky/scripts instead of eSDK one.
|
||||
env = os.environ.copy()
|
||||
paths_to_avoid = ['bitbake/bin', 'poky/scripts']
|
||||
env['PATH'] = avoid_paths_in_environ(paths_to_avoid)
|
||||
|
||||
return subprocess.check_output(". %s > /dev/null;"\
|
||||
" %s;" % (self.tc.sdk_env, cmd), stderr=subprocess.STDOUT,
|
||||
shell=True, env=env, universal_newlines=True)
|
||||
125
sources/poky/meta/lib/oeqa/sdkext/cases/devtool.py
Normal file
125
sources/poky/meta/lib/oeqa/sdkext/cases/devtool.py
Normal file
@@ -0,0 +1,125 @@
|
||||
#
|
||||
# Copyright (C) 2016 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
|
||||
from oeqa.sdkext.case import OESDKExtTestCase
|
||||
from oeqa.utils.httpserver import HTTPService
|
||||
|
||||
from oeqa.utils.subprocesstweak import errors_have_output
|
||||
errors_have_output()
|
||||
|
||||
class DevtoolTest(OESDKExtTestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
myapp_src = os.path.join(cls.tc.esdk_files_dir, "myapp")
|
||||
cls.myapp_dst = os.path.join(cls.tc.sdk_dir, "myapp")
|
||||
shutil.copytree(myapp_src, cls.myapp_dst)
|
||||
subprocess.check_output(['git', 'init', '.'], cwd=cls.myapp_dst)
|
||||
subprocess.check_output(['git', 'add', '.'], cwd=cls.myapp_dst)
|
||||
subprocess.check_output(['git', 'commit', '-m', "'test commit'"], cwd=cls.myapp_dst)
|
||||
|
||||
myapp_cmake_src = os.path.join(cls.tc.esdk_files_dir, "myapp_cmake")
|
||||
cls.myapp_cmake_dst = os.path.join(cls.tc.sdk_dir, "myapp_cmake")
|
||||
shutil.copytree(myapp_cmake_src, cls.myapp_cmake_dst)
|
||||
subprocess.check_output(['git', 'init', '.'], cwd=cls.myapp_cmake_dst)
|
||||
subprocess.check_output(['git', 'add', '.'], cwd=cls.myapp_cmake_dst)
|
||||
subprocess.check_output(['git', 'commit', '-m', "'test commit'"], cwd=cls.myapp_cmake_dst)
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
shutil.rmtree(cls.myapp_dst)
|
||||
shutil.rmtree(cls.myapp_cmake_dst)
|
||||
|
||||
def _test_devtool_build(self, directory):
|
||||
self._run('devtool add myapp %s' % directory)
|
||||
try:
|
||||
self._run('devtool build myapp')
|
||||
finally:
|
||||
self._run('devtool reset myapp')
|
||||
|
||||
def _test_devtool_build_package(self, directory):
|
||||
self._run('devtool add myapp %s' % directory)
|
||||
try:
|
||||
self._run('devtool package myapp')
|
||||
finally:
|
||||
self._run('devtool reset myapp')
|
||||
|
||||
def test_devtool_location(self):
|
||||
output = self._run('which devtool')
|
||||
self.assertEqual(output.startswith(self.tc.sdk_dir), True, \
|
||||
msg="Seems that devtool isn't the eSDK one: %s" % output)
|
||||
|
||||
def test_devtool_add_reset(self):
|
||||
self._run('devtool add myapp %s' % self.myapp_dst)
|
||||
self._run('devtool reset myapp')
|
||||
|
||||
def test_devtool_build_make(self):
|
||||
self._test_devtool_build(self.myapp_dst)
|
||||
|
||||
def test_devtool_build_esdk_package(self):
|
||||
self._test_devtool_build_package(self.myapp_dst)
|
||||
|
||||
def test_devtool_build_cmake(self):
|
||||
self._test_devtool_build(self.myapp_cmake_dst)
|
||||
|
||||
def test_extend_autotools_recipe_creation(self):
|
||||
recipe = "test-dbus-wait"
|
||||
self._run('devtool sdk-install dbus')
|
||||
self._run('devtool add %s https://git.yoctoproject.org/git/dbus-wait' % (recipe) )
|
||||
try:
|
||||
self._run('devtool build %s' % recipe)
|
||||
finally:
|
||||
self._run('devtool reset %s' % recipe)
|
||||
|
||||
def test_devtool_kernelmodule(self):
|
||||
docfile = 'https://git.yoctoproject.org/git/kernel-module-hello-world'
|
||||
recipe = 'kernel-module-hello-world'
|
||||
self._run('devtool add %s %s' % (recipe, docfile) )
|
||||
try:
|
||||
self._run('devtool build %s' % recipe)
|
||||
finally:
|
||||
self._run('devtool reset %s' % recipe)
|
||||
|
||||
def test_recipes_for_nodejs(self):
|
||||
package_nodejs = "npm://registry.npmjs.org;name=winston;version=2.2.0"
|
||||
self._run('devtool add %s ' % package_nodejs)
|
||||
try:
|
||||
self._run('devtool build %s ' % package_nodejs)
|
||||
finally:
|
||||
self._run('devtool reset %s '% package_nodejs)
|
||||
|
||||
class SdkUpdateTest(OESDKExtTestCase):
|
||||
@classmethod
|
||||
def setUpClass(self):
|
||||
self.publish_dir = os.path.join(self.tc.sdk_dir, 'esdk_publish')
|
||||
if os.path.exists(self.publish_dir):
|
||||
shutil.rmtree(self.publish_dir)
|
||||
os.mkdir(self.publish_dir)
|
||||
|
||||
base_tcname = "%s/%s" % (self.td.get("SDK_DEPLOY", ''),
|
||||
self.td.get("TOOLCHAINEXT_OUTPUTNAME", ''))
|
||||
tcname_new = "%s-new.sh" % base_tcname
|
||||
if not os.path.exists(tcname_new):
|
||||
tcname_new = "%s.sh" % base_tcname
|
||||
|
||||
cmd = 'oe-publish-sdk %s %s' % (tcname_new, self.publish_dir)
|
||||
subprocess.check_output(cmd, shell=True)
|
||||
|
||||
self.http_service = HTTPService(self.publish_dir, logger=self.logger)
|
||||
self.http_service.start()
|
||||
|
||||
self.http_url = "http://127.0.0.1:%d" % self.http_service.port
|
||||
|
||||
def test_sdk_update_http(self):
|
||||
output = self._run("devtool sdk-update \"%s\"" % self.http_url)
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(self):
|
||||
self.http_service.stop()
|
||||
shutil.rmtree(self.publish_dir)
|
||||
32
sources/poky/meta/lib/oeqa/sdkext/context.py
Normal file
32
sources/poky/meta/lib/oeqa/sdkext/context.py
Normal file
@@ -0,0 +1,32 @@
|
||||
#
|
||||
# Copyright (C) 2016 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
import os
|
||||
from oeqa.sdk.context import OESDKTestContext, OESDKTestContextExecutor
|
||||
|
||||
class OESDKExtTestContext(OESDKTestContext):
|
||||
esdk_files_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "files")
|
||||
|
||||
# FIXME - We really need to do better mapping of names here, this at
|
||||
# least allows some tests to run
|
||||
def hasHostPackage(self, pkg):
|
||||
# We force a toolchain to be installed into the eSDK even if its minimal
|
||||
if pkg.startswith("packagegroup-cross-canadian-"):
|
||||
return True
|
||||
return self._hasPackage(self.host_pkg_manifest, pkg)
|
||||
|
||||
class OESDKExtTestContextExecutor(OESDKTestContextExecutor):
|
||||
_context_class = OESDKExtTestContext
|
||||
|
||||
name = 'esdk'
|
||||
help = 'esdk test component'
|
||||
description = 'executes esdk tests'
|
||||
|
||||
default_cases = OESDKTestContextExecutor.default_cases + \
|
||||
[os.path.join(os.path.abspath(os.path.dirname(__file__)), 'cases')]
|
||||
default_test_data = None
|
||||
|
||||
_executor_class = OESDKExtTestContextExecutor
|
||||
10
sources/poky/meta/lib/oeqa/sdkext/files/myapp/Makefile
Normal file
10
sources/poky/meta/lib/oeqa/sdkext/files/myapp/Makefile
Normal file
@@ -0,0 +1,10 @@
|
||||
all: myapp
|
||||
|
||||
myapp: myapp.o
|
||||
$(CC) $(LDFLAGS) $< -o $@
|
||||
|
||||
myapp.o: myapp.c
|
||||
$(CC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
clean:
|
||||
rm -rf myapp.o myapp
|
||||
9
sources/poky/meta/lib/oeqa/sdkext/files/myapp/myapp.c
Normal file
9
sources/poky/meta/lib/oeqa/sdkext/files/myapp/myapp.c
Normal file
@@ -0,0 +1,9 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
printf("Hello world\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
cmake_minimum_required (VERSION 2.6)
|
||||
project (myapp)
|
||||
# The version number.
|
||||
set (myapp_VERSION_MAJOR 1)
|
||||
set (myapp_VERSION_MINOR 0)
|
||||
|
||||
# add the executable
|
||||
add_executable (myapp myapp.c)
|
||||
|
||||
install(TARGETS myapp
|
||||
RUNTIME DESTINATION bin)
|
||||
@@ -0,0 +1,9 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
printf("Hello world\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
108
sources/poky/meta/lib/oeqa/sdkext/testsdk.py
Normal file
108
sources/poky/meta/lib/oeqa/sdkext/testsdk.py
Normal file
@@ -0,0 +1,108 @@
|
||||
#
|
||||
# Copyright 2018 by Garmin Ltd. or its subsidiaries
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
||||
from oeqa.sdk.testsdk import TestSDKBase
|
||||
|
||||
class TestSDKExt(TestSDKBase):
|
||||
def run(self, d):
|
||||
import os
|
||||
import json
|
||||
import subprocess
|
||||
import logging
|
||||
|
||||
from bb.utils import export_proxies
|
||||
from oeqa.utils import avoid_paths_in_environ, make_logger_bitbake_compatible, subprocesstweak
|
||||
from oeqa.sdkext.context import OESDKExtTestContext, OESDKExtTestContextExecutor
|
||||
from oeqa.utils import get_json_result_dir
|
||||
|
||||
pn = d.getVar("PN")
|
||||
logger = make_logger_bitbake_compatible(logging.getLogger("BitBake"))
|
||||
|
||||
# extensible sdk use network
|
||||
export_proxies(d)
|
||||
|
||||
subprocesstweak.errors_have_output()
|
||||
|
||||
# We need the original PATH for testing the eSDK, not with our manipulations
|
||||
os.environ['PATH'] = d.getVar("BB_ORIGENV", False).getVar("PATH")
|
||||
|
||||
tcname = d.expand("${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.sh")
|
||||
if not os.path.exists(tcname):
|
||||
bb.fatal("The toolchain ext %s is not built. Build it before running the" \
|
||||
" tests: 'bitbake <image> -c populate_sdk_ext' ." % tcname)
|
||||
|
||||
tdname = d.expand("${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.testdata.json")
|
||||
test_data = json.load(open(tdname, "r"))
|
||||
|
||||
target_pkg_manifest = OESDKExtTestContextExecutor._load_manifest(
|
||||
d.expand("${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.target.manifest"))
|
||||
host_pkg_manifest = OESDKExtTestContextExecutor._load_manifest(
|
||||
d.expand("${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.host.manifest"))
|
||||
|
||||
sdk_dir = d.expand("${WORKDIR}/testsdkext/")
|
||||
bb.utils.remove(sdk_dir, True)
|
||||
bb.utils.mkdirhier(sdk_dir)
|
||||
try:
|
||||
subprocess.check_output("%s -y -d %s" % (tcname, sdk_dir), shell=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
msg = "Couldn't install the extensible SDK:\n%s" % e.output.decode("utf-8")
|
||||
logfn = os.path.join(sdk_dir, 'preparing_build_system.log')
|
||||
if os.path.exists(logfn):
|
||||
msg += '\n\nContents of preparing_build_system.log:\n'
|
||||
with open(logfn, 'r') as f:
|
||||
for line in f:
|
||||
msg += line
|
||||
bb.fatal(msg)
|
||||
|
||||
fail = False
|
||||
sdk_envs = OESDKExtTestContextExecutor._get_sdk_environs(sdk_dir)
|
||||
for s in sdk_envs:
|
||||
bb.plain("Extensible SDK testing environment: %s" % s)
|
||||
|
||||
sdk_env = sdk_envs[s]
|
||||
|
||||
# Use our own SSTATE_DIR and DL_DIR so that updates to the eSDK come from our sstate cache
|
||||
# and we don't spend hours downloading kernels for the kernel module test
|
||||
# Abuse auto.conf since local.conf would be overwritten by the SDK
|
||||
with open(os.path.join(sdk_dir, 'conf', 'auto.conf'), 'a+') as f:
|
||||
f.write('SSTATE_MIRRORS += "file://.* file://%s/PATH"\n' % test_data.get('SSTATE_DIR'))
|
||||
f.write('SOURCE_MIRROR_URL = "file://%s"\n' % test_data.get('DL_DIR'))
|
||||
f.write('INHERIT += "own-mirrors"\n')
|
||||
f.write('PREMIRRORS:prepend = "git://git.yoctoproject.org/.* git://%s/git2/git.yoctoproject.org.BASENAME "\n' % test_data.get('DL_DIR'))
|
||||
|
||||
# We need to do this in case we have a minimal SDK
|
||||
subprocess.check_output(". %s > /dev/null; devtool sdk-install meta-extsdk-toolchain" % \
|
||||
sdk_env, cwd=sdk_dir, shell=True, stderr=subprocess.STDOUT)
|
||||
|
||||
tc = OESDKExtTestContext(td=test_data, logger=logger, sdk_dir=sdk_dir,
|
||||
sdk_env=sdk_env, target_pkg_manifest=target_pkg_manifest,
|
||||
host_pkg_manifest=host_pkg_manifest)
|
||||
|
||||
try:
|
||||
tc.loadTests(OESDKExtTestContextExecutor.default_cases)
|
||||
except Exception as e:
|
||||
import traceback
|
||||
bb.fatal("Loading tests failed:\n%s" % traceback.format_exc())
|
||||
|
||||
result = tc.runTests()
|
||||
|
||||
component = "%s %s" % (pn, OESDKExtTestContextExecutor.name)
|
||||
context_msg = "%s:%s" % (os.path.basename(tcname), os.path.basename(sdk_env))
|
||||
configuration = self.get_sdk_configuration(d, 'sdkext')
|
||||
result.logDetails(get_json_result_dir(d),
|
||||
configuration,
|
||||
self.get_sdk_result_id(configuration))
|
||||
result.logSummary(component, context_msg)
|
||||
|
||||
if not result.wasSuccessful():
|
||||
fail = True
|
||||
|
||||
# Clean the workspace/sources to avoid `devtool add' failure because of non-empty source directory
|
||||
bb.utils.remove(sdk_dir+'workspace/sources', True)
|
||||
|
||||
if fail:
|
||||
bb.fatal("%s - FAILED - check the task log and the commands log" % pn)
|
||||
|
||||
Reference in New Issue
Block a user