Signal-desktop: [Feature Request] Compile for Windows 10 on ARM

Created on 15 Nov 2019  ยท  19Comments  ยท  Source: signalapp/Signal-Desktop

  • [ ] I have searched open and closed issues for duplicates

Bug Description

Signal has no 32 bit desktop app and has no support for ARM processors on Windows.

Steps to Reproduce

  1. Buy ARM Windows device
  2. Attempt to install Signal
  3. It doesn't work

Actual Result:

Program can not be installed

Expected Result:

Program can be installed

-->

Platform Info

Signal Version:

Latest build

Operating System:

Windows 10 Surface Pro X

Linked Device Version:

Link to Debug Log

Feature Request

Most helpful comment

Got it to work!!! ๐Ÿš€

Will need to follow up in https://github.com/journeyapps/node-sqlcipher/issues/73#issuecomment-782893874 to add statically linked OpenSSL binaries for Windows ARM64 which I just generated, but this is super exciting news! ๐ŸŽ‰

image

UPDATE: created a PR for node-sqlcipher: https://github.com/EvanHahn-Signal/node-sqlcipher/pull/1

All 19 comments

Can you talk about the current state of Windows on ARM a bit? How have things changed recently?

It has! Windows on ARM is actually a pretty great experience now! It is full windows 10, not windows RT. Meaning you can attempt to install and run any app you want. Most 32 bit apps work with emulation very well. Even simple gaming isn't too bad as long as the game uses direct 3d/x rather than open gl. X86 64 bit apps do not work at all. ARM 64 bit apps are really where it performs its best however. I love the battery life I am getting plus the always connected LTE that ARM brings to the table. It is only going to get better as developers recompile 64 bit apps for 64 bit ARM.

There is an offical Windows on Arm (64 bit) Electron release, it that helps?
https://github.com/electron/electron/releases/tag/v7.0.0

IS this fir the developers? I know Signal for desktop was developed using Electron, but I don't believe I as just a user can re-compile it myself can I?

For the developer. Because he asked for the status of Windows on ARM. Having an official Electron release which supports Windows on ARM is probably an important prerequisite to build the Signal-Desktop app.
I think Microsoft takes a huge effort to push forward Windows on ARM with the release of the Surface Pro X within the Pro series. But it all depends on the availability of software for this platform. So, Signal, please? :-)

@scottnonnenberg-signal Surface Pro X is a great device running windows on ARM64, and microsoft is pushing it hard, would be great to have Signal desktop available for it.

This has been asked (and shot down) several times, but why not _just compile for x86 Windows_? This would kill two birds with one stone.
See: https://github.com/signalapp/Signal-Desktop/issues/1636 (and others).

I would be happier with an x86 build option too. It's also useful for people on really old computers too.

Just tried setting Signal up on my Surface Pro X and was very surprised to find out that there isn't an ARM64 or 32bit version available.

Please do at least one!

Microsoft is pushing ARM64 heavily on upcoming devices, so this will be a growing issue.

Yes please.. I too am shocked there is no ARM support!

I am on Galaxy Book S.. Win 10 ARM is very very nice now and need Signal!

I'm waiting for this too

I started working on 32-bit support, it's more work than expected ๐Ÿ˜… some native modules will need to be compiled for 32-bit (and ideally arm64) as well as they're 64-bit only currently. I'm stuck at one native module, more details here: https://github.com/signalapp/Signal-Desktop/pull/4514 - would appreciate if anyone could help as I'm not familiar with Rust/GN/etc.

UPDATE September 14: think I've found the culprit for the issue mentioned above. Looks like one of ringrtc's dependencies needs an update to support x86. Details: https://github.com/signalapp/ringrtc/pull/12

Hope the Signal team will accept the PRs when they're done! ๐Ÿš€

I'm giving this a try, working on this branch, see CI runs here.

@EwoutH you very likely won't be able to get this to work until the native modules that Signal Desktop uses support arm64 somehow, like ringrtc as I mentioned above. I'm very eagerly waiting for https://github.com/neon-bindings/neon to finish their N-API migration guide - that can be the starting point to get things moving here ๐Ÿ˜Š They just finished their work for N-API so that's great news for sure!

Will update https://github.com/signalapp/ringrtc/pull/12 as soon as there's news in that area ๐Ÿ˜Š if you find any other native modules that need updates, please go ahead and try to add support for arm64 to those ๐Ÿš€

Making great progress working on a native ARM64 build of Signal Desktop for Windows. Some native dependencies need to be updated. Here's the PRs tracking that work:

I hope to be able to get some first test build some time next week, assuming that I won't be blocked on other dependencies. To be continued ๐Ÿš€

For cross-reference: issue for Windows 32-bit support: https://github.com/signalapp/Signal-Desktop/issues/1636

Update: https://github.com/node-ffi-napi/node-ffi-napi/pull/131#issuecomment-777297706 was merged yesterday, so I spent some hours today to continue working on Signal Desktop on Windows arm64. It mostly came down to updating some dependencies (see https://github.com/signalapp/Signal-Desktop/compare/development...dennisameling:windows-multi-arch-support for the diff). Those dependencies have dependencies, and they have dependencies, etc. - oh well ๐Ÿ˜… ๐Ÿคฏ

The good news is that I'm able to install/build all dependencies now on Windows arm64 โœ”๏ธ, and even yarn build:dev works โœ”๏ธ, but it crashes on start with error 3228369023:

PS C:\repos\Signal-Desktop> yarn start
yarn run v1.22.10
$ electron .

Set Windows Application User Model ID (AUMID) { appUserModelId: 'org.whispersystems.signal-desktop' }
NODE_ENV development
NODE_CONFIG_DIR C:\repos\Signal-Desktop\config
NODE_CONFIG {}
ALLOW_CONFIG_MUTATIONS undefined
HOSTNAME undefined
NODE_APP_INSTANCE undefined
SUPPRESS_NO_CONFIG_WARNING undefined
SIGNAL_ENABLE_HTTP undefined
userData: C:\Users\denni\AppData\Roaming\Signal-development
config/get: Successfully read user config file
x-attr dependency did not load successfully
config/get: Did not find ephemeral config file, cache is now empty object
error Command failed with exit code 3228369023.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Visual Studio debugging leads me to node_sqlite3.node as the crashing module. More details in https://github.com/journeyapps/node-sqlcipher/issues/73, will report back here when I have more info :)

I have to give up for now at the crashing node_sqlite3.node module. Debugging that goes beyond my knowledge and available time at the moment. I've provided details, including the .dmp file and related files for debugging in Visual Studio, at https://github.com/journeyapps/node-sqlcipher/issues/73#issuecomment-782893874. If anyone has experience with that, I'd be super grateful if you could have a look! Happy to provide more details/files if needed.

Got it to work!!! ๐Ÿš€

Will need to follow up in https://github.com/journeyapps/node-sqlcipher/issues/73#issuecomment-782893874 to add statically linked OpenSSL binaries for Windows ARM64 which I just generated, but this is super exciting news! ๐ŸŽ‰

image

UPDATE: created a PR for node-sqlcipher: https://github.com/EvanHahn-Signal/node-sqlcipher/pull/1

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ploum picture ploum  ยท  3Comments

PanderMusubi picture PanderMusubi  ยท  3Comments

jeremymasters picture jeremymasters  ยท  3Comments

vincenzopalazzo picture vincenzopalazzo  ยท  3Comments

muellermartin picture muellermartin  ยท  3Comments