summaryrefslogtreecommitdiffstats
path: root/meta/classes-recipe
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes-recipe')
-rw-r--r--meta/classes-recipe/barebox.bbclass2
-rw-r--r--meta/classes-recipe/crosssdk.bbclass1
-rw-r--r--meta/classes-recipe/devicetree.bbclass3
-rw-r--r--meta/classes-recipe/devupstream.bbclass6
-rw-r--r--meta/classes-recipe/go-mod-update-modules.bbclass152
-rw-r--r--meta/classes-recipe/go-mod.bbclass2
-rw-r--r--meta/classes-recipe/image-live.bbclass5
-rw-r--r--meta/classes-recipe/image_types_wic.bbclass12
-rw-r--r--meta/classes-recipe/kernel-fit-image.bbclass3
-rw-r--r--meta/classes-recipe/kernel-yocto.bbclass16
-rw-r--r--meta/classes-recipe/pypi.bbclass2
-rw-r--r--meta/classes-recipe/rust-target-config.bbclass67
-rw-r--r--meta/classes-recipe/testsdk.bbclass1
-rw-r--r--meta/classes-recipe/uboot-config.bbclass15
-rw-r--r--meta/classes-recipe/uboot-sign.bbclass74
15 files changed, 276 insertions, 85 deletions
diff --git a/meta/classes-recipe/barebox.bbclass b/meta/classes-recipe/barebox.bbclass
index a562dce169..ece8fb6485 100644
--- a/meta/classes-recipe/barebox.bbclass
+++ b/meta/classes-recipe/barebox.bbclass
@@ -14,7 +14,7 @@ PACKAGE_ARCH = "${MACHINE_ARCH}"
14 14
15DEPENDS += "bison-native flex-native lz4-native" 15DEPENDS += "bison-native flex-native lz4-native"
16 16
17S = "${WORKDIR}/barebox-${PV}" 17S = "${UNPACKDIR}/barebox-${PV}"
18B = "${WORKDIR}/build" 18B = "${WORKDIR}/build"
19 19
20require conf/image-uefi.conf 20require conf/image-uefi.conf
diff --git a/meta/classes-recipe/crosssdk.bbclass b/meta/classes-recipe/crosssdk.bbclass
index 824b1bcff4..3541c2c393 100644
--- a/meta/classes-recipe/crosssdk.bbclass
+++ b/meta/classes-recipe/crosssdk.bbclass
@@ -4,6 +4,7 @@
4# SPDX-License-Identifier: MIT 4# SPDX-License-Identifier: MIT
5# 5#
6 6
7BB_DEFER_BBCLASSES:remove = "cross"
7inherit cross 8inherit cross
8 9
9CLASSOVERRIDE = "class-crosssdk" 10CLASSOVERRIDE = "class-crosssdk"
diff --git a/meta/classes-recipe/devicetree.bbclass b/meta/classes-recipe/devicetree.bbclass
index 2a2ac93e9b..ce9d008aac 100644
--- a/meta/classes-recipe/devicetree.bbclass
+++ b/meta/classes-recipe/devicetree.bbclass
@@ -40,8 +40,7 @@ PACKAGE_ARCH = "${MACHINE_ARCH}"
40SYSROOT_DIRS += "/boot/devicetree" 40SYSROOT_DIRS += "/boot/devicetree"
41FILES:${PN} = "/boot/devicetree/*.dtb /boot/devicetree/*.dtbo" 41FILES:${PN} = "/boot/devicetree/*.dtb /boot/devicetree/*.dtbo"
42 42
43S = "${WORKDIR}/sources" 43S = "${UNPACKDIR}"
44UNPACKDIR = "${S}"
45B = "${WORKDIR}/build" 44B = "${WORKDIR}/build"
46 45
47# Default kernel includes, these represent what are normally used for in-kernel 46# Default kernel includes, these represent what are normally used for in-kernel
diff --git a/meta/classes-recipe/devupstream.bbclass b/meta/classes-recipe/devupstream.bbclass
index d941763fb7..60026a527f 100644
--- a/meta/classes-recipe/devupstream.bbclass
+++ b/meta/classes-recipe/devupstream.bbclass
@@ -13,9 +13,6 @@
13# SRC_URI:class-devupstream = "git://git.example.com/example;branch=master" 13# SRC_URI:class-devupstream = "git://git.example.com/example;branch=master"
14# SRCREV:class-devupstream = "abcdef" 14# SRCREV:class-devupstream = "abcdef"
15# 15#
16# If the first entry in SRC_URI is a git: URL then S is rewritten to
17# WORKDIR/git.
18#
19# There are a few caveats that remain to be solved: 16# There are a few caveats that remain to be solved:
20# - You can't build native or nativesdk recipes using for example 17# - You can't build native or nativesdk recipes using for example
21# devupstream:native, you can only build target recipes. 18# devupstream:native, you can only build target recipes.
@@ -39,9 +36,6 @@ python devupstream_virtclass_handler () {
39 src_uri = d.getVar("SRC_URI:class-devupstream") or d.getVar("SRC_URI") 36 src_uri = d.getVar("SRC_URI:class-devupstream") or d.getVar("SRC_URI")
40 uri = bb.fetch2.URI(src_uri.split()[0]) 37 uri = bb.fetch2.URI(src_uri.split()[0])
41 38
42 if uri.scheme == "git" and not d.getVar("S:class-devupstream"):
43 d.setVar("S", "${WORKDIR}/git")
44
45 # Modify the PV if the recipe hasn't already overridden it 39 # Modify the PV if the recipe hasn't already overridden it
46 pv = d.getVar("PV") 40 pv = d.getVar("PV")
47 proto_marker = "+" + uri.scheme 41 proto_marker = "+" + uri.scheme
diff --git a/meta/classes-recipe/go-mod-update-modules.bbclass b/meta/classes-recipe/go-mod-update-modules.bbclass
new file mode 100644
index 0000000000..5fccd0bb0d
--- /dev/null
+++ b/meta/classes-recipe/go-mod-update-modules.bbclass
@@ -0,0 +1,152 @@
1addtask do_update_modules after do_configure
2do_update_modules[nostamp] = "1"
3do_update_modules[network] = "1"
4
5# This class maintains two files, BPN-go-mods.inc and BPN-licenses.inc.
6#
7# -go-mods.inc will append SRC_URI with all of the Go modules that are
8# dependencies of this recipe.
9#
10# -licenses.inc will append LICENSE and LIC_FILES_CHKSUM with the found licenses
11# in the modules.
12#
13# These files are machine-generated and should not be modified.
14
15python do_update_modules() {
16 import subprocess, tempfile, json, re, urllib.parse
17 from oe.license import tidy_licenses
18 from oe.license_finder import find_licenses
19
20 def unescape_path(path):
21 """Unescape capital letters using exclamation points."""
22 return re.sub(r'!([a-z])', lambda m: m.group(1).upper(), path)
23
24 def fold_uri(uri):
25 """Fold URI for sorting shorter module paths before longer."""
26 return uri.replace(';', ' ').replace('/', '!')
27
28 def parse_existing_licenses():
29 hashes = {}
30 for url in d.getVar("LIC_FILES_CHKSUM").split():
31 (method, host, path, user, pswd, parm) = bb.fetch.decodeurl(url)
32 if "spdx" in parm and parm["spdx"] != "Unknown":
33 hashes[parm["md5"]] = urllib.parse.unquote_plus(parm["spdx"])
34 return hashes
35
36 bpn = d.getVar("BPN")
37 thisdir = d.getVar("THISDIR")
38 s_dir = d.getVar("S")
39
40 with tempfile.TemporaryDirectory(prefix='go-mod-') as mod_cache_dir:
41 notice = """
42# This file has been generated by go-mod-update-modules.bbclass
43#
44# Do not modify it by hand, as the contents will be replaced when
45# running the update-modules task.
46
47"""
48
49 env = dict(os.environ, GOMODCACHE=mod_cache_dir)
50
51 source = d.expand("${UNPACKDIR}/${GO_SRCURI_DESTSUFFIX}")
52 output = subprocess.check_output(("go", "mod", "edit", "-json"), cwd=source, env=env, text=True)
53 go_mod = json.loads(output)
54
55 output = subprocess.check_output(("go", "list", "-json=Dir,Module", "-deps", f"{go_mod['Module']['Path']}/..."), cwd=source, env=env, text=True)
56
57 #
58 # Licenses
59 #
60
61 # load hashes from the existing licenses.inc
62 extra_hashes = parse_existing_licenses()
63
64 # The output of this isn't actually valid JSON, but a series of dicts.
65 # Wrap in [] and join the dicts with ,
66 # Very frustrating that the json parser in python can't repeatedly
67 # parse from a stream.
68 pkgs = json.loads('[' + output.replace('}\n{', '},\n{') + ']')
69 # Collect licenses for the dependencies.
70 licenses = set()
71 lic_files_chksum = []
72 lic_files = {}
73
74 for pkg in pkgs:
75 mod = pkg.get('Module', None)
76 if not mod or mod.get('Main', False):
77 continue
78
79 mod_dir = mod['Dir']
80
81 if not mod_dir.startswith(mod_cache_dir):
82 continue
83
84 path = os.path.relpath(mod_dir, mod_cache_dir)
85
86 for license_name, license_file, license_md5 in find_licenses(mod['Dir'], d, first_only=True, extra_hashes=extra_hashes):
87 lic_files[os.path.join(path, license_file)] = (license_name, license_md5)
88
89 for lic_file in lic_files:
90 license_name, license_md5 = lic_files[lic_file]
91 if license_name == "Unknown":
92 bb.warn(f"Unknown license: {lic_file} {license_md5}")
93
94 licenses.add(lic_files[lic_file][0])
95 lic_files_chksum.append(
96 f'file://pkg/mod/{lic_file};md5={license_md5};spdx={urllib.parse.quote_plus(license_name)}')
97
98 licenses_filename = os.path.join(thisdir, f"{bpn}-licenses.inc")
99 with open(licenses_filename, "w") as f:
100 f.write(notice)
101 f.write(f'LICENSE += "& {" & ".join(tidy_licenses(licenses))}"\n\n')
102 f.write('LIC_FILES_CHKSUM += "\\\n')
103 for lic in sorted(lic_files_chksum, key=fold_uri):
104 f.write(' ' + lic + ' \\\n')
105 f.write('"\n')
106
107 #
108 # Sources
109 #
110
111 # Collect the module cache files downloaded by the go list command as
112 # the go list command knows best what the go list command needs and it
113 # needs more files in the module cache than the go install command as
114 # it doesn't do the dependency pruning mentioned in the Go module
115 # reference, https://go.dev/ref/mod, for go 1.17 or higher.
116 src_uris = []
117 downloaddir = os.path.join(mod_cache_dir, 'cache', 'download')
118 for dirpath, _, filenames in os.walk(downloaddir):
119 # We want to process files under @v directories
120 path, base = os.path.split(os.path.relpath(dirpath, downloaddir))
121 if base != '@v':
122 continue
123
124 path = unescape_path(path)
125 zipver = None
126 for name in filenames:
127 ver, ext = os.path.splitext(name)
128 if ext == '.zip':
129 chksum = bb.utils.sha256_file(os.path.join(dirpath, name))
130 src_uris.append(f'gomod://{path};version={ver};sha256sum={chksum}')
131 zipver = ver
132 break
133 for name in filenames:
134 ver, ext = os.path.splitext(name)
135 if ext == '.mod' and ver != zipver:
136 chksum = bb.utils.sha256_file(os.path.join(dirpath, name))
137 src_uris.append(f'gomod://{path};version={ver};mod=1;sha256sum={chksum}')
138
139
140 go_mods_filename = os.path.join(thisdir, f"{bpn}-go-mods.inc")
141 with open(go_mods_filename, "w") as f:
142 f.write(notice)
143 f.write('SRC_URI += "\\\n')
144 for uri in sorted(src_uris, key=fold_uri):
145 f.write(' ' + uri + ' \\\n')
146 f.write('"\n')
147
148 subprocess.check_output(("go", "clean", "-modcache"), cwd=source, env=env, text=True)
149}
150
151# This doesn't work as we need to wipe the inc files first so we don't try looking for LICENSE files that don't yet exist
152# RECIPE_UPGRADE_EXTRA_TASKS += "do_update_modules"
diff --git a/meta/classes-recipe/go-mod.bbclass b/meta/classes-recipe/go-mod.bbclass
index 93ae72235f..a15dda8f0e 100644
--- a/meta/classes-recipe/go-mod.bbclass
+++ b/meta/classes-recipe/go-mod.bbclass
@@ -23,7 +23,7 @@ GOBUILDFLAGS:append = " -modcacherw"
23inherit go 23inherit go
24 24
25export GOMODCACHE = "${S}/pkg/mod" 25export GOMODCACHE = "${S}/pkg/mod"
26GO_MOD_CACHE_DIR = "${@os.path.relpath(d.getVar('GOMODCACHE'), d.getVar('WORKDIR'))}" 26GO_MOD_CACHE_DIR = "${@os.path.relpath(d.getVar('GOMODCACHE'), d.getVar('UNPACKDIR'))}"
27do_unpack[cleandirs] += "${GOMODCACHE}" 27do_unpack[cleandirs] += "${GOMODCACHE}"
28 28
29GO_WORKDIR ?= "${GO_IMPORT}" 29GO_WORKDIR ?= "${GO_IMPORT}"
diff --git a/meta/classes-recipe/image-live.bbclass b/meta/classes-recipe/image-live.bbclass
index d2e95ef51c..c3054be630 100644
--- a/meta/classes-recipe/image-live.bbclass
+++ b/meta/classes-recipe/image-live.bbclass
@@ -147,7 +147,10 @@ build_iso() {
147 isohybrid_args="-u" 147 isohybrid_args="-u"
148 fi 148 fi
149 149
150 isohybrid $isohybrid_args ${IMGDEPLOYDIR}/${IMAGE_NAME}.iso 150 # EFI only does not need isohybrid
151 if [ "${PCBIOS}" = "1" ] || [ "${EFI}" != "1" ]; then
152 isohybrid $isohybrid_args ${IMGDEPLOYDIR}/${IMAGE_NAME}.iso
153 fi
151} 154}
152 155
153build_fat_img() { 156build_fat_img() {
diff --git a/meta/classes-recipe/image_types_wic.bbclass b/meta/classes-recipe/image_types_wic.bbclass
index 740ed946f8..6180874a4c 100644
--- a/meta/classes-recipe/image_types_wic.bbclass
+++ b/meta/classes-recipe/image_types_wic.bbclass
@@ -57,6 +57,16 @@ def wks_search(files, search_path):
57 if searched: 57 if searched:
58 return searched 58 return searched
59 59
60def wks_checksums(files, search_path):
61 ret = ""
62 for f in files:
63 found, hist = bb.utils.which(search_path, f, history=True)
64 ret = ret + " " + " ".join(h + ":False" for h in hist[:-1])
65 if found:
66 ret = ret + " " + found + ":True"
67 return ret
68
69
60WIC_CREATE_EXTRA_ARGS ?= "" 70WIC_CREATE_EXTRA_ARGS ?= ""
61 71
62IMAGE_CMD:wic () { 72IMAGE_CMD:wic () {
@@ -98,7 +108,7 @@ do_image_wic[cleandirs] = "${WORKDIR}/build-wic"
98 108
99# Rebuild when the wks file or vars in WICVARS change 109# Rebuild when the wks file or vars in WICVARS change
100USING_WIC = "${@bb.utils.contains_any('IMAGE_FSTYPES', 'wic ' + ' '.join('wic.%s' % c for c in '${CONVERSIONTYPES}'.split()), '1', '', d)}" 110USING_WIC = "${@bb.utils.contains_any('IMAGE_FSTYPES', 'wic ' + ' '.join('wic.%s' % c for c in '${CONVERSIONTYPES}'.split()), '1', '', d)}"
101WKS_FILE_CHECKSUM = "${@'${WKS_FULL_PATH}:%s' % os.path.exists('${WKS_FULL_PATH}') if '${USING_WIC}' else ''}" 111WKS_FILE_CHECKSUM = "${@wks_checksums(d.getVar('WKS_FILES').split(), d.getVar('WKS_SEARCH_PATH')) if '${USING_WIC}' else ''}"
102do_image_wic[file-checksums] += "${WKS_FILE_CHECKSUM}" 112do_image_wic[file-checksums] += "${WKS_FILE_CHECKSUM}"
103do_image_wic[depends] += "${@' '.join('%s-native:do_populate_sysroot' % r for r in ('parted', 'gptfdisk', 'dosfstools', 'mtools'))}" 113do_image_wic[depends] += "${@' '.join('%s-native:do_populate_sysroot' % r for r in ('parted', 'gptfdisk', 'dosfstools', 'mtools'))}"
104 114
diff --git a/meta/classes-recipe/kernel-fit-image.bbclass b/meta/classes-recipe/kernel-fit-image.bbclass
index d2eebb88bc..39845997ed 100644
--- a/meta/classes-recipe/kernel-fit-image.bbclass
+++ b/meta/classes-recipe/kernel-fit-image.bbclass
@@ -2,8 +2,7 @@
2inherit kernel-arch kernel-artifact-names uboot-config deploy 2inherit kernel-arch kernel-artifact-names uboot-config deploy
3require conf/image-fitimage.conf 3require conf/image-fitimage.conf
4 4
5S = "${WORKDIR}/sources" 5S = "${UNPACKDIR}"
6UNPACKDIR = "${S}"
7 6
8PACKAGE_ARCH = "${MACHINE_ARCH}" 7PACKAGE_ARCH = "${MACHINE_ARCH}"
9 8
diff --git a/meta/classes-recipe/kernel-yocto.bbclass b/meta/classes-recipe/kernel-yocto.bbclass
index ba93145fd3..e53bf15194 100644
--- a/meta/classes-recipe/kernel-yocto.bbclass
+++ b/meta/classes-recipe/kernel-yocto.bbclass
@@ -388,19 +388,19 @@ do_kernel_checkout() {
388 set +e 388 set +e
389 389
390 source_dir=`echo ${S} | sed 's%/$%%'` 390 source_dir=`echo ${S} | sed 's%/$%%'`
391 source_workdir="${UNPACKDIR}/git" 391 source_unpackdir="${UNPACKDIR}/${BB_GIT_DEFAULT_DESTSUFFIX}"
392 if [ -d "${UNPACKDIR}/git/" ]; then 392 if [ -d "${source_unpackdir}" ]; then
393 # case: git repository 393 # case: git repository
394 # if S is WORKDIR/git, then we shouldn't be moving or deleting the tree. 394 # if S is UNPACKDIR/BB_GIT_DEFAULT_DESTSUFFIX, then we shouldn't be moving or deleting the tree.
395 if [ "${source_dir}" != "${source_workdir}" ]; then 395 if [ "${source_dir}" != "${source_unpackdir}" ]; then
396 if [ -d "${source_workdir}/.git" ]; then 396 if [ -d "${source_unpackdir}/.git" ]; then
397 # regular git repository with .git 397 # regular git repository with .git
398 rm -rf ${S} 398 rm -rf ${S}
399 mv ${UNPACKDIR}/git ${S} 399 mv ${source_unpackdir} ${S}
400 else 400 else
401 # create source for bare cloned git repository 401 # create source for bare cloned git repository
402 git clone ${WORKDIR}/git ${S} 402 git clone ${source_unpackdir} ${S}
403 rm -rf ${UNPACKDIR}/git 403 rm -rf ${source_unpackdir}
404 fi 404 fi
405 fi 405 fi
406 cd ${S} 406 cd ${S}
diff --git a/meta/classes-recipe/pypi.bbclass b/meta/classes-recipe/pypi.bbclass
index b0bc167cdf..eb30004a0f 100644
--- a/meta/classes-recipe/pypi.bbclass
+++ b/meta/classes-recipe/pypi.bbclass
@@ -41,7 +41,7 @@ PYPI_SRC_URI ?= "${@pypi_src_uri(d)}"
41HOMEPAGE ?= "https://pypi.python.org/pypi/${PYPI_PACKAGE}/" 41HOMEPAGE ?= "https://pypi.python.org/pypi/${PYPI_PACKAGE}/"
42SECTION = "devel/python" 42SECTION = "devel/python"
43SRC_URI:prepend = "${PYPI_SRC_URI} " 43SRC_URI:prepend = "${PYPI_SRC_URI} "
44S = "${WORKDIR}/${PYPI_PACKAGE}-${PV}" 44S = "${UNPACKDIR}/${PYPI_PACKAGE}-${PV}"
45 45
46# Replace any '_' characters in the pypi URI with '-'s to follow the PyPi website naming conventions 46# Replace any '_' characters in the pypi URI with '-'s to follow the PyPi website naming conventions
47UPSTREAM_CHECK_PYPI_PACKAGE ?= "${@pypi_normalize(d)}" 47UPSTREAM_CHECK_PYPI_PACKAGE ?= "${@pypi_normalize(d)}"
diff --git a/meta/classes-recipe/rust-target-config.bbclass b/meta/classes-recipe/rust-target-config.bbclass
index c04940ce54..cac6e90a9e 100644
--- a/meta/classes-recipe/rust-target-config.bbclass
+++ b/meta/classes-recipe/rust-target-config.bbclass
@@ -77,8 +77,33 @@ def llvm_features_from_tune(d):
77 f.append("+a15") 77 f.append("+a15")
78 if 'cortexa17' in feat: 78 if 'cortexa17' in feat:
79 f.append("+a17") 79 f.append("+a17")
80 if ('riscv64' in feat) or ('riscv32' in feat): 80 if 'rv' in feat:
81 f.append("+a,+c,+d,+f,+m") 81 if 'm' in feat:
82 f.append("+m")
83 if 'a' in feat:
84 f.append("+a")
85 if 'f' in feat:
86 f.append("+f")
87 if 'd' in feat:
88 f.append("+d")
89 if 'c' in feat:
90 f.append("+c")
91 if 'v' in feat:
92 f.append("+v")
93 if 'zicbom' in feat:
94 f.append("+zicbom")
95 if 'zicsr' in feat:
96 f.append("+zicsr")
97 if 'zifencei' in feat:
98 f.append("+zifencei")
99 if 'zba' in feat:
100 f.append("+zba")
101 if 'zbb' in feat:
102 f.append("+zbb")
103 if 'zbc' in feat:
104 f.append("+zbc")
105 if 'zbs' in feat:
106 f.append("+zbs")
82 return f 107 return f
83llvm_features_from_tune[vardepvalue] = "${@llvm_features_from_tune(d)}" 108llvm_features_from_tune[vardepvalue] = "${@llvm_features_from_tune(d)}"
84 109
@@ -146,7 +171,7 @@ MAX_ATOMIC_WIDTH[armv7-eabi] = "64"
146FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2" 171FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2"
147 172
148## aarch64-unknown-linux-{gnu, musl} 173## aarch64-unknown-linux-{gnu, musl}
149DATA_LAYOUT[aarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32" 174DATA_LAYOUT[aarch64] = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
150TARGET_ENDIAN[aarch64] = "little" 175TARGET_ENDIAN[aarch64] = "little"
151TARGET_POINTER_WIDTH[aarch64] = "64" 176TARGET_POINTER_WIDTH[aarch64] = "64"
152TARGET_C_INT_WIDTH[aarch64] = "32" 177TARGET_C_INT_WIDTH[aarch64] = "32"
@@ -236,19 +261,19 @@ TARGET_POINTER_WIDTH[powerpc64le] = "64"
236TARGET_C_INT_WIDTH[powerpc64le] = "32" 261TARGET_C_INT_WIDTH[powerpc64le] = "32"
237MAX_ATOMIC_WIDTH[powerpc64le] = "64" 262MAX_ATOMIC_WIDTH[powerpc64le] = "64"
238 263
239## riscv32gc-unknown-linux-{gnu, musl} 264## riscv32-unknown-linux-{gnu, musl}
240DATA_LAYOUT[riscv32gc] = "e-m:e-p:32:32-i64:64-n32-S128" 265DATA_LAYOUT[riscv32] = "e-m:e-p:32:32-i64:64-n32-S128"
241TARGET_ENDIAN[riscv32gc] = "little" 266TARGET_ENDIAN[riscv32] = "little"
242TARGET_POINTER_WIDTH[riscv32gc] = "32" 267TARGET_POINTER_WIDTH[riscv32] = "32"
243TARGET_C_INT_WIDTH[riscv32gc] = "32" 268TARGET_C_INT_WIDTH[riscv32] = "32"
244MAX_ATOMIC_WIDTH[riscv32gc] = "32" 269MAX_ATOMIC_WIDTH[riscv32] = "32"
245 270
246## riscv64gc-unknown-linux-{gnu, musl} 271## riscv64-unknown-linux-{gnu, musl}
247DATA_LAYOUT[riscv64gc] = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128" 272DATA_LAYOUT[riscv64] = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
248TARGET_ENDIAN[riscv64gc] = "little" 273TARGET_ENDIAN[riscv64] = "little"
249TARGET_POINTER_WIDTH[riscv64gc] = "64" 274TARGET_POINTER_WIDTH[riscv64] = "64"
250TARGET_C_INT_WIDTH[riscv64gc] = "32" 275TARGET_C_INT_WIDTH[riscv64] = "32"
251MAX_ATOMIC_WIDTH[riscv64gc] = "64" 276MAX_ATOMIC_WIDTH[riscv64] = "64"
252 277
253## loongarch64-unknown-linux-{gnu, musl} 278## loongarch64-unknown-linux-{gnu, musl}
254DATA_LAYOUT[loongarch64] = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128" 279DATA_LAYOUT[loongarch64] = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
@@ -271,19 +296,11 @@ def arch_to_rust_target_arch(arch):
271 return "arm" 296 return "arm"
272 elif arch == "powerpc64le": 297 elif arch == "powerpc64le":
273 return "powerpc64" 298 return "powerpc64"
274 elif arch == "riscv32gc":
275 return "riscv32"
276 elif arch == "riscv64gc":
277 return "riscv64"
278 else: 299 else:
279 return arch 300 return arch
280 301
281# Convert a rust target string to a llvm-compatible triplet 302# Convert a rust target string to a llvm-compatible triplet
282def rust_sys_to_llvm_target(sys): 303def rust_sys_to_llvm_target(sys):
283 if sys.startswith('riscv32gc-'):
284 return sys.replace('riscv32gc-', 'riscv32-', 1)
285 if sys.startswith('riscv64gc-'):
286 return sys.replace('riscv64gc-', 'riscv64-', 1)
287 return sys 304 return sys
288 305
289# generates our target CPU value 306# generates our target CPU value
@@ -380,9 +397,9 @@ def rust_gen_target(d, thing, wd, arch):
380 else: 397 else:
381 tspec['env'] = "gnu" 398 tspec['env'] = "gnu"
382 if "riscv64" in tspec['llvm-target']: 399 if "riscv64" in tspec['llvm-target']:
383 tspec['llvm-abiname'] = "lp64d" 400 tspec['llvm-abiname'] = d.getVar('TUNE_RISCV_ABI')
384 if "riscv32" in tspec['llvm-target']: 401 if "riscv32" in tspec['llvm-target']:
385 tspec['llvm-abiname'] = "ilp32d" 402 tspec['llvm-abiname'] = d.getVar('TUNE_RISCV_ABI')
386 if "loongarch64" in tspec['llvm-target']: 403 if "loongarch64" in tspec['llvm-target']:
387 tspec['llvm-abiname'] = "lp64d" 404 tspec['llvm-abiname'] = "lp64d"
388 tspec['vendor'] = "unknown" 405 tspec['vendor'] = "unknown"
diff --git a/meta/classes-recipe/testsdk.bbclass b/meta/classes-recipe/testsdk.bbclass
index 59d2834c99..b1c4fa67e6 100644
--- a/meta/classes-recipe/testsdk.bbclass
+++ b/meta/classes-recipe/testsdk.bbclass
@@ -19,6 +19,7 @@ TESTSDK_SUITES ?= ""
19 19
20TESTSDK_CLASS_NAME ?= "oeqa.sdk.testsdk.TestSDK" 20TESTSDK_CLASS_NAME ?= "oeqa.sdk.testsdk.TestSDK"
21TESTSDKEXT_CLASS_NAME ?= "oeqa.sdkext.testsdk.TestSDKExt" 21TESTSDKEXT_CLASS_NAME ?= "oeqa.sdkext.testsdk.TestSDKExt"
22TESTSDK_CASE_DIRS ?= "sdk"
22 23
23def import_and_run(name, d): 24def import_and_run(name, d):
24 import importlib 25 import importlib
diff --git a/meta/classes-recipe/uboot-config.bbclass b/meta/classes-recipe/uboot-config.bbclass
index f44605cb6a..bc20913f73 100644
--- a/meta/classes-recipe/uboot-config.bbclass
+++ b/meta/classes-recipe/uboot-config.bbclass
@@ -22,12 +22,17 @@ def removesuffix(s, suffix):
22UBOOT_ENTRYPOINT ?= "0x20008000" 22UBOOT_ENTRYPOINT ?= "0x20008000"
23UBOOT_LOADADDRESS ?= "${UBOOT_ENTRYPOINT}" 23UBOOT_LOADADDRESS ?= "${UBOOT_ENTRYPOINT}"
24 24
25# When naming the files we install/deploy, the package version and revision
26# are part of the filename. Create a single variable to represent this and
27# allow it to be customized if desired.
28UBOOT_VERSION ?= "${PV}-${PR}"
29
25# Some versions of u-boot use .bin and others use .img. By default use .bin 30# Some versions of u-boot use .bin and others use .img. By default use .bin
26# but enable individual recipes to change this value. 31# but enable individual recipes to change this value.
27UBOOT_SUFFIX ??= "bin" 32UBOOT_SUFFIX ??= "bin"
28UBOOT_BINARY ?= "u-boot.${UBOOT_SUFFIX}" 33UBOOT_BINARY ?= "u-boot.${UBOOT_SUFFIX}"
29UBOOT_BINARYNAME ?= "${@os.path.splitext(d.getVar("UBOOT_BINARY"))[0]}" 34UBOOT_BINARYNAME ?= "${@os.path.splitext(d.getVar("UBOOT_BINARY"))[0]}"
30UBOOT_IMAGE ?= "${UBOOT_BINARYNAME}-${MACHINE}-${PV}-${PR}.${UBOOT_SUFFIX}" 35UBOOT_IMAGE ?= "${UBOOT_BINARYNAME}-${MACHINE}-${UBOOT_VERSION}.${UBOOT_SUFFIX}"
31UBOOT_SYMLINK ?= "${UBOOT_BINARYNAME}-${MACHINE}.${UBOOT_SUFFIX}" 36UBOOT_SYMLINK ?= "${UBOOT_BINARYNAME}-${MACHINE}.${UBOOT_SUFFIX}"
32UBOOT_MAKE_TARGET ?= "all" 37UBOOT_MAKE_TARGET ?= "all"
33 38
@@ -36,7 +41,7 @@ UBOOT_MAKE_TARGET ?= "all"
36# purposes. 41# purposes.
37UBOOT_ELF ?= "" 42UBOOT_ELF ?= ""
38UBOOT_ELF_SUFFIX ?= "elf" 43UBOOT_ELF_SUFFIX ?= "elf"
39UBOOT_ELF_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.${UBOOT_ELF_SUFFIX}" 44UBOOT_ELF_IMAGE ?= "u-boot-${MACHINE}-${UBOOT_VERSION}.${UBOOT_ELF_SUFFIX}"
40UBOOT_ELF_BINARY ?= "u-boot.${UBOOT_ELF_SUFFIX}" 45UBOOT_ELF_BINARY ?= "u-boot.${UBOOT_ELF_SUFFIX}"
41UBOOT_ELF_SYMLINK ?= "u-boot-${MACHINE}.${UBOOT_ELF_SUFFIX}" 46UBOOT_ELF_SYMLINK ?= "u-boot-${MACHINE}.${UBOOT_ELF_SUFFIX}"
42 47
@@ -49,7 +54,7 @@ SPL_BINARY ?= ""
49SPL_DELIMITER ?= "${@'.' if d.getVar("SPL_SUFFIX") else ''}" 54SPL_DELIMITER ?= "${@'.' if d.getVar("SPL_SUFFIX") else ''}"
50SPL_BINARYFILE ?= "${@os.path.basename(d.getVar("SPL_BINARY"))}" 55SPL_BINARYFILE ?= "${@os.path.basename(d.getVar("SPL_BINARY"))}"
51SPL_BINARYNAME ?= "${@removesuffix(d.getVar("SPL_BINARYFILE"), "." + d.getVar("SPL_SUFFIX"))}" 56SPL_BINARYNAME ?= "${@removesuffix(d.getVar("SPL_BINARYFILE"), "." + d.getVar("SPL_SUFFIX"))}"
52SPL_IMAGE ?= "${SPL_BINARYNAME}-${MACHINE}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX}" 57SPL_IMAGE ?= "${SPL_BINARYNAME}-${MACHINE}-${UBOOT_VERSION}${SPL_DELIMITER}${SPL_SUFFIX}"
53SPL_SYMLINK ?= "${SPL_BINARYNAME}-${MACHINE}${SPL_DELIMITER}${SPL_SUFFIX}" 58SPL_SYMLINK ?= "${SPL_BINARYNAME}-${MACHINE}${SPL_DELIMITER}${SPL_SUFFIX}"
54 59
55# Additional environment variables or a script can be installed alongside 60# Additional environment variables or a script can be installed alongside
@@ -62,14 +67,14 @@ UBOOT_ENV ?= ""
62UBOOT_ENV_SRC_SUFFIX ?= "cmd" 67UBOOT_ENV_SRC_SUFFIX ?= "cmd"
63UBOOT_ENV_SRC ?= "${UBOOT_ENV}.${UBOOT_ENV_SRC_SUFFIX}" 68UBOOT_ENV_SRC ?= "${UBOOT_ENV}.${UBOOT_ENV_SRC_SUFFIX}"
64UBOOT_ENV_BINARY ?= "${UBOOT_ENV}.${UBOOT_ENV_SUFFIX}" 69UBOOT_ENV_BINARY ?= "${UBOOT_ENV}.${UBOOT_ENV_SUFFIX}"
65UBOOT_ENV_IMAGE ?= "${UBOOT_ENV}-${MACHINE}-${PV}-${PR}.${UBOOT_ENV_SUFFIX}" 70UBOOT_ENV_IMAGE ?= "${UBOOT_ENV}-${MACHINE}-${UBOOT_VERSION}.${UBOOT_ENV_SUFFIX}"
66UBOOT_ENV_SYMLINK ?= "${UBOOT_ENV}-${MACHINE}.${UBOOT_ENV_SUFFIX}" 71UBOOT_ENV_SYMLINK ?= "${UBOOT_ENV}-${MACHINE}.${UBOOT_ENV_SUFFIX}"
67 72
68# U-Boot EXTLINUX variables. U-Boot searches for /boot/extlinux/extlinux.conf 73# U-Boot EXTLINUX variables. U-Boot searches for /boot/extlinux/extlinux.conf
69# to find EXTLINUX conf file. 74# to find EXTLINUX conf file.
70UBOOT_EXTLINUX_INSTALL_DIR ?= "/boot/extlinux" 75UBOOT_EXTLINUX_INSTALL_DIR ?= "/boot/extlinux"
71UBOOT_EXTLINUX_CONF_NAME ?= "extlinux.conf" 76UBOOT_EXTLINUX_CONF_NAME ?= "extlinux.conf"
72UBOOT_EXTLINUX_SYMLINK ?= "${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}-${PR}" 77UBOOT_EXTLINUX_SYMLINK ?= "${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}-${UBOOT_VERSION}"
73 78
74# Options for the device tree compiler passed to mkimage '-D' feature: 79# Options for the device tree compiler passed to mkimage '-D' feature:
75UBOOT_MKIMAGE_DTCOPTS ??= "" 80UBOOT_MKIMAGE_DTCOPTS ??= ""
diff --git a/meta/classes-recipe/uboot-sign.bbclass b/meta/classes-recipe/uboot-sign.bbclass
index 73e9ce3f11..0f387a3a3e 100644
--- a/meta/classes-recipe/uboot-sign.bbclass
+++ b/meta/classes-recipe/uboot-sign.bbclass
@@ -50,6 +50,8 @@ UBOOT_FITIMAGE_BINARY ?= "u-boot-fitImage"
50UBOOT_FITIMAGE_SYMLINK ?= "u-boot-fitImage-${MACHINE}" 50UBOOT_FITIMAGE_SYMLINK ?= "u-boot-fitImage-${MACHINE}"
51SPL_DIR ?= "spl" 51SPL_DIR ?= "spl"
52SPL_DTB_IMAGE ?= "u-boot-spl-${MACHINE}-${PV}-${PR}.dtb" 52SPL_DTB_IMAGE ?= "u-boot-spl-${MACHINE}-${PV}-${PR}.dtb"
53# When SPL is not used, set SPL_DTB_BINARY ?= "" to explicitly indicate
54# that no SPL DTB should be created or signed.
53SPL_DTB_BINARY ?= "u-boot-spl.dtb" 55SPL_DTB_BINARY ?= "u-boot-spl.dtb"
54SPL_DTB_SIGNED ?= "${SPL_DTB_BINARY}-signed" 56SPL_DTB_SIGNED ?= "${SPL_DTB_BINARY}-signed"
55SPL_DTB_SYMLINK ?= "u-boot-spl-${MACHINE}.dtb" 57SPL_DTB_SYMLINK ?= "u-boot-spl-${MACHINE}.dtb"
@@ -196,21 +198,23 @@ concat_dtb() {
196 # If we're not using a signed u-boot fit, concatenate SPL w/o DTB & U-Boot DTB 198 # If we're not using a signed u-boot fit, concatenate SPL w/o DTB & U-Boot DTB
197 # with public key (otherwise U-Boot will be packaged by uboot_fitimage_assemble) 199 # with public key (otherwise U-Boot will be packaged by uboot_fitimage_assemble)
198 if [ "${SPL_SIGN_ENABLE}" != "1" ] ; then 200 if [ "${SPL_SIGN_ENABLE}" != "1" ] ; then
199 if [ "x${UBOOT_SUFFIX}" = "ximg" -o "x${UBOOT_SUFFIX}" = "xrom" ] && \ 201 if [ ! -e "${UBOOT_DTB_BINARY}" ]; then
200 [ -e "${UBOOT_DTB_BINARY}" ]; then 202 bbwarn "Failure while adding public key to u-boot binary. Verified boot won't be available."
203 return
204 fi
205
206 if [ "x${UBOOT_SUFFIX}" = "ximg" ] || [ "x${UBOOT_SUFFIX}" = "xrom" ]; then
201 oe_runmake EXT_DTB="${UBOOT_DTB_SIGNED}" ${UBOOT_MAKE_TARGET} 207 oe_runmake EXT_DTB="${UBOOT_DTB_SIGNED}" ${UBOOT_MAKE_TARGET}
202 if [ -n "${binary}" ]; then 208 if [ -n "${binary}" ]; then
203 cp ${binary} ${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} 209 cp ${binary} ${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX}
204 fi 210 fi
205 elif [ -e "${UBOOT_NODTB_BINARY}" -a -e "${UBOOT_DTB_BINARY}" ]; then 211 elif [ -e "${UBOOT_NODTB_BINARY}" ]; then
206 if [ -n "${binary}" ]; then 212 if [ -n "${binary}" ]; then
207 cat ${UBOOT_NODTB_BINARY} ${UBOOT_DTB_SIGNED} | tee ${binary} > \ 213 cat ${UBOOT_NODTB_BINARY} ${UBOOT_DTB_SIGNED} | tee ${binary} > \
208 ${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} 214 ${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX}
209 else 215 else
210 cat ${UBOOT_NODTB_BINARY} ${UBOOT_DTB_SIGNED} > ${UBOOT_BINARY} 216 cat ${UBOOT_NODTB_BINARY} ${UBOOT_DTB_SIGNED} > ${UBOOT_BINARY}
211 fi 217 fi
212 else
213 bbwarn "Failure while adding public key to u-boot binary. Verified boot won't be available."
214 fi 218 fi
215 fi 219 fi
216} 220}
@@ -242,7 +246,7 @@ deploy_dtb() {
242} 246}
243 247
244concat_spl_dtb() { 248concat_spl_dtb() {
245 if [ -e "${SPL_DIR}/${SPL_NODTB_BINARY}" -a -e "${SPL_DIR}/${SPL_DTB_BINARY}" ] ; then 249 if [ -e "${SPL_DIR}/${SPL_NODTB_BINARY}" ] && [ -e "${SPL_DIR}/${SPL_DTB_BINARY}" ] ; then
246 cat ${SPL_DIR}/${SPL_NODTB_BINARY} ${SPL_DIR}/${SPL_DTB_SIGNED} > "${SPL_BINARY}" 250 cat ${SPL_DIR}/${SPL_NODTB_BINARY} ${SPL_DIR}/${SPL_DTB_SIGNED} > "${SPL_BINARY}"
247 else 251 else
248 bbwarn "Failure while adding public key to spl binary. Verified U-Boot boot won't be available." 252 bbwarn "Failure while adding public key to spl binary. Verified U-Boot boot won't be available."
@@ -466,25 +470,31 @@ EOF
466 ${UBOOT_FITIMAGE_BINARY} 470 ${UBOOT_FITIMAGE_BINARY}
467 471
468 if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then 472 if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then
469 # 473 if [ -n "${SPL_DTB_BINARY}" ] ; then
470 # Sign the U-boot FIT image and add public key to SPL dtb 474 #
471 # 475 # Sign the U-boot FIT image and add public key to SPL dtb
472 ${UBOOT_MKIMAGE_SIGN} \ 476 #
473 ${@'-D "${SPL_MKIMAGE_DTCOPTS}"' if len('${SPL_MKIMAGE_DTCOPTS}') else ''} \ 477 ${UBOOT_MKIMAGE_SIGN} \
474 -F -k "${SPL_SIGN_KEYDIR}" \ 478 ${@'-D "${SPL_MKIMAGE_DTCOPTS}"' if len('${SPL_MKIMAGE_DTCOPTS}') else ''} \
475 -K "${SPL_DIR}/${SPL_DTB_BINARY}" \ 479 -F -k "${SPL_SIGN_KEYDIR}" \
476 -r ${UBOOT_FITIMAGE_BINARY} \ 480 -K "${SPL_DIR}/${SPL_DTB_BINARY}" \
477 ${SPL_MKIMAGE_SIGN_ARGS} 481 -r ${UBOOT_FITIMAGE_BINARY} \
478 # 482 ${SPL_MKIMAGE_SIGN_ARGS}
479 # Verify the U-boot FIT image and SPL dtb 483
480 # 484 # Verify the U-boot FIT image and SPL dtb
481 ${UBOOT_FIT_CHECK_SIGN} \ 485 ${UBOOT_FIT_CHECK_SIGN} \
482 -k "${SPL_DIR}/${SPL_DTB_BINARY}" \ 486 -k "${SPL_DIR}/${SPL_DTB_BINARY}" \
483 -f ${UBOOT_FITIMAGE_BINARY} 487 -f ${UBOOT_FITIMAGE_BINARY}
484 fi
485 488
486 if [ -e "${SPL_DIR}/${SPL_DTB_BINARY}" ]; then 489 cp ${SPL_DIR}/${SPL_DTB_BINARY} ${SPL_DIR}/${SPL_DTB_SIGNED}
487 cp ${SPL_DIR}/${SPL_DTB_BINARY} ${SPL_DIR}/${SPL_DTB_SIGNED} 490 else
491 # Sign the U-boot FIT image
492 ${UBOOT_MKIMAGE_SIGN} \
493 ${@'-D "${SPL_MKIMAGE_DTCOPTS}"' if len('${SPL_MKIMAGE_DTCOPTS}') else ''} \
494 -F -k "${SPL_SIGN_KEYDIR}" \
495 -r ${UBOOT_FITIMAGE_BINARY} \
496 ${SPL_MKIMAGE_SIGN_ARGS}
497 fi
488 fi 498 fi
489} 499}
490 500
@@ -492,15 +502,15 @@ uboot_assemble_fitimage_helper() {
492 type="$1" 502 type="$1"
493 binary="$2" 503 binary="$2"
494 504
495 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_BINARY}" ] ; then 505 if [ "${UBOOT_SIGN_ENABLE}" = "1" ] && [ -n "${UBOOT_DTB_BINARY}" ] ; then
496 concat_dtb "$type" "$binary" 506 concat_dtb "$type" "$binary"
497 fi 507 fi
498 508
499 if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ]; then 509 if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ]; then
500 uboot_fitimage_assemble 510 uboot_fitimage_assemble
501 fi 511 fi
502 512
503 if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ] ; then 513 if [ "${SPL_SIGN_ENABLE}" = "1" ] && [ -n "${SPL_DTB_BINARY}" ] ; then
504 concat_spl_dtb 514 concat_spl_dtb
505 fi 515 fi
506} 516}
@@ -539,11 +549,11 @@ addtask uboot_assemble_fitimage before do_install do_deploy after do_compile
539deploy_helper() { 549deploy_helper() {
540 type="$1" 550 type="$1"
541 551
542 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_SIGNED}" ] ; then 552 if [ "${UBOOT_SIGN_ENABLE}" = "1" ] && [ -n "${UBOOT_DTB_SIGNED}" ] ; then
543 deploy_dtb $type 553 deploy_dtb $type
544 fi 554 fi
545 555
546 if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ]; then 556 if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ]; then
547 if [ -n "${type}" ]; then 557 if [ -n "${type}" ]; then
548 uboot_its_image="u-boot-its-${type}-${PV}-${PR}" 558 uboot_its_image="u-boot-its-${type}-${PV}-${PR}"
549 uboot_fitimage_image="u-boot-fitImage-${type}-${PV}-${PR}" 559 uboot_fitimage_image="u-boot-fitImage-${type}-${PV}-${PR}"
@@ -561,7 +571,7 @@ deploy_helper() {
561 fi 571 fi
562 fi 572 fi
563 573
564 if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_SIGNED}" ] ; then 574 if [ "${SPL_SIGN_ENABLE}" = "1" ] && [ -n "${SPL_DTB_BINARY}" ] ; then
565 deploy_spl_dtb $type 575 deploy_spl_dtb $type
566 fi 576 fi
567} 577}
@@ -586,7 +596,7 @@ do_deploy:prepend() {
586 deploy_helper "" 596 deploy_helper ""
587 fi 597 fi
588 598
589 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_BINARY}" ] ; then 599 if [ "${UBOOT_SIGN_ENABLE}" = "1" ] && [ -n "${UBOOT_DTB_BINARY}" ] ; then
590 ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_BINARY} 600 ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_BINARY}
591 ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_SYMLINK} 601 ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_SYMLINK}
592 ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_SYMLINK} 602 ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_SYMLINK}
@@ -600,7 +610,7 @@ do_deploy:prepend() {
600 ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_FITIMAGE_SYMLINK} 610 ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_FITIMAGE_SYMLINK}
601 fi 611 fi
602 612
603 if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ] ; then 613 if [ "${SPL_SIGN_ENABLE}" = "1" ] && [ -n "${SPL_DTB_BINARY}" ] ; then
604 ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_SYMLINK} 614 ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_SYMLINK}
605 ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_BINARY} 615 ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_BINARY}
606 ln -sf ${SPL_NODTB_IMAGE} ${DEPLOYDIR}/${SPL_NODTB_SYMLINK} 616 ln -sf ${SPL_NODTB_IMAGE} ${DEPLOYDIR}/${SPL_NODTB_SYMLINK}