-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AnkiDroid unit test suite currently not working on arm64 JDKs on macOS #164
AnkiDroid unit test suite currently not working on arm64 JDKs on macOS #164
Comments
Also:
|
Got this working. But: I'm open to suggestions, but for now, I'll build a dylib for arm64 and will include it in the releases folder, along with a PR in Before this PR: replace with a call to load the dylib
EDIT: Added to https://github.com/ankidroid/Anki-Android-Backend/releases/tag/0.1.10 |
osxcross supports arm64e now, so this triple (aarch64-apple-darwin) is probably supportable This is the PR for x86_64-apple-darwin support to cross-r/cross: cross-rs/cross#480 |
anki-android-backend-testing contains pre-compiled Rust code so Robolectric can load it and run natively. We can't currently include an Apple Silicon (AS) dylib inside anki-android-backend-testing (`cross` doesn't compile AS code yet) But, we can compile an AS dylib on an AS Mac and reference it. So we include the dylib in the releases folder of Anki-Android-Backend and add functionality to specify an environment variable to load this dylib from disk, instead of from the .jar Instructions (for 0.1.10): Download librsdroid-arm64.dylib from https://github.com/ankidroid/Anki-Android-Backend/releases/tag/0.1.10 And add the following environment variables: one to the path and one for the version ``` export ANKIDROID_BACKEND_PATH="/Users/davidallison/StudioProjects/Anki-Android-Backend/rslib-bridge/target/aarch64-apple-darwin/release/librsdroid-arm64.dylib" export ANKIDROID_BACKEND_VERSION="0.1.10" ``` Library generated from: ``` davidallison@Davids-MBP rslib-bridge % pwd /Users/davidallison/StudioProjects/Anki-Android-Backend/rslib-bridge cross build --release --features no-android --verbose --target aarch64-apple ``` on an AS MacBook Fixes ankidroid/Anki-Android-Backend#164
anki-android-backend-testing contains pre-compiled Rust code so Robolectric can load it and run natively. We can't currently include an Apple Silicon (AS) dylib inside anki-android-backend-testing (`cross` doesn't compile AS code yet) But, we can compile an AS dylib on an AS Mac and reference it. So we include the dylib in the releases folder of Anki-Android-Backend and add functionality to specify an environment variable to load this dylib from disk, instead of from the .jar Instructions (for 0.1.10): Download librsdroid-arm64.dylib from https://github.com/ankidroid/Anki-Android-Backend/releases/tag/0.1.10 And add the following environment variables: one to the path and one for the version ``` export ANKIDROID_BACKEND_PATH="/Users/davidallison/StudioProjects/Anki-Android-Backend/rslib-bridge/target/aarch64-apple-darwin/release/librsdroid-arm64.dylib" export ANKIDROID_BACKEND_VERSION="0.1.10" ``` Library generated from: ``` davidallison@Davids-MBP rslib-bridge % pwd /Users/davidallison/StudioProjects/Anki-Android-Backend/rslib-bridge cross build --release --features no-android --verbose --target aarch64-apple ``` on an AS MacBook Fixes ankidroid/Anki-Android-Backend#164
anki-android-backend-testing contains pre-compiled Rust code so Robolectric can load it and run natively. We can't currently include an Apple Silicon (AS) dylib inside anki-android-backend-testing (`cross` doesn't compile AS code yet) But, we can compile an AS dylib on an AS Mac and reference it. So we include the dylib in the releases folder of Anki-Android-Backend and add functionality to specify an environment variable to load this dylib from disk, instead of from the .jar Instructions (for 0.1.10): Download librsdroid-arm64.dylib from https://github.com/ankidroid/Anki-Android-Backend/releases/tag/0.1.10 And add the following environment variables: one to the path and one for the version ``` export ANKIDROID_BACKEND_PATH="/Users/davidallison/StudioProjects/Anki-Android-Backend/rslib-bridge/target/aarch64-apple-darwin/release/librsdroid-arm64.dylib" export ANKIDROID_BACKEND_VERSION="0.1.10" ``` Library generated from: ``` davidallison@Davids-MBP rslib-bridge % pwd /Users/davidallison/StudioProjects/Anki-Android-Backend/rslib-bridge rustup install 1.54.0 rustup default 1.54.0 cross build --release --features no-android --verbose --target aarch64-apple ``` on an AS MacBook Fixes ankidroid/Anki-Android-Backend#164
anki-android-backend-testing contains pre-compiled Rust code so Robolectric can load it and run natively. We can't currently include an Apple Silicon (AS) dylib inside anki-android-backend-testing (`cross` doesn't compile AS code yet) But, we can compile an AS dylib on an AS Mac and reference it. So we include the dylib in the releases folder of Anki-Android-Backend and add functionality to specify an environment variable to load this dylib from disk, instead of from the .jar Instructions (for 0.1.10): Download librsdroid-arm64.dylib from https://github.com/ankidroid/Anki-Android-Backend/releases/tag/0.1.10 And add the following environment variables: one to the path and one for the version ``` export ANKIDROID_BACKEND_PATH="/Users/davidallison/StudioProjects/Anki-Android-Backend/rslib-bridge/target/aarch64-apple-darwin/release/librsdroid-arm64.dylib" export ANKIDROID_BACKEND_VERSION="0.1.10" ``` Library generated from: ``` davidallison@Davids-MBP rslib-bridge % pwd /Users/davidallison/StudioProjects/Anki-Android-Backend/rslib-bridge rustup install 1.54.0 rustup default 1.54.0 cross build --release --features no-android --verbose --target aarch64-apple ``` on an AS MacBook Fixes ankidroid/Anki-Android-Backend#164
I want to leave this open for a bit. I just generated the 0.1.11 and 0.1.14-anki2.1.54 artifacts and here was how I did it: git co 0.1.11 # or your branch name here
git submodule update --recursive
./tools/doctor.sh # this sets the correct rust version etc, installs targets or should etc
rustup target add aarch64-apple-darwin
cd rslib-bridge
cross build --release --features no-android --verbose --target aarch64-apple-darwin
open target/aarch64-apple-darwin/release/ # now you have a finder window open with rsdroid.dylib there Open up the tag here on the releases page https://github.com/ankidroid/Anki-Android-Backend/releases How exactly to integrate it after merging #202 is up in the air - I have not tested - but this should be updated once tested |
The 2.1.55 desktop release switched away from Bazel to a new build system, which required some changes to this repo. Making the changes was a bit complicated due to the complexity of the current build system, and I ended up shaving some yaks to make things simpler while I was working on the changes. Changes: - Building for the current architecture instead of all architectures is now the default, so getting started is easier, and a build in Android Studio no longer requires special flags. - The build-current.sh script has been split into build-aar and build-robo for the Android and Robolectric parts, and can be used for both single-arch and multi-arch builds. - On arm64 Macs, the build scripts now create arm binaries - In a multi-arch build, both x86 and arm64 Mac libs are built, and they're merged into a single library. This can be done in CI, so there is no manual step required for M1 machines anymore. - The build now uses protobuf and python binaries/libs that the desktop build downloads, so they don't need to be installed separately. - The pinned Rust version and Rust targets are automatically installed as required. - The per-platform CI builds now build in debug mode and are faster. - Updated the docs to explain how the NDK can be installed via Android Studio, instead of via separate command-line tools. - The cross/docker stuff has been stripped out, as it's of limited use as it can't target macOS legally. Easier to use GH actions for the multi-arch builds, and keep things simple for local development. - Fix lint not being run in CI; caught an API 23 reference. Bumps ankidroid#179 (builds on M1 already work, so this may be simpler than expected?) Bumps ankidroid#174 (a bunch of the doctor stuff is obsolete; updated HOWTO.md and GH actions should be consulted) Bumps ankidroid#27 (I recommend closing this; single-platform is the default for local builds, and CI runners don't have any extra compute available) Tentatively closes ankidroid#109 (didn't see the flake when I was updating the actions) Closes ankidroid#235 (translation submodules now automatically synced with anki submodule) Closes ankidroid#213 (path based on script now) Closes ankidroid#211 (builds for Arm Mac on Arm Macs) Closes ankidroid#197 (single arch is the default) Closes ankidroid#196 (desktop venv is used) Closes ankidroid#195 (can be done via the GUI, and does not require separate cli download) Closes ankidroid#168 (latest Rust; easier changing via rust-toolchain.toml) Closes ankidroid#164 (universal dylib) Closes ankidroid#127 (no docker) Closes ankidroid#106 (most of those scripts obsolete; some commands moved into build scripts) Closes ankidroid#99 (no docker) Closes ankidroid#98 (no docker) Closes ankidroid#97 (submodule automatically updated) Closes ankidroid#96 (build will fail if commit unavailable) Closes ankidroid#53 (no docker) Closes ankidroid#40 (DEBUG=1 option documented) Closes ankidroid#9 (simpler OOTB experience, and updated docs)
The 2.1.55 desktop release switched away from Bazel to a new build system, which required some changes to this repo. Making the changes was a bit complicated due to the complexity of the current build system, and I ended up shaving some yaks to make things simpler while I was working on the changes. Changes: - Building for the current architecture instead of all architectures is now the default, so getting started is easier, and a build in Android Studio no longer requires special flags. - The build-current.sh script has been split into build-aar and build-robo for the Android and Robolectric parts, and can be used for both single-arch and multi-arch builds. - On arm64 Macs, the build scripts now create arm binaries - In a multi-arch build, both x86 and arm64 Mac libs are built, and they're merged into a single library. This can be done in CI, so there is no manual step required for M1 machines anymore. - The build now uses protobuf and python binaries/libs that the desktop build downloads, so they don't need to be installed separately. - The pinned Rust version and Rust targets are automatically installed as required. - The per-platform CI builds now build in debug mode and are faster. - Updated the docs to explain how the NDK can be installed via Android Studio, instead of via separate command-line tools. - The cross/docker stuff has been stripped out, as it's of limited use as it can't target macOS legally. Easier to use GH actions for the multi-arch builds, and keep things simple for local development. - Fix lint not being run in CI; caught an API 23 reference. Bumps ankidroid#179 (builds on M1 already work, so this may be simpler than expected?) Bumps ankidroid#174 (a bunch of the doctor stuff is obsolete; updated HOWTO.md and GH actions should be consulted) Bumps ankidroid#27 (I recommend closing this; single-platform is the default for local builds, and CI runners don't have any extra compute available) Tentatively closes ankidroid#109 (didn't see the flake when I was updating the actions) Closes ankidroid#235 (translation submodules now automatically synced with anki submodule) Closes ankidroid#213 (path based on script now) Closes ankidroid#211 (builds for Arm Mac on Arm Macs) Closes ankidroid#197 (single arch is the default) Closes ankidroid#196 (desktop venv is used) Closes ankidroid#195 (can be done via the GUI, and does not require separate cli download) Closes ankidroid#168 (latest Rust; easier changing via rust-toolchain.toml) Closes ankidroid#164 (universal dylib) Closes ankidroid#127 (no docker) Closes ankidroid#106 (most of those scripts obsolete; some commands moved into build scripts) Closes ankidroid#99 (no docker) Closes ankidroid#98 (no docker) Closes ankidroid#97 (submodule automatically updated) Closes ankidroid#96 (build will fail if commit unavailable) Closes ankidroid#53 (no docker) Closes ankidroid#40 (DEBUG=1 option documented) Closes ankidroid#9 (simpler OOTB experience, and updated docs)
The 2.1.55 desktop release switched away from Bazel to a new build system, which required some changes to this repo. Making the changes was a bit complicated due to the complexity of the current build system, and I ended up shaving some yaks to make things simpler while I was working on the changes. Changes: - Building for the current architecture instead of all architectures is now the default, so getting started is easier, and a build in Android Studio no longer requires special flags. - The build-current.sh script has been split into build-aar and build-robo for the Android and Robolectric parts, and can be used for both single-arch and multi-arch builds. - On arm64 Macs, the build scripts now create arm binaries - In a multi-arch build, both x86 and arm64 Mac libs are built, and they're merged into a single library. This can be done in CI, so there is no manual step required for M1 machines anymore. - The build now uses protobuf and python binaries/libs that the desktop build downloads, so they don't need to be installed separately. - The pinned Rust version and Rust targets are automatically installed as required. - The per-platform CI builds now build in debug mode and are faster. - Updated the docs to explain how the NDK can be installed via Android Studio, instead of via separate command-line tools. - The cross/docker stuff has been stripped out, as it's of limited use as it can't target macOS legally. Easier to use GH actions for the multi-arch builds, and keep things simple for local development. - Fix lint not being run in CI; caught an API 23 reference. Bumps ankidroid#179 (builds on M1 already work, so this may be simpler than expected?) Bumps ankidroid#174 (a bunch of the doctor stuff is obsolete; updated HOWTO.md and GH actions should be consulted) Bumps ankidroid#27 (I recommend closing this; single-platform is the default for local builds, and CI runners don't have any extra compute available) Tentatively closes ankidroid#109 (didn't see the flake when I was updating the actions) Closes ankidroid#235 (translation submodules now automatically synced with anki submodule) Closes ankidroid#213 (path based on script now) Closes ankidroid#211 (builds for Arm Mac on Arm Macs) Closes ankidroid#197 (single arch is the default) Closes ankidroid#196 (desktop venv is used) Closes ankidroid#195 (can be done via the GUI, and does not require separate cli download) Closes ankidroid#168 (latest Rust; easier changing via rust-toolchain.toml) Closes ankidroid#164 (universal dylib) Closes ankidroid#127 (no docker) Closes ankidroid#106 (most of those scripts obsolete; some commands moved into build scripts) Closes ankidroid#99 (no docker) Closes ankidroid#98 (no docker) Closes ankidroid#97 (submodule automatically updated) Closes ankidroid#96 (build will fail if commit unavailable) Closes ankidroid#53 (no docker) Closes ankidroid#40 (DEBUG=1 option documented) Closes ankidroid#9 (simpler OOTB experience, and updated docs)
[UPDATE: until solved, we publish
rsdroid-arm64.dylib
on each release in the list of the artifacts and you can point the robolectric tests to it for use on M1 machines]Symptom:
@viciousAegis This is a bug on our side. We do not build
io.github.david-allison-1:anki-android-backend-testing
for M1 Macs.I have an M1 Mac arriving sometime late March, so I'll be personally invested in testing
As a workaround:
@RunWith(AndroidJUnit4::class)
:RobolectricTest()
As a workaround, please enable GitHub actions on your GitHub clone of
Anki-Android
and test thereProperly fixing this
Issue
librsdroid
. This is compiled for Androidlibrsdroid
needs to be compiled for native platformsanki-android-backend-testing
which contains thedlls
anddylibs
neededPlease see: https://github.com/ankidroid/Anki-Android-Backend/tree/main/rsdroid-testing
arm64e
(I have no idea how to do this, but it should be possible)Anki-Android-Backend/rsdroid-testing/build.gradle
Lines 184 to 202 in 9302b3f
dylibs
in thejar
dylib
based on your architecture:Anki-Android-Backend/rsdroid-testing/src/main/java/net/ankiweb/rsdroid/testing/RustBackendLoader.java
Lines 55 to 64 in 9302b3f
Originally posted by @david-allison in ankidroid/Anki-Android#10389 (comment)
The text was updated successfully, but these errors were encountered: