You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.6 KiB

  1. #!/bin/sh
  2. # NOTE: This script uses tabs for indentation
  3. errcho() {
  4. echo "$@" >&2
  5. }
  6. USAGE="Usage: $0 [keyboard[:keymap[:target]]]"
  7. # Check preconditions
  8. for arg; do
  9. if [ "$arg" = "--help" ]; then
  10. echo "$USAGE"
  11. exit 0
  12. fi
  13. done
  14. if [ $# -gt 1 ]; then
  15. errcho "$USAGE"
  16. exit 1
  17. elif ! command -v docker >/dev/null 2>&1; then
  18. errcho "Error: docker not found"
  19. errcho "See https://docs.docker.com/install/#supported-platforms for installation instructions"
  20. exit 2
  21. fi
  22. # Determine arguments
  23. if [ $# -eq 0 ]; then
  24. printf "keyboard=" && read -r keyboard
  25. [ -n "$keyboard" ] && printf "keymap=" && read -r keymap
  26. [ -n "$keymap" ] && printf "target=" && read -r target
  27. else
  28. IFS=':' read -r keyboard keymap target x <<-EOF
  29. $1
  30. EOF
  31. if [ -n "$x" ]; then
  32. errcho "$USAGE"
  33. exit 1
  34. fi
  35. fi
  36. if [ -z "$keyboard" ]; then
  37. keyboard=all
  38. fi
  39. if [ -n "$target" ]; then
  40. if [ "$(uname)" = "Linux" ] || docker-machine active >/dev/null 2>&1; then
  41. usb_args="--privileged -v /dev:/dev"
  42. else
  43. errcho "Error: target requires docker-machine to work on your platform"
  44. errcho "See http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos"
  45. errcho "Consider flashing with QMK Toolbox (https://github.com/qmk/qmk_toolbox) instead"
  46. exit 3
  47. fi
  48. fi
  49. dir=$(pwd -W 2>/dev/null) || dir=$PWD # Use Windows path if on Windows
  50. # Run container and build firmware
  51. docker run --rm -it $usb_args \
  52. --user $(id -u):$(id -g) \
  53. -w /qmk_firmware \
  54. -v "$dir":/qmk_firmware \
  55. -e ALT_GET_KEYBOARDS=true \
  56. -e SKIP_GIT="$SKIP_GIT" \
  57. -e MAKEFLAGS="$MAKEFLAGS" \
  58. qmkfm/base_container \
  59. make "$keyboard${keymap:+:$keymap}${target:+:$target}"