Merge pull request #14621 from keymanapp/epic/win-arm

epic: ARM support for Windows 🦾
This commit is contained in:
Marc Durdin 2025-12-22 03:37:22 +01:00 committed by GitHub
commit 751fc79014
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
76 changed files with 4811 additions and 2697 deletions

123
.github/workflows/README.md vendored Normal file
View file

@ -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=<your_gh_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/<yourgithubname>/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/<yourgithubname>/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=<your_gh_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/<yourgithubname>/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/<yourgithubname>/keyman/dispatches
```
# labeler.yml
TODO
# npm-publish.yml
TODO
# pr-build-status.yml
TODO

View file

@ -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"

View file

@ -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/<yourgithubname>/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/<yourgithubname>/keyman/dispatches
```

4
.gitignore vendored
View file

@ -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

View file

@ -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 ----------------------------------

View file

@ -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

View file

@ -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

13
core/cross-arm64.build Normal file
View file

@ -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 doesnt have a native strip
pkgconfig = 'pkg-config' # optional; used only if you have pkg-config installed

13
core/cross-x64.build Normal file
View file

@ -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'

View file

@ -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

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product UpgradeCode="f212edf7-0bef-43bb-8fc2-2625ae7bbfca" Manufacturer="SIL International"
Id="*" Name="$(var.PRODUCTNAME) $(var.RELEASE)" Version="$(var.KEYMAN_VERSION)" Language="1033">
<Package Keywords="Keyman,$(var.PRODUCTNAME),Keyboard,Engine"
@ -37,6 +37,11 @@
<Property Id='OnlineProductID' Value='30' />
<!-- CE38CB16_4448_4432_851B_B3FCE3AF464F is the GUID for the keyman engine merge
module package; this makes the WIX_NATIVE_MACHINE property available to it -->
<SetProperty Id="WIX_NATIVE_MACHINE.CE38CB16_4448_4432_851B_B3FCE3AF464F" Value="[WIX_NATIVE_MACHINE]" Before="LaunchConditions"/>
<Directory Id="TARGETDIR" Name="SourceDir" DiskId="1">
<Merge Id="keymanengine" Language='1033' SourceFile='$(var.ROOT)\src\engine\inst\keymanengine.msm' />
@ -179,6 +184,7 @@
<Property Id="ALLUSERS">1</Property>
<UIRef Id="WixUI_FeatureTree"/>
<PropertyRef Id="WIX_NATIVE_MACHINE" />
<Icon Id="appicon.ico" SourceFile="..\branding\appicon.ico" />
<Icon Id="KMSHELL.ico" SourceFile="..\branding\cfgicon.ico" />

View file

@ -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'],

View file

@ -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)

View file

@ -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=...

View file

@ -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

View file

@ -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).

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 281 KiB

View file

@ -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

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product UpgradeCode="c70af17c-8b9e-47a1-a099-b65aee3dc8b4" Manufacturer="SIL International"
Id="*" Name="Keyman $(var.RELEASE)" Version="$(var.KEYMAN_VERSION)" Language="1033">
<Package Keywords="Keyman,Keyman for Windows,Keyboard,Engine"
@ -80,6 +80,11 @@
<Property Id='OnlineProductID' Value='30' />
<!-- CE38CB16_4448_4432_851B_B3FCE3AF464F is the GUID for the keymaneengine merge
module package; this makes the WIX_NATIVE_MACHINE property available to it -->
<SetProperty Id="WIX_NATIVE_MACHINE.CE38CB16_4448_4432_851B_B3FCE3AF464F" Value="[WIX_NATIVE_MACHINE]" Before="LaunchConditions"/>
<Directory Id="TARGETDIR" Name="SourceDir" DiskId="1">
<Merge Id="keymanengine" Language='1033' SourceFile='..\..\engine\inst\keymanengine.msm' />
@ -326,6 +331,7 @@
<Property Id="ALLUSERS">1</Property>
<UIRef Id="WixUI_FeatureTree"/>
<PropertyRef Id="WIX_NATIVE_MACHINE" />
<Icon Id="appicon.ico" SourceFile="..\branding\appicon.ico" />
<Icon Id="KMSHELL.ico" SourceFile="..\branding\cfgicon.ico" />

View file

