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.

124 lines
3.7 KiB

6 years ago
6 years ago
adjust install_avr function to use unzip for broader compatibility (#4596) On a laptop with god knows what mandatory security software (Cylance?), running up-to-date Windows 10 with msys2 mingw-64, attempting to install the AVR toolkit results in the following error: ``` 1 [main] 7z (13316) C:\msys32\usr\lib\p7zip\7z.exe: *** fatal error - cygheap base mismatch detected - 0x612A5410/0x2375410. This problem is probably due to using incompatible versions of the cygwin DLL. Search for cygwin1.dll using the Windows Start->Find/Search facility and delete all but the most recent version. The most recent version *should* reside in x:\cygwin\bin, where 'x' is the drive on which you have installed the cygwin distribution. Rebooting is also suggested if you are unable to find another cygwin DLL. ``` This appears to be related in some way, based on my research, to ASLR functionality in security software. Since I'm unable to override whatever is enforcing ASLR on my system, after trying several other approaches (removing other copies of msys-2.0.dll, which is what this is apparently actually referencing, rebasing that file in Windows to address 0x61000000, a few other things) I simply edited the installation shell script to use `unzip` instead of 7zip; `unzip`'s binary does not provoke a mismatch error and the installation proceeds as it should. I'm not aware of the reason why some parts of the install script use `unzip` (e.g. `install_arm`) and others use 7zip, but it seems that for broader compatibility and sparing users on locked down machines the 120 minutes or so of futzing this took me to fix, it might be better to just use `unzip` in all cases. Note: There is another function that uses 7zip, `extract_flip`. The line is `7z -oflip x FlipInstaller.exe`. I'm not sure what this is doing, or whether it's possible to do it with `unzip`, but it produces the same error. I haven't attempted to fix that in this PR, but it might be good to fix it for the same reason.
5 years ago
6 years ago
6 years ago
  1. #!/bin/bash
  2. dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
  3. download_dir=~/qmk_utils
  4. avrtools=avr8-gnu-toolchain
  5. armtools=gcc-arm-none-eabi
  6. installflip=false
  7. util_dir=$(dirname "$0")
  8. echo "Installing dependencies needed for the installation (quazip)"
  9. pacman --needed -S base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-clang msys/git msys/p7zip msys/python3 msys/unzip
  10. source "$dir/win_shared_install.sh"
  11. function install_avr {
  12. rm -f -r "$avrtools"
  13. wget "http://ww1.microchip.com/downloads/en/DeviceDoc/avr8-gnu-toolchain-3.6.1.1752-win32.any.x86.zip"
  14. echo "Extracting AVR toolchain..."
  15. unzip -q avr8-gnu-toolchain-3.6.1.1752-win32.any.x86.zip
  16. mv avr8-gnu-toolchain-win32_x86/ avr8-gnu-toolchain
  17. rm __MACOSX -R
  18. rm avr8-gnu-toolchain-3.6.1.1752-win32.any.x86.zip
  19. pacman --needed -S mingw-w64-x86_64-avrdude
  20. }
  21. function install_arm {
  22. wget -O gcc-arm-none-eabi.zip "https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-win32.zip?product=GNU%20ARM%20Embedded%20Toolchain,ZIP,,Windows,6-2017-q2-update"
  23. unzip -d gcc-arm-none-eabi gcc-arm-none-eabi.zip
  24. rm gcc-arm-none-eabi.zip
  25. }
  26. function extract_flip {
  27. rm -f -r flip
  28. 7z -oflip x FlipInstaller.exe
  29. }
  30. pushd "$download_dir"
  31. if [ -f "FlipInstaller.exe" ]; then
  32. echo
  33. echo "Extracting flip"
  34. extract_flip
  35. fi
  36. if [ ! -d "$avrtools" ]; then
  37. while true; do
  38. echo
  39. echo "The AVR toolchain is not installed."
  40. echo "This is needed for building AVR based keboards."
  41. read -p "Do you want to install it? (Y/N) " res
  42. case $res in
  43. [Yy]* ) install_avr; break;;
  44. [Nn]* ) break;;
  45. * ) echo "Invalid answer";;
  46. esac
  47. done
  48. else
  49. while true; do
  50. echo
  51. echo "The AVR toolchain is already installed"
  52. read -p "Do you want to reinstall? (Y/N) " res
  53. case $res in
  54. [Yy]* ) install_avr; break;;
  55. [Nn]* ) break;;
  56. * ) echo "Invalid answer";;
  57. esac
  58. done
  59. fi
  60. if [ ! -d "$armtools" ]; then
  61. while true; do
  62. echo
  63. echo "The ARM toolchain is not installed."
  64. echo "This is needed for building ARM based keyboards."
  65. read -p "Do you want to install it? (Y/N) " res
  66. case $res in
  67. [Yy]* ) install_arm; break;;
  68. [Nn]* ) break;;
  69. * ) echo "Invalid answer";;
  70. esac
  71. done
  72. else
  73. while true; do
  74. echo
  75. echo "The ARM toolchain is already installed"
  76. read -p "Do you want to reinstall? (Y/N) " res
  77. case $res in
  78. [Yy]* ) install_arm; break;;
  79. [Nn]* ) break;;
  80. * ) echo "Invalid answer";;
  81. esac
  82. done
  83. fi
  84. popd
  85. pip3 install -r ${util_dir}/../requirements.txt
  86. cp -f "$dir/activate_msys2.sh" "$download_dir/"
  87. if grep "^source ~/qmk_utils/activate_msys2.sh$" ~/.bashrc
  88. then
  89. echo
  90. echo "The line source ~/qmk_utils/activate_msys2.sh is already added to your /.bashrc"
  91. echo "Not adding it twice!"
  92. else
  93. while true; do
  94. echo
  95. echo "Do you want to add 'source ~/qmk_utils/activate_msys2.sh' to the end of your"
  96. echo ".bashrc file? Without this make won't find the needed utils, so if you don't"
  97. echo "want to do it automatically, then you have to do it manually later."
  98. read -p "(Y/N)? " res
  99. case $res in
  100. [Yy]* ) echo "source ~/qmk_utils/activate_msys2.sh" >> ~/.bashrc; break;;
  101. [Nn]* ) break;;
  102. * ) echo "Invalid answer";;
  103. esac
  104. done
  105. fi
  106. echo
  107. echo "******************************************************************************"
  108. echo "Installation completed!"
  109. echo "Please close this Window and restart MSYS2 MinGW"
  110. echo "******************************************************************************"