-
-
Notifications
You must be signed in to change notification settings - Fork 625
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
In-process components on ARM64 #9216
Conversation
This required some tweaks to the sconscripts for ISimpleDOM and MathPlayer. We copy the idl file into the build directory ourselves, but it depends on other files. It seems SCons no longer scans for dependencies in files we copy ourselves. Thus, we must explicitly declare those dependencies.
These are placed in a new libArm64 directory (alongside lib and lib64). MinHook doesn't support ARM64, so disable MinHook and everything that depends on it (notably displayModel).
Previously, it always returned True, even for 32 bit processes. On ARM64, isWow64Process always returns False. We must instead use IsWow64Process2 where supported.
Partially blocks #7894
From: James Teh <notifications@github.com>
Sent: Wednesday, January 30, 2019 8:49 PM
To: nvaccess/nvda <nvda@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Subject: [nvaccess/nvda] In-process components on ARM64 (#9216)
Link to issue number:
None.
Summary of the issue:
Firefox is coming to Windows 10 on ARM64! In order for NVDA to access this (as well as other browsers and apps that need in-process helpers), it needs to include in-process components built for ARM64.
Description of how this pull request fixes the issue:
1. Upgrade SCons to version 3.0.4, which includes necessary changes to support building for ARM64.
2. Build, install and use in-process components for ARM64.
3. Fix AppModule.is64BitProcess for ARM64. Previously, it always returned True, even for 32 bit processes. This was also breaking support for 32 bit SysListView32 controls (including those in NVDA's own GUI) on ARM64 systems.
Testing performed:
1. With a local build of Firefox with accessibility enabled, tested that about:support works in browse mode. (Nightly builds currently have accessibility disabled, hence the local build. We can't test real web documents yet because accessibility currently causes immediate content process crashes on ARM64. However, from NVDA's perspective, there shouldn't be any more to do once that bug is fixed.)
2. Opened notepad. With the NVDA Python console, tested that nav.appModule.is64BitProcess returns True.
3. Opened the NVDA Python console with NVDA+control+z, then pressed NVDA+control+z again so that nav is within NVDA itself. Tested that nav.appModule.is64BitProcess returns False.
4. Opened the NVDA Preferences dialog. Tested that the names of the categories are read when cursoring up and down the list. (Previously, they weren't.)
5. Opened Notepad. Verified that screen review only shows blank (expected because display model is disabled; see below), but that there were no exceptions.
Known issues with pull request:
1. Display model is disabled because MinHook does not support ARM64. I don't anticipate this being an issue because I would think an app being built for ARM64 would be modern enough that it wouldn't rely on GDI. Regardless, it's outside the scope of this PR.
2. I haven't updated the Mozilla symbols upload script. Firefox crash reporting isn't working on ARM64 yet anyway. Once it is, I might look into this, but that can be done in a separate PR.
3. This does not build in-process components for ARM32. I'm not sure anyone will bother shipping ARM32 desktop apps (if this is even supported). Again, this is out of scope here.
Change log entry:
Section: New features, Changes, Bug fixes
- Early support for apps such as Mozilla Firefox on computers with ARM64 (e.g. Qualcom Snapdragon) processors.
Note: You may want to mention other apps here, but I don't know what plans are for other apps like Chrome and I haven't tested these.
…_____
You can view, comment on, or merge this pull request online at:
#9216
Commit Summary
* Upgrade SCons to version 3.0.4.
* Build and install in-process components for ARM64.
* Start nvdaHelperRemoteLoader appropriately on ARM64.
* Fix AppModule.is64BitProcess for ARM64.
* Update readme to list the additional Visual Studio components we now require.
File Changes
* M include/scons <https://github.com/nvaccess/nvda/pull/9216/files#diff-0> (2)
* M nvdaHelper/ISimpleDOM_sconscript <https://github.com/nvaccess/nvda/pull/9216/files#diff-1> (9)
* M nvdaHelper/archBuild_sconscript <https://github.com/nvaccess/nvda/pull/9216/files#diff-2> (26)
* M nvdaHelper/mathPlayer_sconscript <https://github.com/nvaccess/nvda/pull/9216/files#diff-3> (5)
* M nvdaHelper/remote/inProcess.cpp <https://github.com/nvaccess/nvda/pull/9216/files#diff-4> (4)
* M nvdaHelper/remote/injection.cpp <https://github.com/nvaccess/nvda/pull/9216/files#diff-5> (10)
* M nvdaHelper/remote/rpcSrv.cpp <https://github.com/nvaccess/nvda/pull/9216/files#diff-6> (4)
* M nvdaHelper/remote/sconscript <https://github.com/nvaccess/nvda/pull/9216/files#diff-7> (115)
* M readme.md <https://github.com/nvaccess/nvda/pull/9216/files#diff-8> (7)
* M sconstruct <https://github.com/nvaccess/nvda/pull/9216/files#diff-9> (6)
* M source/NVDAHelper.py <https://github.com/nvaccess/nvda/pull/9216/files#diff-10> (9)
* M source/appModuleHandler.py <https://github.com/nvaccess/nvda/pull/9216/files#diff-11> (24)
* M source/setup.py <https://github.com/nvaccess/nvda/pull/9216/files#diff-12> (1)
* M source/winKernel.py <https://github.com/nvaccess/nvda/pull/9216/files#diff-13> (2)
Patch Links:
* https://github.com/nvaccess/nvda/pull/9216.patch
* https://github.com/nvaccess/nvda/pull/9216.diff
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub <#9216> , or mute the thread <https://github.com/notifications/unsubscribe-auth/AHgLkInjAdzqSweifdotg6rRBVklAiywks5vInXJgaJpZM4abk2J> .
|
I wonder whether some vbuf backends could be also left out, since building them doesn't make much sense for ARM64. This includes:
Unless we'll have native ARM64 editions of itunes and Adobe Reader in the future, these backends could be left out as well. I guess it doesn't have much impact though, the most noticeable would be a slightly improved building time. |
For reference, Microsoft Detours supports ARM64 and it is now open source, so if we ever need hooking there, we probably have to switch. |
Link to issue number:
None.
Summary of the issue:
Firefox is coming to Windows 10 on ARM64! In order for NVDA to access this (as well as other browsers and apps that need in-process helpers), it needs to include in-process components built for ARM64.
Description of how this pull request fixes the issue:
Testing performed:
Known issues with pull request:
Change log entry:
Section: New features, Changes, Bug fixes
- Early support for apps such as Mozilla Firefox on computers with ARM64 (e.g. Qualcom Snapdragon) processors.
Note: You may want to mention other apps here, but I don't know what plans are for other apps like Chrome and I haven't tested these.