@ -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

View file

@ -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" \

View file

@ -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

View file

@ -137,8 +137,20 @@
<File Id="keyman64.dll" Name="keyman64.dll" KeyPath="yes" Source="..\..\..\bin\engine\keyman64.dll" />
</Component>
<Component Guid="{1D136A8F-BC8C-432F-B82F-822EBBE986F2}">
<File Id="keymanx64.exe" Name='keymanx64.exe' KeyPath="yes" Source="..\..\..\bin\engine\keymanx64.exe" />
<Component Guid="{5D0A2A8F-5C34-4B28-A19E-62A40C7EDC12}">
<!-- 0xAA64 = 43620 = ARM64 -->
<Condition>WIX_NATIVE_MACHINE = 43620</Condition>
<File Id="keymanarm64.dll" Name="keymanarm64.dll" KeyPath="yes" Source="..\..\..\bin\engine\keymanarm64.dll" />
</Component>
<Component Guid="{6B6EF05E-E60A-4902-B5F5-EEB3F8AAB384}">
<File Id="keymanhp.x64.exe" Name="keymanhp.x64.exe" KeyPath="yes" Source="..\..\..\bin\engine\keymanhp.x64.exe" />
</Component>
<Component Guid="{65E99D02-6B68-4840-BEE2-0FADB0ED67A0}">
<!-- 0xAA64 = 43620 = ARM64 -->
<Condition>WIX_NATIVE_MACHINE = 43620</Condition>
<File Id="keymanhp.arm64.exe" Name="keymanhp.arm64.exe" KeyPath="yes" Source="..\..\..\bin\engine\keymanhp.arm64.exe" />
</Component>
<Component Guid="{FB88ED52-C8F9-44F8-91F2-D0E377504C0D}">
@ -226,12 +238,21 @@
</RegistryKey>
</Component>
<Component Id="kmtip64.dll" Guid="{7511B389-24C5-4C79-9050-934791014682}" SharedDllRefCount="yes" Win64="yes">
<Condition>VersionNT64</Condition>
<!-- 0x6664 = 34404 = AMD64 -->
<Condition>WIX_NATIVE_MACHINE = 34404</Condition>
<File Id="kmtip64.dll" Name="kmtip64.dll" KeyPath="yes" Source="..\..\..\bin\engine\kmtip64.dll">
<Class Id="FE0420F1-38D1-4B4C-96BF-E7E20A74CFB7" Context="InprocServer32" ThreadingModel="apartment" Description="Keyman Engine Text Service x64" />
</File>
<!-- we will register post-install? -->
</Component>
<Component Id="kmtiparm64x.dll" Guid="{BDF0DAFB-09F9-4121-9859-90E847EA75F8}" SharedDllRefCount="yes" Win64="yes">
<!-- 0xAA64 = 43620 = ARM64 -->
<Condition>WIX_NATIVE_MACHINE = 43620</Condition>
<File Id="kmtiparm64x.dll" Name="kmtiparm64x.dll" KeyPath="yes" Source="..\..\..\bin\engine\kmtiparm64x.dll">
<Class Id="FE0420F1-38D1-4B4C-96BF-E7E20A74CFB7" Context="InprocServer32" ThreadingModel="apartment" Description="Keyman Engine Text Service ARM64" />
</File>
</Component>
<Component Id="etw" Guid="{2AA8D519-C9B7-4995-9496-D87DD2EF2B7D}">
@ -245,13 +266,13 @@
<ComponentGroup Id="KeymanEngineSentryComponents" Directory="dir_sentry_0.6.0" Source="..\..\..\bin\engine">
<Component Guid="{95AB1B5C-2556-4282-B327-E2E417B26926}">
<File Id="sentry.dll" KeyPath="yes" />
<File Id="sentry.dll" Name="sentry.dll" KeyPath="yes" />
</Component>
<Component Guid="{3E5DACB3-055A-41EC-8890-15A30A40548B}">
<File Id="sentry.x64.dll" KeyPath="yes" />
<File Id="sentry.x64.dll" Name="sentry.x64.dll" KeyPath="yes" />
</Component>
<Component Guid="{AA5AF288-4D67-49F4-A10B-E5725A42599B}">
<File Name="crashpad_handler.exe" KeyPath="yes" />
<File Id="crashpad_handler.exe" Name="crashpad_handler.exe" KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>

