Skip to content
This repository has been archived by the owner on Dec 20, 2024. It is now read-only.

nrfutil 6 is not compatible with aarch64 #25

Closed
jfroy opened this issue Oct 10, 2022 · 10 comments · Fixed by #27
Closed

nrfutil 6 is not compatible with aarch64 #25

jfroy opened this issue Oct 10, 2022 · 10 comments · Fixed by #27
Labels
help wanted Extra attention is needed

Comments

@jfroy
Copy link
Contributor

jfroy commented Oct 10, 2022

Building the container on aarch64 results in nrfutil 5.2.0 being installed, which cannot run under python3 and fails.

sudo docker run --rm nrfconnect-sdk nrfutil version
nrfutil version 5.2.0

Doing the same under amd64 results in nrfutil 6.1.7.

coderbyheart added a commit that referenced this issue Oct 10, 2022
@coderbyheart
Copy link
Member

Can you try the change in #27 and see if that works for you?

Right GitHub Actions only supports x86_64 architecture, so I cannot test this automatically.

coderbyheart added a commit that referenced this issue Oct 10, 2022
@jfroy
Copy link
Contributor Author

jfroy commented Oct 10, 2022

That seems to break the build.

upgrading shared libraries...
installing nrfutil from spec 'nrfutil>=6.0.0'...
Fatal error from pip prevented installation. Full pip output in file:
    /opt/pipx/logs/cmd_2022-10-10_08.25.27_pip_errors.log

pip seemed to fail to build package:
    nrfutil>=6.0.0

Some possibly relevant errors from pip install:
    ERROR: Cannot install nrfutil==6.0.1, nrfutil==6.1.0, nrfutil==6.1.1, nrfutil==6.1.2, nrfutil==6.1.3, nrfutil==6.1.4, nrfutil==6.1.5, nrfutil==6.1.6 and nrfutil==6.1.7 because these package versions have conflicting dependencies.
    ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts
Error installing nrfutil from spec 'nrfutil>=6.0.0'.

Ran the pipx command outside of a container build to get the log:

----------
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting nrfutil>=6.0.0
  Using cached https://www.piwheels.org/simple/nrfutil/nrfutil-6.1.7-py3-none-any.whl (898 kB)
  Downloading https://www.piwheels.org/simple/nrfutil/nrfutil-6.1.6-py3-none-any.whl (898 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 898.0/898.0 kB 1.1 MB/s eta 0:00:00
  Downloading https://www.piwheels.org/simple/nrfutil/nrfutil-6.1.5-py3-none-any.whl (898 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 898.0/898.0 kB 2.7 MB/s eta 0:00:00
  Downloading https://www.piwheels.org/simple/nrfutil/nrfutil-6.1.4-py3-none-any.whl (897 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 897.9/897.9 kB 2.7 MB/s eta 0:00:00
  Downloading https://www.piwheels.org/simple/nrfutil/nrfutil-6.1.3-py3-none-any.whl (896 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 896.7/896.7 kB 3.0 MB/s eta 0:00:00
Collecting pyyaml
  Using cached PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (731 kB)
Collecting pyspinel>=1.0.0a3
  Using cached https://www.piwheels.org/simple/pyspinel/pyspinel-1.0.3-py3-none-any.whl (65 kB)
Collecting intelhex
  Using cached https://www.piwheels.org/simple/intelhex/intelhex-2.3.0-py2.py3-none-any.whl (50 kB)
Collecting ecdsa
  Using cached https://www.piwheels.org/simple/ecdsa/ecdsa-0.18.0-py2.py3-none-any.whl (142 kB)
Collecting crcmod
  Using cached crcmod-1.7-cp39-cp39-linux_aarch64.whl
Collecting tqdm
  Using cached https://www.piwheels.org/simple/tqdm/tqdm-4.64.1-py2.py3-none-any.whl (78 kB)
Collecting protobuf
  Using cached protobuf-4.21.7-cp37-abi3-manylinux2014_aarch64.whl (403 kB)
Collecting piccata
  Using cached https://www.piwheels.org/simple/piccata/piccata-2.0.1-py3-none-any.whl (21 kB)
Collecting libusb1==1.9.3
  Using cached https://www.piwheels.org/simple/libusb1/libusb1-1.9.3-py3-none-any.whl (60 kB)
Collecting click
  Using cached https://www.piwheels.org/simple/click/click-8.1.3-py3-none-any.whl (96 kB)
Collecting pyserial
  Using cached https://www.piwheels.org/simple/pyserial/pyserial-3.5-py2.py3-none-any.whl (90 kB)
