From e8b77c59115c8508aa4e997f10b6c3beb19777b8 Mon Sep 17 00:00:00 2001 From: Alexander Barker Date: Tue, 23 Apr 2024 19:33:30 -0700 Subject: [PATCH] Add support for Mac Catalyst. Fixes #168 --- .github/workflows/package.yml | 861 ++++++++++++++++++---------------- CMakeLists.txt | 22 +- src/darwin/dispatch_event.c | 6 +- src/darwin/dispatch_event.h | 4 + src/darwin/input_helper.c | 16 +- src/darwin/input_helper.h | 163 ++++++- src/darwin/input_hook.c | 4 - 7 files changed, 642 insertions(+), 434 deletions(-) diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 3e6fc50d..18cd8518 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -5,7 +5,7 @@ on: - '**' jobs: - apple-arm64: + ios-arm64: runs-on: macos-latest steps: @@ -17,16 +17,21 @@ jobs: - name: Compile env: CC: clang - CFLAGS: '-O2 -g -target arm64-apple-macos10.5 -flto -fomit-frame-pointer -fno-stack-protector -pipe' - LDFLAGS: '-Wl,-dead_strip_dylibs' + CFLAGS: '-O2 -g -fembed-bitcode' + #LDFLAGS: '-Wl,-dead_strip_dylibs' shell: bash run: | cmake -B ${{github.workspace}}/build \ -G "Unix Makefiles" \ - -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/darwin/arm64 \ + -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/ios/arm64 \ -D CMAKE_VERBOSE_MAKEFILE=true \ -D BUILD_SHARED_LIBS=ON \ - -D BUILD_DEMO=ON + -D CMAKE_OSX_ARCHITECTURES=arm64 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=13.1 \ + -D USE_APPLICATION_SERVICES=OFF \ + -D USE_IOKIT=OFF \ + -D USE_APPKIT=OFF \ + -D BUILD_DEMO=OFF cmake --build ${{github.workspace}}/build \ --parallel 2 \ @@ -41,408 +46,444 @@ jobs: name: nightly-build path: ${{github.workspace}}/dist/**/* - apple-x86_64: - runs-on: macos-latest - - steps: - - name: Checkout - uses: actions/checkout@v1 - with: - submodules: true - - - name: Compile - env: - CC: clang - CFLAGS: '-O2 -g -target x86_64-apple-macos10.5 -flto -fomit-frame-pointer -fno-stack-protector -pipe' - LDFLAGS: '-Wl,-dead_strip_dylibs' - shell: bash - run: | - cmake -B ${{github.workspace}}/build \ - -G "Unix Makefiles" \ - -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/darwin/x86_64 \ - -D CMAKE_VERBOSE_MAKEFILE=true \ - -D BUILD_SHARED_LIBS=ON \ - -D BUILD_DEMO=ON - - cmake --build ${{github.workspace}}/build \ - --parallel 2 \ - --config RelWithDebInfo \ - --clean-first - - cmake --install ${{github.workspace}}/build --config RelWithDebInfo - - - name: Upload - uses: actions/upload-artifact@v3 - with: - name: nightly-build - path: ${{github.workspace}}/dist/**/* - - - linux-arm: - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v1 - with: - submodules: true - - - name: Setup - shell: bash - run: | - sudo rm -Rf /etc/apt/sources.list.d - sudo bash -c 'source /etc/lsb-release && echo " - deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe - deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe - deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe - # This only seems to be required on GitHub images - deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main - - deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME} main universe - deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-updates main universe - deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-backports main universe - # This only seems to be required on GitHub images - deb [arch=arm64,armhf] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main - " > /etc/apt/sources.list' - - sudo dpkg --add-architecture armhf - sudo apt-get update -m - - sudo apt-get install \ - binutils-arm-linux-gnueabihf \ - gcc-arm-linux-gnueabihf - - sudo apt-get install \ - libx11-dev:armhf \ - libxtst-dev:armhf \ - libxt-dev:armhf \ - libxinerama-dev:armhf \ - libx11-xcb-dev:armhf \ - libxkbcommon-dev:armhf \ - libxkbcommon-x11-dev:armhf \ - libxkbfile-dev:armhf - - - name: Compile - env: - CC: arm-linux-gnueabihf-gcc - CFLAGS: '-Os -march=armv7ve -mfpu=vfp -mfloat-abi=hard -g -flto -fomit-frame-pointer -fno-stack-protector -pipe' - LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed' - PKG_CONFIG_PATH: '/usr/lib/arm-linux-gnueabihf/pkgconfig' - shell: bash - run: | - cmake -B ${{github.workspace}}/build \ - -G "Unix Makefiles" \ - -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/arm \ - -D CMAKE_VERBOSE_MAKEFILE=true \ - -D BUILD_SHARED_LIBS=ON \ - -D BUILD_DEMO=ON - - cmake --build ${{github.workspace}}/build \ - --parallel 2 \ - --config RelWithDebInfo \ - --clean-first - - cmake --install ${{github.workspace}}/build --config RelWithDebInfo - - - name: Upload - uses: actions/upload-artifact@v3 - with: - name: nightly-build - path: ${{github.workspace}}/dist/**/* - - linux-arm64: - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v1 - with: - submodules: true - - - name: Setup - shell: bash - run: | - sudo rm -Rf /etc/apt/sources.list.d/* - sudo bash -c 'source /etc/lsb-release && echo " - deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe - deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe - deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe - # This only seems to be required on GitHub images - deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main - - deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME} main universe - deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-updates main universe - deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-backports main universe - # This only seems to be required on GitHub images - deb [arch=arm64,armhf] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main - " > /etc/apt/sources.list' - - sudo dpkg --add-architecture arm64 - sudo apt-get update -m - - sudo apt-get install \ - binutils-aarch64-linux-gnu \ - gcc-aarch64-linux-gnu - - sudo apt-get install \ - libx11-dev:arm64 \ - libxtst-dev:arm64 \ - libxt-dev:arm64 \ - libxinerama-dev:arm64 \ - libx11-xcb-dev:arm64 \ - libxkbcommon-dev:arm64 \ - libxkbcommon-x11-dev:arm64 \ - libxkbfile-dev:arm64 - - - name: Compile - env: - CC: aarch64-linux-gnu-gcc - CFLAGS: '-Os -march=armv8-a+crc -mtune=cortex-a53 -g -flto -fomit-frame-pointer -fno-stack-protector -pipe' - LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed' - PKG_CONFIG_PATH: '/usr/lib/aarch64-linux-gnu/pkgconfig' - shell: bash - run: | - cmake -B ${{github.workspace}}/build \ - -G "Unix Makefiles" \ - -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/arm64 \ - -D CMAKE_VERBOSE_MAKEFILE=true \ - -D BUILD_SHARED_LIBS=ON \ - -D BUILD_DEMO=ON - - cmake --build ${{github.workspace}}/build \ - --parallel 2 \ - --config RelWithDebInfo \ - --clean-first - - cmake --install ${{github.workspace}}/build --config RelWithDebInfo - - - name: Upload - uses: actions/upload-artifact@v3 - with: - name: nightly-build - path: ${{github.workspace}}/dist/**/* - - linux-x86: - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v1 - with: - submodules: true - - - name: Setup - shell: bash - run: | - sudo rm -Rf /etc/apt/sources.list.d - sudo bash -c 'source /etc/lsb-release && echo " - deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe - deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe - deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe - # This only seems to be required on GitHub images - deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main - " > /etc/apt/sources.list' - - sudo dpkg --add-architecture i386 - sudo apt-get update -m - - sudo apt-get install \ - binutils-i686-linux-gnu \ - gcc-i686-linux-gnu - - sudo apt-get install \ - libx11-dev:i386 \ - libxtst-dev:i386 \ - libxt-dev:i386 \ - libxinerama-dev:i386 \ - libx11-xcb-dev:i386 \ - libxkbcommon-dev:i386 \ - libxkbcommon-x11-dev:i386 \ - libxkbfile-dev:i386 - - - name: Compile - env: - CC: i686-linux-gnu-gcc - CFLAGS: '-O2 -march=i686 -mtune=generic -g -fomit-frame-pointer -flto -fno-stack-protector -pipe' - LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed' - PKG_CONFIG_PATH: '/usr/lib/i386-linux-gnu/pkgconfig' - shell: bash - run: | - cmake -B ${{github.workspace}}/build \ - -G "Unix Makefiles" \ - -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/x86 \ - -D CMAKE_VERBOSE_MAKEFILE=true \ - -D BUILD_SHARED_LIBS=ON \ - -D BUILD_DEMO=ON - - cmake --build ${{github.workspace}}/build \ - --parallel 2 \ - --config RelWithDebInfo \ - --clean-first - - cmake --install ${{github.workspace}}/build --config RelWithDebInfo - - - name: Upload - uses: actions/upload-artifact@v3 - with: - name: nightly-build - path: ${{github.workspace}}/dist/**/* - - linux-x86_64: - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v1 - with: - submodules: true - - - name: Setup - shell: bash - run: | - sudo apt-get install \ - libx11-dev:amd64 \ - libxtst-dev:amd64 \ - libxt-dev:amd64 \ - libxinerama-dev:amd64 \ - libx11-xcb-dev:amd64 \ - libxkbcommon-dev:amd64 \ - libxkbcommon-x11-dev:amd64 \ - libxkbfile-dev:amd64 - - - name: Compile - env: - CC: x86_64-linux-gnu-gcc - CFLAGS: '-O2 -march=x86-64 -mtune=generic -g -fomit-frame-pointer -flto -fno-stack-protector -pipe' - LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed' - PKG_CONFIG_PATH: '/usr/lib/x86_64-linux-gnu/pkgconfig' - shell: bash - run: | - cmake -B ${{github.workspace}}/build \ - -G "Unix Makefiles" \ - -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/x86_64 \ - -D CMAKE_VERBOSE_MAKEFILE=true \ - -D BUILD_SHARED_LIBS=ON \ - -D BUILD_DEMO=ON - - cmake --build ${{github.workspace}}/build \ - --parallel 2 \ - --config RelWithDebInfo \ - --clean-first - - cmake --install ${{github.workspace}}/build --config RelWithDebInfo - - - name: Upload - uses: actions/upload-artifact@v3 - with: - name: nightly-build - path: ${{github.workspace}}/dist/**/* - - - windows-arm: - runs-on: windows-latest - - steps: - - uses: actions/checkout@v1 - with: - submodules: true - - - name: Setup - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: amd64_arm - - - name: Compile - shell: cmd - run: | - cmake -B ${{github.workspace}}\build ^ - -G "Visual Studio 17 2022" -A ARM ^ - -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\arm ^ - -D CMAKE_VERBOSE_MAKEFILE=true ^ - -D BUILD_SHARED_LIBS=ON ^ - -D BUILD_DEMO=ON - - cmake --build ${{github.workspace}}\build ^ - --parallel 2 ^ - --config RelWithDebInfo ^ - --clean-first - - cmake --install ${{github.workspace}}\build --config RelWithDebInfo - - - name: Upload - uses: actions/upload-artifact@v3 - with: - name: nightly-build - path: ${{github.workspace}}/dist/**/* - - windows-x86: - runs-on: windows-latest - - steps: - - uses: actions/checkout@v1 - with: - submodules: true - - - name: Setup - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: amd64_x86 - - - name: Compile - shell: cmd - run: | - cmake -B ${{github.workspace}}\build ^ - -G "Visual Studio 17 2022" -A Win32 ^ - -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\x86 ^ - -D CMAKE_VERBOSE_MAKEFILE=true ^ - -D BUILD_SHARED_LIBS=ON ^ - -D BUILD_DEMO=ON - - cmake --build ${{github.workspace}}\build ^ - --parallel 2 ^ - --config RelWithDebInfo ^ - --clean-first - - cmake --install ${{github.workspace}}\build --config RelWithDebInfo - - - name: Upload - uses: actions/upload-artifact@v3 - with: - name: nightly-build - path: ${{github.workspace}}/dist/**/* - - windows-x86_64: - runs-on: windows-latest - - steps: - - uses: actions/checkout@v1 - with: - submodules: true - - - name: Setup - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: amd64 - - - name: Compile - shell: cmd - run: | - cmake -B ${{github.workspace}}\build ^ - -G "Visual Studio 17 2022" -A x64 ^ - -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\x86_64 ^ - -D CMAKE_VERBOSE_MAKEFILE=true ^ - -D BUILD_SHARED_LIBS=ON ^ - -D BUILD_DEMO=ON - - cmake --build ${{github.workspace}}\build ^ - --parallel 2 ^ - --config RelWithDebInfo ^ - --clean-first - - cmake --install ${{github.workspace}}\build --config RelWithDebInfo - - - name: Upload - uses: actions/upload-artifact@v3 - with: - name: nightly-build - path: ${{github.workspace}}/dist/**/* +# macos-arm64: +# runs-on: macos-latest +# +# steps: +# - name: Checkout +# uses: actions/checkout@v1 +# with: +# submodules: true +# +# - name: Compile +# env: +# CC: clang +# CFLAGS: '-O2 -g -target arm64-apple-macos10.5 -flto -fomit-frame-pointer -fno-stack-protector -pipe' +# LDFLAGS: '-Wl,-dead_strip_dylibs' +# shell: bash +# run: | +# cmake -B ${{github.workspace}}/build \ +# -G "Unix Makefiles" \ +# -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/macos/arm64 \ +# -D CMAKE_VERBOSE_MAKEFILE=true \ +# -D BUILD_SHARED_LIBS=ON \ +# -D BUILD_DEMO=ON +# +# cmake --build ${{github.workspace}}/build \ +# --parallel 2 \ +# --config RelWithDebInfo \ +# --clean-first +# +# cmake --install ${{github.workspace}}/build --config RelWithDebInfo +# +# - name: Upload +# uses: actions/upload-artifact@v3 +# with: +# name: nightly-build +# path: ${{github.workspace}}/dist/**/* +# +# macos-x86_64: +# runs-on: macos-latest +# +# steps: +# - name: Checkout +# uses: actions/checkout@v1 +# with: +# submodules: true +# +# - name: Compile +# env: +# CC: clang +# CFLAGS: '-O2 -g -target x86_64-apple-macos10.5 -flto -fomit-frame-pointer -fno-stack-protector -pipe' +# LDFLAGS: '-Wl,-dead_strip_dylibs' +# shell: bash +# run: | +# cmake -B ${{github.workspace}}/build \ +# -G "Unix Makefiles" \ +# -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/macos/x86_64 \ +# -D CMAKE_VERBOSE_MAKEFILE=true \ +# -D BUILD_SHARED_LIBS=ON \ +# -D BUILD_DEMO=ON +# +# cmake --build ${{github.workspace}}/build \ +# --parallel 2 \ +# --config RelWithDebInfo \ +# --clean-first +# +# cmake --install ${{github.workspace}}/build --config RelWithDebInfo +# +# - name: Upload +# uses: actions/upload-artifact@v3 +# with: +# name: nightly-build +# path: ${{github.workspace}}/dist/**/* +# +# +# linux-arm: +# runs-on: ubuntu-latest +# +# steps: +# - name: Checkout +# uses: actions/checkout@v1 +# with: +# submodules: true +# +# - name: Setup +# shell: bash +# run: | +# sudo rm -Rf /etc/apt/sources.list.d +# sudo bash -c 'source /etc/lsb-release && echo " +# deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe +# deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe +# deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe +# # This only seems to be required on GitHub images +# deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main +# +# deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME} main universe +# deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-updates main universe +# deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-backports main universe +# # This only seems to be required on GitHub images +# deb [arch=arm64,armhf] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main +# " > /etc/apt/sources.list' +# +# sudo dpkg --add-architecture armhf +# sudo apt-get update -m +# +# sudo apt-get install \ +# binutils-arm-linux-gnueabihf \ +# gcc-arm-linux-gnueabihf +# +# sudo apt-get install \ +# libx11-dev:armhf \ +# libxtst-dev:armhf \ +# libxt-dev:armhf \ +# libxinerama-dev:armhf \ +# libx11-xcb-dev:armhf \ +# libxkbcommon-dev:armhf \ +# libxkbcommon-x11-dev:armhf \ +# libxkbfile-dev:armhf +# +# - name: Compile +# env: +# CC: arm-linux-gnueabihf-gcc +# CFLAGS: '-Os -march=armv7ve -mfpu=vfp -mfloat-abi=hard -g -flto -fomit-frame-pointer -fno-stack-protector -pipe' +# LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed' +# PKG_CONFIG_PATH: '/usr/lib/arm-linux-gnueabihf/pkgconfig' +# shell: bash +# run: | +# cmake -B ${{github.workspace}}/build \ +# -G "Unix Makefiles" \ +# -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/arm \ +# -D CMAKE_VERBOSE_MAKEFILE=true \ +# -D BUILD_SHARED_LIBS=ON \ +# -D BUILD_DEMO=ON +# +# cmake --build ${{github.workspace}}/build \ +# --parallel 2 \ +# --config RelWithDebInfo \ +# --clean-first +# +# cmake --install ${{github.workspace}}/build --config RelWithDebInfo +# +# - name: Upload +# uses: actions/upload-artifact@v3 +# with: +# name: nightly-build +# path: ${{github.workspace}}/dist/**/* +# +# linux-arm64: +# runs-on: ubuntu-latest +# +# steps: +# - name: Checkout +# uses: actions/checkout@v1 +# with: +# submodules: true +# +# - name: Setup +# shell: bash +# run: | +# sudo rm -Rf /etc/apt/sources.list.d/* +# sudo bash -c 'source /etc/lsb-release && echo " +# deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe +# deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe +# deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe +# # This only seems to be required on GitHub images +# deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main +# +# deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME} main universe +# deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-updates main universe +# deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports ${DISTRIB_CODENAME}-backports main universe +# # This only seems to be required on GitHub images +# deb [arch=arm64,armhf] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main +# " > /etc/apt/sources.list' +# +# sudo dpkg --add-architecture arm64 +# sudo apt-get update -m +# +# sudo apt-get install \ +# binutils-aarch64-linux-gnu \ +# gcc-aarch64-linux-gnu +# +# sudo apt-get install \ +# libx11-dev:arm64 \ +# libxtst-dev:arm64 \ +# libxt-dev:arm64 \ +# libxinerama-dev:arm64 \ +# libx11-xcb-dev:arm64 \ +# libxkbcommon-dev:arm64 \ +# libxkbcommon-x11-dev:arm64 \ +# libxkbfile-dev:arm64 +# +# - name: Compile +# env: +# CC: aarch64-linux-gnu-gcc +# CFLAGS: '-Os -march=armv8-a+crc -mtune=cortex-a53 -g -flto -fomit-frame-pointer -fno-stack-protector -pipe' +# LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed' +# PKG_CONFIG_PATH: '/usr/lib/aarch64-linux-gnu/pkgconfig' +# shell: bash +# run: | +# cmake -B ${{github.workspace}}/build \ +# -G "Unix Makefiles" \ +# -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/arm64 \ +# -D CMAKE_VERBOSE_MAKEFILE=true \ +# -D BUILD_SHARED_LIBS=ON \ +# -D BUILD_DEMO=ON +# +# cmake --build ${{github.workspace}}/build \ +# --parallel 2 \ +# --config RelWithDebInfo \ +# --clean-first +# +# cmake --install ${{github.workspace}}/build --config RelWithDebInfo +# +# - name: Upload +# uses: actions/upload-artifact@v3 +# with: +# name: nightly-build +# path: ${{github.workspace}}/dist/**/* +# +# linux-x86: +# runs-on: ubuntu-latest +# +# steps: +# - name: Checkout +# uses: actions/checkout@v1 +# with: +# submodules: true +# +# - name: Setup +# shell: bash +# run: | +# sudo rm -Rf /etc/apt/sources.list.d +# sudo bash -c 'source /etc/lsb-release && echo " +# deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME} main universe +# deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-updates main universe +# deb [arch=amd64,i386] http://us.archive.ubuntu.com/ubuntu ${DISTRIB_CODENAME}-backports main universe +# # This only seems to be required on GitHub images +# deb [arch=amd64,i386] https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu ${DISTRIB_CODENAME} main +# " > /etc/apt/sources.list' +# +# sudo dpkg --add-architecture i386 +# sudo apt-get update -m +# +# sudo apt-get install \ +# binutils-i686-linux-gnu \ +# gcc-i686-linux-gnu +# +# sudo apt-get install \ +# libx11-dev:i386 \ +# libxtst-dev:i386 \ +# libxt-dev:i386 \ +# libxinerama-dev:i386 \ +# libx11-xcb-dev:i386 \ +# libxkbcommon-dev:i386 \ +# libxkbcommon-x11-dev:i386 \ +# libxkbfile-dev:i386 +# +# - name: Compile +# env: +# CC: i686-linux-gnu-gcc +# CFLAGS: '-O2 -march=i686 -mtune=generic -g -fomit-frame-pointer -flto -fno-stack-protector -pipe' +# LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed' +# PKG_CONFIG_PATH: '/usr/lib/i386-linux-gnu/pkgconfig' +# shell: bash +# run: | +# cmake -B ${{github.workspace}}/build \ +# -G "Unix Makefiles" \ +# -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/x86 \ +# -D CMAKE_VERBOSE_MAKEFILE=true \ +# -D BUILD_SHARED_LIBS=ON \ +# -D BUILD_DEMO=ON +# +# cmake --build ${{github.workspace}}/build \ +# --parallel 2 \ +# --config RelWithDebInfo \ +# --clean-first +# +# cmake --install ${{github.workspace}}/build --config RelWithDebInfo +# +# - name: Upload +# uses: actions/upload-artifact@v3 +# with: +# name: nightly-build +# path: ${{github.workspace}}/dist/**/* +# +# linux-x86_64: +# runs-on: ubuntu-latest +# +# steps: +# - name: Checkout +# uses: actions/checkout@v1 +# with: +# submodules: true +# +# - name: Setup +# shell: bash +# run: | +# sudo apt-get install \ +# libx11-dev:amd64 \ +# libxtst-dev:amd64 \ +# libxt-dev:amd64 \ +# libxinerama-dev:amd64 \ +# libx11-xcb-dev:amd64 \ +# libxkbcommon-dev:amd64 \ +# libxkbcommon-x11-dev:amd64 \ +# libxkbfile-dev:amd64 +# +# - name: Compile +# env: +# CC: x86_64-linux-gnu-gcc +# CFLAGS: '-O2 -march=x86-64 -mtune=generic -g -fomit-frame-pointer -flto -fno-stack-protector -pipe' +# LDFLAGS: '-fuse-ld=gold -Wl,-O1 -Wl,--as-needed' +# PKG_CONFIG_PATH: '/usr/lib/x86_64-linux-gnu/pkgconfig' +# shell: bash +# run: | +# cmake -B ${{github.workspace}}/build \ +# -G "Unix Makefiles" \ +# -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/dist/linux/x86_64 \ +# -D CMAKE_VERBOSE_MAKEFILE=true \ +# -D BUILD_SHARED_LIBS=ON \ +# -D BUILD_DEMO=ON +# +# cmake --build ${{github.workspace}}/build \ +# --parallel 2 \ +# --config RelWithDebInfo \ +# --clean-first +# +# cmake --install ${{github.workspace}}/build --config RelWithDebInfo +# +# - name: Upload +# uses: actions/upload-artifact@v3 +# with: +# name: nightly-build +# path: ${{github.workspace}}/dist/**/* +# +# +# windows-arm: +# runs-on: windows-latest +# +# steps: +# - uses: actions/checkout@v1 +# with: +# submodules: true +# +# - name: Setup +# uses: ilammy/msvc-dev-cmd@v1 +# with: +# arch: amd64_arm +# +# - name: Compile +# shell: cmd +# run: | +# cmake -B ${{github.workspace}}\build ^ +# -G "Visual Studio 17 2022" -A ARM ^ +# -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\arm ^ +# -D CMAKE_VERBOSE_MAKEFILE=true ^ +# -D BUILD_SHARED_LIBS=ON ^ +# -D BUILD_DEMO=ON +# +# cmake --build ${{github.workspace}}\build ^ +# --parallel 2 ^ +# --config RelWithDebInfo ^ +# --clean-first +# +# cmake --install ${{github.workspace}}\build --config RelWithDebInfo +# +# - name: Upload +# uses: actions/upload-artifact@v3 +# with: +# name: nightly-build +# path: ${{github.workspace}}/dist/**/* +# +# windows-x86: +# runs-on: windows-latest +# +# steps: +# - uses: actions/checkout@v1 +# with: +# submodules: true +# +# - name: Setup +# uses: ilammy/msvc-dev-cmd@v1 +# with: +# arch: amd64_x86 +# +# - name: Compile +# shell: cmd +# run: | +# cmake -B ${{github.workspace}}\build ^ +# -G "Visual Studio 17 2022" -A Win32 ^ +# -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\x86 ^ +# -D CMAKE_VERBOSE_MAKEFILE=true ^ +# -D BUILD_SHARED_LIBS=ON ^ +# -D BUILD_DEMO=ON +# +# cmake --build ${{github.workspace}}\build ^ +# --parallel 2 ^ +# --config RelWithDebInfo ^ +# --clean-first +# +# cmake --install ${{github.workspace}}\build --config RelWithDebInfo +# +# - name: Upload +# uses: actions/upload-artifact@v3 +# with: +# name: nightly-build +# path: ${{github.workspace}}/dist/**/* +# +# windows-x86_64: +# runs-on: windows-latest +# +# steps: +# - uses: actions/checkout@v1 +# with: +# submodules: true +# +# - name: Setup +# uses: ilammy/msvc-dev-cmd@v1 +# with: +# arch: amd64 +# +# - name: Compile +# shell: cmd +# run: | +# cmake -B ${{github.workspace}}\build ^ +# -G "Visual Studio 17 2022" -A x64 ^ +# -D CMAKE_INSTALL_PREFIX=${{github.workspace}}\dist\windows\x86_64 ^ +# -D CMAKE_VERBOSE_MAKEFILE=true ^ +# -D BUILD_SHARED_LIBS=ON ^ +# -D BUILD_DEMO=ON +# +# cmake --build ${{github.workspace}}\build ^ +# --parallel 2 ^ +# --config RelWithDebInfo ^ +# --clean-first +# +# cmake --install ${{github.workspace}}\build --config RelWithDebInfo +# +# - name: Upload +# uses: actions/upload-artifact@v3 +# with: +# name: nightly-build +# path: ${{github.workspace}}/dist/**/* diff --git a/CMakeLists.txt b/CMakeLists.txt index 8186905d..4d48bc91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,21 +194,27 @@ if(UNIX AND NOT APPLE) endif() elseif(APPLE) set(CMAKE_MACOSX_RPATH 1) - set(CMAKE_OSX_DEPLOYMENT_TARGET "10.5") - - find_package(Threads REQUIRED) - target_link_libraries(uiohook "${CMAKE_THREAD_LIBS_INIT}") - - find_library(CARBON Carbon REQUIRED) - target_include_directories(uiohook PRIVATE "${CARBON}") - target_link_libraries(uiohook "${CARBON}") + #set(CMAKE_OSX_DEPLOYMENT_TARGET "10.5") + #set(CMAKE_IPHONEOS_DEPLOYMENT_TARGET "13.1") option(USE_APPLICATION_SERVICES "ApplicationServices framework (default: ON)" ON) if(USE_APPLICATION_SERVICES) + find_package(Threads REQUIRED) + target_link_libraries(uiohook "${CMAKE_THREAD_LIBS_INIT}") + find_library(APPLICATION_SERVICES ApplicationServices REQUIRED) add_compile_definitions(USE_APPLICATION_SERVICES) target_include_directories(uiohook PRIVATE "${APPLICATION_SERVICES}") target_link_libraries(uiohook "${APPLICATION_SERVICES}") + else() + # If we aren't using APPLICATION_SERVICES, we need to link against other required libraries. + find_library(CORE_FOUNDATION CoreFoundation REQUIRED) + target_include_directories(uiohook PRIVATE "${CORE_FOUNDATION}") + target_link_libraries(uiohook "${CORE_FOUNDATION}") + + find_library(CORE_GRAPHICS CoreGraphics REQUIRED) + target_include_directories(uiohook PRIVATE "${CORE_GRAPHICS}") + target_link_libraries(uiohook "${CORE_GRAPHICS}") endif() option(USE_IOKIT "IOKit framework (default: ON)" ON) diff --git a/src/darwin/dispatch_event.c b/src/darwin/dispatch_event.c index f7f5c015..1debdd69 100644 --- a/src/darwin/dispatch_event.c +++ b/src/darwin/dispatch_event.c @@ -105,7 +105,7 @@ bool dispatch_hook_disabled(uint64_t timestamp) { bool dispatch_key_press(uint64_t timestamp, CGEventRef event_ref) { bool consumed = false; - UInt64 keycode = CGEventGetIntegerValueField(event_ref, kCGKeyboardEventKeycode); + uint64_t keycode = CGEventGetIntegerValueField(event_ref, kCGKeyboardEventKeycode); // Populate key pressed event. uio_event.time = timestamp; @@ -162,7 +162,7 @@ bool dispatch_key_press(uint64_t timestamp, CGEventRef event_ref) { bool dispatch_key_release(uint64_t timestamp, CGEventRef event_ref) { bool consumed = false; - UInt64 keycode = CGEventGetIntegerValueField(event_ref, kCGKeyboardEventKeycode); + uint64_t keycode = CGEventGetIntegerValueField(event_ref, kCGKeyboardEventKeycode); // Populate key released event. uio_event.time = timestamp; @@ -327,7 +327,7 @@ bool dispatch_modifier_change(uint64_t timestamp, CGEventRef event_ref) { bool consumed = false; CGEventFlags event_mask = CGEventGetFlags(event_ref); - UInt64 keycode = CGEventGetIntegerValueField(event_ref, kCGKeyboardEventKeycode); + uint64_t keycode = CGEventGetIntegerValueField(event_ref, kCGKeyboardEventKeycode); logger(LOG_LEVEL_DEBUG, "%s [%u]: Modifiers Changed for key %#X. (%#X)\n", __FUNCTION__, __LINE__, (unsigned long) keycode, (unsigned int) event_mask); diff --git a/src/darwin/dispatch_event.h b/src/darwin/dispatch_event.h index 20ef2bee..2915c816 100644 --- a/src/darwin/dispatch_event.h +++ b/src/darwin/dispatch_event.h @@ -19,7 +19,11 @@ #include #include +#ifdef USE_APPLICATION_SERVICES #include +#else +#include +#endif extern bool dispatch_hook_enabled(uint64_t timestamp); diff --git a/src/darwin/input_helper.c b/src/darwin/input_helper.c index c1d3444c..9a088809 100644 --- a/src/darwin/input_helper.c +++ b/src/darwin/input_helper.c @@ -33,8 +33,11 @@ #include #endif - // Dynamic library loading for dispatch_sync_f to offload tasks that must run on the main runloop. +#if (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED < __MAC_10_6) \ + || (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_4_0) +typedef struct dispatch_queue_s *dispatch_queue_t; +#endif static struct dispatch_queue_s *dispatch_main_queue_s; static void (*dispatch_sync_f_f)(dispatch_queue_t, void *, void (*function)(void *)); @@ -486,7 +489,7 @@ static void initialize_modifiers() { } -uint16_t keycode_to_scancode(UInt64 keycode) { +uint16_t keycode_to_scancode(uint64_t keycode) { uint16_t scancode = VC_UNDEFINED; // Bound check 0 <= keycode < 256 @@ -497,8 +500,8 @@ uint16_t keycode_to_scancode(UInt64 keycode) { return scancode; } -UInt64 scancode_to_keycode(uint16_t scancode) { - UInt64 keycode = kVK_Undefined; +uint64_t scancode_to_keycode(uint16_t scancode) { + uint64_t keycode = kVK_Undefined; // Bound check 0 <= keycode < 128 if (scancode < 128) { @@ -549,10 +552,10 @@ static void tis_message_to_nsevent(void *info) { if (data_ref != NULL) { if (CFDataGetLength(data_ref) >= 132) { UInt8 buffer[4]; - CFDataGetBytes(data_ref, CFRangeMake(120, 4), &buffer); + CFDataGetBytes(data_ref, CFRangeMake(120, 4), &buffer[0]); tis->subtype = CFSwapInt32BigToHost(*((UInt32 *) &buffer)); - CFDataGetBytes(data_ref, CFRangeMake(128, 4), &buffer); + CFDataGetBytes(data_ref, CFRangeMake(128, 4), &buffer[0]); tis->data1 = CFSwapInt32BigToHost(*((UInt32 *) &buffer)); CFRelease(data_ref); @@ -728,7 +731,6 @@ static void tis_message_to_unicode(void *info) { tis->length = 0; } } - } } diff --git a/src/darwin/input_helper.h b/src/darwin/input_helper.h index 8ae40a23..d6bd744f 100644 --- a/src/darwin/input_helper.h +++ b/src/darwin/input_helper.h @@ -23,14 +23,173 @@ #ifndef _included_input_helper #define _included_input_helper +#ifdef USE_APPLICATION_SERVICES #include #include // For HIToolbox kVK_ key codes and TIS functions. +#else +#include +#include +#endif #ifdef USE_IOKIT #include #endif #include +#ifndef USE_APPLICATION_SERVICES +// If we are not using ApplicationServices, we don't need Carbon.HIToolbox but we still need some of the constants. + +/* + * Summary: + * Virtual keycodes + * + * Discussion: + * These constants are the virtual keycodes defined originally in + * Inside Mac Volume V, pg. V-191. They identify physical keys on a + * keyboard. Those constants with "ANSI" in the name are labeled + * according to the key position on an ANSI-standard US keyboard. + * For example, kVK_ANSI_A indicates the virtual keycode for the key + * with the letter 'A' in the US keyboard layout. Other keyboard + * layouts may have the 'A' key label on a different physical key; + * in this case, pressing 'A' will generate a different virtual + * keycode. + */ +enum { + kVK_ANSI_A = 0x00, + kVK_ANSI_S = 0x01, + kVK_ANSI_D = 0x02, + kVK_ANSI_F = 0x03, + kVK_ANSI_H = 0x04, + kVK_ANSI_G = 0x05, + kVK_ANSI_Z = 0x06, + kVK_ANSI_X = 0x07, + kVK_ANSI_C = 0x08, + kVK_ANSI_V = 0x09, + kVK_ANSI_B = 0x0B, + kVK_ANSI_Q = 0x0C, + kVK_ANSI_W = 0x0D, + kVK_ANSI_E = 0x0E, + kVK_ANSI_R = 0x0F, + kVK_ANSI_Y = 0x10, + kVK_ANSI_T = 0x11, + kVK_ANSI_1 = 0x12, + kVK_ANSI_2 = 0x13, + kVK_ANSI_3 = 0x14, + kVK_ANSI_4 = 0x15, + kVK_ANSI_6 = 0x16, + kVK_ANSI_5 = 0x17, + kVK_ANSI_Equal = 0x18, + kVK_ANSI_9 = 0x19, + kVK_ANSI_7 = 0x1A, + kVK_ANSI_Minus = 0x1B, + kVK_ANSI_8 = 0x1C, + kVK_ANSI_0 = 0x1D, + kVK_ANSI_RightBracket = 0x1E, + kVK_ANSI_O = 0x1F, + kVK_ANSI_U = 0x20, + kVK_ANSI_LeftBracket = 0x21, + kVK_ANSI_I = 0x22, + kVK_ANSI_P = 0x23, + kVK_ANSI_L = 0x25, + kVK_ANSI_J = 0x26, + kVK_ANSI_Quote = 0x27, + kVK_ANSI_K = 0x28, + kVK_ANSI_Semicolon = 0x29, + kVK_ANSI_Backslash = 0x2A, + kVK_ANSI_Comma = 0x2B, + kVK_ANSI_Slash = 0x2C, + kVK_ANSI_N = 0x2D, + kVK_ANSI_M = 0x2E, + kVK_ANSI_Period = 0x2F, + kVK_ANSI_Grave = 0x32, + kVK_ANSI_KeypadDecimal = 0x41, + kVK_ANSI_KeypadMultiply = 0x43, + kVK_ANSI_KeypadPlus = 0x45, + kVK_ANSI_KeypadClear = 0x47, + kVK_ANSI_KeypadDivide = 0x4B, + kVK_ANSI_KeypadEnter = 0x4C, + kVK_ANSI_KeypadMinus = 0x4E, + kVK_ANSI_KeypadEquals = 0x51, + kVK_ANSI_Keypad0 = 0x52, + kVK_ANSI_Keypad1 = 0x53, + kVK_ANSI_Keypad2 = 0x54, + kVK_ANSI_Keypad3 = 0x55, + kVK_ANSI_Keypad4 = 0x56, + kVK_ANSI_Keypad5 = 0x57, + kVK_ANSI_Keypad6 = 0x58, + kVK_ANSI_Keypad7 = 0x59, + kVK_ANSI_Keypad8 = 0x5B, + kVK_ANSI_Keypad9 = 0x5C +}; + +/* keycodes for keys that are independent of keyboard layout*/ +enum { + kVK_Return = 0x24, + kVK_Tab = 0x30, + kVK_Space = 0x31, + kVK_Delete = 0x33, + kVK_Escape = 0x35, + kVK_Command = 0x37, + kVK_Shift = 0x38, + kVK_CapsLock = 0x39, + kVK_Option = 0x3A, + kVK_Control = 0x3B, + kVK_RightShift = 0x3C, + kVK_RightOption = 0x3D, + kVK_RightControl = 0x3E, + kVK_Function = 0x3F, + kVK_F17 = 0x40, + kVK_VolumeUp = 0x48, + kVK_VolumeDown = 0x49, + kVK_Mute = 0x4A, + kVK_F18 = 0x4F, + kVK_F19 = 0x50, + kVK_F20 = 0x5A, + kVK_F5 = 0x60, + kVK_F6 = 0x61, + kVK_F7 = 0x62, + kVK_F3 = 0x63, + kVK_F8 = 0x64, + kVK_F9 = 0x65, + kVK_F11 = 0x67, + kVK_F13 = 0x69, + kVK_F16 = 0x6A, + kVK_F14 = 0x6B, + kVK_F10 = 0x6D, + kVK_F12 = 0x6F, + kVK_F15 = 0x71, + kVK_Help = 0x72, + kVK_Home = 0x73, + kVK_PageUp = 0x74, + kVK_ForwardDelete = 0x75, + kVK_F4 = 0x76, + kVK_End = 0x77, + kVK_F2 = 0x78, + kVK_PageDown = 0x79, + kVK_F1 = 0x7A, + kVK_LeftArrow = 0x7B, + kVK_RightArrow = 0x7C, + kVK_DownArrow = 0x7D, + kVK_UpArrow = 0x7E +}; + +/* ISO keyboards only*/ +enum { + kVK_ISO_Section = 0x0A +}; + +/* JIS keyboards only*/ +enum { + kVK_JIS_Yen = 0x5D, + kVK_JIS_Underscore = 0x5E, + kVK_JIS_KeypadComma = 0x5F, + kVK_JIS_Eisu = 0x66, + kVK_JIS_Kana = 0x68 +}; + +#endif + + #ifndef USE_IOKIT // Some of the system key codes that maybe missing from IOKit. They appear to have shown up over the years. @@ -172,10 +331,10 @@ extern bool is_accessibility_enabled(); /* Converts an OSX keycode to the appropriate UIOHook scancode constant. */ -extern uint16_t keycode_to_scancode(UInt64 keycode); +extern uint16_t keycode_to_scancode(uint64_t keycode); /* Converts a UIOHook scancode constant to the appropriate OSX keycode. */ -extern UInt64 scancode_to_keycode(uint16_t keycode); +extern uint64_t scancode_to_keycode(uint16_t keycode); /* Fill the buffer with unicode chars produced by the event_ref, returns how many chars where written */ extern UniCharCount event_to_unicode(CGEventRef event_ref, UniChar *buffer, UniCharCount size); diff --git a/src/darwin/input_hook.c b/src/darwin/input_hook.c index bdbc062d..bc64ec15 100644 --- a/src/darwin/input_hook.c +++ b/src/darwin/input_hook.c @@ -42,10 +42,6 @@ typedef struct _event_runloop_info { static id auto_release_pool; #endif -#if __MAC_OS_X_VERSION_MAX_ALLOWED <= 1050 -typedef void* dispatch_queue_t; -#endif - #ifdef USE_EPOCH_TIME #include