View file

@ -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;

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);

File diff suppressed because it is too large Load diff

View file

@ -1,274 +1,280 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{2dc5904b-4033-47e6-88ac-ebe442c06c2e}</UniqueIdentifier>
<Extensions>cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{27baf0f2-3926-4720-b5f9-045e47cd975c}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;fi;fd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{088a2b68-c9db-41f4-9f45-37fdf758931e}</UniqueIdentifier>
<Extensions>ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="appint\aiTIP.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="appint\aiWin2000Unicode.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="appint\appint.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="calldll.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="capsstate.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="glossary.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="hotkeys.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="K32_DBG.CPP">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="k32_globals.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="K32_LOAD.CPP">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="keybd_shift.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="keyboardoptions.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="KEYMAN32.CPP">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\keynames.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="keystate.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kmhook_callwndproc.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kmhook_getmessage.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kmhook_keyboard.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kmprocess.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\registry.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="selectkeyboard.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="syskbd.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\unicode.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="versioninfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="VKScanCodes.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\xstring.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="preservedkeymap.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="k32_tsf.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="hookutils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="k32_lowlevelkeyboardhook.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="security.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="serialkeyeventclient.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="serialkeyeventserver.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SharedBuffers.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DebugEventTrace.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kmprocessactions.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\global\cpp\kmtip_guids.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CoreEnvironment.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="appcontext.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="k32_visualkeyboardinterface.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LowLevelHookWatchDog.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="RightAltEmulationCheck.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="KEYMAN32.DEF">
<Filter>Source Files</Filter>
</None>
<None Include="..\..\..\..\common\resources\bitmaps\arrow.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\common\resources\bitmaps\mask.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="keyman64.def">
<Filter>Source Files</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="KEYMAN32.RC">
<Filter>Source Files</Filter>
</ResourceCompile>
<ResourceCompile Include="keyman-debug-etw.rc">
<Filter>Source Files</Filter>
</ResourceCompile>
<ResourceCompile Include="keyman64.rc">
<Filter>Source Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="appint\aiTIP.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="appint\aiWin2000Unicode.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="appint\appint.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="calldll.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="capsstate.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="$(KEYMAN_ROOT)\common\windows\cpp\include\legacy_kmx_file.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="globals.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="hotkeys.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="KBD.H">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keyboardoptions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keyman64.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keymancontrol.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keystate.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="$(KEYMAN_ROOT)\common\windows\cpp\include\registry.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="syskbd.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="$(KEYMAN_ROOT)\common\windows\cpp\include\unicode.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="vkscancodes.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="k32_tsf.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keyman-debug-etw.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keyeventsenderthread.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="security.h">
<Filter>Source Files</Filter>
</ClInclude>
<ClInclude Include="pch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="serialkeyeventclient.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="serialkeyeventcommon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="SharedBuffers.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="serialkeyeventserver.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keymanengine.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="kmprocessactions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\include\kmtip_guids.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="appcontext.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="k32_visualkeyboardinterface.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="LowLevelHookWatchDog.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="keyman-debug-etw.man" />
</ItemGroup>
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{2dc5904b-4033-47e6-88ac-ebe442c06c2e}</UniqueIdentifier>
<Extensions>cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{27baf0f2-3926-4720-b5f9-045e47cd975c}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;fi;fd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{088a2b68-c9db-41f4-9f45-37fdf758931e}</UniqueIdentifier>
<Extensions>ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="appint\aiTIP.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="appint\aiWin2000Unicode.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="appint\appint.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="calldll.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="capsstate.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="glossary.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="hotkeys.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="K32_DBG.CPP">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="k32_globals.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="K32_LOAD.CPP">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="keybd_shift.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="keyboardoptions.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="KEYMAN32.CPP">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\keynames.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="keystate.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kmhook_callwndproc.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kmhook_getmessage.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kmhook_keyboard.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kmprocess.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\registry.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="selectkeyboard.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="syskbd.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\unicode.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="versioninfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="VKScanCodes.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\xstring.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="preservedkeymap.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="k32_tsf.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="hookutils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="k32_lowlevelkeyboardhook.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="security.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="serialkeyeventclient.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="serialkeyeventserver.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SharedBuffers.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DebugEventTrace.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kmprocessactions.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\global\cpp\kmtip_guids.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CoreEnvironment.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="appcontext.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="k32_visualkeyboardinterface.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LowLevelHookWatchDog.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="RightAltEmulationCheck.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="KEYMAN32.DEF">
<Filter>Source Files</Filter>
</None>
<None Include="..\..\..\..\common\resources\bitmaps\arrow.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="..\..\..\..\common\resources\bitmaps\mask.bmp">
<Filter>Resource Files</Filter>
</None>
<None Include="keyman64.def">
<Filter>Source Files</Filter>
</None>
<None Include="keymanarm64.def">
<Filter>Source Files</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="KEYMAN32.RC">
<Filter>Source Files</Filter>
</ResourceCompile>
<ResourceCompile Include="keyman-debug-etw.rc">
<Filter>Source Files</Filter>
</ResourceCompile>
<ResourceCompile Include="keyman64.rc">
<Filter>Source Files</Filter>
</ResourceCompile>
<ResourceCompile Include="keymanarm64.rc">
<Filter>Source Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="appint\aiTIP.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="appint\aiWin2000Unicode.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="appint\appint.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="calldll.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="capsstate.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="$(KEYMAN_ROOT)\common\windows\cpp\include\legacy_kmx_file.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="globals.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="hotkeys.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="KBD.H">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keyboardoptions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keyman64.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keymancontrol.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keystate.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="$(KEYMAN_ROOT)\common\windows\cpp\include\registry.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="syskbd.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="$(KEYMAN_ROOT)\common\windows\cpp\include\unicode.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="vkscancodes.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="k32_tsf.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keyman-debug-etw.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keyeventsenderthread.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="security.h">
<Filter>Source Files</Filter>
</ClInclude>
<ClInclude Include="pch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="serialkeyeventclient.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="serialkeyeventcommon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="SharedBuffers.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="serialkeyeventserver.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="keymanengine.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="kmprocessactions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\include\kmtip_guids.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="appcontext.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="k32_visualkeyboardinterface.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="LowLevelHookWatchDog.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="keyman-debug-etw.man" />
</ItemGroup>
</Project>

