diff --git a/docs/native_node_modules.md b/docs/native_node_modules.md index 7a565cb4..6b7785e7 100644 --- a/docs/native_node_modules.md +++ b/docs/native_node_modules.md @@ -21,44 +21,20 @@ the microphone in a call) and is ONLY enabled during a call and while setting the keybinding in settings. If you would like to rebuild the module yourself and replace the downloaded -binaries, then first make sure you have [iohook's -dependencies](https://wilix-team.github.io/iohook/manual-build.html#ubuntu-16) -installed. Then execute the following commands from Riot's root directory: +binaries, then first make sure you have the following dependencies. Then +simply execute `build-native-modules.sh` with the following flags: ```bash -cd electron_app -yarn -cd node_modules -rm -rf iohook -git clone https://github.com/matrix-org/iohook -cd iohook -npm i -rm -rf builds/* # Delete any downloaded binaries -npm run build # This builds libuiohook -node build.js --runtime electron --version 4.1.3 --abi 69 --no-upload # This builds the module for the current OS +./scripts/build-native-modules.sh -e 4.2.6 -a 69 -i ``` -You then need to copy the built module to the correct folder depending on the operating system and architecture you're building for: +`-e` specifies the electron version, `-a` specifies the electron ABI version, +and `-i` tells the script to build iohook and then install it. + +If you'd just like to build the module without installing it, use `-I` instead. ```bash -# Run one of the following depending on your architecture: -# 64-bit -osarch="64" -# 32-bit -osarch="32" - -# Run one of the following depending on your operating system: -# Windows -ostype="win32" -# Linux -ostype="linux" -# MacOS -ostype="darwin" - -# Finally, copy the module: -folder="electron-v69-$ostype-x$osarch" -mkdir -p builds/$folder/build/Release -cp build/Release/iohook.node builds/$folder/build/Release/ +./scripts/build-native-modules.sh -e 4.2.6 -a 69 -I ``` -The electron version of Riot can then be built normally according to the [build instructions](../README.md#running-as-a-desktop-app). \ No newline at end of file +To then start Electron, use `npx electron .`. To package, use `build -wml -ia32 --x64`. \ No newline at end of file diff --git a/scripts/build-native-modules.sh b/scripts/build-native-modules.sh index 29b4ea70..2beffaa3 100755 --- a/scripts/build-native-modules.sh +++ b/scripts/build-native-modules.sh @@ -1,24 +1,77 @@ #!/bin/bash # -# Builds and installs iohook for Push-to-Talk functionality +# Builds and installs native node modules # # Dependencies # -# Common: -# - npm, yarn +# iohook +# Common: +# - npm, yarn # -# Linux: -# - apt install build-essentials cmake +# Linux: +# - apt install build-essentials cmake # -# MacOS: -# - Xcode developer tools -# - brew -# - brew install cmake automake libtool pkg-config +# MacOS: +# - Xcode developer tools +# - brew +# - brew install cmake automake libtool pkg-config +# +# Windows: +# - unsupported set -ex -electron_version="4.2.6" -abi="69" +usage() { + echo "Usage: $0 -e -a [-i] [-I]" + echo + echo "version: Electron version to use. Ex: 4.2.6" + echo + echo "electron_abi: ABI of the chosen electron version." + echo "Electron v4.2.6's ABI is 69" + echo + echo "i: Build the iohook native node module for Push-to-Talk functionality" + echo "I: Same as -i, but just output the node module in the current directory" +} + +while getopts "e:a:i" opt; do + case $opt in + e) + electron_version=$OPTARG + ;; + a) + electron_abi=$OPTARG + ;; + i) + iohook=1 + ;; + I) + iohook_export=1 + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + usage + exit + ;; + esac +done + +if [ -z ${electron_version+x} ]; then + echo "No Electron version supplied" + usage + exit 1 +fi + +if [ -z ${electron_abi+x} ]; then + echo "No Electron ABI supplied" + usage + exit 1 +fi + +if [ -z ${iohook+x} ] || [ -z ${iohook_export+x} ]; then + echo "Please specify a module to build" + usage + exit 1 +fi echo "Detecting OS..." case "$OSTYPE" in @@ -27,7 +80,11 @@ case "$OSTYPE" in ostype="darwin" ;; msys*) - echo "Windows is unsupported at this time" + if [ -z ${iohook+x} ] || [ -z ${iohook_export+x} ]; then + echo "Building iohook on Windows is unsupported at this time" + exit 1 + fi + ostype="win" ;; *) echo "Found Linux." @@ -66,8 +123,8 @@ git clone https://github.com/matrix-org/iohook cd iohook npm i || echo "Ignoring broken pre-build packages" rm -rf builds/* -npm run build -node build.js --runtime electron --version $electron_version --abi $abi --no-upload +npm run build # This builds libuiohook +node build.js --runtime electron --version $electron_version --abi $abi --no-upload # Builds the module for the current OS/node version # Install echo "Installing built package"