Initial commit

This commit is contained in:
2025-09-30 17:27:32 +03:00
commit 187605d4d3
7 changed files with 252 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
# Exclude bpm archives
*.bpm
+12
View File
@@ -0,0 +1,12 @@
#!/bin/bash
# Git repository
REPO="git://git.kernel.org/pub/scm/utils/dtc/dtc.git"
# Get tag name using 'git ls-remote'
TAG_NAME=$(git ls-remote --exit-code --refs --tags --sort='v:refname' "$REPO" | tail -1 | cut -d'/' -f3)
# Trim 'v' character in TAG_NAME variable
VERSION=$(echo "$TAG_NAME" | tr -d 'v')
echo "$VERSION"
+22
View File
@@ -0,0 +1,22 @@
name: dtc
description: Device tree compiler
version: 1.7.2
revision: 1
url: https://www.devicetree.org/
license: GPL2-only
architecture: any
type: source
depends:
- glibc
- libyaml
optional_depends:
- python
make_depends:
- meson
- python-setuptools-scm
- swig
downloads:
- url: https://kernel.org/pub/software/utils/dtc/dtc-1.7.2.tar.xz
extract_to_bpm_source: true
extract_strip_components: 1
checksum: 92d8ca769805ae1f176204230438fe52808f4e1c7944053c9eec0e649b237539
@@ -0,0 +1,52 @@
From 33e66ec845b8914ad45f559a275673a2a2881576 Mon Sep 17 00:00:00 2001
From: David Gibson <[email protected]>
Date: Thu, 24 Jul 2025 13:26:31 +1000
Subject: tests: Add compatibility with uutils
In some places run_tsets.sh needs to get the size of files, which it does
with stat(1). However the syntax to do this is different between GNU
coreutils stat(1) and BSD's stat(1). We have some logic that looks for
"GNU" in the version string to figure out the correct version.
This will break upcoming Ubuntu versions which are now using uutils, a Rust
reimplementation of coreutils. These support the same GNU syntax, but
don't have the "GNU" in the version string.
Update the detection to simply try the GNU version and otherwise assume
BSD.
Link: https://github.com/dgibson/dtc/issues/166
Signed-off-by: David Gibson <[email protected]>
---
tests/run_tests.sh | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index fecfe7c..2e172d7 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -43,13 +43,14 @@ fi
# stat differs between platforms
if [ -z "$STATSZ" ]; then
- stat --version 2>/dev/null | grep -q 'GNU'
- GNUSTAT=$?
- if [ "$GNUSTAT" -ne 0 ]; then
- # Assume BSD stat if we can't detect as GNU stat
- STATSZ="stat -f %Uz"
- else
+ # First attempt GNU style, this is supported by both the
+ # actual GNU coreutils version, and the Rust re-implementation
+ # uutils, used in recent Ubuntu versions
+ if stat -c %s $0; then
STATSZ="stat -c %s"
+ else
+ # Otherwise assume BSD style stat
+ STATSZ="stat -f %Uz"
fi
fi
--
cgit 1.2.3-korg
+39
View File
@@ -0,0 +1,39 @@
From ce1d8588880aecd7af264e422a16a8b33617cef7 Mon Sep 17 00:00:00 2001
From: David Gibson <[email protected]>
Date: Wed, 5 Feb 2025 13:39:43 +1100
Subject: tests: When building .so from -O asm output mark as non-executable
stack
For certain tests, we take the output from dtc -O asm and build it into
a .so shared library which we then dlopen() for further tests. Because we
don't mark it otherwise, it's treated as requiring an executable stack,
which dlopen() refuses to open as of glibc-2.41.
Of course, the library is pure data, no code, so it certainly doesn't need
an executable stack. Add the -znoexecstack linker option to avoid the
error.
Fixes: https://github.com/dgibson/dtc/issues/163
Reported-by: Xi Ruoyao <[email protected]>
Signed-off-by: David Gibson <[email protected]>
---
tests/run_tests.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index 937b128..f0b51c0 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -201,7 +201,7 @@ run_dtc_test () {
}
asm_to_so () {
- $CC -shared -o $1.test.so "$SRCDIR/data.S" $1.test.s
+ $CC -shared -Wl,-znoexecstack -o $1.test.so "$SRCDIR/data.S" $1.test.s
}
asm_to_so_test () {
--
cgit 1.2.3-korg
+88
View File
@@ -0,0 +1,88 @@
From 9a969f3b70b07bbf1c9df44a38d7f8d1d3a6e2a5 Mon Sep 17 00:00:00 2001
From: Brandon Maier <[email protected]>
Date: Sun, 24 Nov 2024 15:48:04 -0600
Subject: pylibfdt/libfdt.i: fix backwards compatibility of return values
When our Python functions wrap `fdt_getprop()` they return a list
containing `[*data, length]`.
In SWIG v4.2 and earlier SWIG would discard `*data` if it is NULL/None.
Causing the return value to just be `length`.
But starting in SWIG v4.3 it no longer discards `*data`. So the return
value is now `[None, length]`.
Handle this compatibility issue in libfdt.i by checking if the return
value looks like the older 4.2 return value, and casting it to the newer
style.
See https://github.com/swig/swig/pull/2907
Signed-off-by: Brandon Maier <[email protected]>
Signed-off-by: David Gibson <[email protected]>
---
pylibfdt/libfdt.i | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/pylibfdt/libfdt.i b/pylibfdt/libfdt.i
index 9f5b6a9..bb9985c 100644
--- a/pylibfdt/libfdt.i
+++ b/pylibfdt/libfdt.i
@@ -114,11 +114,14 @@ def check_err_null(val, quiet=()):
FdtException if val indicates an error was reported and the error
is not in @quiet.
"""
- # Normally a list is returned which contains the data and its length.
- # If we get just an integer error code, it means the function failed.
+ # Compatibility for SWIG v4.2 and earlier. SWIG 4.2 would drop the first
+ # item from the list if it was None, returning only the second item.
if not isinstance(val, list):
- if -val not in quiet:
- raise FdtException(val)
+ val = [None, val]
+
+ if val[0] is None:
+ if -val[1] not in quiet:
+ raise FdtException(val[1])
return val
class FdtRo(object):
@@ -395,8 +398,8 @@ class FdtRo(object):
"""
pdata = check_err_null(
fdt_get_property_by_offset(self._fdt, prop_offset), quiet)
- if isinstance(pdata, (int)):
- return pdata
+ if pdata[0] is None:
+ return pdata[1]
return Property(pdata[0], pdata[1])
def getprop(self, nodeoffset, prop_name, quiet=()):
@@ -417,8 +420,8 @@ class FdtRo(object):
"""
pdata = check_err_null(fdt_getprop(self._fdt, nodeoffset, prop_name),
quiet)
- if isinstance(pdata, (int)):
- return pdata
+ if pdata[0] is None:
+ return pdata[1]
return Property(prop_name, bytearray(pdata[0]))
def hasprop(self, nodeoffset, prop_name, quiet=()):
@@ -444,10 +447,10 @@ class FdtRo(object):
"""
pdata = check_err_null(fdt_getprop(self._fdt, nodeoffset, prop_name),
quiet + (NOTFOUND,))
- if isinstance(pdata, (int)):
- if pdata == -NOTFOUND:
+ if pdata[0] is None:
+ if pdata[1] == -NOTFOUND:
return False
- return pdata
+ return pdata[1]
return True
def get_phandle(self, nodeoffset):
--
cgit 1.2.3-korg
+37
View File
@@ -0,0 +1,37 @@
# This is the source.sh script. It is executed by BPM in a temporary directory when compiling a source package
# BPM Expects the source code to be extracted into the automatically created 'source' directory which can be accessed using $BPM_SOURCE
# BPM Expects the output files to be present in the automatically created 'output' directory which can be accessed using $BPM_OUTPUT
# The prepare function is executed in the root of the temp directory
# This function is used for putting downloaded files to the correct location or applying patches
prepare() {
cd "$BPM_SOURCE"
patch -Np1 -i "$BPM_WORKDIR"/swig-4.3.patch
patch -Np1 -i "$BPM_WORKDIR"/glibc-2.41.patch
patch -Np1 -i "$BPM_WORKDIR"/add-uutils-compatibility.patch
}
# The build function is executed in the source directory
# This function is used to compile the source code
build() {
meson setup build --prefix=/usr --buildtype=release
meson compile -C build
}
# The check function is executed in the source directory
# This function is used to run tests to verify the package has been compiled correctly
check() {
meson test -C build --print-errorlogs
}
# The package function is executed in the source directory
# This function is used to move the compiled files into the output directory
package() {
meson install -C build --destdir="$BPM_OUTPUT"
# Remove static library
rm "$BPM_OUTPUT"/usr/lib/libfdt.a
# Install package license
install -Dm644 "$BPM_SOURCE"/GPL "$BPM_OUTPUT"/usr/share/licenses/dtc/GPL
}