python build.py
python build.py compile-commands
python build.py test
python build.py exampleAdditional targets:
python build.py test-unitpython build.py test-integrationpython build.py compile-commandspython build.py package-integration-tests --version run-123 --arch x64python build.py cleanpython build.py package --version v1.2.3
include/axidev-io/c_api.h: primary public APIsrc/c_api.c: public entrypointssrc/core/: global context and logging modulessrc/internal/: result, thread, and UTF helperssrc/keyboard/common/: key utilities and keymap logicsrc/keyboard/sender/: platform sender backendssrc/keyboard/listener/: platform listener backendstests/: C-only unit and integration testsvendor/stb/stb_ds.h: vendored container dependency
- The library owns one exported global context:
axidev_io_global. - Sender and listener state live inside fixed-size storage embedded in that global context.
- Public sender/listener calls are global functions. Callers do not allocate or pass subsystem handles.
- Internal helpers return
axidev_io_resultand place produced outputs in explicit out-parameters.
- Windows:
- sender:
src/keyboard/sender/sender_windows.c - listener:
src/keyboard/listener/listener_windows.c - shared mapping:
src/keyboard/common/windows_keymap.c
- sender:
- Linux:
- sender:
src/keyboard/sender/sender_uinput.c - listener:
src/keyboard/listener/listener_linux.c - shared mapping:
src/keyboard/common/linux_keysym.c - layout detection:
src/keyboard/common/linux_layout.c
- sender:
python build.py testruns the non-interactive C unit tests.python build.py test-integrationbuilds and runs the interactive integration tests.- Integration tests are intentionally manual because they depend on real focus, permissions, and device state.
- No CMake, Conan, or vcpkg metadata remains.
- The only vendored third-party code is
stb_ds.h. - Linux dependencies are discovered through
pkg-config. - Linux uses system shared libraries for
libinput,libudev, andxkbcommon; they must remain dynamically linked for legal/compliance reasons. python build.py packageincludes the projectLICENSEand the fullvendor/licenses/directory in the release archive.python build.py packagealso includesdocs/consumers/README.mdin the release archive for downstream integration guidance.