As the build environment documentation is duplicated across each of the
Keyman platform projects, it has become somewhat convoluted and
inconsistent. This PR moves all the mac-based and shared documentation
into docs/build, with placeholders for Windows and Linux documentation
to be moved in the next PR.
The idea is that a developer can configure their box to build any of the
available projects for that platform (web and android build on all three
main dev platforms).
Keeping the build documentation in one place makes it much simpler to
keep it consistent and up-to-date as well, as well as keeping us aware
of potential dependency conflicts between projects.
The icing on the cake is the resources/devbox/macos/macos.sh script,
which I have tested and takes a bare metal mac box through to a full
Keyman development environment (except XCode, there's always something!)
The changelogs should match what got uploaded (and accepted) to
Debian so that the changelog reflects the upload history to Debian.
(cherry picked from commit f91b52d3ea)
Splits the rust source into a core library crate, and two interface
library crates - native and wasm. This avoids requiring WASM
dependencies on systems that don't require them, such as Debian
autopackagers.
Debian defines multiple similar environment variables. Libraries
are expected in `/usr/lib/i386-linux-gnu`. `DEB_TARGET_MULTIARCH`
gives that value, whereas the previous `DEB_TARGET_GNU_TYPE` gives
`i686-linux-gnu` which then results in our libraries not being found.
Relates to #5069.
* Adds infrastructure for building keyboard_processor to WASM
* Updates unit tests to work in WASM environment
* Cleanup of documentation
* Consolidation of build script for most platforms
This change makes the necessary adjustments so that the package build
works with the new `build.sh` script. We no longer can rely on the
automatisms of debhelper. This change also adds a install target
to `build.sh`, and copies some files from the Keyman root directory
to the desktop directory because when package building we only
have access to the files in common/core/desktop. Along the same lines
it removes embedding `build-utils.h` from `build.sh`. Instead we set
the version and tier locally.
Ubuntu 18.04 Bionic only contains Meson 0.45. The build seems
to work with that version, so we partially revert the previous
change that set the minimum version to 0.50.
Relates to #5069.
This establishes a baseline Rust build environment and linkage with
common/core/desktop.
This includes:
* build script build.sh which handles builds on Windows, macOS, *nix,
with multiple targets on Windows only at present (M1 on mac to come
when we do the mac integration work.)
* a mock rust processor with a very stubbed-out implementation
* bare bones interface between Rust library and C++ code
* unit tests on Rust and integration tests on C++ side to test the
linkage between the libraries.
This should deliver a set of libraries that can be linked into our
target applications. For ease of deployment, it may be best to make
these static libraries, but I haven't made that decision at this point.
Matches work completed in #5169 for Keyman Core, kmx_file.cpp.
While this code will hopefully disappear in 15.0, it's good to make sure
we aren't diverging beforehand.
Also tidies up a couple of other cases in `CopyKeyboard` in Keyman Core.
This change fixes the FixupKeyboard method. In the .kmx files on
disk array pointers for an empty array point to the end of the file
(one byte after the end of the data structure). When we expand the
pointers in FixupKeyboard this leads to `cgp->dpKeyArray` to point to an
unallocated memory location - this shouldn't matter since we don't
try to read or write at this location if the Key array is empty,
but armhf still seems to raise a SIGBUS, probably because we cast
the value to a `LPKEY`. This change sets `cgp->dpKeyArray` to `NULL`
if we have an empty key array, similar to what's done for the strings.
Closes#5072.
s390x is big-endian which we currently don't support (#5111).
Only build on architectures supported by Debian. This excludes the
following little-endian architectures:
alpha arm ia64 riscv64 sh4 x32 arm64ilp32 mipsn32el
and the following big-endian ones:
avr32 hppa m68k mips mips64 mipsn32 powerpc ppc64 s390 sparc sparc64
See https://wiki.debian.org/SupportedArchitectures
and https://wiki.debian.org/ArchitectureSpecificsMemo