View file

@ -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)

View file

@ -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

View file

@ -0,0 +1 @@
#include "versionarm64.rc"

View file

@ -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

View file

@ -1,165 +1,260 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{9e3a0b15-9312-4489-a42a-b4416f647d83}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.26100.0</WindowsTargetPlatformVersion>
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="Shared" />
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<IncludePath>$(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath)</IncludePath>
<LibraryPath>$(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)</LibraryPath>
<Microsoft-GoogleTest-Disable-gtest_main>true</Microsoft-GoogleTest-Disable-gtest_main>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<IncludePath>$(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath)</IncludePath>
<LibraryPath>$(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)</LibraryPath>
<Microsoft-GoogleTest-Disable-gtest_main>true</Microsoft-GoogleTest-Disable-gtest_main>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<IncludePath>$(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath)</IncludePath>
<LibraryPath>$(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)</LibraryPath>
<Microsoft-GoogleTest-Disable-gtest_main>true</Microsoft-GoogleTest-Disable-gtest_main>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<IncludePath>$(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath)</IncludePath>
<LibraryPath>$(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)</LibraryPath>
<Microsoft-GoogleTest-Disable-gtest_main>true</Microsoft-GoogleTest-Disable-gtest_main>
</PropertyGroup>
<ItemDefinitionGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman32.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>X64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman32.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>X64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="pch.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="gtest_main.cpp" />
<ClCompile Include="appint.tests.cpp" />
<ClCompile Include="keyboardoptions.tests.cpp" />
<ClCompile Include="kmprocessactions.tests.cpp" />
<ClCompile Include="RightAltEmulationCheck.tests.cpp" />
<ClCompile Include="..\..\..\global\cpp\kmtip_guids.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1.7\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets" Condition="Exists('packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1.7\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets')" />
</ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>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}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1.7\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1.7\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets'))" />
</Target>
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64EC">
<Configuration>Debug</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64EC">
<Configuration>Release</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{46399ED7-79A1-4E7E-BD96-4B1AEEC838AE}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.26100.0</WindowsTargetPlatformVersion>
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="Shared" />
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<IncludePath>$(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath)</IncludePath>
<LibraryPath>$(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)</LibraryPath>
<Microsoft-GoogleTest-Disable-gtest_main>true</Microsoft-GoogleTest-Disable-gtest_main>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<IncludePath>$(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath)</IncludePath>
<LibraryPath>$(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)</LibraryPath>
<Microsoft-GoogleTest-Disable-gtest_main>true</Microsoft-GoogleTest-Disable-gtest_main>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<IncludePath>$(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x86\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath)</IncludePath>
<LibraryPath>$(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)</LibraryPath>
<Microsoft-GoogleTest-Disable-gtest_main>true</Microsoft-GoogleTest-Disable-gtest_main>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">
<IncludePath>$(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)</IncludePath>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<IncludePath>$(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\arm64\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath)</IncludePath>
<LibraryPath>$(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)</LibraryPath>
<Microsoft-GoogleTest-Disable-gtest_main>true</Microsoft-GoogleTest-Disable-gtest_main>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<IncludePath>$(ProjectDir)..\;$(ProjectDir)..\..\..\..\..\common\include;$(ProjectDir)..\..\..\..\..\core\build\x64\$(Configuration)\include;$(ProjectDir)..\..\..\..\..\core\include;$(IncludePath)</IncludePath>
<LibraryPath>$(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)</LibraryPath>
<Microsoft-GoogleTest-Disable-gtest_main>true</Microsoft-GoogleTest-Disable-gtest_main>
</PropertyGroup>
<ItemDefinitionGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman32.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>X64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>X64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>X64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>version.lib;psapi.lib;imm32.lib;libkeymancore.a;keymanarm64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman32.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>X64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>version.lib;psapi.lib;imm32.lib;libkeymancore.a;keyman64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>X64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PreprocessorDefinitions>X64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>version.lib;psapi.lib;imm32.lib;libkeymancore.a;keymanarm64.lib;libicuuc.a;libicuin.a;$(CoreLibraryDependencies);%(AdditionalDependencies)</AdditionalDependencies>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="pch.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="gtest_main.cpp" />
<ClCompile Include="appint.tests.cpp" />
<ClCompile Include="keyboardoptions.tests.cpp" />
<ClCompile Include="kmprocessactions.tests.cpp" />
<ClCompile Include="..\..\..\global\cpp\kmtip_guids.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1.7\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets" Condition="Exists('packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1.7\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets')" />
</ImportGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>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}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1.7\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1.7\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets'))" />
</Target>
</Project>

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,6 @@
// Microsoft Visual C++ generated resource script.
//
#include "versionarm64.rc"
#include "manifest.rc"
1 ICON "..\\..\\desktop\\branding\\keymandesktop90-arm.ico"

View file

@ -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);

View file

@ -1,5 +1,5 @@
/*
Name: keymanx64
Name: keymanhp
Copyright: Copyright (C) SIL International.
Documentation:
Description:

View file

@ -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

View file

@ -0,0 +1,298 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{A34650EA-D6E8-4229-8091-6BF1443565B5}</ProjectGuid>
<RootNamespace>keymanhp</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<ProjectName>keymanhp</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">false</GenerateManifest>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">false</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">false</GenerateManifest>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" />
<ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">*.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</ExtensionsToDeleteOnClean>
<ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">*.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</ExtensionsToDeleteOnClean>
<ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Release|x64'">*.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</ExtensionsToDeleteOnClean>
<ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">*.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</ExtensionsToDeleteOnClean>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<TargetName>keymanhp.x64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<TargetName>keymanhp.x64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<TargetName>keymanhp.arm64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<TargetName>keymanhp.arm64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<TargetName>keymanhp.x64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<TargetName>keymanhp.x64</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<AdditionalDependencies>..\..\..\..\common\windows\delphi\ext\sentry\sentry.x64.lib;keyman64.lib;libcmtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX64</TargetMachine>
<TreatWarningAsError>true</TreatWarningAsError>
<DelayLoadDLLs>sentry.dll</DelayLoadDLLs>
</Link>
<Manifest>
<AdditionalManifestFiles>
</AdditionalManifestFiles>
<OutputManifestFile>
</OutputManifestFile>
</Manifest>
<ManifestResourceCompile>
<ResourceOutputFileName>
</ResourceOutputFileName>
</ManifestResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<Midl />
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<AdditionalDependencies>keymanarm64.lib;libcmtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TreatWarningAsError>true</TreatWarningAsError>
<DelayLoadDLLs>sentry.dll</DelayLoadDLLs>
</Link>
<Manifest>
<AdditionalManifestFiles>
</AdditionalManifestFiles>
<OutputManifestFile>
</OutputManifestFile>
</Manifest>
<ManifestResourceCompile>
<ResourceOutputFileName>
</ResourceOutputFileName>
</ManifestResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<AdditionalIncludeDirectories>..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<AdditionalDependencies>..\..\..\..\common\windows\delphi\ext\sentry\sentry.x64.lib;keyman64.lib;libcmt.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX64</TargetMachine>
<UACUIAccess>true</UACUIAccess>
<TreatWarningAsError>true</TreatWarningAsError>
<DelayLoadDLLs>sentry.dll</DelayLoadDLLs>
</Link>
<Manifest>
<AdditionalManifestFiles>
</AdditionalManifestFiles>
</Manifest>
<ManifestResourceCompile>
<ResourceOutputFileName>
</ResourceOutputFileName>
</ManifestResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<Midl />
<ClCompile>
<AdditionalIncludeDirectories>..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<AdditionalDependencies>keymanarm64.lib;libcmt.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<UACUIAccess>true</UACUIAccess>
<TreatWarningAsError>true</TreatWarningAsError>
<DelayLoadDLLs>sentry.dll</DelayLoadDLLs>
</Link>
<Manifest>
<AdditionalManifestFiles>
</AdditionalManifestFiles>
</Manifest>
<ManifestResourceCompile>
<ResourceOutputFileName>
</ResourceOutputFileName>
</ManifestResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\keymansentry.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="keymanhp.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="$(KEYMAN_ROOT)\common\windows\cpp\include\keymansentry.h">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</ExcludedFromBuild>
</ClInclude>
<ClInclude Include="keymanhp.h" />
<ClInclude Include="resource.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="keymanarm64.rc">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ResourceCompile>
<ResourceCompile Include="keymanx64.rc">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">true</ExcludedFromBuild>
</ResourceCompile>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -15,7 +15,7 @@
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="keymanx64.cpp">
<ClCompile Include="keymanhp.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\keymansentry.cpp">
@ -23,7 +23,7 @@
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="keymanx64.h">
<ClInclude Include="keymanhp.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="resource.h">
@ -37,5 +37,8 @@
<ResourceCompile Include="keymanx64.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
<ResourceCompile Include="keymanarm64.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

View file

@ -0,0 +1,6 @@
// Microsoft Visual C++ generated resource script.
//
#include "versionx64.rc"
#include "manifest.rc"
1 ICON "..\\..\\desktop\\branding\\keymandesktop90-x64.ico"

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity type="win32" name="com.keyman.windows.engine.keymanx64" version="$VersionWin" processorArchitecture="amd64"/>
<description>Keyman Engine x64</description>
<assemblyIdentity type="win32" name="com.keyman.windows.engine.keymanhp" version="$VersionWin" processorArchitecture="arch64"/>
<description>Keyman Engine HP</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>

View file

@ -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

View file

@ -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"

View file

@ -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"

View file

@ -1,6 +0,0 @@
// Microsoft Visual C++ generated resource script.
//
#include "version.rc"
#include "manifest.rc"
1 ICON "..\\..\\desktop\\branding\\keymandesktop90-64.ico"

View file

@ -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

View file

@ -1,153 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{A34650EA-D6E8-4229-8091-6BF1443565B5}</ProjectGuid>
<RootNamespace>keymanx64</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
<ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">*.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</ExtensionsToDeleteOnClean>
<ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Release|x64'">*.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</ExtensionsToDeleteOnClean>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<AdditionalDependencies>..\..\..\..\common\windows\delphi\ext\sentry\sentry.x64.lib;keyman64.lib;libcmtd.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX64</TargetMachine>
<TreatWarningAsError>true</TreatWarningAsError>
<DelayLoadDLLs>sentry.dll</DelayLoadDLLs>
</Link>
<Manifest>
<AdditionalManifestFiles>
</AdditionalManifestFiles>
<OutputManifestFile>
</OutputManifestFile>
</Manifest>
<ManifestResourceCompile>
<ResourceOutputFileName>
</ResourceOutputFileName>
</ManifestResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<AdditionalIncludeDirectories>..\..\global\inc;..\..\..\..\common\windows\delphi\ext\sentry;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
<Link>
<AdditionalDependencies>..\..\..\..\common\windows\delphi\ext\sentry\sentry.x64.lib;keyman64.lib;libcmt.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\..\..\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX64</TargetMachine>
<UACUIAccess>true</UACUIAccess>
<TreatWarningAsError>true</TreatWarningAsError>
<DelayLoadDLLs>sentry.dll</DelayLoadDLLs>
</Link>
<Manifest>
<AdditionalManifestFiles>
</AdditionalManifestFiles>
</Manifest>
<ManifestResourceCompile>
<ResourceOutputFileName>
</ResourceOutputFileName>
</ManifestResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\keymansentry.cpp" />
<ClCompile Include="keymanx64.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="$(KEYMAN_ROOT)\common\windows\cpp\include\keymansentry.h" />
<ClInclude Include="keymanx64.h" />
<ClInclude Include="resource.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="keymanx64.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -1,157 +1,222 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{A3B8F75F-E63E-434E-8A2A-034AD9B66571}</ProjectGuid>
<RootNamespace>kmrefresh</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(ProjectName).x64</TargetName>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<TargetName>$(ProjectName).x86</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<TargetName>$(ProjectName).x86</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(ProjectName).x64</TargetName>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="kmrefresh.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="version.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{A3B8F75F-E63E-434E-8A2A-034AD9B66571}</ProjectGuid>
<RootNamespace>kmrefresh</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(ProjectName).x64</TargetName>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(ProjectName).x64</TargetName>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<TargetName>$(ProjectName).x86</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
<TargetName>$(ProjectName).x86</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(ProjectName).x64</TargetName>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(ProjectName).x64</TargetName>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="kmrefresh.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="version.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -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).

View file

@ -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

View file

@ -49,10 +49,12 @@
#include <stdio.h>
#include <stdarg.h>
#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

View file

@ -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

File diff suppressed because it is too large Load diff

View file

@ -83,6 +83,12 @@
<None Include="kmtip64.def">
<Filter>Source Files\Framework</Filter>
</None>
<None Include="kmtiparm64.def">
<Filter>Source Files\Framework</Filter>
</None>
<None Include="kmtiparm64x.def">
<Filter>Source Files\Framework</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="kmtip.rc">
@ -118,4 +124,4 @@
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
</Project>

View file

@ -0,0 +1,7 @@
LIBRARY kmtiparm64.dll
EXPORTS
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE

View file

@ -0,0 +1,7 @@
LIBRARY kmtiparm64x.dll
EXPORTS
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE

View file

@ -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

View file

@ -1,134 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{5C22DDDA-CEAD-45F1-96B0-1473111156AA}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>mtop</RootNamespace>
<ProjectName>mcompile</ProjectName>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<GenerateManifest>false</GenerateManifest>
<ExtensionsToDeleteOnClean>*.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</ExtensionsToDeleteOnClean>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<GenerateManifest>false</GenerateManifest>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\..\common\windows\delphi\ext\sentry;..\..\global\inc</AdditionalIncludeDirectories>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>..\..\..\..\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)</AdditionalDependencies>
<DelayLoadDLLs>sentry.dll</DelayLoadDLLs>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\..\common\windows\delphi\ext\sentry;..\..\global\inc</AdditionalIncludeDirectories>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>..\..\..\..\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)</AdditionalDependencies>
<DelayLoadDLLs>sentry.dll</DelayLoadDLLs>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\..\engine\keyman32\KBD.H" />
<ClInclude Include="mc_kmxfile.h" />
<ClInclude Include="mcompile.h" />
<ClInclude Include="pch.h" />
<ClInclude Include="mc_syskbd.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\keymansentry.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\global\cpp\VKScanCodes.cpp" />
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\xstring.cpp" />
<ClCompile Include="mc_import_rules.cpp" />
<ClCompile Include="mc_kmxfile.cpp" />
<ClCompile Include="mcompile.cpp" />
<ClCompile Include="mc_savekeyboard.cpp" />
<ClCompile Include="mc_unicode.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">pch.h</PrecompiledHeaderFile>
</ClCompile>
<ClCompile Include="mc_syskbd.cpp" />
<ClCompile Include="mc_syskbdnt32.cpp" />
<ClCompile Include="mc_syskbdnt64.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="mcompile.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{5C22DDDA-CEAD-45F1-96B0-1473111156AA}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>mtop</RootNamespace>
<ProjectName>mcompile</ProjectName>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<GenerateManifest>false</GenerateManifest>
<ExtensionsToDeleteOnClean>*.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</ExtensionsToDeleteOnClean>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<GenerateManifest>false</GenerateManifest>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\..\common\windows\delphi\ext\sentry;..\..\global\inc</AdditionalIncludeDirectories>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>..\..\..\..\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)</AdditionalDependencies>
<DelayLoadDLLs>sentry.dll</DelayLoadDLLs>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>..\..\..\..\common\windows\delphi\ext\sentry;..\..\global\inc</AdditionalIncludeDirectories>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>..\..\..\..\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)</AdditionalDependencies>
<DelayLoadDLLs>sentry.dll</DelayLoadDLLs>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\..\engine\keyman32\KBD.H" />
<ClInclude Include="mc_kmxfile.h" />
<ClInclude Include="mcompile.h" />
<ClInclude Include="pch.h" />
<ClInclude Include="mc_syskbd.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\keymansentry.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\global\cpp\VKScanCodes.cpp" />
<ClCompile Include="$(KEYMAN_ROOT)\common\windows\cpp\src\xstring.cpp" />
<ClCompile Include="mc_import_rules.cpp" />
<ClCompile Include="mc_kmxfile.cpp" />
<ClCompile Include="mcompile.cpp" />
<ClCompile Include="mc_savekeyboard.cpp" />
<ClCompile Include="mc_unicode.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">pch.h</PrecompiledHeaderFile>
</ClCompile>
<ClCompile Include="mc_syskbd.cpp" />
<ClCompile Include="mc_syskbdnt32.cpp" />
<ClCompile Include="mc_syskbdnt64.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="mcompile.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -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
}

View file

@ -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

View file

@ -1,172 +1,306 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{12818da3-0472-49a5-96fc-a4808a1a77fa}</ProjectGuid>
<RootNamespace>testhost</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="framework.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="targetver.h" />
<ClInclude Include="testhost.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="testhost.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="testhost.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="small.ico" />
<Image Include="testhost.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64EC">
<Configuration>Debug</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64EC">
<Configuration>Release</Configuration>
<Platform>ARM64EC</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{12818da3-0472-49a5-96fc-a4808a1a77fa}</ProjectGuid>
<RootNamespace>testhost</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64EC'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64EC'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="framework.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="targetver.h" />
<ClInclude Include="testhost.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="testhost.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="testhost.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="small.ico" />
<Image Include="testhost.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -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.

View file

@ -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;
}
}

View file

@ -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);

View file

@ -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

View file

@ -1,175 +1,242 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{6804767e-857f-48cc-b843-22bf357a668c}</ProjectGuid>
<RootNamespace>Editor</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)64</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="Editor.h" />
<ClInclude Include="framework.h" />
<ClInclude Include="FontSelect.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Editor.cpp" />
<ClCompile Include="FontSelect.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Editor.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="Editor.ico" />
<Image Include="small.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{6804767e-857f-48cc-b843-22bf357a668c}</ProjectGuid>
<RootNamespace>Editor</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<OutDir>$(ProjectDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(ProjectDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)32</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<LinkIncremental>true</LinkIncremental>
<TargetName>$(ProjectName)arm64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)64</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<LinkIncremental>false</LinkIncremental>
<TargetName>$(ProjectName)arm64</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="Editor.h" />
<ClInclude Include="framework.h" />
<ClInclude Include="FontSelect.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Editor.cpp" />
<ClCompile Include="FontSelect.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Editor.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="Editor.ico" />
<Image Include="small.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -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

View file

@ -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