From 95c05a4d3fea75857eb59a9f65a84dc5912c4a40 Mon Sep 17 00:00:00 2001 From: paulober <44974737+paulober@users.noreply.github.com> Date: Tue, 1 Apr 2025 22:27:32 +0200 Subject: [PATCH 1/3] Added dtc build Signed-off-by: paulober <44974737+paulober@users.noreply.github.com> --- .github/workflows/build.yml | 6 ++++ README.md | 1 + build.ps1 | 35 ++++++++++++++++-- build_linux.sh | 12 ++++++- build_macos.sh | 16 +++++++-- config/repositories.json | 4 +++ packages/linux/dtc/build-dtc.sh | 12 +++++++ packages/macos/dtc/build-dtc.sh | 59 +++++++++++++++++++++++++++++++ packages/windows/dtc/build-dtc.sh | 15 ++++++++ 9 files changed, 154 insertions(+), 6 deletions(-) create mode 100755 packages/linux/dtc/build-dtc.sh create mode 100755 packages/macos/dtc/build-dtc.sh create mode 100755 packages/windows/dtc/build-dtc.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 13df9ad..256efd3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -39,6 +39,7 @@ jobs: bin/pico-sdk-tools-*-x64-win.zip bin/openocd-*-x64-win.zip bin/riscv-toolchain-*-x64-win.zip + bin/dtc-*-x64-win.zip - name: Add Release Asset uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') @@ -48,6 +49,7 @@ jobs: bin/pico-sdk-tools-*-x64-win.zip bin/openocd-*-x64-win.zip bin/riscv-toolchain-*-x64-win.zip + bin/dtc-*-x64-win.zip build_macos: name: Build MacOS @@ -81,6 +83,7 @@ jobs: bin/pico-sdk-tools-*-mac.zip bin/openocd-*-mac.zip bin/riscv-toolchain-*.zip + bin/dtc-*-mac.tar.gz - name: Add Release Asset uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') @@ -90,6 +93,7 @@ jobs: bin/pico-sdk-tools-*-mac.zip bin/openocd-*-mac.zip bin/riscv-toolchain-*.zip + bin/dtc-*-mac.tar.gz build_linux: name: Build Linux @@ -120,6 +124,7 @@ jobs: bin/pico-sdk-tools-*-lin.tar.gz bin/openocd-*-lin.tar.gz bin/riscv-toolchain-*-lin.tar.gz + bin/dtc-*-lin.tar.gz - name: Add Release Asset uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') @@ -129,3 +134,4 @@ jobs: bin/pico-sdk-tools-*-lin.tar.gz bin/openocd-*-lin.tar.gz bin/riscv-toolchain-*-lin.tar.gz + bin/dtc-*-lin.tar.gz diff --git a/README.md b/README.md index a8abbe7..d82b494 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,4 @@ The tools currently included are: * **OpenOCD** (includes `linuxgpiod` and `cmsis-dap` adapters) * **pioasm** * **RISC-V Toolchain** +* **Device Tree Compiler** diff --git a/build.ps1 b/build.ps1 index 4e8e167..91524f8 100644 --- a/build.ps1 +++ b/build.ps1 @@ -208,7 +208,7 @@ if (-not $SkipDownload) { # Normal update msys 'pacman --noconfirm -Suu' - msys "pacman -S --noconfirm --needed autoconf automake base-devel expat git libtool pactoys patchutils pkg-config" + msys "pacman -S --noconfirm --needed autoconf automake base-devel expat git libtool pactoys patchutils pkg-config bison flex" # pacboy adds MINGW_PACKAGE_PREFIX to package names suffixed with :p msys "pacboy -S --noconfirm --needed cmake:p ninja:p toolchain:p libusb:p hidapi:p libslirp:p" } @@ -225,11 +225,22 @@ if (-not (Test-Path ".\build\picotool-install\$msysEnv")) { msys "cd build && ../packages/windows/picotool/build-picotool.sh $version" } +if (-not (Test-Path ".\build\dtc-install\$msysEnv")) { + msys "cd build && ../packages/windows/dtc/build-dtc.sh $version" +} + if ($version.Substring(0, 1) -ge 2) { # Sign files before packaging up the installer sign "build\openocd-install\$msysEnv\bin\openocd.exe", "build\pico-sdk-tools\$msysEnv\pioasm\pioasm.exe", - "build\picotool-install\$msysEnv\picotool\picotool.exe" + "build\picotool-install\$msysEnv\picotool\picotool.exe", + "build\dtc-install\$msysEnv\bin\dtc.exe", + "build\dtc-install\$msysEnv\bin\convert-dtsv0.exe", + "build\dtc-install\$msysEnv\bin\dtdiff.exe", + "build\dtc-install\$msysEnv\bin\fdtdump.exe", + "build\dtc-install\$msysEnv\bin\fdtget.exe", + "build\dtc-install\$msysEnv\bin\fdtoverlay.exe", + "build\dtc-install\$msysEnv\bin\fdtput.exe" } else { $template = Get-Content ".\packages\windows\pico-sdk-tools\pico-sdk-tools-config-version.cmake" -Raw $ExecutionContext.InvokeCommand.ExpandString($template) | Set-Content ".\build\pico-sdk-tools\$msysEnv\pico-sdk-tools-config-version.cmake" @@ -238,7 +249,14 @@ if ($version.Substring(0, 1) -ge 2) { sign "build\openocd-install\$msysEnv\bin\openocd.exe", "build\pico-sdk-tools\$msysEnv\elf2uf2.exe", "build\pico-sdk-tools\$msysEnv\pioasm.exe", - "build\picotool-install\$msysEnv\picotool.exe" + "build\picotool-install\$msysEnv\picotool.exe", + "build\dtc-install\$msysEnv\bin\dtc.exe", + "build\dtc-install\$msysEnv\bin\convert-dtsv0.exe", + "build\dtc-install\$msysEnv\bin\dtdiff.exe", + "build\dtc-install\$msysEnv\bin\fdtdump.exe", + "build\dtc-install\$msysEnv\bin\fdtget.exe", + "build\dtc-install\$msysEnv\bin\fdtoverlay.exe", + "build\dtc-install\$msysEnv\bin\fdtput.exe" } # Package pico-sdk-tools separately as well @@ -262,6 +280,17 @@ $filename = 'picotool-{0}-{1}.zip' -f Write-Host "Saving picotool package to $filename" exec { tar -a -cf "bin\$filename" -C "build\picotool-install\$msysEnv" '*' } +# Package dtc separately as well +$versionOutput = & ".\build\dtc-install\$msysEnv\bin\dtc.exe" --version +$version = $versionOutput -split '\s+' | Select-Object -Last 1 +Write-Host "DTC version $version" + +$filename = 'dtc-{0}-{1}.zip' -f + $version, + $suffix +Write-Host "Saving DTC package to $filename" +exec { tar -a -cf "bin\$filename" -C "build\dtc-install\$msysEnv" '*' } + if ($env:SKIP_OPENOCD -ne '1') { # Package OpenOCD separately as well diff --git a/build_linux.sh b/build_linux.sh index 30fdbe7..604a246 100755 --- a/build_linux.sh +++ b/build_linux.sh @@ -7,7 +7,7 @@ SKIP_RISCV=${SKIP_RISCV-0} SKIP_OPENOCD=${SKIP_OPENOCD-0} # Install prerequisites -sudo apt install -y jq cmake libtool automake libusb-1.0-0-dev libhidapi-dev libftdi1-dev +sudo apt install -y jq cmake libtool automake libusb-1.0-0-dev libhidapi-dev libftdi1-dev bison flex # RISC-V prerequisites sudo apt install -y autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev ninja-build git cmake libglib2.0-dev libslirp-dev # RPi Only prerequisites @@ -51,6 +51,7 @@ if [[ "$SKIP_RISCV" != 1 ]]; then ../packages/linux/riscv/build-riscv-gcc.sh fi ../packages/linux/picotool/build-picotool.sh +../packages/linux/dtc/build-dtc.sh cd .. topd=$PWD @@ -77,6 +78,15 @@ pushd "$builddir/picotool-install/" tar -a -cf "$topd/bin/$filename" * .keep popd +# Package dtc separately as well +version=$("./$builddir/dtc-install/bin/dtc" --version | awk '{print $3}') +echo "Device Tree Compiler version $version" +filename="dtc-${version}-${suffix}.zip" +echo "Saving dtc package to $filename" +pushd "$builddir/dtc-install/" +tar -a -cf "$topd/bin/$filename" * .keep +popd + if [[ "$SKIP_OPENOCD" != 1 ]]; then # Package OpenOCD separately as well diff --git a/build_macos.sh b/build_macos.sh index 9b02ddd..913c759 100755 --- a/build_macos.sh +++ b/build_macos.sh @@ -7,8 +7,8 @@ SKIP_RISCV=${SKIP_RISCV-0} SKIP_OPENOCD=${SKIP_OPENOCD-0} # Install prerequisites -arch -x86_64 /usr/local/bin/brew install jq libtool libusb automake hidapi --quiet -arch -arm64 /opt/homebrew/bin/brew install jq libtool libusb automake hidapi --quiet +arch -x86_64 /usr/local/bin/brew install jq libtool libusb automake hidapi bison flex pkgconf --quiet +arch -arm64 /opt/homebrew/bin/brew install jq libtool libusb automake hidapi bison flex pkgconf --quiet # RISC-V prerequisites echo "Listing local" ls /usr/local/bin @@ -60,6 +60,9 @@ fi arch -x86_64 ../packages/macos/picotool/build-picotool.sh arch -arm64 ../packages/macos/picotool/build-picotool.sh ../packages/macos/picotool/merge-picotool.sh + +arch -x86_64 ../packages/macos/dtc/build-dtc.sh +arch -arm64 ../packages/macos/dtc/build-dtc.sh cd .. topd=$PWD @@ -85,6 +88,15 @@ pushd "$builddir/picotool-install/" tar -a -cf "$topd/bin/$filename" * .keep popd +# Package dtc separately as well +version=$("./$builddir/dtc-install/bin/dtc" --version | awk '{print $3}') +echo "Device Tree Compiler version $version" +filename="dtc-${version}-${suffix}.zip" +echo "Saving dtc package to $filename" +pushd "$builddir/dtc-install/" +zip -yr "$topd/bin/$filename" * .keep +popd + if [[ "$SKIP_OPENOCD" != 1 ]] && [[ $(uname -m) == 'arm64' ]]; then # Package OpenOCD separately as well diff --git a/config/repositories.json b/config/repositories.json index 3e87382..fe6c824 100644 --- a/config/repositories.json +++ b/config/repositories.json @@ -19,6 +19,10 @@ { "href": "https://github.com/gcc-mirror/gcc", "tree": "releases/gcc-14" + }, + { + "href": "https://git.kernel.org/pub/scm/utils/dtc/dtc.git", + "tree": "v1.7.2" } ] } diff --git a/packages/linux/dtc/build-dtc.sh b/packages/linux/dtc/build-dtc.sh new file mode 100755 index 0000000..e8b1dd0 --- /dev/null +++ b/packages/linux/dtc/build-dtc.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set -euo pipefail + +cd dtc + +# build +make clean +make -j$(nproc) NO_PYTHON=1 + +INSTALLDIR="$PWD/../dtc-install" +make NO_PYTHON=1 DESTDIR="$INSTALLDIR" PREFIX="" install diff --git a/packages/macos/dtc/build-dtc.sh b/packages/macos/dtc/build-dtc.sh new file mode 100755 index 0000000..9771774 --- /dev/null +++ b/packages/macos/dtc/build-dtc.sh @@ -0,0 +1,59 @@ +#!/bin/zsh + +set -euo pipefail + +# Drop git repo of dtc as we use brew to build +rm -rf dtc +mkidr -p dtc-install +cd dtc-install + +arch -x86_64 /usr/local/bin/brew install --build-from-source dtc +arch -arm64 /opt/homebrew/bin/brew install --build-from-source dtc + +# Copy the dtc binaries to the build directory +BREW_PREFIX_X86=$(arch -x86_64 /usr/local/bin/brew --prefix) +BREW_PREFIX_ARM64=$(arch -arm64 /opt/homebrew/bin/brew --prefix) + +cp -R "$BREW_PREFIX_X86/Cellar/dtc/$(arch -x86_64 /usr/local/bin/brew list --versions dtc | awk '{print $2}')" ./dtc-x86 +cp -R "$BREW_PREFIX_ARM64/Cellar/dtc/$(arch -arm64 /opt/homebrew/bin/brew list --versions dtc | awk '{print $2}')" ./dtc-arm64 + +# Create universal distribution +mkdir -p dtc-universal/{bin,lib} + +for binary in dtc fdtdump fdtoverlay fdtput fdtget dtdiff convert-dtsv0; do + lipo -create \ + dtc-arm64/bin/$binary \ + dtc-x86/bin/$binary \ + -output dtc-universal/bin/$binary +done + +VERSIONED_DYLIB=$(basename "$(find dtc-arm64/lib -name 'libfdt.dylib.*' | head -n 1)") + +lipo -create \ + dtc-arm64/lib/$VERSIONED_DYLIB \ + dtc-x86/lib/$VERSIONED_DYLIB \ + -output dtc-universal/lib/$VERSIONED_DYLIB + +lipo -create \ + dtc-arm64/lib/libfdt.a \ + dtc-x86/lib/libfdt.a \ + -output dtc-universal/lib/libfdt.a + +# Recreate symlinks +cd dtc-universal/lib +ln -sf $VERSIONED_DYLIB libfdt.1.dylib +ln -sf libfdt.1.dylib libfdt.dylib +cd ../../ + +cp -R dtc-arm64/include dtc-universal/ +cp -R dtc-arm64/README.md dtc-universal/ + +# clean up +rm -rf dtc-arm64 +rm -rf dtc-x86 + +# move every folder and file from dtc-universal to . +mv dtc-universal/* . +rmdir dtc-universal + +cd .. diff --git a/packages/windows/dtc/build-dtc.sh b/packages/windows/dtc/build-dtc.sh new file mode 100755 index 0000000..d814742 --- /dev/null +++ b/packages/windows/dtc/build-dtc.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -euo pipefail + +BUILDDIR=$(pwd) +INSTALLDIR="dtc-install" + +cd dtc +make clean +make -j$(nproc) NO_PYTHON=1 + +make NO_PYTHON=1 DESTDIR="$BUILDDIR/$INSTALLDIR" PREFIX="" install + +cd "$BUILDDIR/$INSTALLDIR/${MSYSTEM,,}/bin" +"$BUILDDIR/../packages/windows/copy-deps.sh" From 8adc5620d27f104317b4bb4056a939bf60daf93b Mon Sep 17 00:00:00 2001 From: paulober <44974737+paulober@users.noreply.github.com> Date: Thu, 3 Apr 2025 02:26:14 +0200 Subject: [PATCH 2/3] Fix typo Signed-off-by: paulober <44974737+paulober@users.noreply.github.com> --- packages/macos/dtc/build-dtc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/macos/dtc/build-dtc.sh b/packages/macos/dtc/build-dtc.sh index 9771774..60d5eda 100755 --- a/packages/macos/dtc/build-dtc.sh +++ b/packages/macos/dtc/build-dtc.sh @@ -4,7 +4,7 @@ set -euo pipefail # Drop git repo of dtc as we use brew to build rm -rf dtc -mkidr -p dtc-install +mkdir -p dtc-install cd dtc-install arch -x86_64 /usr/local/bin/brew install --build-from-source dtc From f90034fede7a863f0bd7ec56f9571e06e2f2e38d Mon Sep 17 00:00:00 2001 From: paulober <44974737+paulober@users.noreply.github.com> Date: Thu, 3 Apr 2025 02:29:02 +0200 Subject: [PATCH 3/3] temp: Disable picotool build Signed-off-by: paulober <44974737+paulober@users.noreply.github.com> --- build.ps1 | 20 ++++++++++---------- build_linux.sh | 16 ++++++++-------- build_macos.sh | 20 ++++++++++---------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/build.ps1 b/build.ps1 index 91524f8..152d39e 100644 --- a/build.ps1 +++ b/build.ps1 @@ -221,9 +221,9 @@ if (-not (Test-Path ".\build\openocd-install\$msysEnv") -and ($env:SKIP_OPENOCD msys "cd build && ../packages/windows/openocd/build-openocd.sh" } -if (-not (Test-Path ".\build\picotool-install\$msysEnv")) { - msys "cd build && ../packages/windows/picotool/build-picotool.sh $version" -} +#if (-not (Test-Path ".\build\picotool-install\$msysEnv")) { +# msys "cd build && ../packages/windows/picotool/build-picotool.sh $version" +#} if (-not (Test-Path ".\build\dtc-install\$msysEnv")) { msys "cd build && ../packages/windows/dtc/build-dtc.sh $version" @@ -270,15 +270,15 @@ exec { tar -a -cf "bin\$filename" -C "build\pico-sdk-tools\$msysEnv" '*' } # Package picotool separately as well -$version = (cmd /c ".\build\picotool-install\$msysEnv\picotool\picotool.exe" version -s '2>&1') -Write-Host "Picotool version $version" +#$version = (cmd /c ".\build\picotool-install\$msysEnv\picotool\picotool.exe" version -s '2>&1') +#Write-Host "Picotool version $version" -$filename = 'picotool-{0}-{1}.zip' -f - $version, - $suffix +#$filename = 'picotool-{0}-{1}.zip' -f +# $version, +# $suffix -Write-Host "Saving picotool package to $filename" -exec { tar -a -cf "bin\$filename" -C "build\picotool-install\$msysEnv" '*' } +#Write-Host "Saving picotool package to $filename" +#exec { tar -a -cf "bin\$filename" -C "build\picotool-install\$msysEnv" '*' } # Package dtc separately as well $versionOutput = & ".\build\dtc-install\$msysEnv\bin\dtc.exe" --version diff --git a/build_linux.sh b/build_linux.sh index 604a246..e8ac5a6 100755 --- a/build_linux.sh +++ b/build_linux.sh @@ -50,7 +50,7 @@ if [[ "$SKIP_RISCV" != 1 ]]; then # Takes ages to build ../packages/linux/riscv/build-riscv-gcc.sh fi -../packages/linux/picotool/build-picotool.sh +#../packages/linux/picotool/build-picotool.sh ../packages/linux/dtc/build-dtc.sh cd .. @@ -68,15 +68,15 @@ if [ ${version:0:1} -ge 2 ]; then fi # Package picotool separately as well -version=$("./$builddir/picotool-install/picotool/picotool" version -s) -echo "Picotool version $version" +#version=$("./$builddir/picotool-install/picotool/picotool" version -s) +#echo "Picotool version $version" -filename="picotool-${version}-${suffix}.tar.gz" +#filename="picotool-${version}-${suffix}.tar.gz" -echo "Saving picotool package to $filename" -pushd "$builddir/picotool-install/" -tar -a -cf "$topd/bin/$filename" * .keep -popd +#echo "Saving picotool package to $filename" +#pushd "$builddir/picotool-install/" +#tar -a -cf "$topd/bin/$filename" * .keep +#popd # Package dtc separately as well version=$("./$builddir/dtc-install/bin/dtc" --version | awk '{print $3}') diff --git a/build_macos.sh b/build_macos.sh index 913c759..a594672 100755 --- a/build_macos.sh +++ b/build_macos.sh @@ -57,9 +57,9 @@ if [[ "$SKIP_RISCV" != 1 ]]; then # Takes ages to build ../packages/macos/riscv/build-riscv-gcc.sh fi -arch -x86_64 ../packages/macos/picotool/build-picotool.sh -arch -arm64 ../packages/macos/picotool/build-picotool.sh -../packages/macos/picotool/merge-picotool.sh +#arch -x86_64 ../packages/macos/picotool/build-picotool.sh +#arch -arm64 ../packages/macos/picotool/build-picotool.sh +#../packages/macos/picotool/merge-picotool.sh arch -x86_64 ../packages/macos/dtc/build-dtc.sh arch -arm64 ../packages/macos/dtc/build-dtc.sh @@ -78,15 +78,15 @@ if [ ${version:0:1} -ge 2 ]; then fi # Package picotool separately as well -version=$("./$builddir/picotool-install/picotool/picotool" version -s) -echo "Picotool version $version" +#version=$("./$builddir/picotool-install/picotool/picotool" version -s) +#echo "Picotool version $version" -filename="picotool-${version}-${suffix}.zip" +#filename="picotool-${version}-${suffix}.zip" -echo "Saving picotool package to $filename" -pushd "$builddir/picotool-install/" -tar -a -cf "$topd/bin/$filename" * .keep -popd +#echo "Saving picotool package to $filename" +#pushd "$builddir/picotool-install/" +#tar -a -cf "$topd/bin/$filename" * .keep +#popd # Package dtc separately as well version=$("./$builddir/dtc-install/bin/dtc" --version | awk '{print $3}')