Skip to content
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

Arm64 Support #120

Open
ds5678 opened this issue Dec 9, 2023 · 10 comments
Open

Arm64 Support #120

ds5678 opened this issue Dec 9, 2023 · 10 comments

Comments

@ds5678
Copy link
Contributor

ds5678 commented Dec 9, 2023

What would be involved in setting up continuous integration for Arm64 binaries?

@btzy
Copy link
Owner

btzy commented Dec 11, 2023

I'm not against this, but I'm not sure how difficult this would be. Currently, this project only uses GitHub hosted runners, which I think are running x86-64 (?), and I am not sure whether they have any Arm64 runners available. There used to be a CircleCI runner as well before GitHub runners had support for macOS 12, so it is possible if CircleCI has the Arm64 runners you want.

Is there anything you're specifically looking to test with an Arm64 binary? Since this library doesn't really mess around with bit widths and architecture-dependent things, I don't see any reason that might make it not compile on Arm64.

@ds5678
Copy link
Contributor Author

ds5678 commented Dec 11, 2023

I am unfamiliar with the C++ build process. In C#, it does not depend on the server cpu architecture and is as simple as dotnet build -r osx-arm64.

@btzy
Copy link
Owner

btzy commented Dec 12, 2023

This answer suggests that we can set something on CMake to cross compile for arm64. However, I'm not sure why you want it in the CI. The CI is meant for testing that PRs don't break the build, and since we don't have any architecture-specific code, there shouldn't be any reason for this library not to work on arm64.

@ds5678
Copy link
Contributor Author

ds5678 commented Dec 12, 2023

Is there a reason I shouldn't use binaries from continuous integration in a NuGet package?

@btzy
Copy link
Owner

btzy commented Dec 12, 2023

Hmm your question got me thinking.

I don't think there is any reason why in principle you shouldn't use binaries from CI in a package, but I think in practice most CI binaries are meant for testing purposes and so they may be build with assertions and other options that aren't ideal for a release. The CI config is also IMO not considered a 'stable' part of the project, unless otherwise stated - if I wanted to stop using GitHub Actions tomorrow and move to CircleCI, that shouldn't necessitate any version bump.

For the case of this project, I happen to already be building in release mode in the CI, so it is okay to just use the binaries. However, there is no guarantee that CI will continue to build the project in release mode, if, say, I find that we can catch more bugs by changing the mode.

Essentially, the purpose of continuous integration is to check for code correctness of incoming pull requests, rather than to make a release. I suppose what you are looking for might be called continuous deployment (CD), but this seems rarely used for libraries.

@btzy
Copy link
Owner

btzy commented Dec 12, 2023

In any case, if you're supporting Windows 10 too, you'll also want x86 32-bit packages, so you'll need to get an x86 32-bit version of the nfd library.

@ds5678
Copy link
Contributor Author

ds5678 commented Dec 23, 2023

Unfortunately, I was only able to compile Arm64 builds for Windows. Cross-compilation was rejected on Mac and Ubuntu.

https://github.com/AssetRipper/nativefiledialog-extended-builds

@btzy
Copy link
Owner

btzy commented Jan 6, 2024

Hmm, I see that the build succeeds in the repo you linked above - did you fix it?

I don't know much about NuGet, are you intending to also build binary packages for Mac and Ubuntu? I was under the impression that "regular" C# and .NET only worked on Windows, and you had to install Mono to run C# on Mac and Linux.

@ds5678
Copy link
Contributor Author

ds5678 commented Jan 6, 2024

.NET Framework (the legacy .NET) is Windows-Only.

.NET Core is cross platform

@ds5678
Copy link
Contributor Author

ds5678 commented Jan 6, 2024

As I said above, I ran into issues with cross-compilation being unsupported when I attempted to build on Mac and Ubuntu.

I'm not giving up, but getting Arm64 support is not a priority for me at the moment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants