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

On Windows ARM, the installer does not install FlexASIO 64-bit #206

Open
dechamps opened this issue Dec 19, 2023 · 13 comments
Open

On Windows ARM, the installer does not install FlexASIO 64-bit #206

dechamps opened this issue Dec 19, 2023 · 13 comments
Labels

Comments

@dechamps
Copy link
Owner

In #205 @eguetta ran into an issue where the FlexASIO installer only installed the 32-bit version of FlexASIO, leaving out the 64-bit version. This results in FlexASIO being only usable in 32-bit apps and not showing up in the driver list of 64-bit apps.

The plot twist here is that @eguetta is running Windows ARM. This is very likely what triggered the issue. Most likely, FlexASIO's Inno Setup got confused and treated Windows ARM as 32-bit only.

This is a bug in FlexASIO's installer, perhaps even in Inno Setup itself.

As a workaround, Windows ARM users can manually register the 64-bit version of FlexASIO by following the procedure described at #205 (reply in thread).

@dechamps dechamps added the bug label Dec 19, 2023
@dechamps
Copy link
Owner Author

I took another look at this. I think a fix for this is going to have to wait, for the following reasons:

  1. I don't have a Windows ARM device to test with, and it's not possible to set up an ARM VM on x86 hardware.
    • One way would be to set up a VM on Azure but that is less convenient, and potentially costs money.
    • On the other hand VAC did add support for ARM64 in its latest 4.70 version so it should be possible to use that for testing even in an isolated VM (assuming I get my hands on one) with no attached audio devices.
  2. Inno Setup seems confused by the whole thing.
    • But the good news is, Inno Setup people seem aware of this and have fixes coming up in the next version (6.3.0).
    • The Inno Setup upcoming release notes even acknowledge precisely this issue:

      If you ship x86 and x64 versions of your app in the same installer, the 32-bit x86 version may be chosen instead of the expected x64 version when running on Arm64 Windows 11

A stretch goal here would be to not only have FlexASIO work properly on Windows ARM64 with x86/x64 apps, but also provide an ARM64 version of FlexASIO, such that native ARM64 ASIO Host Applications can use FlexASIO. This should be a fairly easy addition to the above. One caveat is that currently GitHub Actions would not be able to run ARM64 FlexASIOTest due to actions/runner-images#768, but it appears that is being worked on as well.

So, TL;DR: the ecosystem is almost there, but not quite. Let's check again in a few months.

@dechamps
Copy link
Owner Author

dechamps commented Jul 2, 2024

Some notes to myself regarding Windows ARM64 binary setup:

@Cutano
Copy link

Cutano commented Jul 3, 2024

This is a bug in FlexASIO's installer, perhaps even in Inno Setup itself.

Yes, exactly. I am a Windows on Arm user, and got FlexASIO ARM64 built on my Arm device. I registered the dll following the procedure described at #205 and it worked fine.
It could be a work around if you can provide an Arm64 bulid with a register script in future releases.

@Cutano
Copy link

Cutano commented Jul 3, 2024

I spoke too soon. After I manually installed FlexASIO, FlexASIOTest returned a PASS result, and the driver did appear in my DCC/VST software. However, it doesn't work properly.
image

@dechamps
Copy link
Owner Author

dechamps commented Jul 3, 2024

got FlexASIO ARM64 built

What do you mean? Did you compile FlexASIO with a bespoke build config targeting ARM64?

After I manually installed FlexASIO, FlexASIOTest returned a PASS result, and the driver did appear in my DCC/VST software. However, it doesn't work properly.

Keep in mind that an x64 ASIO host application running under ARM x64 emulation (which is presumably what you're testing with) will not be able to load an ARM64 FlexASIO. You'd need to use a traditional x64 build of FlexASIO (which does work, it's just the installer that's broken). I believe an x64 ASIO host application may be able to load an ARM64X or ARM64EC FlexASIO, but I'm not sure as I haven't looked deeply into these topics yet. I'm waiting for GitHub to provide ARM runners (actions/runner-images#768) so that I can run some experiments.

To be clear, there are two separate issues with FlexASIO on ARM right now:

  1. The FlexASIO installer has a bug where it does not install the x64 variant of FlexASIO when it's running on Windows ARM.
  2. Currently there are no ARM FlexASIO binaries.

(1) is the most pressing issue because it's preventing FlexASIO from working with x64 apps on Windows ARM. Since most ASIO host applications are x64, this means FlexASIO is virtually unusable on Windows ARM, unless you use the workaround I provided in #205.

(2) is more of a nice to have I think because I would presume there are very few (if any) native ARM ASIO applications on the market, and if they are built for ARM64EC then they might be able to use x64 FlexASIO anyway.

@Cutano
Copy link

Cutano commented Jul 3, 2024

Thanks for the reply.

What do you mean? Did you compile FlexASIO with a bespoke build config targeting ARM64?

Yes.

Keep in mind that an x64 ASIO host application running under ARM x64 emulation (which is presumably what you're testing with) will not be able to load an ARM64 FlexASIO.

I believe this is why the Arm64 library failed to load. I will switch back to the x64 version of FlexASIO. If you need to run any tests on an Arm device, I'd be happy to help. :)

@dechamps
Copy link
Owner Author

dechamps commented Jul 3, 2024

What do you mean? Did you compile FlexASIO with a bespoke build config targeting ARM64?

Yes.

Nice! It's good to know that it builds (and works, according to FlexASIOTest) at least - that was not necessarily a given.

@GEEKiDoS
Copy link

GEEKiDoS commented Jul 4, 2024

Thanks for the reply.

What do you mean? Did you compile FlexASIO with a bespoke build config targeting ARM64?

Yes.

Keep in mind that an x64 ASIO host application running under ARM x64 emulation (which is presumably what you're testing with) will not be able to load an ARM64 FlexASIO.

I believe this is why the Arm64 library failed to load. I will switch back to the x64 version of FlexASIO. If you need to run any tests on an Arm device, I'd be happy to help. :)

Hello! May you try to compile to arm64ec target instead of arm64 to see if it works under x64 a host for better performence?

source: Mixing Arm and Arm64EC-compiled code

@Cutano
Copy link

Cutano commented Jul 5, 2024

for better performence

I could have a try, but how to profile it?

@GEEKiDoS
Copy link

GEEKiDoS commented Jul 8, 2024

for better performence

I could have a try, but how to profile it?

It was expected to have a lower cpu usage I think?

@Cutano
Copy link

Cutano commented Jul 9, 2024

for better performence

I could have a try, but how to profile it?

It was expected to have a lower cpu usage I think?

I managed to build the ARM64EC version and it successfully passed the FlexASIOTest. However, Kontakt still failed to load the driver for some reason. I'm not very familiar with things related to ARM architecture, so I might have missed something critical.

@Gert-L
Copy link

Gert-L commented Aug 16, 2024

  1. Inno Setup seems confused by the whole thing.

@dechamps: Per the advice of those release notes ("In ArchitecturesAllowed and ArchitecturesInstallIn64BitMode, change any use of x64 to x64compatible"), could you append the "compatible" to the x64 value for the ArchitecturesInstallIn64BitMode entry in src/installer.in.iss? That should already allow for the x64 binaries to be installed in 64 bit mode on ARM64 systems.

@kennethito
Copy link

Has anyone looked into this recently? With all the snapdragon X laptops releasing this year, windows arm is becoming a much larger thing.

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

No branches or pull requests

5 participants