diff --git a/.github/workflows/README.md b/.github/workflows/README.md new file mode 100644 index 0000000000..0c0420c443 --- /dev/null +++ b/.github/workflows/README.md @@ -0,0 +1,123 @@ +# api-verification.yml +TODO + +# auto-merge-keyman-server-pr.yml +TODO + +# build-test-publish-docker.yml +TODO + +# cleanup-ghcr.yml +TODO + +# close-linked-issues-for-merged-prs.yml +TODO + +# core-arm64-windows-test.yml: Test Keyman Core on Windows/ARM64 + +This action allows us to test Keyman Core for Windows on ARM64 architecture with +a GitHub agent, as we do not have any TeamCity Windows build agents with ARM64 +arch. + +It will normally be triggered as part of a test build from the +resources/teamcity/triggers/trigger-test-builds.sh script. + +You can manually trigger a core-arm64-windows-test action on GitHub on your fork +of keymanapp/keyman. This is normally only needed to test changes to the action +itself: + +- push the changes to your fork of keymanapp/keyman: `git push myfork HEAD:master` +- make sure you have GHA enabled in the settings of your fork +- seet `GITHUB_TOKEN=` +- trigger a build with: + + ```bash + curl --write-out '\n' --request POST \ + --header "Accept: application/vnd.github+json" \ + --header "Authorization: token $GITHUB_TOKEN" \ + --data "{ \"event_type\": \"core-arm64-windows-test: master\", \ + \"client_payload\": { \ + \"buildSha\": \"$(git rev-parse refs/heads/master)\", \ + \"branch\": \"master\", \ + \"user\": \"${USER}\", \ + \"isTestBuild\": \"true\", \ + \"force\": \"true\"}" \ + https://api.github.com/repos//keyman/dispatches + ``` + + To trigger a build for PR #1234 in a branch `my-pr-branch` this would look similar + to this: + + ```bash + curl --write-out '\n' --request POST \ + --header "Accept: application/vnd.github+json" \ + --header "Authorization: token $GITHUB_TOKEN" \ + --data "{ \"event_type\": \"core-arm64-windows-test: PR #1234\", \ + \"client_payload\": { \ + \"buildSha\": \"$(git rev-parse refs/heads/my-pr-branch)\", \ + \"branch\": \"my-pr-branch\", \ + \"user\": \"${USER}\", \ + \"isTestBuild\": \"true\", \ + \"force\": \"true\"}" \ + https://api.github.com/repos//keyman/dispatches + ``` + +.... + +# crowdin.yml +TODO + +# deb-packaging.yml: Ubuntu Packaging GitHub Action + +You can manually trigger a deb-packaging action on GitHub on your fork +of keymanapp/keyman. This is normally only needed to test changes to the action +itself: + +- push the changes to your fork of keymanapp/keyman: `git push myfork HEAD:master` +- make sure you have GHA enabled in the settings of your fork +- seet `GITHUB_TOKEN=` +- trigger a build with: + + ```bash + curl --write-out '\n' --request POST \ + --header "Accept: application/vnd.github+json" \ + --header "Authorization: token $GITHUB_TOKEN" \ + --data "{ \"event_type\": \"deb-pr-packaging: master\", \ + \"client_payload\": { \ + \"buildSha\": \"$(git rev-parse refs/heads/master)\", \ + \"branch\": \"master\", \ + \"baseBranch\": \"master\", \ + \"baseRef\": \"$(git rev-parse refs/heads/master^)\", \ + \"user\": \"${USER}\", \ + \"isTestBuild\": \"true\", \ + \"force\": \"true\"}" \ + https://api.github.com/repos//keyman/dispatches + ``` + + To trigger a build for PR #1234 in a branch `pr-1234` this would look similar + to this: + + ```bash + curl --write-out '\n' --request POST \ + --header "Accept: application/vnd.github+json" \ + --header "Authorization: token $GITHUB_TOKEN" \ + --data "{ \"event_type\": \"deb-pr-packaging: PR #1234\", \ + \"client_payload\": { \ + \"buildSha\": \"$(git rev-parse refs/heads/pr-1234)\", \ + \"branch\": \"pr-1234\", \ + \"baseBranch\": \"master\", \ + \"baseRef\": \"$(git rev-parse refs/heads/master)\", \ + \"user\": \"${USER}\", \ + \"isTestBuild\": \"true\", \ + \"force\": \"true\"}" \ + https://api.github.com/repos//keyman/dispatches + ``` + +# labeler.yml +TODO + +# npm-publish.yml +TODO + +# pr-build-status.yml +TODO diff --git a/.github/workflows/core-arm64-windows-test.yml b/.github/workflows/core-arm64-windows-test.yml new file mode 100644 index 0000000000..aaf9477cdd --- /dev/null +++ b/.github/workflows/core-arm64-windows-test.yml @@ -0,0 +1,163 @@ +# +# This workflow tests Keyman Core on ARM64/Windows; we cannot use our TeamCity +# agents because we have no ARM64 Windows agents. +# +# It is triggered by a repository_dispatch event with the type +# `core-arm64-windows-test:*`. +# + +name: "Keyman Core - ARM64/Windows test" +run-name: "Keyman Core - ARM64/Windows test - ${{ github.event.client_payload.branch }} by @${{ github.event.client_payload.user }}" +on: + repository_dispatch: + types: ['core-arm64-windows-test:*'] + +# Inputs: +# +# buildSha: The SHA of the commit to build, e.g. of the branch or +# refs/pull/1234/head for PR +# isTestBuild: true for PR and test builds, false for release builds +# force: true to run this action on a fork of keymanapp/keyman +# +# Descriptive inputs: +# +# branch: Name of the branch to build, generally, `master`, `beta`, +# `stable-x.y`, or for a PR `#1234`. Used only in the action +# title +# user: The user that triggered the build or created the PR. Used +# only in the action title + +env: + GH_TOKEN: ${{ github.token }} + STATUS_CONTEXT: 'Keyman Core - ARM64 test' + _builder_timings: false + +jobs: + core-arm64-windows-test: + name: Keyman Core ARM64/Windows test + if: github.repository == 'keymanapp/keyman' || github.event.client_payload.force + runs-on: windows-11-arm + + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2 + with: + ref: '${{ github.event.client_payload.buildSha }}' + + - name: Set pending status on PR builds + id: set_status + if: github.event.client_payload.isTestBuild == 'true' + shell: bash + run: | + gh api \ + --method POST \ + -H "Accept: application/vnd.github+json" \ + /repos/$GITHUB_REPOSITORY/statuses/${{ github.event.client_payload.buildSha }} \ + -f state='pending' \ + -f target_url="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" \ + -f description='Keyman Core - ARM64 test started' \ + -f context="$STATUS_CONTEXT" + + - name: Report initial npm/node versions + run: | + echo "Initial npm/node versions" + npm -v + node -v + + - uses: actions/setup-python@v6 + with: + python-version: '3.13' + + - uses: actions/setup-node@v6 + with: + # This needs to be kept in sync with minimum-versions.sh + node-version: '20.19' + # As of Dec 2025, ngrok not yet supported on ARM Windows, + # google-closure-compiler (and others?) does not support arm64 yet, so + # use the x64 version of node. This is needed to avoid `npm ci` failure, + # even though we don't use ngrok directly; google-closure-compiler is + # used by emscripten + architecture: x64 + + - name: Report on current environment + shell: bash + run: | + echo "-- Environment --" + echo "pythonLocation=$pythonLocation" + echo "-- Current npm/node versions --" + npm -v + node -v + + - name: Setup environment + shell: bash + run: | + # As of Dec 2025, Emscripten does not support Win11 ARM natively + echo "EMSDK_ARCH=x86_64" >> $GITHUB_ENV + echo "EMSDK_KEEP_DOWNLOADS=1" >> $GITHUB_ENV + echo "KEYMAN_USE_EMSDK=1" >> $GITHUB_ENV + + echo "PATH=$PATH:$pythonLocation/Scripts" >> $GITHUB_ENV + + echo "KEYMAN_CI_SKIP_NVM=1" >> $GITHUB_ENV + + + - name: Install emscripten + shell: bash + run: | + source resources/build/minimum-versions.inc.sh + mkdir ../emsdk + pushd ../emsdk + git clone https://github.com/emscripten-core/emsdk.git + cd emsdk + ./emsdk install "${KEYMAN_MIN_VERSION_EMSCRIPTEN}" + ./emsdk activate "${KEYMAN_MIN_VERSION_EMSCRIPTEN}" + cd upstream/emscripten + npm install + echo "EMSCRIPTEN_BASE=$(pwd)" >> $GITHUB_ENV + popd + + - name: Install meson + shell: bash + run: | + pip3 install --user meson + + - name: Run test + shell: bash + run: | + # Run the test + ./core/build.sh configure,build,test:arm64 + + set_status: + name: Set result status on PR builds + needs: [core-arm64-windows-test] + runs-on: windows-arm64 + if: ${{ always() && github.event.client_payload.isTestBuild == 'true' }} + steps: + - name: Set success + if: needs.core-arm64-windows-test.result == 'success' + run: | + echo "RESULT=success" >> $GITHUB_ENV + echo "MSG=Keyman Core ARM64 test succeeded" >> $GITHUB_ENV + + - name: Set cancelled + if: needs.core-arm64-windows-test.result == 'cancelled' + run: | + echo "RESULT=error" >> $GITHUB_ENV + echo "MSG=Keyman Core ARM64 test cancelled" >> $GITHUB_ENV + + - name: Set failure + if: needs.core-arm64-windows-test.result == 'failure' + run: | + echo "RESULT=failure" >> $GITHUB_ENV + echo "MSG=Keyman Core ARM64 test failed" >> $GITHUB_ENV + + - name: Set final status + run: | + gh api \ + --method POST \ + -H "Accept: application/vnd.github+json" \ + /repos/$GITHUB_REPOSITORY/statuses/${{ github.event.client_payload.buildSha }} \ + -f state="$RESULT" \ + -f target_url="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" \ + -f description="$MSG" \ + -f context="$STATUS_CONTEXT" diff --git a/.github/workflows/deb-packaging.README.md b/.github/workflows/deb-packaging.README.md deleted file mode 100644 index 662526a875..0000000000 --- a/.github/workflows/deb-packaging.README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Ubuntu Packaging GitHub Action - -You can manually trigger a deb-packaging action on GitHub, e.g. to test changes: - -- push the changes to your fork of keymanapp/keyman: git push myfork HEAD:master -- make sure you have GHA enabled in the settings of your fork and created an - access token on GitHub -- trigger a build with: - - ```bash - curl --write-out '\n' --request POST \ - --header "Accept: application/vnd.github+json" \ - --header "Authorization: token $GITHUB_TOKEN" \ - --data "{ \"event_type\": \"deb-pr-packaging: master\", \ - \"client_payload\": { \ - \"buildSha\": \"$(git rev-parse refs/heads/master)\", \ - \"branch\": \"master\", \ - \"baseBranch\": \"master\", - \"baseRef\": \"$(git rev-parse refs/heads/master^)\", - \"user\": \"${USER}\", - \"isTestBuild\": \"true\", - \"force\": \"true\"}" \ - https://api.github.com/repos//keyman/dispatches - ``` - - To trigger a build for PR #1234 in a branch `pr-1234` this would look similar - to this: - - ```bash - curl --write-out '\n' --request POST \ - --header "Accept: application/vnd.github+json" \ - --header "Authorization: token $GITHUB_TOKEN" \ - --data "{ \"event_type\": \"deb-pr-packaging: PR #1234\", \ - \"client_payload\": { \ - \"buildSha\": \"$(git rev-parse refs/heads/pr-1234)\", \ - \"branch\": \"pr-1234\", \ - \"baseBranch\": \"master\", - \"baseRef\": \"$(git rev-parse refs/heads/master)\", - \"user\": \"${USER}\", - \"isTestBuild\": \"true\", - \"force\": \"true\"}" \ - https://api.github.com/repos//keyman/dispatches - ``` diff --git a/.gitignore b/.gitignore index 97c28ac83b..7b87219588 100644 --- a/.gitignore +++ b/.gitignore @@ -103,8 +103,8 @@ /windows/src/engine/keyman32/*.cod /windows/src/engine/keyman32/*.pdb -# /engine/keymanx64/ -/windows/src/engine/keymanx64/x64 +# /engine/keymanhp/ +/windows/src/engine/keymanhp/x64 # /engine/kmcomapi/ /windows/src/engine/kmcomapi/kmcomapi.tlb diff --git a/core/build.bat b/core/build.bat index fc4f400bfb..365b46e44a 100644 --- a/core/build.bat +++ b/core/build.bat @@ -8,6 +8,7 @@ if "%1"=="" goto help if "%1"=="all" goto all if "%1"=="x86" goto build if "%1"=="x64" goto build +if "%1"=="arm64" goto build echo "Invalid parameter." goto help @@ -15,9 +16,9 @@ goto help rem ---------------------------------- :help -echo Usage: %0 x86^|x64^|all debug^|release [configure] [build] [test] [additional params for meson/ninja] +echo Usage: %0 x86^|x64^|arm64^|all debug^|release [configure] [build] [test] [additional params for meson/ninja] echo or -echo Usage: %0 x86^|x64 -c +echo Usage: %0 x86^|x64^|arm64^ -c echo -c will leave your environment configured for Visual Studio for selected platform. echo. echo Otherwise, %0 is intended to be used by build.sh, not directly. @@ -35,17 +36,37 @@ cmd /c build.bat x86 %2 %3 %4 %5 %6 %7 %8 %9 || exit !errorlevel! cd %KEYMAN_ROOT%\core cmd /c build.bat x64 %2 %3 %4 %5 %6 %7 %8 %9 || exit !errorlevel! +cd %KEYMAN_ROOT%\core +cmd /c build.bat arm64 %2 %3 %4 %5 %6 %7 %8 %9 || exit !errorlevel! + goto :eof rem ---------------------------------- :build +set "HOST_ARCH=%PROCESSOR_ARCHITECTURE%" + +rem Map Windows arch strings to VsDevCmd expected values +if /I "%HOST_ARCH%"=="AMD64" set "HOST_ARCH=amd64" +if /I "%HOST_ARCH%"=="x86" set "HOST_ARCH=x86" +if /I "%HOST_ARCH%"=="ARM64" set "HOST_ARCH=arm64" + + set ARCH=%1 shift if "%1"=="-c" goto :setup +rem Initialize MESON_CROSS_FILE as empty +set "MESON_CROSS_FILE=" + +rem Check if cross file exists (using %~dp0 for script directory) +if exist "%~dp0cross-%ARCH%.build" ( + echo [DEBUG] Using cross file cross-%ARCH%.build + set "MESON_CROSS_FILE=--cross-file cross-%ARCH%.build" +) + echo === Locating Visual Studio === rem From https://github.com/microsoft/vswhere @@ -65,8 +86,7 @@ if not exist "!VsDevCmd_Path!" ( echo === Configuring VC++ === set VSCMD_SKIP_SENDTELEMETRY=1 -call "!VsDevCmd_Path!" -arch=!ARCH! -no_logo -startdir=none || exit !errorlevel! - +call "!VsDevCmd_Path!" -arch=!ARCH! -host_arch=!HOST_ARCH! -no_logo -startdir=none || exit !errorlevel! cd %KEYMAN_ROOT%\core set BUILDTYPE=%1 @@ -81,9 +101,9 @@ if "!COMMAND!" == "configure" ( echo === Configuring Keyman Core for Windows !ARCH! !BUILDTYPE! === if exist build\!ARCH!\!BUILDTYPE! rd /s/q build\!ARCH!\!BUILDTYPE! if "%1" == "--no-tests" ( - meson setup build\!ARCH!\!BUILDTYPE! !STATIC_LIBRARY! --buildtype !BUILDTYPE! -Dkeyman_core_tests=false --werror %2 %3 %4 %5 %6 %7 %8 %9 || exit !errorlevel! + meson setup !MESON_CROSS_FILE! build\!ARCH!\!BUILDTYPE! !STATIC_LIBRARY! --buildtype !BUILDTYPE! -Dkeyman_core_tests=false --werror %2 %3 %4 %5 %6 %7 %8 %9 || exit !errorlevel! ) else ( - meson setup build\!ARCH!\!BUILDTYPE! !STATIC_LIBRARY! --buildtype !BUILDTYPE! -Dkeyman_core_tests=true --werror %1 %2 %3 %4 %5 %6 %7 %8 %9 || exit !errorlevel! + meson setup !MESON_CROSS_FILE! build\!ARCH!\!BUILDTYPE! !STATIC_LIBRARY! --buildtype !BUILDTYPE! -Dkeyman_core_tests=true --werror %1 %2 %3 %4 %5 %6 %7 %8 %9 || exit !errorlevel! ) shift ) @@ -103,7 +123,6 @@ if "!COMMAND!" == "test" ( cd ..\..\.. shift ) - goto :eof rem ---------------------------------- diff --git a/core/build.sh b/core/build.sh index 1defefe13b..acfff38d1b 100755 --- a/core/build.sh +++ b/core/build.sh @@ -32,6 +32,7 @@ case $BUILDER_OS in ":win Both x86 and x64" ":x86 32-bit Windows (x86) build" ":x64 64-bit Windows (x64) build" + ":arm64 64-bit Windows (arm64) build" ) ;; mac) @@ -96,12 +97,14 @@ builder_describe_internal_dependency \ build:mac build:mac-x86_64 \ build:mac build:mac-arm64 \ build:win build:x86 \ - build:win build:x64 + build:win build:x64 \ + build:win build:arm64 \ builder_describe_outputs \ configure:win /core/build/win/$BUILDER_CONFIGURATION/ \ configure:x86 /core/build/x86/$BUILDER_CONFIGURATION/build.ninja \ configure:x64 /core/build/x64/$BUILDER_CONFIGURATION/build.ninja \ + configure:arm64 /core/build/arm64/$BUILDER_CONFIGURATION/build.ninja \ configure:mac /core/build/mac/$BUILDER_CONFIGURATION/ \ configure:mac-x86_64 /core/build/mac-x86_64/$BUILDER_CONFIGURATION/build.ninja \ configure:mac-arm64 /core/build/mac-arm64/$BUILDER_CONFIGURATION/build.ninja \ @@ -110,6 +113,7 @@ builder_describe_outputs \ build:win /core/build/win/$BUILDER_CONFIGURATION/BUILT \ build:x86 /core/build/x86/$BUILDER_CONFIGURATION/src/libkeymancore.a \ build:x64 /core/build/x64/$BUILDER_CONFIGURATION/src/libkeymancore.a \ + build:arm64 /core/build/arm64/$BUILDER_CONFIGURATION/src/libkeymancore.a \ build:mac /core/build/mac/$BUILDER_CONFIGURATION/libkeymancore.a \ build:mac-x86_64 /core/build/mac-x86_64/$BUILDER_CONFIGURATION/src/libkeymancore.a \ build:mac-arm64 /core/build/mac-arm64/$BUILDER_CONFIGURATION/src/libkeymancore.a \ @@ -130,7 +134,7 @@ fi # Iterate through all possible targets; note that targets that cannot be built # on the current platform have already been excluded through the archtargets # settings above -targets=(wasm x86 x64 mac-x86_64 mac-arm64 arch) +targets=(wasm x86 x64 arm64 mac-x86_64 mac-arm64 arch) do_action() { local action_function=do_$1 @@ -191,6 +195,10 @@ if builder_start_action test:win; then meson test -C "$MESON_PATH" $testparams MESON_PATH="$KEYMAN_ROOT/core/build/x64/$BUILDER_CONFIGURATION" meson test -C "$MESON_PATH" $testparams + # We do not yet have CI/build hardware support for arm64 Windows testing + #MESON_PATH="$KEYMAN_ROOT/core/build/arm64/$BUILDER_CONFIGURATION" + #meson test -C "$MESON_PATH" $testparams + builder_finish_action success test:win fi diff --git a/core/commands.inc.sh b/core/commands.inc.sh index 73ad033a8e..4584b2dfd6 100644 --- a/core/commands.inc.sh +++ b/core/commands.inc.sh @@ -50,7 +50,7 @@ do_configure() { STANDARD_MESON_ARGS="$STANDARD_MESON_ARGS --cross-file wasm.defs.build --cross-file wasm.build --default-library static" fi - if [[ $target =~ ^(x86|x64)$ ]]; then + if [[ $target =~ ^(x86|x64|arm64)$ ]]; then cmd //C build.bat $target $BUILDER_CONFIGURATION configure $BUILD_BAT_keyman_core_tests "${builder_extra_params[@]}" else pushd "$THIS_SCRIPT_PATH" > /dev/null @@ -69,7 +69,7 @@ do_configure() { do_build() { local target=$1 builder_start_action build:$target || return 0 - if [[ $target =~ ^(x86|x64)$ ]]; then + if [[ $target =~ ^(x86|x64|arm64)$ ]]; then cmd //C build.bat $target $BUILDER_CONFIGURATION build "${builder_extra_params[@]}" elif $MESON_LOW_VERSION; then pushd "$MESON_PATH" > /dev/null @@ -88,7 +88,7 @@ do_build() { do_test() { local target=$1 builder_start_action test:$target || return 0 - if [[ $target =~ ^(x86|x64)$ ]]; then + if [[ $target =~ ^(x86|x64|arm64)$ ]]; then cmd //C build.bat $target $BUILDER_CONFIGURATION test $testparams else if [[ $target == wasm ]] && builder_is_macos; then diff --git a/core/cross-arm64.build b/core/cross-arm64.build new file mode 100644 index 0000000000..9fd7cc6d14 --- /dev/null +++ b/core/cross-arm64.build @@ -0,0 +1,13 @@ +[host_machine] +system = 'windows' +cpu_family = 'aarch64' +cpu = 'arm64' +endian = 'little' + +[binaries] +c = 'cl' +cpp = 'cl' +ar = 'lib' +ld = 'link' +strip = 'llvm-strip' # optional; MSVC doesn’t have a native strip +pkgconfig = 'pkg-config' # optional; used only if you have pkg-config installed diff --git a/core/cross-x64.build b/core/cross-x64.build new file mode 100644 index 0000000000..df3ab0b5dc --- /dev/null +++ b/core/cross-x64.build @@ -0,0 +1,13 @@ +[host_machine] +system = 'windows' +cpu_family = 'x86_64' +cpu = 'x86_64' +endian = 'little' + +[binaries] +c = 'cl' +cpp = 'cl' +ar = 'lib' +ld = 'link' +strip = 'llvm-strip' +pkgconfig = 'pkg-config' diff --git a/oem/firstvoices/windows/src/inst/build.sh b/oem/firstvoices/windows/src/inst/build.sh index cad414d39b..930779e082 100755 --- a/oem/firstvoices/windows/src/inst/build.sh +++ b/oem/firstvoices/windows/src/inst/build.sh @@ -74,7 +74,7 @@ function do_publish() { -sice:ICE82 -sice:ICE80 \ -dWixUILicenseRtf=License.rtf \ -out firstvoices.msi \ - -ext WixUIExtension firstvoices.wixobj desktopui.wixobj + -ext WixUIExtension -ext WixUtilExtension firstvoices.wixobj desktopui.wixobj # # Sign the installation archive diff --git a/oem/firstvoices/windows/src/inst/firstvoices.wxs b/oem/firstvoices/windows/src/inst/firstvoices.wxs index ad5b02e15c..a23285383e 100644 --- a/oem/firstvoices/windows/src/inst/firstvoices.wxs +++ b/oem/firstvoices/windows/src/inst/firstvoices.wxs @@ -1,5 +1,5 @@  - + + + + + @@ -179,6 +184,7 @@ 1 + diff --git a/resources/build/ci/cancel-builds/trigger_definitions.mjs b/resources/build/ci/cancel-builds/trigger_definitions.mjs index aef0526688..4c5728f2c4 100644 --- a/resources/build/ci/cancel-builds/trigger_definitions.mjs +++ b/resources/build/ci/cancel-builds/trigger_definitions.mjs @@ -4,7 +4,7 @@ export const testBuildConfigurations = { 'ios': ['Keyman_iOS_TestPullRequests', 'Keyman_iOS_TestSamplesAndTestProjects'], 'linux': ['KeymanLinux_TestPullRequests', 'Keyman_Linux_Test_Integration', 'Keyman_Common_KPAPI_TestPullRequests_Linux', 'deb-pr-packaging_GitHub'], 'mac': ['Keyman_KeymanMac_PullRequests', 'Keyman_Common_KPAPI_TestPullRequests_macOS'], - 'windows': ['KeymanDesktop_TestPullRequests', 'KeymanDesktop_TestPrRenderOnScreenKeyboards', 'Keyman_Common_KPAPI_TestPullRequests_Windows'], + 'windows': ['KeymanDesktop_TestPullRequests', 'KeymanDesktop_TestPrRenderOnScreenKeyboards', 'Keyman_Common_KPAPI_TestPullRequests_Windows', 'core-arm64-windows-test_GitHub'], 'web': ['Keymanweb_TestPullRequests', 'Keyman_Common_KPAPI_TestPullRequests_WASM'], 'developer': ['Keyman_Developer_Test', 'npm-publish_GitHub'], diff --git a/resources/build/ci/trigger-definitions.inc.sh b/resources/build/ci/trigger-definitions.inc.sh index ab08734804..aeded92eb4 100644 --- a/resources/build/ci/trigger-definitions.inc.sh +++ b/resources/build/ci/trigger-definitions.inc.sh @@ -87,7 +87,7 @@ bc_test_android=(KeymanAndroid_TestPullRequests KeymanAndroid_TestSamplesAndTest bc_test_ios=(Keyman_iOS_TestPullRequests Keyman_iOS_TestSamplesAndTestProjects) bc_test_linux=(KeymanLinux_TestPullRequests Keyman_Linux_Test_Integration Keyman_Common_KPAPI_TestPullRequests_Linux deb-pr-packaging_GitHub) bc_test_mac=(Keyman_KeymanMac_PullRequests Keyman_Common_KPAPI_TestPullRequests_macOS) -bc_test_windows=(KeymanDesktop_TestPullRequests KeymanDesktop_TestPrRenderOnScreenKeyboards Keyman_Common_KPAPI_TestPullRequests_Windows) +bc_test_windows=(KeymanDesktop_TestPullRequests KeymanDesktop_TestPrRenderOnScreenKeyboards Keyman_Common_KPAPI_TestPullRequests_Windows core-arm64-windows-test_GitHub) bc_test_web=(Keymanweb_TestPullRequests Keyman_Common_KPAPI_TestPullRequests_WASM) bc_test_developer=(Keyman_Developer_Test Keyman_Test_Developer_Mac Keyman_Test_Developer_Linux npm-publish_GitHub) diff --git a/resources/build/win/delphi_flags.inc.sh b/resources/build/win/delphi_flags.inc.sh index 087e88c60f..91d47787f0 100644 --- a/resources/build/win/delphi_flags.inc.sh +++ b/resources/build/win/delphi_flags.inc.sh @@ -18,6 +18,8 @@ DELPHI_MSBUILD_FLAG_DEBUG="//p:Config=$TARGET_PATH" # Visual C++ x86, x64; Delphi x86 WIN32_TARGET_PATH=bin/Win32/$TARGET_PATH X64_TARGET_PATH=bin/x64/$TARGET_PATH +ARM64_TARGET_PATH=bin/arm64/$TARGET_PATH +ARM64EC_TARGET_PATH=bin/ARM64EC/$TARGET_PATH # Delphi x86, x64 # WIN32_TARGET_PATH=... diff --git a/windows/src/.gitignore b/windows/src/.gitignore index 065f4a07f3..6b0e59d699 100644 --- a/windows/src/.gitignore +++ b/windows/src/.gitignore @@ -7,9 +7,13 @@ **/obj/Win32/ **/obj/Win64/ **/obj/x64/ +**/obj/arm64/ +**/obj/ARM64EC/ **/bin/Win32/ **/bin/Win64/ **/bin/x64/ +**/bin/arm64/ +**/bin/ARM64EC/ # Temporary build files for VC++ **/*.FileListAbsolute.txt @@ -17,7 +21,7 @@ # These files are generated during build engine/keyman32/KEYMAN32.res engine/keyman32/Keyman64.res -engine/keymanx64/keymanx64.res +engine/keymanhp/keymanx64.res engine/mcompile/Release/ tds_file.txt global/delphi/cust/MessageIdentifierConsts.pas diff --git a/windows/src/README.md b/windows/src/README.md index b18b626dc0..ee1f5c1da7 100644 --- a/windows/src/README.md +++ b/windows/src/README.md @@ -1,5 +1,11 @@ # Keyman for Windows +## Platforms + +* x86 (most host processes) +* x64 +* ARM + ## Build Prerequisites * See [Windows Build Environment Configuration](../../docs/build/windows.md). diff --git a/windows/src/desktop/branding/keymandesktop90-arm.ico b/windows/src/desktop/branding/keymandesktop90-arm.ico new file mode 100644 index 0000000000..f43ba466f0 Binary files /dev/null and b/windows/src/desktop/branding/keymandesktop90-arm.ico differ diff --git a/windows/src/desktop/branding/keymandesktop90-64.ico b/windows/src/desktop/branding/keymandesktop90-x64.ico similarity index 81% rename from windows/src/desktop/branding/keymandesktop90-64.ico rename to windows/src/desktop/branding/keymandesktop90-x64.ico index 8e403bfaae..738084a5bc 100644 Binary files a/windows/src/desktop/branding/keymandesktop90-64.ico and b/windows/src/desktop/branding/keymandesktop90-x64.ico differ diff --git a/windows/src/desktop/inst/build.sh b/windows/src/desktop/inst/build.sh index 14da0b7427..9d5a47a9c6 100755 --- a/windows/src/desktop/inst/build.sh +++ b/windows/src/desktop/inst/build.sh @@ -74,7 +74,7 @@ function do_publish() { -nologo \ -dWixUILicenseRtf=License.rtf \ "$WIXLIGHTCOMPRESSION" \ - -out keymandesktop.msi -ext WixUIExtension \ + -out keymandesktop.msi -ext WixUIExtension -ext WixUtilExtension \ keymandesktop.wixobj desktopui.wixobj cef.wixobj locale.wixobj # @@ -147,7 +147,7 @@ function do_candle() { function heat-cef() { builder_heading heat-cef - # We copy the files to a temp folder in order to exclude .git and README.md from harvesting + # We copy the files to a temp folder in order to exclude .git from harvesting rm -rf "$KEYMAN_WIX_TEMP_CEF" mkdir -p "$KEYMAN_WIX_TEMP_CEF" cp -r "$KEYMAN_CEF4DELPHI_ROOT"/* "$KEYMAN_WIX_TEMP_CEF" @@ -156,7 +156,6 @@ function heat-cef() { rm -rf "$KEYMAN_WIX_TEMP_CEF" } - function create-setup-inf() { builder_heading create-setup-inf diff --git a/windows/src/desktop/inst/keymandesktop.wxs b/windows/src/desktop/inst/keymandesktop.wxs index 27e0a02e4d..cbbe651d3d 100644 --- a/windows/src/desktop/inst/keymandesktop.wxs +++ b/windows/src/desktop/inst/keymandesktop.wxs @@ -1,5 +1,5 @@  - + + + + + @@ -326,6 +331,7 @@ 1 + diff --git a/windows/src/engine/README.md b/windows/src/engine/README.md index 5a4f1ab2b1..3436f07b05 100644 --- a/windows/src/engine/README.md +++ b/windows/src/engine/README.md @@ -11,17 +11,19 @@ The installation merge module database for the Keyman Engine. Host application for the Keyman Engine. Shows the Keyman icon, Keyman menu, OSK, and handles language switching etc, as well as running the windows hooks to capture and translate keystrokes. -## keyman32 - keyman32.dll, keyman64.dll +## keyman32 - keyman32.dll | keyman64.dll | keymanarm64.dll -Main keyboard processing library and hook library (x86, x64). +Main keyboard processing library and hook library (x86, x64, arm64). ## keymanmc - keymanmc.dll Message library for Windows events. -## keymanx64 - keymanx64.exe +## keymanhp - keymanhp.x64.exe | keymanhp.arm64.exe -64-bit version of keyman.exe. All UI is in keyman.exe, so this is a thin wrapper around the keyman32 build. +64-bit versions of keyman.exe. All UI is in keyman.exe, so this is a thin wrapper around the keyman32 build. One is for x64 CPU architecture and the other Arm64. + +In v18.0 and earlier, this was called keymanx64.exe. ## kmcomapi - kmcomapi.dll | kmcomapi.x64.dll @@ -31,11 +33,15 @@ This is the public COM API library, used by keyman.exe, kmshell.exe, and various A helper app to refresh Windows language settings, due to a bug in Windows; read ../kmrefresh/kmrefresh.cpp for details. -## kmtip - kmtip.dll | kmtip64.dll +## kmtip - kmtip.dll | kmtip64.dll | kmtiparm64x.dll Implementation of a Text Service for the Text Services Framework (TSF). This implementation is named Keyman TIP. Architecturally it sits between the TSF Manager and Keyman.exe +kmtiparm64x.dll is built as an Arm64X file. It supports both x64 and arm64 on a +Windows on Arm machine. kmtip64.dll is therefore only used on Windows x64 Machines. +See the [kmtip README](kmtip/README.md) for deeper description of kmtip*.dll. + ## mcompile - mcompile.exe A tool to recompile keyboard layouts after install to map to various European Latin script keyboard layouts diff --git a/windows/src/engine/build.sh b/windows/src/engine/build.sh index 524ad91437..1a8125b543 100755 --- a/windows/src/engine/build.sh +++ b/windows/src/engine/build.sh @@ -19,7 +19,7 @@ builder_describe \ ":keyman Main host process (32 bit)" \ ":keyman32 Keystroke processing engine (all archs)" \ ":keymanmc Message library" \ - ":keymanx64 Host process (64 bit)" \ + ":keymanhp Host process (64 bit)" \ ":kmcomapi COM API library" \ ":kmrefresh Helper app to refresh Windows language settings" \ ":kmtip Text Services Framework Text Input Processor" \ diff --git a/windows/src/engine/engine.sln b/windows/src/engine/engine.sln index 2bc81be7c0..ab1506ae28 100644 --- a/windows/src/engine/engine.sln +++ b/windows/src/engine/engine.sln @@ -1,11 +1,11 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31313.79 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36623.8 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keyman32", "keyman32\Keyman32.vcxproj", "{BD5564FB-35A5-4A3C-B96A-4A6578E2B593}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keymanx64", "keymanx64\keymanx64.vcxproj", "{A34650EA-D6E8-4229-8091-6BF1443565B5}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keymanhp", "keymanhp\keymanhp.vcxproj", "{A34650EA-D6E8-4229-8091-6BF1443565B5}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kmtip", "kmtip\kmtip.vcxproj", "{93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}" EndProject @@ -19,66 +19,122 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testhost", "testhost\testho EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM64 = Debug|ARM64 + Debug|ARM64EC = Debug|ARM64EC Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Release|ARM64 = Release|ARM64 + Release|ARM64EC = Release|ARM64EC Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Debug|ARM64.Build.0 = Debug|ARM64 + {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Debug|ARM64EC.ActiveCfg = Debug|x64 {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Debug|Win32.ActiveCfg = Debug|Win32 {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Debug|Win32.Build.0 = Debug|Win32 {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Debug|x64.ActiveCfg = Debug|x64 {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Debug|x64.Build.0 = Debug|x64 + {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Release|ARM64.ActiveCfg = Release|ARM64 + {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Release|ARM64.Build.0 = Release|ARM64 + {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Release|ARM64EC.ActiveCfg = Release|x64 {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Release|Win32.ActiveCfg = Release|Win32 {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Release|Win32.Build.0 = Release|Win32 {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Release|x64.ActiveCfg = Release|x64 {BD5564FB-35A5-4A3C-B96A-4A6578E2B593}.Release|x64.Build.0 = Release|x64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|ARM64.Build.0 = Debug|ARM64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|ARM64EC.ActiveCfg = Debug|x64 {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|Win32.ActiveCfg = Debug|x64 {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|x64.ActiveCfg = Debug|x64 {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|x64.Build.0 = Debug|x64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|ARM64.ActiveCfg = Release|ARM64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|ARM64.Build.0 = Release|ARM64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|ARM64EC.ActiveCfg = Release|x64 {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|Win32.ActiveCfg = Release|x64 {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|x64.ActiveCfg = Release|x64 {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|x64.Build.0 = Release|x64 + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|ARM64.Build.0 = Debug|ARM64 + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|ARM64EC.Build.0 = Debug|ARM64EC {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|Win32.ActiveCfg = Debug|Win32 {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|Win32.Build.0 = Debug|Win32 {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|x64.ActiveCfg = Debug|x64 {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|x64.Build.0 = Debug|x64 + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|ARM64.ActiveCfg = Release|ARM64 + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|ARM64.Build.0 = Release|ARM64 + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|ARM64EC.Build.0 = Release|ARM64EC {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|Win32.ActiveCfg = Release|Win32 {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|Win32.Build.0 = Release|Win32 {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|x64.ActiveCfg = Release|x64 {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|x64.Build.0 = Release|x64 + {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Debug|ARM64.ActiveCfg = Debug|Win32 + {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Debug|ARM64.Build.0 = Debug|Win32 + {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Debug|ARM64EC.ActiveCfg = Debug|Win32 + {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Debug|ARM64EC.Build.0 = Debug|Win32 {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Debug|Win32.ActiveCfg = Debug|Win32 {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Debug|Win32.Build.0 = Debug|Win32 {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Debug|x64.ActiveCfg = Debug|Win32 + {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Release|ARM64.ActiveCfg = Release|Win32 + {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Release|ARM64.Build.0 = Release|Win32 + {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Release|ARM64EC.ActiveCfg = Release|Win32 + {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Release|ARM64EC.Build.0 = Release|Win32 {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Release|Win32.ActiveCfg = Release|Win32 {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Release|Win32.Build.0 = Release|Win32 {5C22DDDA-CEAD-45F1-96B0-1473111156AA}.Release|x64.ActiveCfg = Release|Win32 + {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Debug|ARM64.Build.0 = Debug|ARM64 + {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Debug|ARM64EC.ActiveCfg = Debug|x64 {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Debug|Win32.ActiveCfg = Debug|Win32 {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Debug|Win32.Build.0 = Debug|Win32 {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Debug|x64.ActiveCfg = Debug|x64 {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Debug|x64.Build.0 = Debug|x64 + {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Release|ARM64.ActiveCfg = Release|ARM64 + {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Release|ARM64.Build.0 = Release|ARM64 + {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Release|ARM64EC.ActiveCfg = Release|x64 {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Release|Win32.ActiveCfg = Release|Win32 {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Release|Win32.Build.0 = Release|Win32 {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Release|x64.ActiveCfg = Release|x64 {A3B8F75F-E63E-434E-8A2A-034AD9B66571}.Release|x64.Build.0 = Release|x64 + {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Debug|ARM64.Build.0 = Debug|ARM64 + {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Debug|Win32.ActiveCfg = Debug|Win32 {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Debug|Win32.Build.0 = Debug|Win32 {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Debug|x64.ActiveCfg = Debug|x64 {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Debug|x64.Build.0 = Debug|x64 + {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Release|ARM64.ActiveCfg = Release|ARM64 + {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Release|ARM64.Build.0 = Release|ARM64 + {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Release|ARM64EC.ActiveCfg = Release|ARM64EC {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Release|Win32.ActiveCfg = Release|Win32 {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Release|Win32.Build.0 = Release|Win32 {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Release|x64.ActiveCfg = Release|x64 {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}.Release|x64.Build.0 = Release|x64 + {A7069186-5AE7-4504-8926-861B7A34BA9E}.Debug|ARM64.ActiveCfg = Debug|Win32 + {A7069186-5AE7-4504-8926-861B7A34BA9E}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC {A7069186-5AE7-4504-8926-861B7A34BA9E}.Debug|Win32.ActiveCfg = Debug|Win32 {A7069186-5AE7-4504-8926-861B7A34BA9E}.Debug|Win32.Build.0 = Debug|Win32 {A7069186-5AE7-4504-8926-861B7A34BA9E}.Debug|x64.ActiveCfg = Debug|Win32 + {A7069186-5AE7-4504-8926-861B7A34BA9E}.Release|ARM64.ActiveCfg = Release|ARM64 + {A7069186-5AE7-4504-8926-861B7A34BA9E}.Release|ARM64EC.ActiveCfg = Release|ARM64EC {A7069186-5AE7-4504-8926-861B7A34BA9E}.Release|Win32.ActiveCfg = Release|Win32 {A7069186-5AE7-4504-8926-861B7A34BA9E}.Release|Win32.Build.0 = Release|Win32 {A7069186-5AE7-4504-8926-861B7A34BA9E}.Release|x64.ActiveCfg = Release|Win32 + {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Debug|ARM64.Build.0 = Debug|ARM64 + {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC + {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Debug|ARM64EC.Build.0 = Debug|ARM64EC {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Debug|Win32.ActiveCfg = Debug|Win32 {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Debug|Win32.Build.0 = Debug|Win32 {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Debug|x64.ActiveCfg = Debug|x64 {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Debug|x64.Build.0 = Debug|x64 + {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Release|ARM64.ActiveCfg = Release|ARM64 + {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Release|ARM64.Build.0 = Release|ARM64 + {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Release|ARM64EC.Build.0 = Release|ARM64EC {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Release|Win32.ActiveCfg = Release|Win32 {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Release|Win32.Build.0 = Release|Win32 {12818DA3-0472-49A5-96FC-A4808A1A77FA}.Release|x64.ActiveCfg = Release|x64 diff --git a/windows/src/engine/inst/components.wxs b/windows/src/engine/inst/components.wxs index 22d383eb35..726644d9e8 100644 --- a/windows/src/engine/inst/components.wxs +++ b/windows/src/engine/inst/components.wxs @@ -137,8 +137,20 @@ - - + + + WIX_NATIVE_MACHINE = 43620 + + + + + + + + + + WIX_NATIVE_MACHINE = 43620 + @@ -226,12 +238,21 @@ + - VersionNT64 + + WIX_NATIVE_MACHINE = 34404 - + + + + + WIX_NATIVE_MACHINE = 43620 + + + @@ -245,13 +266,13 @@ - + - + - + diff --git a/windows/src/engine/keyman/UfrmKeyman7Main.pas b/windows/src/engine/keyman/UfrmKeyman7Main.pas index 16806bb7ad..8fdb620318 100644 --- a/windows/src/engine/keyman/UfrmKeyman7Main.pas +++ b/windows/src/engine/keyman/UfrmKeyman7Main.pas @@ -268,7 +268,7 @@ type //procedure SnapToolHelp; procedure RecreateTaskbarIcons; function StartKeymanEngine: Boolean; - procedure StartKeymanX64; + procedure StartKeymanHostProcess(ProcessName: string); procedure OpenTextEditor; //function GetCachedKeymanID(hkl: DWORD): DWORD; procedure ShowLanguageSwitchForm; @@ -379,6 +379,10 @@ const skSelectHKLOnly = 3; // Select the requested Windows language and turn Keyman keyboard off skTSF = 4; // A TSF TIP +const + KM_HP_X64 = 'keymanhp.x64.exe'; + KM_HP_ARM64 = 'keymanhp.arm64.exe'; + implementation uses @@ -1350,7 +1354,8 @@ begin else kmint.KeymanEngineControl.RestartEngine; // I1486 - StartKeymanX64; + if IsWow64 then StartKeymanHostProcess(KM_HP_X64); // I4374 + if IsNativeMachineArm64 then StartKeymanHostProcess(KM_HP_ARM64); end; @@ -1979,17 +1984,16 @@ begin FLangSwitchRefreshWatcher.Start; end; -procedure TfrmKeyman7Main.StartKeymanX64; +procedure TfrmKeyman7Main.StartKeymanHostProcess(ProcessName: string); var cmd, dir, params: string; sei: TShellExecuteInfoW; begin - if not IsWow64 then Exit; // I4374 try - // TODO: use TKeymanPaths to find keymanx64? - dir := ExtractFilePath(ParamStr(0)); - cmd := dir + 'keymanx64.exe'; + dir := TKeymanPaths.KeymanEngineInstallDir; + cmd := TKeymanPaths.KeymanEngineInstallPath(ProcessName); + params := Format('%d %d', [GetCurrentProcessId, Application.Handle]); if not FileExists(cmd) then @@ -2013,7 +2017,7 @@ begin begin // We're going to handle any exceptions here but we'd like to know that // they happened - TKeymanSentryClient.ReportHandledException(E, 'Error starting keymanx64', True); + TKeymanSentryClient.ReportHandledException(E, 'Error starting ' + ProcessName, True); end; end; end; diff --git a/windows/src/engine/keyman32/DebugEventTrace.cpp b/windows/src/engine/keyman32/DebugEventTrace.cpp index 43089de363..97bd0bee23 100644 --- a/windows/src/engine/keyman32/DebugEventTrace.cpp +++ b/windows/src/engine/keyman32/DebugEventTrace.cpp @@ -2,12 +2,15 @@ #include "pch.h" #include "keyman-debug-etw.h" -#ifdef _WIN64 -#define DEBUG_PLATFORM_STRING "x64" -#define DEBUG_PLATFORM_STRINGW L"x64" +#if defined(_M_ARM64) + #define DEBUG_PLATFORM_STRING "arm64" + #define DEBUG_PLATFORM_STRINGW L"arm64" +#elif defined(_M_X64) + #define DEBUG_PLATFORM_STRING "x64" + #define DEBUG_PLATFORM_STRINGW L"x64" #else -#define DEBUG_PLATFORM_STRING "x86" -#define DEBUG_PLATFORM_STRINGW L"x86" + #define DEBUG_PLATFORM_STRING "x86" + #define DEBUG_PLATFORM_STRINGW L"x86" #endif #define TAB L"\t" @@ -113,10 +116,12 @@ extern "C" void _declspec(dllexport) WINAPI Keyman_WriteDebugEvent2W(PWCHAR file #define MAX_DESCRIPTORS 12 EVENT_DATA_DESCRIPTOR Descriptors[MAX_DESCRIPTORS]; -#ifdef _WIN64 - DWORD platform = 2; +#if defined(_M_ARM64) + DWORD platform = 3; +#elif defined(_M_X64) + DWORD platform = 2; #else - DWORD platform = 1; + DWORD platform = 1; #endif diff --git a/windows/src/engine/keyman32/build.sh b/windows/src/engine/keyman32/build.sh index 408632481e..e48ec3919f 100755 --- a/windows/src/engine/keyman32/build.sh +++ b/windows/src/engine/keyman32/build.sh @@ -9,7 +9,7 @@ builder_describe "Keystroke processing engine" \ @/common/include \ @/core:win \ clean configure build test publish install \ - :x86 :x64 + :x86 :x64 :arm64 builder_parse "$@" @@ -18,11 +18,13 @@ builder_parse "$@" source "$KEYMAN_ROOT/resources/build/win/environment.inc.sh" WIN32_TARGET="$WIN32_TARGET_PATH/keyman32.dll" X64_TARGET="$X64_TARGET_PATH/keyman64.dll" +ARM64_TARGET="$ARM64_TARGET_PATH/keymanarm64.dll" builder_describe_outputs \ configure /resources/build/win/delphi_environment_generated.inc.sh \ build:x86 /windows/src/engine/keyman32/$WIN32_TARGET \ build:x64 /windows/src/engine/keyman32/$X64_TARGET \ + build:arm64 /windows/src/engine/keyman32/$ARM64_TARGET \ #------------------------------------------------------------------------------------------------------------------- @@ -36,6 +38,11 @@ function do_clean_x64() { clean_windows_project_files } +function do_clean_arm64() { + vs_msbuild keyman32.vcxproj //t:Clean //p:Platform=arm64 + clean_windows_project_files +} + function do_configure() { # Install NuGet packages for keyman32.test.vcxproj run_in_vs_env msbuild.exe tests/keyman32.tests.vcxproj -t:Restore "-clp:Verbosity=minimal" -nologo "-p:RestorePackagesConfig=true" @@ -58,6 +65,14 @@ function do_build_x64() { builder_if_release_build_level cp "$X64_TARGET_PATH/keyman64.pdb" "$WINDOWS_DEBUGPATH_ENGINE" } +function do_build_arm64() { + create-windows-output-folders + run_in_vs_env rc version64.rc + vs_msbuild keyman32.vcxproj //t:Build "//p:Platform=arm64" + cp "$ARM64_TARGET" "$WINDOWS_PROGRAM_ENGINE" + builder_if_release_build_level cp "$ARM64_TARGET_PATH/keymanarm64.pdb" "$WINDOWS_DEBUGPATH_ENGINE" +} + function do_publish_x86() { wrap-signcode //d "Keyman Engine for Windows" "$WINDOWS_PROGRAM_ENGINE/keyman32.dll" wrap-symstore "$WINDOWS_PROGRAM_ENGINE/keyman32.dll" //t keyman-engine-windows @@ -70,6 +85,12 @@ function do_publish_x64() { wrap-symstore "$WINDOWS_DEBUGPATH_ENGINE/keyman64.pdb" //t keyman-engine-windows } +function do_publish_arm64() { + wrap-signcode //d "Keyman Engine for Windows" "$WINDOWS_PROGRAM_ENGINE/keymanarm64.dll" + wrap-symstore "$WINDOWS_PROGRAM_ENGINE/keymanarm64.dll" //t keyman-engine-windows + wrap-symstore "$WINDOWS_DEBUGPATH_ENGINE/keymanarm64.pdb" //t keyman-engine-windows +} + function do_install_x86() { cp "$WINDOWS_PROGRAM_ENGINE/keyman32.dll" "$INSTALLPATH_KEYMANENGINE/keyman32.dll" echo "You may want to manually tweak keyman-debug-etw.man and fill in $INSTALLPATH_KEYMANENGINE/keyman32.dll" @@ -80,6 +101,10 @@ function do_install_x64() { cp "$WINDOWS_PROGRAM_ENGINE/keyman64.dll" "$INSTALLPATH_KEYMANENGINE/keyman64.dll" } +function do_install_arm64() { + cp "$WINDOWS_PROGRAM_ENGINE/keymanarm64.dll" "$INSTALLPATH_KEYMANENGINE/keymanarm64.dll" +} + # Parameters: # 1: Platform = Win32 | x64 # Note Platform should not be 'x86' but rather 'Win32' for 32-bit @@ -108,13 +133,24 @@ function do_test() { builder_run_action clean:x86 do_clean_x86 builder_run_action clean:x64 do_clean_x64 +builder_run_action clean:arm64 do_clean_arm64 + builder_run_action configure do_configure builder_run_action build:x86 do_build_x86 builder_run_action build:x64 do_build_x64 +builder_run_action build:arm64 do_build_arm64 + builder_run_action test:x86 do_test Win32 builder_run_action test:x64 do_test x64 +# Next line is currently disabled until we do processor-level checks on the executable, +# as we have no arm64 build agents yet (#15065) +# builder_run_action test:arm64 do_test arm64 + builder_run_action publish:x86 do_publish_x86 builder_run_action publish:x64 do_publish_x64 +builder_run_action publish:arm64 do_publish_arm64 + builder_run_action install:x86 do_install_x86 builder_run_action install:x64 do_install_x64 +builder_run_action install:arm64 do_install_arm64 diff --git a/windows/src/engine/keyman32/glossary.cpp b/windows/src/engine/keyman32/glossary.cpp index 4561aa2671..9d21b81847 100644 --- a/windows/src/engine/keyman32/glossary.cpp +++ b/windows/src/engine/keyman32/glossary.cpp @@ -48,7 +48,7 @@ BOOL HKLIsIME(HKL hkl) // I1498 - fix keyboard switching for shadow keyboards o HKL ForceKeymanIDToHKL(DWORD KeymanID) // I3191 // I3526 { #ifdef _WIN64 - return (HKL) (LONG_PTR) (INT64) (LONG) KeymanID; // Sign extension for x64 + return (HKL) (LONG_PTR) (INT64) (LONG) KeymanID; // Sign extension for 64-bit #else return (HKL) (DWORD_PTR) KeymanID; #endif diff --git a/windows/src/engine/keyman32/keyman32.cpp b/windows/src/engine/keyman32/keyman32.cpp index 924fd397fb..312865c61f 100644 --- a/windows/src/engine/keyman32/keyman32.cpp +++ b/windows/src/engine/keyman32/keyman32.cpp @@ -633,7 +633,7 @@ void HandleRefresh(int code, LONG tag) if (UpdateRefreshTag(tag)) { #ifdef _WIN64 if (Globals::get_InitialisingThread() == GetCurrentThreadId()) { - // If this is the keymanx64 thread, then we should + // If this is the keyman.x64 or keymanarm64 thread, then we should // go ahead and process the refresh immediately so // that global settings are updated RefreshKeyboards(FALSE); diff --git a/windows/src/engine/keyman32/keyman32.vcxproj b/windows/src/engine/keyman32/keyman32.vcxproj index d865fcef44..5d246b7bbe 100644 --- a/windows/src/engine/keyman32/keyman32.vcxproj +++ b/windows/src/engine/keyman32/keyman32.vcxproj @@ -1,809 +1,1177 @@ - - - - - Debug Static Library - Win32 - - - Debug Static Library - x64 - - - Debug - Win32 - - - Debug - x64 - - - Release Static Library - Win32 - - - Release Static Library - x64 - - - Release - Win32 - - - Release - x64 - - - - {BD5564FB-35A5-4A3C-B96A-4A6578E2B593} - Keyman32 - 10.0 - keyman32 - - - - DynamicLibrary - false - v143 - - - StaticLibrary - false - v143 - - - DynamicLibrary - false - v143 - - - StaticLibrary - false - v143 - - - DynamicLibrary - false - v143 - - - StaticLibrary - false - v143 - - - DynamicLibrary - false - v143 - - - StaticLibrary - false - v143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)lib\bin\$(Platform)\Release\ - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)lib\bin\$(Platform)\Release\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - $(ProjectDir)lib\obj\$(Platform)\Release\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - $(ProjectDir)lib\obj\$(Platform)\Release\ - false - false - false - false - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)lib\bin\$(Platform)\Debug\ - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)lib\bin\$(Platform)\Debug\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - $(ProjectDir)lib\obj\$(Platform)\Debug\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - $(ProjectDir)lib\obj\$(Platform)\Debug\ - true - true - true - true - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - - - - - - - - - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - AllRules.ruleset - - - - - - - - - - - $(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\src;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) - $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\include;$(IncludePath) - keyman32 - - - $(ProjectDir)..\..\..\..\core\build\x86\Debug\src;$(ProjectDir)..\..\..\..\core\build\x86\Debug\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x86\Debug\subprojects\icu\source\i18n;$(LibraryPath) - $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x86\Debug\include;$(IncludePath) - keyman32 - - - $(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\src;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\i18n;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64) - $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\include;$(IncludePath) - keyman64 - - - $(ProjectDir)..\..\..\..\core\build\x64\Debug\src;$(ProjectDir)..\..\..\..\core\build\x64\Debug\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x64\Debug\subprojects\icu\source\i18n;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64) - $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x64\Debug\include;$(IncludePath) - keyman64 - - - $(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\src;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) - $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\include;$(IncludePath) - keyman32 - - - $(ProjectDir)..\..\..\..\core\build\x86\Debug\src;$(ProjectDir)..\..\..\..\core\build\x86\Debug\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x86\Debug\subprojects\icu\source\i18n;$(LibraryPath) - $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x86\Release\include;$(IncludePath) - keyman32 - - - $(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\src;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\i18n;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64) - $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\include;$(IncludePath) - keyman64 - - - $(ProjectDir)..\..\..\..\core\build\x64\Release\src;$(ProjectDir)..\..\..\..\core\build\x64\Release\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x64\Release\subprojects\icu\source\i18n;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64) - $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x64\Release\include;$(IncludePath) - keyman64 - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - ./Keyman32.tlb - - - - - MaxSpeed - OnlyExplicitInline - .\;..\..\global\inc;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - - - MultiThreaded - true - Use - pch.h - All - Level4 - true - true - ProgramDatabase - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) - libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) - true - keyman32.def - true - true - false - Windows - true - true - 0x1c100000 - MachineX86 - true - true - ..\..\..\lib\keyman32.lib - - - true - ./Keyman32.bsc - - - - - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - ./Keyman32.tlb - - - - - MaxSpeed - OnlyExplicitInline - .\;..\..\global\inc;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - - - MultiThreaded - true - Use - pch.h - All - Level4 - true - true - ProgramDatabase - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) - libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) - true - keyman32.def - true - true - false - Windows - true - true - 0x1c100000 - MachineX86 - true - true - - - true - ./Keyman32.bsc - - - - - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - ./Keyman32.tlb - - - - - MaxSpeed - OnlyExplicitInline - .\;..\..\global\inc;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - - - MultiThreaded - true - Use - pch.h - All - Level4 - true - true - ProgramDatabase - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) - libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) - true - keyman64.def - true - true - false - Windows - true - true - 0x1c100000 - true - true - ..\..\..\lib\keyman64.lib - - - true - ./Keyman64.bsc - - - - - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - ./Keyman32.tlb - - - - - MaxSpeed - OnlyExplicitInline - .\;..\..\global\inc;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - - - MultiThreaded - true - Use - pch.h - All - Level4 - true - true - ProgramDatabase - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) - libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) - true - keyman64.def - true - true - false - Windows - true - true - 0x1c100000 - true - true - - - true - ./Keyman64.bsc - - - - - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - ./Keyman32.tlb - - - - - Disabled - .\;..\..\global\inc;.;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - - - MultiThreadedDebug - Use - pch.h - All - true - Level4 - true - true - EditAndContinue - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) - libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) - true - keyman32.def - true - true - Windows - 0x1C100000 - MachineX86 - true - true - ..\..\..\lib\keyman32.lib - - - true - ./Keyman32.bsc - - - - - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - ./Keyman32.tlb - - - - - Disabled - .\;..\..\global\inc;.;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - - - MultiThreadedDebug - Use - pch.h - All - true - Level4 - true - true - EditAndContinue - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) - libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) - true - keyman32.def - true - true - Windows - 0x1C100000 - MachineX86 - true - true - - - true - ./Keyman32.bsc - - - - - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - ./Keyman32.tlb - - - - - Disabled - .\;..\..\global\inc;.;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - - - MultiThreadedDebug - Use - pch.h - All - true - Level4 - true - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) - libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) - true - keyman64.def - true - true - Windows - 0x1C100000 - true - true - ..\..\..\lib\keyman64.lib - - - true - ./Keyman32.bsc - - - - - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - ./Keyman32.tlb - - - - - Disabled - .\;..\..\global\inc;.;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - - - MultiThreadedDebug - Use - pch.h - All - true - Level4 - true - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) - libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) - true - keyman64.def - true - true - Windows - 0x1C100000 - true - true - - - true - ./Keyman32.bsc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Create - Create - Create - Create - Create - Create - Create - Create - - - - - - - - - - - - - - - - Document - false - false - false - false - false - false - false - false - mc %(FullPath) - mc %(FullPath) - mc %(FullPath) - mc %(FullPath) - Compiling keyman-debug-etw - Compiling keyman-debug-etw - Compiling keyman-debug-etw - Compiling keyman-debug-etw - %(Filename).rc;%(Filename.h);MSG00001.bin - %(Filename).rc;%(Filename.h);MSG00001.bin - %(Filename).rc;%(Filename.h);MSG00001.bin - %(Filename).rc;%(Filename.h);MSG00001.bin - mc %(FullPath) - mc %(FullPath) - mc %(FullPath) - mc %(FullPath) - Compiling keyman-debug-etw - Compiling keyman-debug-etw - Compiling keyman-debug-etw - Compiling keyman-debug-etw - %(Filename).rc;%(Filename.h);MSG00001.bin - %(Filename).rc;%(Filename.h);MSG00001.bin - %(Filename).rc;%(Filename.h);MSG00001.bin - %(Filename).rc;%(Filename.h);MSG00001.bin - Designer - - - true - true - true - true - - - - - true - true - true - true - - - - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - true - true - true - true - - - true - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + Debug Static Library + ARM64 + + + Debug Static Library + Win32 + + + Debug Static Library + x64 + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release Static Library + ARM64 + + + Release Static Library + Win32 + + + Release Static Library + x64 + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {BD5564FB-35A5-4A3C-B96A-4A6578E2B593} + Keyman32 + 10.0 + keyman32 + + + + DynamicLibrary + false + v143 + + + StaticLibrary + false + v143 + + + DynamicLibrary + false + v143 + + + DynamicLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + DynamicLibrary + false + v143 + + + StaticLibrary + false + v143 + + + DynamicLibrary + false + v143 + + + DynamicLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)lib\bin\$(Platform)\Release\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)lib\bin\$(Platform)\Release\ + $(ProjectDir)lib\bin\$(Platform)\Release\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)lib\obj\$(Platform)\Release\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)lib\obj\$(Platform)\Release\ + $(ProjectDir)lib\obj\$(Platform)\Release\ + false + false + false + false + false + false + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)lib\bin\$(Platform)\Debug\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)lib\bin\$(Platform)\Debug\ + $(ProjectDir)lib\bin\$(Platform)\Debug\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)lib\obj\$(Platform)\Debug\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)lib\obj\$(Platform)\Debug\ + $(ProjectDir)lib\obj\$(Platform)\Debug\ + true + true + true + true + true + true + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + + + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + + + + + + + $(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\src;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\include;$(IncludePath) + keyman32 + + + $(ProjectDir)..\..\..\..\core\build\x86\Debug\src;$(ProjectDir)..\..\..\..\core\build\x86\Debug\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x86\Debug\subprojects\icu\source\i18n;$(LibraryPath) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x86\Debug\include;$(IncludePath) + keyman32 + + + $(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\src;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\i18n;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\include;$(IncludePath) + keyman64 + + + $(ProjectDir)..\..\..\..\core\build\ARM64\$(Configuration)\src;$(ProjectDir)..\..\..\..\core\build\ARM64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\ARM64\$(Configuration)\subprojects\icu\source\i18n;$(ProjectDir)..\..\..\..\core\build\rust\ARM64\$(Configuration);$(VC_LibraryPath_ARM64);$(WindowsSDK_LibraryPath_ARM64) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\arm64\$(Configuration)\include;$(IncludePath) + keymanarm64 + + + $(ProjectDir)..\..\..\..\core\build\x64\Debug\src;$(ProjectDir)..\..\..\..\core\build\x64\Debug\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x64\Debug\subprojects\icu\source\i18n;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x64\Debug\include;$(IncludePath) + keyman64 + + + $(ProjectDir)..\..\..\..\core\build\ARM64\Debug\src;$(ProjectDir)..\..\..\..\core\build\ARM64\Debug\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\ARM64\Debug\subprojects\icu\source\i18n;$(VC_LibraryPath_ARM64);$(WindowsSDK_LibraryPath_ARM64) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\arm64\Debug\include;$(IncludePath) + keymanarm64 + + + $(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\src;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x86\$(Configuration)\include;$(IncludePath) + keyman32 + + + $(ProjectDir)..\..\..\..\core\build\x86\Debug\src;$(ProjectDir)..\..\..\..\core\build\x86\Debug\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x86\Debug\subprojects\icu\source\i18n;$(LibraryPath) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x86\Release\include;$(IncludePath) + keyman32 + + + $(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\src;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\i18n;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x64\$(Configuration)\include;$(IncludePath) + keyman64 + + + $(ProjectDir)..\..\..\..\core\build\ARM64\$(Configuration)\src;$(ProjectDir)..\..\..\..\core\build\ARM64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\ARM64\$(Configuration)\subprojects\icu\source\i18n;$(ProjectDir)..\..\..\..\core\build\rust\ARM64\$(Configuration);$(VC_LibraryPath_ARM64);$(WindowsSDK_LibraryPath_ARM64) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\arm64\$(Configuration)\include;$(IncludePath) + keymanarm64 + + + $(ProjectDir)..\..\..\..\core\build\x64\Release\src;$(ProjectDir)..\..\..\..\core\build\x64\Release\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\x64\Release\subprojects\icu\source\i18n;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\x64\Release\include;$(IncludePath) + keyman64 + + + $(ProjectDir)..\..\..\..\core\build\ARM64\Release\src;$(ProjectDir)..\..\..\..\core\build\ARM64\Release\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\core\build\ARM64\Release\subprojects\icu\source\i18n;$(VC_LibraryPath_ARM64);$(WindowsSDK_LibraryPath_ARM64) + $(ProjectDir)..\..\..\..\common\include;$(ProjectDir)..\..\..\..\core\include;$(ProjectDir)..\..\..\..\core\build\arm64\Release\include;$(IncludePath) + keyman64 + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + ./Keyman32.tlb + + + + + MaxSpeed + OnlyExplicitInline + .\;..\..\global\inc;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + MultiThreaded + true + Use + pch.h + All + Level4 + true + true + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keyman32.def + true + true + false + Windows + true + true + 0x1c100000 + MachineX86 + true + true + ..\..\..\lib\keyman32.lib + + + true + ./Keyman32.bsc + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + ./Keyman32.tlb + + + + + MaxSpeed + OnlyExplicitInline + .\;..\..\global\inc;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + MultiThreaded + true + Use + pch.h + All + Level4 + true + true + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keyman32.def + true + true + false + Windows + true + true + 0x1c100000 + MachineX86 + true + true + + + true + ./Keyman32.bsc + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + ./Keyman32.tlb + + + + + MaxSpeed + OnlyExplicitInline + .\;..\..\global\inc;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + MultiThreaded + true + Use + pch.h + All + Level4 + true + true + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keyman64.def + true + true + false + Windows + true + true + 0x140000000 + true + true + ..\..\..\lib\keyman64.lib + + + true + ./Keyman64.bsc + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + ./Keyman32.tlb + + + + + MaxSpeed + OnlyExplicitInline + .\;..\..\global\inc;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + MultiThreaded + true + Use + pch.h + All + Level4 + true + true + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keymanarm64.def + true + true + false + Windows + true + true + 0x140000000 + true + true + ..\..\..\lib\keymanarm64.lib + + + true + ./Keymanarm64.bsc + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + ./Keyman32.tlb + + + + + MaxSpeed + OnlyExplicitInline + .\;..\..\global\inc;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + MultiThreaded + true + Use + pch.h + All + Level4 + true + true + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keyman64.def + true + true + false + Windows + true + true + 0x1c100000 + true + true + + + true + ./Keyman64.bsc + + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + ./Keyman32.tlb + + + + + MaxSpeed + OnlyExplicitInline + .\;..\..\global\inc;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + MultiThreaded + true + Use + pch.h + All + Level4 + true + true + ProgramDatabase + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keymanarm64.def + true + true + false + Windows + true + true + 0x140000000 + true + true + + + true + ./Keymanarm64.bsc + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + ./Keyman32.tlb + + + + + Disabled + .\;..\..\global\inc;.;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + MultiThreadedDebug + Use + pch.h + All + true + Level4 + true + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keyman32.def + true + true + Windows + 0x1C100000 + MachineX86 + true + true + ..\..\..\lib\keyman32.lib + + + true + ./Keyman32.bsc + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + ./Keyman32.tlb + + + + + Disabled + .\;..\..\global\inc;.;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + MultiThreadedDebug + Use + pch.h + All + true + Level4 + true + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keyman32.def + true + true + Windows + 0x1C100000 + MachineX86 + true + true + + + true + ./Keyman32.bsc + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + ./Keyman32.tlb + + + + + Disabled + .\;..\..\global\inc;.;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + MultiThreadedDebug + Use + pch.h + All + true + Level4 + true + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keyman64.def + true + true + Windows + 0x140000000 + true + true + ..\..\..\lib\keyman64.lib + + + true + ./Keyman32.bsc + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + ./Keyman32.tlb + + + + + Disabled + .\;..\..\global\inc;.;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + MultiThreadedDebug + Use + pch.h + All + true + Level4 + true + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keymanarm64.def + true + true + Windows + 0x140000000 + true + true + ..\..\..\lib\keymanarm64.lib + + + true + ./Keymanarm64.bsc + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + ./Keyman32.tlb + + + + + Disabled + .\;..\..\global\inc;.;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + MultiThreadedDebug + Use + pch.h + All + true + Level4 + true + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keyman64.def + true + true + Windows + 0x1C100000 + true + true + + + true + ./Keyman32.bsc + + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + ./Keyman32.tlb + + + + + Disabled + .\;..\..\global\inc;.;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + MultiThreadedDebug + Use + pch.h + All + true + Level4 + true + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + /verbose:lib /section:.SHARDATA,rws %(AdditionalOptions) + libicuuc.a;libicuin.a;libkeymancore.a;psapi.lib;rpcrt4.lib;version.lib;setupapi.lib;iphlpapi.lib;imm32.lib;crypt32.lib;wintrust.lib;imagehlp.lib;ws2_32.lib;%(AdditionalDependencies) + true + keymanarm64.def + true + true + Windows + 0x140000000 + true + true + + + true + ./Keymanarm64.bsc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + Create + + + + + + + + + + + + + + + + Document + false + false + false + false + false + false + false + false + false + false + false + false + mc %(FullPath) + mc %(FullPath) + mc %(FullPath) + mc %(FullPath) + mc %(FullPath) + mc %(FullPath) + Compiling keyman-debug-etw + Compiling keyman-debug-etw + Compiling keyman-debug-etw + Compiling keyman-debug-etw + Compiling keyman-debug-etw + Compiling keyman-debug-etw + %(Filename).rc;%(Filename.h);MSG00001.bin + %(Filename).rc;%(Filename.h);MSG00001.bin + %(Filename).rc;%(Filename.h);MSG00001.bin + %(Filename).rc;%(Filename.h);MSG00001.bin + %(Filename).rc;%(Filename.h);MSG00001.bin + %(Filename).rc;%(Filename.h);MSG00001.bin + mc %(FullPath) + mc %(FullPath) + mc %(FullPath) + mc %(FullPath) + mc %(FullPath) + mc %(FullPath) + Compiling keyman-debug-etw + Compiling keyman-debug-etw + Compiling keyman-debug-etw + Compiling keyman-debug-etw + Compiling keyman-debug-etw + Compiling keyman-debug-etw + %(Filename).rc;%(Filename.h);MSG00001.bin + %(Filename).rc;%(Filename.h);MSG00001.bin + %(Filename).rc;%(Filename.h);MSG00001.bin + %(Filename).rc;%(Filename.h);MSG00001.bin + %(Filename).rc;%(Filename.h);MSG00001.bin + %(Filename).rc;%(Filename.h);MSG00001.bin + Designer + + + true + true + true + true + true + true + true + true + + + + + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + + + + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + + + true + true + true + true + true + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/windows/src/engine/keyman32/keyman32.vcxproj.filters b/windows/src/engine/keyman32/keyman32.vcxproj.filters index 678197d8f1..c5b38a60d1 100644 --- a/windows/src/engine/keyman32/keyman32.vcxproj.filters +++ b/windows/src/engine/keyman32/keyman32.vcxproj.filters @@ -1,274 +1,280 @@ - - - - - {2dc5904b-4033-47e6-88ac-ebe442c06c2e} - cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90 - - - {27baf0f2-3926-4720-b5f9-045e47cd975c} - h;hpp;hxx;hm;inl;fi;fd - - - {088a2b68-c9db-41f4-9f45-37fdf758931e} - ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Source Files - - - Resource Files - - - Resource Files - - - Source Files - - - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Source Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - - \ No newline at end of file + + + + + {2dc5904b-4033-47e6-88ac-ebe442c06c2e} + cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90 + + + {27baf0f2-3926-4720-b5f9-045e47cd975c} + h;hpp;hxx;hm;inl;fi;fd + + + {088a2b68-c9db-41f4-9f45-37fdf758931e} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + Resource Files + + + Resource Files + + + Source Files + + + Source Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + diff --git a/windows/src/engine/keyman32/keyman64.h b/windows/src/engine/keyman32/keyman64.h index 4a42bb3abd..e46dad1782 100644 --- a/windows/src/engine/keyman32/keyman64.h +++ b/windows/src/engine/keyman32/keyman64.h @@ -81,10 +81,12 @@ #include "../../../../common/windows/cpp/include/xstring.h" #include "../../../../common/windows/cpp/include/legacy_kmx_memory.h" -#ifdef _WIN64 -#define LIBRARY_NAME "KEYMAN64" +#if defined(_M_ARM64) + #define LIBRARY_NAME "KEYMANARM64" +#elif defined(_M_X64) + #define LIBRARY_NAME "KEYMAN64" #else -#define LIBRARY_NAME "KEYMAN32" + #define LIBRARY_NAME "KEYMAN32" #endif #define NOT_IMPLEMENTED assert(FALSE) diff --git a/windows/src/engine/keyman32/keymanarm64.def b/windows/src/engine/keyman32/keymanarm64.def new file mode 100644 index 0000000000..8a6014675e --- /dev/null +++ b/windows/src/engine/keyman32/keymanarm64.def @@ -0,0 +1,46 @@ +LIBRARY KEYMANARM64 + +EXPORTS + Keyman_GetInitialised + Keyman_Initialise + Keyman_Exit + Keyman_GetLastActiveWindow + Keyman_GetLastFocusWindow + KMSetOutput + KMGetContext + KMQueueAction + KMDisplayIM + KMHideIM + KMGetActiveKeyboard + KMGetKeyboardPath + + TIPActivateEx + TIPActivateKeyboard + TIPProcessKey + TIPProcessKeyEx + TIPIsKeymanRunning + GetKeyboardPreservedKeys + + GetActiveKeymanID + Keyman_RegisterControllerWindow + Keyman_UnregisterControllerWindow + Keyman_RestartEngine + + Keyman_SendMasterController + Keyman_PostControllers + Keyman_PostMasterController + + Keyman_StartExit + Keyman_ResetInitialisation + + Keyman_WriteDebugEvent + Keyman_WriteDebugEventW + + Keyman_Diagnostic + + Keyman_RegisterMasterController + Keyman_UnregisterMasterController + Keyman_RegisterControllerThread + Keyman_UnregisterControllerThread + + SetCustomPostKeyCallback diff --git a/windows/src/engine/keyman32/keymanarm64.rc b/windows/src/engine/keyman32/keymanarm64.rc new file mode 100644 index 0000000000..e143be7077 --- /dev/null +++ b/windows/src/engine/keyman32/keymanarm64.rc @@ -0,0 +1 @@ +#include "versionarm64.rc" diff --git a/windows/src/engine/keyman32/serialkeyeventserver.cpp b/windows/src/engine/keyman32/serialkeyeventserver.cpp index 13e78f3836..2d738a69ad 100644 --- a/windows/src/engine/keyman32/serialkeyeventserver.cpp +++ b/windows/src/engine/keyman32/serialkeyeventserver.cpp @@ -35,7 +35,7 @@ // // Server application functionality -// This runs only in the host applications keyman.exe and keymanx64.exe +// This runs only in the host applications keyman.exe, keymanhp.x64.exe and keymanhp.arm64.exe // // TODO: refactor this into the SerialKeyEventServer class and provide getters for them diff --git a/windows/src/engine/keyman32/tests/keyman32.tests.vcxproj b/windows/src/engine/keyman32/tests/keyman32.tests.vcxproj index 6cf2c6d0fd..c749a50fee 100644 --- a/windows/src/engine/keyman32/tests/keyman32.tests.vcxproj +++ b/windows/src/engine/keyman32/tests/keyman32.tests.vcxproj @@ -1,165 +1,260 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {9e3a0b15-9312-4489-a42a-b4416f647d83} - Win32Proj - 10.0.26100.0 - Application - v143 - Unicode - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - - $(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath) - $(ProjectDir)..\lib\bin\$(Platform)\$(Configuration);$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\src;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) - true - - - $(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath) - $(ProjectDir)..\lib\bin\$(Platform)\$(Configuration);$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\src;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) - true - - - $(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath) - $(ProjectDir)..\lib\bin\$(Platform)\$(Configuration);$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\src;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) - true - - - $(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath) - $(ProjectDir)..\lib\bin\$(Platform)\$(Configuration);$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\src;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) - true - - - - - Use - pch.h - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - Level3 - - - true - Console - version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman32.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies) - - - - - Use - pch.h - Disabled - X64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - Level3 - - - true - Console - version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies) - - - - - Use - pch.h - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - Level3 - ProgramDatabase - - - true - Console - true - version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman32.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies) - true - - - - - Use - pch.h - X64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - Level3 - ProgramDatabase - - - true - Console - true - version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies) - true - - - - - - - - - - - - - - Create - Create - Create - Create - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - \ No newline at end of file + + + + + Debug + ARM64 + + + Debug + ARM64EC + + + Debug + Win32 + + + Release + ARM64 + + + Release + ARM64EC + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {46399ED7-79A1-4E7E-BD96-4B1AEEC838AE} + Win32Proj + 10.0.26100.0 + Application + v143 + Unicode + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + $(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath) + $(ProjectDir)..\lib\bin\$(Platform)\$(Configuration);$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\src;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) + true + + + $(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath) + $(ProjectDir)..\lib\bin\$(Platform)\$(Configuration);$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\src;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) + true + + + $(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath) + $(ProjectDir)..\lib\bin\$(Platform)\$(Configuration);$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\src;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) + true + + + $(ProjectDir)..\..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\..\core\build\x64\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\..\core\include;$(ProjectDir)..\..\..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\i18n;$(ProjectDir)..\..\..\..\global\inc;$(ProjectDir)..\..;$(IncludePath) + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + $(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\arm64\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath) + $(ProjectDir)..\lib\bin\$(Platform)\$(Configuration);$(ProjectDir)..\..\..\..\..\core\build\arm64\$(Configuration)\src;$(ProjectDir)..\..\..\..\..\core\build\arm64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\..\core\build\arm64\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) + true + + + $(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath) + $(ProjectDir)..\lib\bin\$(Platform)\$(Configuration);$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\src;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\common;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\subprojects\icu\source\i18n;$(LibraryPath) + true + + + + + Use + pch.h + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level3 + + + true + Console + version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman32.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies) + + + + + Use + pch.h + Disabled + X64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level3 + + + true + Console + version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies) + + + + + Use + pch.h + Disabled + X64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level3 + + + true + Console + + + + + Use + pch.h + Disabled + X64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + Level3 + + + true + Console + version.lib;psapi.lib;imm32.lib;libkeymancore.a;keymanarm64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies) + + + + + Use + pch.h + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + Level3 + ProgramDatabase + + + true + Console + true + version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman32.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies) + true + + + + + Use + pch.h + X64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + Level3 + ProgramDatabase + + + true + Console + true + version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies) + true + + + + + Use + pch.h + X64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + Level3 + ProgramDatabase + + + true + Console + true + true + + + + + Use + pch.h + X64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + Level3 + ProgramDatabase + + + true + Console + true + version.lib;psapi.lib;imm32.lib;libkeymancore.a;keymanarm64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies) + true + + + + + + + + + + + + + Create + Create + Create + Create + Create + Create + Create + Create + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + diff --git a/windows/src/engine/keyman32/versionarm64.rc b/windows/src/engine/keyman32/versionarm64.rc new file mode 100644 index 0000000000..a2f3332e59 --- /dev/null +++ b/windows/src/engine/keyman32/versionarm64.rc @@ -0,0 +1,32 @@ +#include "../../../../common/windows/cpp/include/keymanversion.h" + +1 VERSIONINFO + FILEVERSION KV_FILEVERSION + PRODUCTVERSION KV_PRODUCTVERSION + FILEFLAGSMASK 0x3fL + FILEFLAGS 0x0L + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "0C0904E4" + BEGIN + VALUE "CompanyName", KV_COMPANY_NAME + VALUE "FileDescription", "Keyman Engine Processor Arm64\0" + VALUE "FileVersion", KV_VERSION_STRING + VALUE "InternalName", "KEYMANARM64\0" + VALUE "LegalCopyright", KV_LEGAL_COPYRIGHT + VALUE "LegalTrademarks", KV_LEGAL_TRADEMARKS + VALUE "OriginalFilename", "KEYMANARM64.DLL\0" + VALUE "ProductName", "Keyman Engine\0" + VALUE "ProductVersion", KV_VERSION_STRING + VALUE "Comments", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0xc09, 1252 + END + END diff --git a/windows/src/engine/keymanhp/build.sh b/windows/src/engine/keymanhp/build.sh new file mode 100755 index 0000000000..cd76151210 --- /dev/null +++ b/windows/src/engine/keymanhp/build.sh @@ -0,0 +1,102 @@ +#!/usr/bin/env bash +## START STANDARD BUILD SCRIPT INCLUDE +# adjust relative paths as necessary +THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" +. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" +## END STANDARD BUILD SCRIPT INCLUDE + +builder_describe "Keyman main host process (64-bit)" \ + @/common/include \ + clean configure build test publish install \ + :x64 :arm64 + +builder_parse "$@" + +#------------------------------------------------------------------------------------------------------------------- + +source "$KEYMAN_ROOT/resources/build/win/environment.inc.sh" +X64_TARGET="$X64_TARGET_PATH/keymanhp.x64.exe" +ARM64_TARGET="$ARM64_TARGET_PATH/keymanhp.arm64.exe" + +builder_describe_outputs \ + configure /resources/build/win/delphi_environment_generated.inc.sh \ + build:x64 /windows/src/engine/keymanhp/$X64_TARGET \ + build:arm64 /windows/src/engine/keymanhp/$ARM64_TARGET + +#------------------------------------------------------------------------------------------------------------------- + +function do_clean_x64() { + vs_msbuild keymanhp.vcxproj //t:Clean //p:Platform=x64 + clean_windows_project_files +} + +function do_clean_arm64() { + vs_msbuild keymanhp.vcxproj //t:Clean //p:Platform=arm64 + clean_windows_project_files +} + +function do_build_x64() { + create-windows-output-folders + run_in_vs_env rc versionx64.rc + sed "s/Keyman Engine HP/Keyman Engine x64/g; + s/arch64/amd64/g" manifesthp.in > manifest.in + build_manifest.res + vs_msbuild keymanhp.vcxproj //t:Build "//p:Platform=x64" + cp "$X64_TARGET" "$WINDOWS_PROGRAM_ENGINE" + builder_if_release_build_level cp "$X64_TARGET_PATH/keymanhp.x64.pdb" "$WINDOWS_DEBUGPATH_ENGINE" + rm manifest.in +} + +function do_build_arm64() { + create-windows-output-folders + run_in_vs_env rc versionarm64.rc + sed "s/Keyman Engine HP/Keyman Engine arm64/g; + s/arch64/arm64/g" manifesthp.in > manifest.in + build_manifest.res + vs_msbuild keymanhp.vcxproj //t:Build "//p:Platform=arm64" + cp "$ARM64_TARGET" "$WINDOWS_PROGRAM_ENGINE" + builder_if_release_build_level cp "$ARM64_TARGET_PATH/keymanhp.arm64.pdb" "$WINDOWS_DEBUGPATH_ENGINE" + rm manifest.in +} + +function do_publish_x64() { + wrap-mt -nologo -inputresource:"$WINDOWS_PROGRAM_ENGINE/keymanhp.x64.exe" -validate_manifest + wrap-mt -nologo -inputresource:"$WINDOWS_PROGRAM_ENGINE/keymanhp.x64.exe" -out:temp.manifest + grep -q 'uiAccess="true"' temp.manifest || builder_die 'uiAccess must be set to true in manifest.xml' + rm -f temp.manifest + + wrap-signcode //d "Keyman Engine for Windows" "$WINDOWS_PROGRAM_ENGINE/keymanhp.x64.exe" + wrap-symstore "$WINDOWS_PROGRAM_ENGINE/keymanhp.x64.exe" //t keyman-engine-windows + wrap-symstore "$WINDOWS_DEBUGPATH_ENGINE/keymanhp.x64.pdb" //t keyman-engine-windows +} + +function do_publish_arm64() { + wrap-mt -nologo -inputresource:"$WINDOWS_PROGRAM_ENGINE/keymanhp.arm64.exe" -validate_manifest + wrap-mt -nologo -inputresource:"$WINDOWS_PROGRAM_ENGINE/keymanhp.arm64.exe" -out:temp.manifest + grep -q 'uiAccess="true"' temp.manifest || builder_die 'uiAccess must be set to true in manifest.xml' + rm -f temp.manifest + + wrap-signcode //d "Keyman Engine for Windows" "$WINDOWS_PROGRAM_ENGINE/keymanhp.arm64.exe" + wrap-symstore "$WINDOWS_PROGRAM_ENGINE/keymanhp.arm64.exe" //t keyman-engine-windows + wrap-symstore "$WINDOWS_DEBUGPATH_ENGINE/keymanhp.arm64.pdb" //t keyman-engine-windows +} + +function do_install_x64() { + cp "$WINDOWS_PROGRAM_ENGINE/keymanhp.x64.exe" "$INSTALLPATH_KEYMANENGINE/keymanhp.x64.exe" +} + +function do_install_arm64() { + cp "$WINDOWS_PROGRAM_ENGINE/keymanhp.arm64.exe" "$INSTALLPATH_KEYMANENGINE/keymanhp.arm64.exe" +} + + +builder_run_action clean:x64 do_clean_x64 +builder_run_action clean:arm64 do_clean_arm64 +builder_run_action configure configure_windows_build_environment +builder_run_action build:x64 do_build_x64 +builder_run_action build:arm64 do_build_arm64 +# builder_run_action test:project do_test +builder_run_action publish:x64 do_publish_x64 +builder_run_action publish:arm64 do_publish_arm64 +builder_run_action install:x64 do_install_x64 +builder_run_action install:arm64 do_install_arm64 diff --git a/windows/src/engine/keymanhp/keymanarm64.rc b/windows/src/engine/keymanhp/keymanarm64.rc new file mode 100644 index 0000000000..10604c3df6 --- /dev/null +++ b/windows/src/engine/keymanhp/keymanarm64.rc @@ -0,0 +1,6 @@ +// Microsoft Visual C++ generated resource script. +// +#include "versionarm64.rc" +#include "manifest.rc" +1 ICON "..\\..\\desktop\\branding\\keymandesktop90-arm.ico" + diff --git a/windows/src/engine/keymanx64/keymanx64.cpp b/windows/src/engine/keymanhp/keymanhp.cpp similarity index 92% rename from windows/src/engine/keymanx64/keymanx64.cpp rename to windows/src/engine/keymanhp/keymanhp.cpp index 2a551d3803..81d386c000 100644 --- a/windows/src/engine/keymanx64/keymanx64.cpp +++ b/windows/src/engine/keymanhp/keymanhp.cpp @@ -1,5 +1,5 @@ /* - Name: keymanx64 + Name: keymanhp Copyright: Copyright (C) SIL International. Documentation: Description: @@ -21,8 +21,10 @@ 17 Jan 2013 - mcdurdin - I3758 - V9.0 - keymanx64 can find incorrect window handle for keyman.exe 25 Oct 2016 - mcdurdin - I5136 - Remove additional product references from Keyman Engine */ -#include "keymanx64.h" // I5136 -#include "../../../../common/windows/cpp/include/keymansentry.h" +#include "keymanhp.h" // I5136 +#if defined(_M_X64) + #include "../../../../common/windows/cpp/include/keymansentry.h" +#endif // Forward declarations of functions included in this code module @@ -62,25 +64,36 @@ HANDLE hWatcherThreadTerminateEvent = NULL; BOOL KeymanStarted = FALSE; // Global strings +#if defined(_M_X64) + #define WINDOW_TITLE L"Keymanhp-x64" + #define EXECUTABLE_TITLE L"Keyman Engine x64" + #define ARCH_LOG_FILE ".keymanhp-x64" +#elif defined(_M_ARM64) + #define WINDOW_TITLE L"Keymanhp-arm64" + #define EXECUTABLE_TITLE L"Keyman Engine Arm64" + #define ARCH_LOG_FILE ".keymanhp-arm64" +#else + #error Unknown architecture +#endif const PWSTR - szWindowClass = L"Keymanx64", // Do not localize - szWindowTitle = L"Keymanx64", // Do not localize + szWindowClass = WINDOW_TITLE, // Do not localize + szWindowTitle = WINDOW_TITLE, // Do not localize - szTitle = L"Keyman Engine x64", - szError_Keymanx86NotFound = L"Keyman Engine x86 is not running. Do not run keymanx64.exe -- it must be started by Keyman Engine x86", - szError_Keymanx86NotFound_Comms = L"Keyman Engine x86 has closed unexpectedly. Closing down Keyman Engine x64", + szTitle = EXECUTABLE_TITLE, + szError_Keymanx86NotFound = L"Keyman Engine x86 is not running. Do not run keymanhp.*.exe -- it must be started by Keyman Engine x86", + szError_Keymanx86NotFound_Comms = L"Keyman Engine x86 has closed unexpectedly. Closing down Keyman Engine hp64", szError_FailedToRegisterController = L"Failed to register controller window", - szError_FailedToInitialise = L"Failed to initialise Keyman Engine x64", + szError_FailedToInitialise = L"Failed to initialise Keyman Engine hp", szError_FailedToFindParentProcess = L"Unable to open parent process; it may have disappeared", szError_ChangeWindowMessageFilter = L"Failed to prepare message filters", - szError_CannotRunMultipleInstances = L"Only one instance of Keyman Engine x64 can run at a time", + szError_CannotRunMultipleInstances = L"Only one instance of Keyman Engine hp can run at a time", szError_FailedToRegister = L"Failed to register window class", szError_FailedToInitInstance = L"Failed to initialise application", - szError_InvalidCommandline = L"Incorrect command line for Keyman Engine x64; should be passed handle of Keyman Engine x86", + szError_InvalidCommandline = L"Incorrect command line for Keyman Engine hp; should be passed handle of Keyman Engine x86", szError_WatcherThreadFailed = L"Failed to create watcher thread", szFail_UnknownError = L"Unknown error %d", @@ -90,8 +103,7 @@ const PWSTR szWindowClass_x86_Wnd = L"TfrmKeyman7Main"; // Do not localize //const char *szGPA_ChangeWindowMessageFilter = "ChangeWindowMessageFilter"; // Do not localize - -#define KEYMAN_SENTRY_LOGGER_DESKTOP_ENGINE_KEYMANX64 KEYMAN_SENTRY_LOGGER_DESKTOP_ENGINE ".keymanx64" +#define KEYMAN_SENTRY_LOGGER_DESKTOP_ENGINE_KEYMANHP KEYMAN_SENTRY_LOGGER_DESKTOP_ENGINE ARCH_LOG_FILE // // FUNCTION: _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int @@ -100,7 +112,8 @@ const PWSTR // // COMMENTS: // -// A mutex is used to ensure only one instance of Keyman Engine x64 +// A mutex is used to ensure only one instance of Keyman Engine HP +// for each architecture. // int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, @@ -108,8 +121,8 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); - - keyman_sentry_init(false, KEYMAN_SENTRY_LOGGER_DESKTOP_ENGINE_KEYMANX64); +#if defined(_M_X64) + keyman_sentry_init(false, KEYMAN_SENTRY_LOGGER_DESKTOP_ENGINE_KEYMANHP); keyman_sentry_setexceptionfilter(); // We used the 'Started' event when testing Sentry integration in 14.0 alpha @@ -119,10 +132,12 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, if (!wcscmp(lpCmdLine, L"-sentry-client-test-exception")) { keyman_sentry_test_crash(); } +#endif BOOL result = Run(hInstance, lpCmdLine, nCmdShow); - +#if defined(_M_X64) keyman_sentry_shutdown(); +#endif return result ? 0 : 1; } @@ -270,7 +285,9 @@ BOOL Fail(HWND hwnd, PWSTR msg) if (WideCharToMultiByte(CP_UTF8, 0, outbuf, -1, buffer, (int) sz, NULL, NULL) != 0) { buffer[sz - 1] = 0; - keyman_sentry_report_message(KEYMAN_SENTRY_LEVEL_ERROR, buffer, true); + #if defined(_M_X64) + keyman_sentry_report_message(KEYMAN_SENTRY_LEVEL_ERROR, buffer, true); + #endif } free(buffer); diff --git a/windows/src/engine/keymanx64/keymanx64.h b/windows/src/engine/keymanhp/keymanhp.h similarity index 97% rename from windows/src/engine/keymanx64/keymanx64.h rename to windows/src/engine/keymanhp/keymanhp.h index fcfb81faaf..28a1f391d5 100644 --- a/windows/src/engine/keymanx64/keymanx64.h +++ b/windows/src/engine/keymanhp/keymanhp.h @@ -1,5 +1,5 @@ /* - Name: keymanx64 + Name: keymanhp Copyright: Copyright (C) SIL International. Documentation: Description: diff --git a/windows/src/engine/keymanhp/keymanhp.sln b/windows/src/engine/keymanhp/keymanhp.sln new file mode 100644 index 0000000000..1444a36031 --- /dev/null +++ b/windows/src/engine/keymanhp/keymanhp.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36705.20 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keymanhp", "keymanhp.vcxproj", "{A34650EA-D6E8-4229-8091-6BF1443565B5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|ARM64.Build.0 = Debug|ARM64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|x64.ActiveCfg = Debug|x64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|x64.Build.0 = Debug|x64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|ARM64.ActiveCfg = Release|ARM64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|ARM64.Build.0 = Release|ARM64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|x64.ActiveCfg = Release|x64 + {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/windows/src/engine/keymanhp/keymanhp.vcxproj b/windows/src/engine/keymanhp/keymanhp.vcxproj new file mode 100644 index 0000000000..3aedb14b70 --- /dev/null +++ b/windows/src/engine/keymanhp/keymanhp.vcxproj @@ -0,0 +1,298 @@ + + + + + Debug + ARM64 + + + Debug + x64 + + + Release + ARM64 + + + Release + x64 + + + + {A34650EA-D6E8-4229-8091-6BF1443565B5} + keymanhp + Win32Proj + 10.0 + keymanhp + + + + Application + Unicode + true + v143 + + + Application + Unicode + true + v143 + + + Application + Unicode + v143 + + + Application + Unicode + v143 + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + true + true + false + false + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + false + false + false + false + AllRules.ruleset + AllRules.ruleset + + + + + AllRules.ruleset + AllRules.ruleset + + + + + *.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.tlog;*.manifest;*.res;*.pch;*.exp;*.idb;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.sbr;*.metagen;*.bi + *.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.tlog;*.manifest;*.res;*.pch;*.exp;*.idb;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.sbr;*.metagen;*.bi + *.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.tlog;*.manifest;*.res;*.pch;*.exp;*.idb;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.sbr;*.metagen;*.bi + *.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.tlog;*.manifest;*.res;*.pch;*.exp;*.idb;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.sbr;*.metagen;*.bi + + + keymanhp.x64 + + + keymanhp.x64 + + + keymanhp.arm64 + + + keymanhp.arm64 + + + keymanhp.x64 + + + keymanhp.x64 + + + + X64 + + + Disabled + ..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + true + EnableFastChecks + MultiThreadedDebug + + + Level4 + true + ProgramDatabase + true + + + ..\..\..\..\common\windows\delphi\ext\sentry\sentry.x64.lib;keyman64.lib;libcmtd.lib;%(AdditionalDependencies) + ..\..\..\lib;%(AdditionalLibraryDirectories) + false + true + Windows + MachineX64 + true + sentry.dll + + + + + + + + + + + + + + + + Disabled + ..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + true + EnableFastChecks + MultiThreadedDebug + + + Level4 + true + ProgramDatabase + true + + + keymanarm64.lib;libcmtd.lib;%(AdditionalDependencies) + ..\..\..\lib;%(AdditionalLibraryDirectories) + false + true + Windows + true + sentry.dll + + + + + + + + + + + + + + + X64 + + + ..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + MultiThreaded + + + Level4 + true + ProgramDatabase + true + + + ..\..\..\..\common\windows\delphi\ext\sentry\sentry.x64.lib;keyman64.lib;libcmt.lib;%(AdditionalDependencies) + ..\..\..\lib;%(AdditionalLibraryDirectories) + false + true + Windows + true + true + MachineX64 + true + true + sentry.dll + + + + + + + + + + + + + + ..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + MultiThreaded + + + Level4 + true + ProgramDatabase + true + + + keymanarm64.lib;libcmt.lib;%(AdditionalDependencies) + ..\..\..\lib;%(AdditionalLibraryDirectories) + false + true + Windows + true + true + true + true + sentry.dll + + + + + + + + + + + + + true + true + + + + + + true + true + + + + + + + true + true + + + true + true + + + + + + diff --git a/windows/src/engine/keymanx64/keymanx64.vcxproj.filters b/windows/src/engine/keymanhp/keymanhp.vcxproj.filters similarity index 88% rename from windows/src/engine/keymanx64/keymanx64.vcxproj.filters rename to windows/src/engine/keymanhp/keymanhp.vcxproj.filters index dfdca2da64..7c736dcc17 100644 --- a/windows/src/engine/keymanx64/keymanx64.vcxproj.filters +++ b/windows/src/engine/keymanhp/keymanhp.vcxproj.filters @@ -15,7 +15,7 @@ - + Source Files @@ -23,7 +23,7 @@ - + Header Files @@ -37,5 +37,8 @@ Resource Files + + Resource Files + \ No newline at end of file diff --git a/windows/src/engine/keymanhp/keymanx64.rc b/windows/src/engine/keymanhp/keymanx64.rc new file mode 100644 index 0000000000..c9fd8a110d --- /dev/null +++ b/windows/src/engine/keymanhp/keymanx64.rc @@ -0,0 +1,6 @@ +// Microsoft Visual C++ generated resource script. +// +#include "versionx64.rc" +#include "manifest.rc" +1 ICON "..\\..\\desktop\\branding\\keymandesktop90-x64.ico" + diff --git a/windows/src/engine/keymanx64/manifest.rc b/windows/src/engine/keymanhp/manifest.rc similarity index 100% rename from windows/src/engine/keymanx64/manifest.rc rename to windows/src/engine/keymanhp/manifest.rc diff --git a/windows/src/engine/keymanx64/manifest.in b/windows/src/engine/keymanhp/manifesthp.in similarity index 90% rename from windows/src/engine/keymanx64/manifest.in rename to windows/src/engine/keymanhp/manifesthp.in index 6b3306a54c..5fd0c12875 100644 --- a/windows/src/engine/keymanx64/manifest.in +++ b/windows/src/engine/keymanhp/manifesthp.in @@ -1,7 +1,7 @@ - - Keyman Engine x64 + + Keyman Engine HP diff --git a/windows/src/engine/keymanx64/resource.h b/windows/src/engine/keymanhp/resource.h similarity index 100% rename from windows/src/engine/keymanx64/resource.h rename to windows/src/engine/keymanhp/resource.h diff --git a/windows/src/engine/keymanhp/versionarm64.rc b/windows/src/engine/keymanhp/versionarm64.rc new file mode 100644 index 0000000000..b65463f9e5 --- /dev/null +++ b/windows/src/engine/keymanhp/versionarm64.rc @@ -0,0 +1,32 @@ +#include "../../../../common/windows/cpp/include/keymanversion.h" + +1 VERSIONINFO + FILEVERSION KV_FILEVERSION + PRODUCTVERSION KV_PRODUCTVERSION + FILEFLAGSMASK 0x3fL + FILEFLAGS 0x0L + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L + BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "0C0904E4" + BEGIN + VALUE "CompanyName", KV_COMPANY_NAME + VALUE "FileDescription", "Keyman Engine Arm64\0" + VALUE "FileVersion", KV_VERSION_STRING + VALUE "InternalName", "KEYMANHP.ARM64\0" + VALUE "LegalCopyright", KV_LEGAL_COPYRIGHT + VALUE "LegalTrademarks", KV_LEGAL_TRADEMARKS + VALUE "OriginalFilename", "KEYMANHP.ARM64.EXE\0" + VALUE "ProductName", "Keyman Engine\0" + VALUE "ProductVersion", KV_VERSION_STRING + VALUE "Comments", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0xc09, 1252 + END + END diff --git a/windows/src/engine/keymanx64/version.rc b/windows/src/engine/keymanhp/versionx64.rc similarity index 88% rename from windows/src/engine/keymanx64/version.rc rename to windows/src/engine/keymanhp/versionx64.rc index 80133aa7f2..2c159ea87a 100644 --- a/windows/src/engine/keymanx64/version.rc +++ b/windows/src/engine/keymanhp/versionx64.rc @@ -16,10 +16,10 @@ VALUE "CompanyName", KV_COMPANY_NAME VALUE "FileDescription", "Keyman Engine x64\0" VALUE "FileVersion", KV_VERSION_STRING - VALUE "InternalName", "KEYMANX64\0" + VALUE "InternalName", "KEYMANHP.X64\0" VALUE "LegalCopyright", KV_LEGAL_COPYRIGHT VALUE "LegalTrademarks", KV_LEGAL_TRADEMARKS - VALUE "OriginalFilename", "KEYMANX64.EXE\0" + VALUE "OriginalFilename", "KEYMANHP.X64.EXE\0" VALUE "ProductName", "Keyman Engine\0" VALUE "ProductVersion", KV_VERSION_STRING VALUE "Comments", "\0" diff --git a/windows/src/engine/keymanx64/build.sh b/windows/src/engine/keymanx64/build.sh deleted file mode 100755 index b893b07b26..0000000000 --- a/windows/src/engine/keymanx64/build.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash -## START STANDARD BUILD SCRIPT INCLUDE -# adjust relative paths as necessary -THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")" -. "${THIS_SCRIPT%/*}/../../../../resources/build/builder-full.inc.sh" -## END STANDARD BUILD SCRIPT INCLUDE - -builder_describe "Keyman main host process (64-bit)" \ - @/common/include \ - clean configure build test publish install - -builder_parse "$@" - -#------------------------------------------------------------------------------------------------------------------- - -source "$KEYMAN_ROOT/resources/build/win/environment.inc.sh" -X64_TARGET="$X64_TARGET_PATH/keymanx64.exe" - -builder_describe_outputs \ - configure:project /resources/build/win/delphi_environment_generated.inc.sh \ - build:project /windows/src/engine/keymanx64/$X64_TARGET - -#------------------------------------------------------------------------------------------------------------------- - -function do_clean() { - vs_msbuild keymanx64.vcxproj //t:Clean - clean_windows_project_files -} - -function do_build() { - create-windows-output-folders - build_version.res - build_manifest.res - vs_msbuild keymanx64.vcxproj //t:Build "//p:Platform=x64" - cp "$X64_TARGET" "$WINDOWS_PROGRAM_ENGINE" - builder_if_release_build_level cp "$X64_TARGET_PATH/keymanx64.pdb" "$WINDOWS_DEBUGPATH_ENGINE" -} - -function do_publish() { - wrap-mt -nologo -inputresource:"$WINDOWS_PROGRAM_ENGINE/keyman.exe" -validate_manifest - wrap-mt -nologo -inputresource:"$WINDOWS_PROGRAM_ENGINE/keyman.exe" -out:temp.manifest - grep -q 'uiAccess="true"' temp.manifest || builder_die 'uiAccess must be set to true in manifest.xml' - rm -f temp.manifest - - wrap-signcode //d "Keyman Engine for Windows" "$WINDOWS_PROGRAM_ENGINE/keymanx64.exe" - wrap-symstore "$WINDOWS_PROGRAM_ENGINE/keymanx64.exe" //t keyman-engine-windows - wrap-symstore "$WINDOWS_DEBUGPATH_ENGINE/keymanx64.pdb" //t keyman-engine-windows -} - -builder_run_action clean:project do_clean -builder_run_action configure:project configure_windows_build_environment -builder_run_action build:project do_build -# builder_run_action test:project do_test -builder_run_action publish:project do_publish -builder_run_action install:project cp "$WINDOWS_PROGRAM_ENGINE/keymanx64.exe" "$INSTALLPATH_KEYMANENGINE/keymanx64.exe" diff --git a/windows/src/engine/keymanx64/keymanx64.rc b/windows/src/engine/keymanx64/keymanx64.rc deleted file mode 100644 index 124704538b..0000000000 --- a/windows/src/engine/keymanx64/keymanx64.rc +++ /dev/null @@ -1,6 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "version.rc" -#include "manifest.rc" -1 ICON "..\\..\\desktop\\branding\\keymandesktop90-64.ico" - diff --git a/windows/src/engine/keymanx64/keymanx64.sln b/windows/src/engine/keymanx64/keymanx64.sln deleted file mode 100644 index 053e713d7f..0000000000 --- a/windows/src/engine/keymanx64/keymanx64.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keymanx64", "keymanx64.vcxproj", "{A34650EA-D6E8-4229-8091-6BF1443565B5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|x64.ActiveCfg = Debug|x64 - {A34650EA-D6E8-4229-8091-6BF1443565B5}.Debug|x64.Build.0 = Debug|x64 - {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|x64.ActiveCfg = Release|x64 - {A34650EA-D6E8-4229-8091-6BF1443565B5}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/windows/src/engine/keymanx64/keymanx64.vcxproj b/windows/src/engine/keymanx64/keymanx64.vcxproj deleted file mode 100644 index 2fd5955560..0000000000 --- a/windows/src/engine/keymanx64/keymanx64.vcxproj +++ /dev/null @@ -1,153 +0,0 @@ - - - - - Debug - x64 - - - Release - x64 - - - - {A34650EA-D6E8-4229-8091-6BF1443565B5} - keymanx64 - Win32Proj - 10.0 - - - - Application - Unicode - true - v143 - - - Application - Unicode - v143 - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - true - false - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - false - false - AllRules.ruleset - - - AllRules.ruleset - - - *.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.tlog;*.manifest;*.res;*.pch;*.exp;*.idb;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.sbr;*.metagen;*.bi - *.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.tlog;*.manifest;*.res;*.pch;*.exp;*.idb;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.sbr;*.metagen;*.bi - - - - X64 - - - Disabled - ..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - false - true - EnableFastChecks - MultiThreadedDebug - - - Level4 - true - ProgramDatabase - true - - - ..\..\..\..\common\windows\delphi\ext\sentry\sentry.x64.lib;keyman64.lib;libcmtd.lib;%(AdditionalDependencies) - ..\..\..\lib;%(AdditionalLibraryDirectories) - false - true - Windows - MachineX64 - true - sentry.dll - - - - - - - - - - - - - - - X64 - - - ..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - false - MultiThreaded - - - Level4 - true - ProgramDatabase - true - - - ..\..\..\..\common\windows\delphi\ext\sentry\sentry.x64.lib;keyman64.lib;libcmt.lib;%(AdditionalDependencies) - ..\..\..\lib;%(AdditionalLibraryDirectories) - false - true - Windows - true - true - MachineX64 - true - true - sentry.dll - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/windows/src/engine/kmrefresh/kmrefresh.vcxproj b/windows/src/engine/kmrefresh/kmrefresh.vcxproj index 0b252895f7..447137a859 100644 --- a/windows/src/engine/kmrefresh/kmrefresh.vcxproj +++ b/windows/src/engine/kmrefresh/kmrefresh.vcxproj @@ -1,157 +1,222 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 15.0 - {A3B8F75F-E63E-434E-8A2A-034AD9B66571} - kmrefresh - 10.0 - - - - Application - true - Unicode - v143 - - - Application - false - true - Unicode - v143 - - - Application - true - Unicode - v143 - - - Application - false - true - Unicode - v143 - - - - - - - - - - - - - - - - - - - - - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectName).x64 - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - $(ProjectName).x86 - - - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - $(ProjectName).x86 - - - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectName).x64 - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - - Level3 - Disabled - true - true - MultiThreadedDebug - - - Windows - - - - - Level3 - Disabled - true - true - MultiThreadedDebug - - - Windows - - - - - Level3 - MaxSpeed - true - true - true - true - MultiThreaded - - - Windows - true - true - - - - - Level3 - MaxSpeed - true - true - true - true - MultiThreaded - - - Windows - true - true - - - - - - - - - - - - \ No newline at end of file + + + + + Debug + ARM64 + + + Debug + Win32 + + + Release + ARM64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {A3B8F75F-E63E-434E-8A2A-034AD9B66571} + kmrefresh + 10.0 + + + + Application + true + Unicode + v143 + + + Application + false + true + Unicode + v143 + + + Application + true + Unicode + v143 + + + Application + true + Unicode + v143 + + + Application + false + true + Unicode + v143 + + + Application + false + true + Unicode + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectName).x64 + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectName).x64 + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectName).x86 + + + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectName).x86 + + + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectName).x64 + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectName).x64 + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + + Level3 + Disabled + true + true + MultiThreadedDebug + + + Windows + + + + + Level3 + Disabled + true + true + MultiThreadedDebug + + + Windows + + + + + Level3 + Disabled + true + true + MultiThreadedDebug + + + Windows + + + + + Level3 + MaxSpeed + true + true + true + true + MultiThreaded + + + Windows + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + MultiThreaded + + + Windows + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + MultiThreaded + + + Windows + true + true + + + + + + + + + + + + diff --git a/windows/src/engine/kmtip/README.md b/windows/src/engine/kmtip/README.md new file mode 100644 index 0000000000..2d6a515293 --- /dev/null +++ b/windows/src/engine/kmtip/README.md @@ -0,0 +1,105 @@ + +## Overview + +`kmtip` is an implementation of a Text Service for the Text Services Framework +(TSF). This implementation is named Keyman Text Input Processor (TIP). Architecturally +it sits between the TSF Manager and Keyman.exe. + +## Background + +### 1. The "Mixed Architecture" Environment + +Windows on both amd64(x86-64) and on Arm devices can run applications of differing architectures simultaneously: + +On amd64 Devices: +* **Native x64 apps:** (e.g., Windows Explorer, Notepad, Edge). +* **x86 apps (WOW64):** (32-bit legacy apps). + +On Arm Devices: +* **Native Arm64 apps:** (e.g., Windows Explorer, Notepad, Edge). +* **Emulated x64 apps:** (e.g., Older desktop applications). +* **Emulated x86 apps:** (32-bit legacy apps). + +A Text Input Processor (TIP) is a plugin that gets **loaded directly into the +process space** of the application currently receiving text input. Therefore, +the TIP DLL must match the architecture of the application it is running in. +Setting all this up is different on Windows on Arm and Windows on amd64 +devices. + + +## kmtip.dll and kmtip64.dll - On amd64 Devices + +On 64-bit Windows, there is a single registry entry (COM CLSID) for a 64-bit +TIP: **kmtip64.dll**. +`HKLM\SOFTWARE\Classes\CLSID` + +For 32-bit applications, there exists a WOW6432Node in the Windows registry +that allows a different DLL to be registered for the same Class ID: +**kmtip.dll**. +`HKLM\SOFTWARE\WOW6432Node\Classes\CLSID` +It is essentially two views of the registry depending on whether +the application is 32-bit or 64-bit. + + +## kmtiparm64x.dll - Arm64 Devices + +### Single Registry Entry Problem for the two 64-bit architectures + +On Windows on Arm there is a problem because there is only a single registry +entry for the **64-bit** CLSID. This means it is not possible to register both an +amd64 DLL and an Arm64 DLL, for example **kmtip64.dll** and +**kmtiparm64.dll**. (For 32-bit apps there is still the WOW6432Node that +registers `kmtip.dll`.) + +* If we register a standard **Arm64** DLL, x64 apps will crash or fail to load + it because they cannot load a pure Arm64 binary. +* If we register a standard **x64** DLL, native Arm64 apps will fail to load + it. + +### The Solution: Arm64X + +**Arm64X** is a PE (Portable Executable) binary format. It is a dual-architecture +library capable of servicing both native Arm64 applications and emulated x64 +applications on Windows on Arm (WoA) devices. + +`kmtiparm64x.dll` solves this problem by using the **Arm64X** format. It +contains two complete sets of code within a single file: + +1. **Arm64 Code:** Used when the DLL is loaded by a native Arm64 process. +2. **Arm64EC (Emulation Compatible) Code:** Used when the DLL is loaded by an + x64 process. + * *Note: Arm64EC code runs at native speed but uses x64 data structures and + calling conventions, allowing it to interoperate seamlessly with the x64 + host app.* + +### Runtime Behavior + +When an application loads `kmtiparm64x.dll`: + +* The Windows loader automatically detects the process architecture. +* **Automatic Selection:** + * If the host process is **x64**, Windows exposes the **Arm64EC** section. + The **Arm64EC** section is built against the **keyman64.dll** Keyman engine, + causing it to be loaded dynamically. + * If the host process is **Arm64**, Windows exposes the **Arm64** section. The + **Arm64** section is built against the **keymanarm64.dll** Keyman engine, + causing it to be loaded dynamically. + +* **Transparency:** The host application is unaware that the binary contains + code for other platforms; it sees only what it expects + +### Build Composition + +The `kmtiparm64x.dll` binary is the result of merging two distinct build +targets from the source: + +1. **kmtip (arm64)**: The pure native target. +2. **kmtip (arm64EC)**: The hybrid target for x64 compatibility. + +### Usage + +* **Registration:** This DLL is registered against the single Keyman TIP CLSID + for 64-bit contexts. +* **x86 Support:** Note that 32-bit (x86) applications still require the + separate `kmtip.dll` (32-bit x86 build), as they use a completely different + registry hive (WOW6432Node). diff --git a/windows/src/engine/kmtip/build.sh b/windows/src/engine/kmtip/build.sh index 082125373e..69eab410cc 100755 --- a/windows/src/engine/kmtip/build.sh +++ b/windows/src/engine/kmtip/build.sh @@ -17,10 +17,13 @@ builder_parse "$@" source "$KEYMAN_ROOT/resources/build/win/environment.inc.sh" WIN32_TARGET="$WIN32_TARGET_PATH/kmtip.dll" X64_TARGET="$X64_TARGET_PATH/kmtip64.dll" +ARM64EC_TARGET="$ARM64EC_TARGET_PATH/kmtiparm64x.dll" builder_describe_outputs \ configure:project /resources/build/win/delphi_environment_generated.inc.sh \ - build:project /windows/src/engine/kmtip/$X64_TARGET + build:x86 /windows/src/engine/kmtip/$WIN32_TARGET \ + build:x64 /windows/src/engine/kmtip/$X64_TARGET \ + build:arm64ec /windows/src/engine/kmtip/$ARM64EC_TARGET \ #------------------------------------------------------------------------------------------------------------------- @@ -34,24 +37,32 @@ function do_build() { build_version.res vs_msbuild kmtip.vcxproj //t:Build "//p:Platform=Win32" vs_msbuild kmtip.vcxproj //t:Build "//p:Platform=x64" + vs_msbuild kmtip.vcxproj //t:Build "//p:Platform=arm64EC" cp "$WIN32_TARGET" "$WINDOWS_PROGRAM_ENGINE" builder_if_release_build_level cp "$WIN32_TARGET_PATH/kmtip.pdb" "$WINDOWS_DEBUGPATH_ENGINE" cp "$X64_TARGET" "$WINDOWS_PROGRAM_ENGINE" builder_if_release_build_level cp "$X64_TARGET_PATH/kmtip64.pdb" "$WINDOWS_DEBUGPATH_ENGINE" + cp "$ARM64EC_TARGET" "$WINDOWS_PROGRAM_ENGINE" + builder_if_release_build_level cp "$ARM64EC_TARGET_PATH/kmtiparm64x.pdb" "$WINDOWS_DEBUGPATH_ENGINE" + } function do_publish() { wrap-signcode //d "Keyman Engine for Windows" "$WINDOWS_PROGRAM_ENGINE/kmtip.dll" wrap-signcode //d "Keyman Engine for Windows" "$WINDOWS_PROGRAM_ENGINE/kmtip64.dll" + wrap-signcode //d "Keyman Engine for Windows" "$WINDOWS_PROGRAM_ENGINE/kmtiparm64x.dll" wrap-symstore "$WINDOWS_PROGRAM_ENGINE/kmtip.dll" //t keyman-engine-windows wrap-symstore "$WINDOWS_DEBUGPATH_ENGINE/kmtip.pdb" //t keyman-engine-windows wrap-symstore "$WINDOWS_PROGRAM_ENGINE/kmtip64.dll" //t keyman-engine-windows wrap-symstore "$WINDOWS_DEBUGPATH_ENGINE/kmtip64.pdb" //t keyman-engine-windows + wrap-symstore "$WINDOWS_PROGRAM_ENGINE/kmtiparm64x.dll" //t keyman-engine-windows + wrap-symstore "$WINDOWS_DEBUGPATH_ENGINE/kmtiparm64x.pdb" //t keyman-engine-windows } function do_install() { cp "$WINDOWS_PROGRAM_ENGINE/kmtip.dll" "$INSTALLPATH_KEYMANENGINE/kmtip.dll" cp "$WINDOWS_PROGRAM_ENGINE/kmtip64.dll" "$INSTALLPATH_KEYMANENGINE/kmtip64.dll" + cp "$WINDOWS_PROGRAM_ENGINE/kmtiparm64x.dll" "$INSTALLPATH_KEYMANENGINE/kmtiparm64x.dll" } builder_run_action clean:project do_clean diff --git a/windows/src/engine/kmtip/debug.cpp b/windows/src/engine/kmtip/debug.cpp index 764a424898..5493c344e3 100644 --- a/windows/src/engine/kmtip/debug.cpp +++ b/windows/src/engine/kmtip/debug.cpp @@ -49,10 +49,12 @@ #include #include -#ifdef _WIN64 -#define DEBUG_PLATFORM_STRING "x64" +#if defined(_M_ARM64) + #define DEBUG_PLATFORM_STRING "arm64" +#elif defined(_M_X64) + #define DEBUG_PLATFORM_STRING "x64" #else -#define DEBUG_PLATFORM_STRING "x86" + #define DEBUG_PLATFORM_STRING "x86" #endif diff --git a/windows/src/engine/kmtip/kmtip.sln b/windows/src/engine/kmtip/kmtip.sln index f37d702b47..4528a5e77f 100644 --- a/windows/src/engine/kmtip/kmtip.sln +++ b/windows/src/engine/kmtip/kmtip.sln @@ -11,10 +11,18 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|ARM64.Build.0 = Debug|ARM64 + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|ARM64EC.Build.0 = Release|ARM64EC {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|Win32.ActiveCfg = Debug|Win32 {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|Win32.Build.0 = Debug|Win32 {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|x64.ActiveCfg = Debug|x64 {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Debug|x64.Build.0 = Debug|x64 + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|ARM64.ActiveCfg = Release|ARM64 + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|ARM64.Build.0 = Release|ARM64 + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|ARM64EC.Build.0 = Release|ARM64EC {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|Win32.ActiveCfg = Release|Win32 {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|Win32.Build.0 = Release|Win32 {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4}.Release|x64.ActiveCfg = Release|x64 diff --git a/windows/src/engine/kmtip/kmtip.vcxproj b/windows/src/engine/kmtip/kmtip.vcxproj index 173853f507..20989dd7b6 100644 --- a/windows/src/engine/kmtip/kmtip.vcxproj +++ b/windows/src/engine/kmtip/kmtip.vcxproj @@ -1,432 +1,816 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4} - 10.0 - - - - DynamicLibrary - false - MultiByte - v143 - - - DynamicLibrary - false - MultiByte - v143 - - - DynamicLibrary - false - MultiByte - v143 - - - DynamicLibrary - false - MultiByte - v143 - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - true - true - false - false - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - true - true - true - true - AllRules.ruleset - AllRules.ruleset - - - - - AllRules.ruleset - AllRules.ruleset - - - - - .dll - .dll - .dll - .dll - kmtip64 - kmtip64 - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - Win32 - ./kmtip.tlb - - - - - MaxSpeed - OnlyExplicitInline - .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) - true - MultiThreaded - true - All - Level3 - true - true - Use - pch.h - - - NDEBUG;%(PreprocessorDefinitions) - 0x0c09 - - - ..\..\..\lib\keyman32.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) - true - .\kmtip.def - true - 0x4C100000 - MachineX86 - true - true - - - true - ./kmtip.bsc - - - - - NDEBUG;%(PreprocessorDefinitions) - true - true - ./kmtip.tlb - - - - - MaxSpeed - OnlyExplicitInline - .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) - true - MultiThreaded - true - All - Level3 - true - true - Use - pch.h - - - NDEBUG;%(PreprocessorDefinitions) - 0x0c09 - - - ..\..\..\lib\keyman64.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) - true - .\kmtip64.def - true - 0x4C100000 - true - true - - - true - ./kmtip.bsc - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - Win32 - ./kmtip.tlb - - - - - Disabled - .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - true - Level3 - true - EditAndContinue - true - Use - pch.h - - - _DEBUG;%(PreprocessorDefinitions) - 0x0c09 - - - ..\..\..\lib\keyman32.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) - true - .\kmtip.def - true - true - 0x4C100000 - MachineX86 - true - - - true - ./kmtip.bsc - - - - - _DEBUG;%(PreprocessorDefinitions) - true - true - ./kmtip.tlb - - - - - Disabled - .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - true - Level3 - true - ProgramDatabase - true - Use - pch.h - - - _DEBUG;%(PreprocessorDefinitions) - 0x0c09 - - - ..\..\..\lib\keyman64.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) - true - .\kmtip64.def - true - true - 0x4C100000 - true - - - true - ./kmtip.bsc - - - - - - - - - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - Create - Create - Create - Create - - - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(AdditionalIncludeDirectories) - %(AdditionalIncludeDirectories) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - - - true - true - - - true - true - - - - - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - %(PreprocessorDefinitions) - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + Debug + ARM64 + + + Debug + ARM64EC + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM64 + + + Release + ARM64EC + + + Release + Win32 + + + Release + x64 + + + + {93391ECB-E2F1-4D23-B85E-6FDEB7ACF9B4} + 10.0 + + + + DynamicLibrary + false + MultiByte + v143 + + + DynamicLibrary + false + MultiByte + v143 + + + DynamicLibrary + false + MultiByte + v143 + + + DynamicLibrary + false + MultiByte + v143 + + + DynamicLibrary + false + MultiByte + v143 + + + DynamicLibrary + false + MultiByte + v143 + + + DynamicLibrary + false + MultiByte + v143 + + + DynamicLibrary + false + MultiByte + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + true + true + true + true + false + false + false + false + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + true + true + true + true + true + true + true + true + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + .dll + .dll + .dll + .dll + .dll + .dll + .dll + .dll + kmtip64 + kmtiparm64x + kmtiparm64 + kmtip64 + kmtiparm64x + kmtiparm64 + + + true + + + true + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + ./kmtip.tlb + + + + + MaxSpeed + OnlyExplicitInline + .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) + true + MultiThreaded + true + All + Level3 + true + true + Use + pch.h + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c09 + + + ..\..\..\lib\keyman32.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) + true + .\kmtip.def + true + 0x4C100000 + MachineX86 + true + true + + + true + ./kmtip.bsc + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + ./kmtip.tlb + + + + + MaxSpeed + OnlyExplicitInline + .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) + true + MultiThreaded + true + All + Level3 + true + true + Use + pch.h + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c09 + + + ..\..\..\lib\keyman64.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) + true + .\kmtip64.def + true + 0x140000000 + true + true + + + true + ./kmtip.bsc + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + ./kmtip.tlb + + + + + MaxSpeed + OnlyExplicitInline + .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) + true + MultiThreaded + true + All + Level3 + true + true + Use + pch.h + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c09 + + + ..\..\..\lib\keyman64.lib;..\..\..\lib\keymanarm64.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) + true + .\kmtiparm64x.def + true + 0x140000000 + true + true + + + true + ./kmtip.bsc + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + ./kmtip.tlb + + + + + MaxSpeed + OnlyExplicitInline + .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) + true + MultiThreaded + true + All + Level3 + true + true + Use + pch.h + + + NDEBUG;%(PreprocessorDefinitions) + 0x0c09 + + + ..\..\..\lib\keymanarm64.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) + true + .\kmtiparm64.def + true + 0x140000000 + true + true + + + true + ./kmtip.bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + ./kmtip.tlb + + + + + Disabled + .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + true + Level3 + true + EditAndContinue + true + Use + pch.h + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c09 + + + ..\..\..\lib\keyman32.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) + true + .\kmtip.def + true + true + 0x4C100000 + MachineX86 + true + + + true + ./kmtip.bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + ./kmtip.tlb + + + + + Disabled + .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + true + Level3 + true + ProgramDatabase + true + Use + pch.h + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c09 + + + ..\..\..\lib\keyman64.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) + true + .\kmtip64.def + true + true + 0x140000000 + true + + + true + ./kmtip.bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + ./kmtip.tlb + + + + + Disabled + .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + true + Level3 + true + ProgramDatabase + true + Use + pch.h + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c09 + + + ..\..\..\lib\keyman64.lib;..\..\..\lib\keymanarm64.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) + true + .\kmtiparm64x.def + true + true + 0x140000000 + true + + + true + ./kmtip.bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + ./kmtip.tlb + + + + + Disabled + .\;..\..\global\inc;..\..\resellers;C:\Program Files\Microsoft Platform SDK\Include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;KMTIP_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + true + Level3 + true + ProgramDatabase + true + Use + pch.h + + + _DEBUG;%(PreprocessorDefinitions) + 0x0c09 + + + ..\..\..\lib\keymanarm64.lib;version.lib;wintrust.lib;crypt32.lib;imagehlp.lib;%(AdditionalDependencies) + true + .\kmtiparm64.def + true + true + 0x140000000 + true + + + true + ./kmtip.bsc + + + + + + + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + Create + Create + Create + Create + Create + Create + Create + Create + + + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + true + true + true + true + true + true + + + true + true + true + true + true + true + + + true + true + true + true + true + true + + + true + true + true + true + true + true + + + + + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + %(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + diff --git a/windows/src/engine/kmtip/kmtip.vcxproj.filters b/windows/src/engine/kmtip/kmtip.vcxproj.filters index b7d69593c2..013828eb1f 100644 --- a/windows/src/engine/kmtip/kmtip.vcxproj.filters +++ b/windows/src/engine/kmtip/kmtip.vcxproj.filters @@ -83,6 +83,12 @@ Source Files\Framework + + Source Files\Framework + + + Source Files\Framework + @@ -118,4 +124,4 @@ Header Files - \ No newline at end of file + diff --git a/windows/src/engine/kmtip/kmtiparm64.def b/windows/src/engine/kmtip/kmtiparm64.def new file mode 100644 index 0000000000..b1c7e92987 --- /dev/null +++ b/windows/src/engine/kmtip/kmtiparm64.def @@ -0,0 +1,7 @@ +LIBRARY kmtiparm64.dll + +EXPORTS + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE diff --git a/windows/src/engine/kmtip/kmtiparm64x.def b/windows/src/engine/kmtip/kmtiparm64x.def new file mode 100644 index 0000000000..0c113cc7fc --- /dev/null +++ b/windows/src/engine/kmtip/kmtiparm64x.def @@ -0,0 +1,7 @@ +LIBRARY kmtiparm64x.dll + +EXPORTS + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE diff --git a/windows/src/engine/mcompile/mcompile.sln b/windows/src/engine/mcompile/mcompile.sln index 6901b5f8bd..dfac876631 100644 --- a/windows/src/engine/mcompile/mcompile.sln +++ b/windows/src/engine/mcompile/mcompile.sln @@ -1,6 +1,8 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36705.20 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mcompile", "mcompile.vcxproj", "{5C22DDDA-CEAD-45F1-96B0-1473111156AA}" EndProject Global @@ -17,4 +19,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1C01096C-D29F-482E-BA98-C687726209A4} + EndGlobalSection EndGlobal diff --git a/windows/src/engine/mcompile/mcompile.vcxproj b/windows/src/engine/mcompile/mcompile.vcxproj index 99f60fa722..ff5f5e9784 100644 --- a/windows/src/engine/mcompile/mcompile.vcxproj +++ b/windows/src/engine/mcompile/mcompile.vcxproj @@ -1,134 +1,135 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {5C22DDDA-CEAD-45F1-96B0-1473111156AA} - Win32Proj - mtop - mcompile - 10.0 - - - - Application - true - Unicode - v143 - - - Application - false - true - Unicode - v143 - - - - - - - - - - - - - true - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - false - *.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.tlog;*.manifest;*.res;*.pch;*.exp;*.idb;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.sbr;*.metagen;*.bi - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - false - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - false - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - - Use - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDebug - ..\..\..\..\common\windows\delphi\ext\sentry;..\..\global\inc - pch.h - - - Console - true - ..\..\..\..\common\windows\delphi\ext\sentry\sentry.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - sentry.dll - - - - - Level3 - Use - MaxSpeed - true - true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreaded - ..\..\..\..\common\windows\delphi\ext\sentry;..\..\global\inc - pch.h - - - Console - true - true - true - ..\..\..\..\common\windows\delphi\ext\sentry\sentry.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - sentry.dll - - - - - - - - - - - - - - - - NotUsing - NotUsing - - - - - - - - - - Create - Create - pch.h - pch.h - - - - - - - - - - - - \ No newline at end of file + + + + + Debug + Win32 + + + Release + Win32 + + + + {5C22DDDA-CEAD-45F1-96B0-1473111156AA} + Win32Proj + mtop + mcompile + 10.0 + + + + Application + true + Unicode + v143 + + + Application + false + true + Unicode + v143 + + + + + + + + + + + + + true + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + false + *.cdf;*.cache;*.obj;*.ilk;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.tlog;*.manifest;*.res;*.pch;*.exp;*.idb;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.sbr;*.metagen;*.bi + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + false + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + + Use + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDebug + ..\..\..\..\common\windows\delphi\ext\sentry;..\..\global\inc + pch.h + + + Console + true + ..\..\..\..\common\windows\delphi\ext\sentry\sentry.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + sentry.dll + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded + ..\..\..\..\common\windows\delphi\ext\sentry;..\..\global\inc + pch.h + + + Console + true + true + true + ..\..\..\..\common\windows\delphi\ext\sentry\sentry.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + sentry.dll + + + + + + + + + + + + + + + + NotUsing + NotUsing + + + + + + + + + + Create + Create + pch.h + pch.h + + + + + + + + + + + + + diff --git a/windows/src/engine/testhost/build.sh b/windows/src/engine/testhost/build.sh index 2ff6b844c2..c83e7e0300 100755 --- a/windows/src/engine/testhost/build.sh +++ b/windows/src/engine/testhost/build.sh @@ -15,6 +15,7 @@ builder_parse "$@" source "$KEYMAN_ROOT/resources/build/win/environment.inc.sh" WIN32_TARGET="$WIN32_TARGET_PATH/testhost.exe" X64_TARGET="$X64_TARGET_PATH/testhost.exe" +ARM64_TARGET="$ARM64_TARGET_PATH/testhost.exe" builder_describe_outputs \ configure:project /resources/build/win/delphi_environment_generated.inc.sh \ @@ -31,6 +32,7 @@ function do_build() { create-windows-output-folders vs_msbuild testhost.vcxproj //t:Build "//p:Platform=Win32" vs_msbuild testhost.vcxproj //t:Build "//p:Platform=x64" + vs_msbuild testhost.vcxproj //t:Build "//p:Platform=arm64" # Note, we don't copy this to bin } diff --git a/windows/src/engine/testhost/testhost.cpp b/windows/src/engine/testhost/testhost.cpp index ab037b7be1..d8250c055c 100644 --- a/windows/src/engine/testhost/testhost.cpp +++ b/windows/src/engine/testhost/testhost.cpp @@ -306,14 +306,18 @@ Fail(PCWSTR message) { MessageBox(0, buf.c_str(), L"Error starting Keyman", MB_OK | MB_ICONERROR); } -#ifdef _WIN64 -#define KEYMAN32 "keyman64.dll" -#define KEYMAN32_DEBUG "keyman32" / "bin" / "x64" / "Debug" / "keyman64.dll" -#define KEYMAN32_RELEASE "keyman32" / "bin" / "x64" / "Release" / "keyman64.dll" +#if defined(_M_ARM64) + #define KEYMAN32 "keymanarm64.dll" + #define KEYMAN32_DEBUG "keyman32" / "bin" / "arm64" / "Debug" / "keymanarm64.dll" + #define KEYMAN32_RELEASE "keyman32" / "bin" / "arm64" / "Release" / "keyman64.dll" +#elif defined(_M_X64) + #define KEYMAN32 "keyman64.dll" + #define KEYMAN32_DEBUG "keyman32" / "bin" / "x64" / "Debug" / "keyman64.dll" + #define KEYMAN32_RELEASE "keyman32" / "bin" / "x64" / "Release" / "keyman64.dll" #else -#define KEYMAN32 "keyman32.dll" -#define KEYMAN32_DEBUG "keyman32" / "bin" / "Win32" / "Debug" / "keyman32.dll" -#define KEYMAN32_RELEASE "keyman32" / "bin" / "Win32" / "Release" / "keyman32.dll" + #define KEYMAN32 "keyman32.dll" + #define KEYMAN32_DEBUG "keyman32" / "bin" / "Win32" / "Debug" / "keyman32.dll" + #define KEYMAN32_RELEASE "keyman32" / "bin" / "Win32" / "Release" / "keyman32.dll" #endif bool diff --git a/windows/src/engine/testhost/testhost.vcxproj b/windows/src/engine/testhost/testhost.vcxproj index e9d06a87a6..dafd06a659 100644 --- a/windows/src/engine/testhost/testhost.vcxproj +++ b/windows/src/engine/testhost/testhost.vcxproj @@ -1,172 +1,306 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 16.0 - Win32Proj - {12818da3-0472-49a5-96fc-a4808a1a77fa} - testhost - 10.0 - - - - Application - true - v143 - Unicode - - - Application - false - v143 - true - Unicode - - - Application - true - v143 - Unicode - - - Application - false - v143 - true - Unicode - - - - - - - - - - - - - - - - - - - - - true - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - false - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - true - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - false - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - - Level3 - true - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - stdcpp17 - - - Windows - true - - - - - Level3 - true - true - true - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - stdcpp17 - - - Windows - true - true - true - - - - - Level3 - true - _DEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - stdcpp17 - - - Windows - true - - - - - Level3 - true - true - true - NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - stdcpp17 - - - Windows - true - true - true - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + ARM64 + + + Debug + ARM64EC + + + Debug + Win32 + + + Release + ARM64 + + + Release + ARM64EC + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {12818da3-0472-49a5-96fc-a4808a1a77fa} + testhost + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + true + v143 + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + false + v143 + true + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + true + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + true + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + true + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + false + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + + Level3 + true + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + Level3 + true + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + + + + + Level3 + true + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + Level3 + true + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + Level3 + true + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + stdcpp17 + + + Windows + true + true + true + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/windows/src/global/delphi/general/utilwow64.pas b/windows/src/global/delphi/general/utilwow64.pas index cf490ed036..93a59d6260 100644 --- a/windows/src/global/delphi/general/utilwow64.pas +++ b/windows/src/global/delphi/general/utilwow64.pas @@ -5,13 +5,22 @@ interface uses Winapi.Windows; +{$IFNDEF IMAGE_FILE_MACHINE_ARM64} +const + IMAGE_FILE_MACHINE_ARM64 = $AA64; +{$ENDIF} + function IsWow64: Boolean; +function IsNativeMachineArm64: Boolean; implementation uses System.SysUtils; +type + TIsWow64Process2 = function(hProcess: THandle; out pProcessMachine: USHORT; out pNativeMachine: USHORT): BOOL; stdcall; + function IsWow64: Boolean; var FIsWow64: BOOL; @@ -21,4 +30,26 @@ begin Result := FIsWow64; // not on Wow64 end; +(** + Determines whether the current system's native architecture is ARM64. + @returns: True if the native machine architecture is ARM64, False otherwise +*) +function IsNativeMachineArm64: Boolean; +var + processMachine: USHORT; + nativeMachine: USHORT; + IsWow64Process2 : TIsWow64Process2; +begin + Result := False; + IsWow64Process2 := GetProcAddress(GetModuleHandle(kernel32), 'IsWow64Process2'); + if Assigned(IsWow64Process2) then + begin + if IsWow64Process2(GetCurrentProcess, processMachine, nativeMachine) then + begin + Result := (nativeMachine = IMAGE_FILE_MACHINE_ARM64); + end; + end; +end; + + end. diff --git a/windows/src/support/etl2log/load.cpp b/windows/src/support/etl2log/load.cpp index 8e8dc8db53..ccbd02224c 100644 --- a/windows/src/support/etl2log/load.cpp +++ b/windows/src/support/etl2log/load.cpp @@ -203,6 +203,7 @@ void PrintPlatform(int platform) { switch (platform) { case 1: fwprintf(fp, L"\tx86"); break; case 2: fwprintf(fp, L"\tx64"); break; + case 3: fwprintf(fp, L"\tarm64"); break; default: fwprintf(fp, L"\t%d", platform); break; } } diff --git a/windows/src/support/texteditor/Editor.cpp b/windows/src/support/texteditor/Editor.cpp index 4a09fd0947..964dce09a7 100644 --- a/windows/src/support/texteditor/Editor.cpp +++ b/windows/src/support/texteditor/Editor.cpp @@ -33,7 +33,14 @@ wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR UNREFERENCED_PARAMETER(lpCmdLine); // Initialize global strings - LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); +#if defined(_M_ARM64) + LoadStringW(hInstance, IDS_APP_TITLE_ARM64, szTitle, MAX_LOADSTRING); +#elif defined(_M_X64) + LoadStringW(hInstance, IDS_APP_TITLE_X64, szTitle, MAX_LOADSTRING); +#else // x86 + LoadStringW(hInstance, IDS_APP_TITLE_X86, szTitle, MAX_LOADSTRING); +#endif + LoadStringW(hInstance, IDC_EDITOR, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); diff --git a/windows/src/support/texteditor/Editor.rc b/windows/src/support/texteditor/Editor.rc index 8dae7dfe61..4708984420 100644 Binary files a/windows/src/support/texteditor/Editor.rc and b/windows/src/support/texteditor/Editor.rc differ diff --git a/windows/src/support/texteditor/Editor.sln b/windows/src/support/texteditor/Editor.sln index 779a4405f7..51408bdac6 100644 --- a/windows/src/support/texteditor/Editor.sln +++ b/windows/src/support/texteditor/Editor.sln @@ -7,16 +7,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Editor", "Editor.vcxproj", EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM64 = Debug|ARM64 Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 + Release|ARM64 = Release|ARM64 Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6804767E-857F-48CC-B843-22BF357A668C}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {6804767E-857F-48CC-B843-22BF357A668C}.Debug|ARM64.Build.0 = Debug|ARM64 {6804767E-857F-48CC-B843-22BF357A668C}.Debug|x64.ActiveCfg = Debug|x64 {6804767E-857F-48CC-B843-22BF357A668C}.Debug|x64.Build.0 = Debug|x64 {6804767E-857F-48CC-B843-22BF357A668C}.Debug|x86.ActiveCfg = Debug|Win32 {6804767E-857F-48CC-B843-22BF357A668C}.Debug|x86.Build.0 = Debug|Win32 + {6804767E-857F-48CC-B843-22BF357A668C}.Release|ARM64.ActiveCfg = Release|ARM64 + {6804767E-857F-48CC-B843-22BF357A668C}.Release|ARM64.Build.0 = Release|ARM64 {6804767E-857F-48CC-B843-22BF357A668C}.Release|x64.ActiveCfg = Release|x64 {6804767E-857F-48CC-B843-22BF357A668C}.Release|x64.Build.0 = Release|x64 {6804767E-857F-48CC-B843-22BF357A668C}.Release|x86.ActiveCfg = Release|Win32 diff --git a/windows/src/support/texteditor/Editor.vcxproj b/windows/src/support/texteditor/Editor.vcxproj index 30879810b3..f73305e3f1 100644 --- a/windows/src/support/texteditor/Editor.vcxproj +++ b/windows/src/support/texteditor/Editor.vcxproj @@ -1,175 +1,242 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - 16.0 - Win32Proj - {6804767e-857f-48cc-b843-22bf357a668c} - Editor - 10.0 - - - - Application - true - v143 - Unicode - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - Application - false - v143 - true - Unicode - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - Application - true - v143 - Unicode - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - Application - false - v143 - true - Unicode - $(ProjectDir)bin\$(Platform)\$(Configuration)\ - $(ProjectDir)obj\$(Platform)\$(Configuration)\ - - - - - - - - - - - - - - - - - - - - - true - $(ProjectName)32 - - - false - $(ProjectName)32 - - - true - $(ProjectName)64 - - - false - $(ProjectName)64 - - - - Level3 - true - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - - - Windows - true - $(OutDir)$(TargetName)$(TargetExt) - - - - - Level3 - true - true - true - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - - - Windows - true - true - true - - - - - Level3 - true - _DEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - - - Windows - true - - - - - Level3 - true - true - true - NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - - - Windows - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + Debug + ARM64 + + + Debug + Win32 + + + Release + ARM64 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {6804767e-857f-48cc-b843-22bf357a668c} + Editor + 10.0 + + + + Application + true + v143 + Unicode + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + Application + false + v143 + true + Unicode + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + Application + true + v143 + Unicode + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + Application + true + v143 + Unicode + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + Application + false + v143 + true + Unicode + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + Application + false + v143 + true + Unicode + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + $(ProjectDir)obj\$(Platform)\$(Configuration)\ + + + + + + + + + + + + + + + + + + + + + + + + + + + true + $(ProjectName)32 + + + false + $(ProjectName)32 + + + true + $(ProjectName)64 + + + true + $(ProjectName)arm64 + + + false + $(ProjectName)64 + + + false + $(ProjectName)arm64 + + + + Level3 + true + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + $(OutDir)$(TargetName)$(TargetExt) + + + + + Level3 + true + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + + + Level3 + true + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Level3 + true + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Level3 + true + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + + + Level3 + true + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/windows/src/support/texteditor/Resource.h b/windows/src/support/texteditor/Resource.h index ccfa24e888..18c7417775 100644 --- a/windows/src/support/texteditor/Resource.h +++ b/windows/src/support/texteditor/Resource.h @@ -2,7 +2,9 @@ // Microsoft Visual C++ generated include file. // Used by Editor.rc -#define IDS_APP_TITLE 103 +#define IDS_APP_TITLE_X86 103 +#define IDS_APP_TITLE_X64 104 +#define IDS_APP_TITLE_ARM64 105 #define IDR_MAINFRAME 128 #define IDD_EDITOR_DIALOG 102 diff --git a/windows/src/support/texteditor/build.sh b/windows/src/support/texteditor/build.sh index 6d58124a5d..9066c854d6 100755 --- a/windows/src/support/texteditor/build.sh +++ b/windows/src/support/texteditor/build.sh @@ -15,6 +15,7 @@ builder_parse "$@" source "$KEYMAN_ROOT/resources/build/win/environment.inc.sh" WIN32_TARGET="$WIN32_TARGET_PATH/editor32.exe" X64_TARGET="$X64_TARGET_PATH/editor64.exe" +ARM64_TARGET="$ARM64_TARGET_PATH/editorarm64.exe" builder_describe_outputs \ configure:project /resources/build/win/delphi_environment_generated.inc.sh \ @@ -32,10 +33,13 @@ function do_build() { # build_version.res vs_msbuild Editor.vcxproj //t:Build "//p:Platform=Win32" vs_msbuild Editor.vcxproj //t:Build "//p:Platform=x64" + vs_msbuild Editor.vcxproj //t:Build "//p:Platform=arm64" cp "$WIN32_TARGET" "$WINDOWS_PROGRAM_SUPPORT" cp "$X64_TARGET" "$WINDOWS_PROGRAM_SUPPORT" + cp "$ARM64_TARGET" "$WINDOWS_PROGRAM_SUPPORT" builder_if_release_build_level cp "$WIN32_TARGET_PATH/editor32.pdb" "$WINDOWS_DEBUGPATH_SUPPORT" builder_if_release_build_level cp "$X64_TARGET_PATH/editor64.pdb" "$WINDOWS_DEBUGPATH_SUPPORT" + builder_if_release_build_level cp "$ARM64_TARGET_PATH/editorarm64.pdb" "$WINDOWS_DEBUGPATH_SUPPORT" } builder_run_action clean:project do_clean