Collecting nrfutil>=6.0.0
  Downloading https://www.piwheels.org/simple/nrfutil/nrfutil-6.1.2-py3-none-any.whl (896 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 896.7/896.7 kB 1.1 MB/s eta 0:00:00
  Downloading https://www.piwheels.org/simple/nrfutil/nrfutil-6.1.1-py3-none-any.whl (896 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 896.7/896.7 kB 2.3 MB/s eta 0:00:00
Collecting libusb1
  Using cached https://www.piwheels.org/simple/libusb1/libusb1-3.0.0-py3-none-any.whl (62 kB)

The conflict is caused by:
    nrfutil 6.1.7 depends on pc-ble-driver-py>=0.16.4
    nrfutil 6.1.6 depends on pc-ble-driver-py>=0.16.4
    nrfutil 6.1.5 depends on pc-ble-driver-py>=0.16.4
    nrfutil 6.1.4 depends on pc-ble-driver-py>=0.16.4
    nrfutil 6.1.3 depends on pc-ble-driver-py>=0.16.1
    nrfutil 6.1.2 depends on pc-ble-driver-py==0.16.2
    nrfutil 6.1.1 depends on pc-ble-driver-py>=0.16.1

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict


PIP STDERR
----------
ERROR: Cannot install nrfutil==6.1.1, nrfutil==6.1.2, nrfutil==6.1.3, nrfutil==6.1.4, nrfutil==6.1.5, nrfutil==6.1.6 and nrfutil==6.1.7 because these package versions have conflicting dependencies.
ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts

And this is basically NordicSemiconductor/pc-ble-driver-py#193 and NordicSemiconductor/pc-ble-driver-py#227.

@coderbyheart coderbyheart reopened this Oct 10, 2022
@jfroy
Copy link
Contributor Author

jfroy commented Oct 10, 2022

Seems like the only viable path would be to either run the old version under python2, or ignore that dependency and declare that some functionality will be missing, or try to automate a from-source build process (maybe inspired by NordicSemiconductor/pc-ble-driver#271 (comment)).

@coderbyheart coderbyheart changed the title nrfutil 5.2.0 installed when container built on aarch64 nrfutil 6 is not compatible with aarch64 Oct 10, 2022
@coderbyheart
Copy link
Member

coderbyheart commented Oct 10, 2022

I guess the solution for now would be to provide nrfutil v5 for arm64 and v6+ for amd64. Building v6 from source for arm64 which we cannot test here is not a thing I would want to do right now.

Let's hear what @gregersrygg has to say as well, he is working on a Mac.

@coderbyheart
Copy link
Member

coderbyheart commented Oct 10, 2022

I guess™️ btw. that the way forward is not a PyPi release of nrfutil for arm64, because today you can use the Toolchain manager to install all the necessary tools. However this does not help today, in case you need nrfutil for CI/CD.

coderbyheart added a commit that referenced this issue Oct 10, 2022
@coderbyheart
Copy link
Member

Closed PR #28, because nrfutil 5 does not work with Python 3.

coderbyheart added a commit that referenced this issue Oct 10, 2022
@coderbyheart coderbyheart added the help wanted Extra attention is needed label Oct 10, 2022
coderbyheart added a commit that referenced this issue Oct 10, 2022
Disable nrfutil on arm64 (e.g. Apple M1/M2 Silicon) because it is not supported.

See #25
@coderbyheart
Copy link
Member

Disable shipping nrfutil on arm64 for now.

@jfroy
Copy link
Contributor Author

jfroy commented Oct 10, 2022

I guess™️ btw. that the way forward is not a PyPi release of nrfutil for arm64, because today you can use the Toolchain manager to install all the necessary tools. However this does not help today, in case you need nrfutil for CI/CD.

A Docker container is very useful, not just for CI/CD, but also for quickly getting a workstation working. It's also a pure command line solution for headless VMs and systems.

As another note, on Macs Rosetta provides good support for x84_64 binaries, but on aarch64 / arm64 Linux devices there isn't a good solution. There are tons of arm Chromebooks out there, and beefy workstations are coming from Ampere Computing, Nvidia, and other vendors.

@coderbyheart
Copy link
Member

Fully agree, that it is useful beyond CI/CD. However this project is not intended for bootstrapping developer machines. For that we have nRF Connect for Desktop.

@coderbyheart
Copy link
Member

Should be solved via the new nrfutil: 980ea41

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
help wanted Extra attention is needed
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants