Bläddra i källkod

Merge pull request #1491 from fredizzimo/msys2

Add support for msys2 build environment
Jack Humbert 8 år sedan
förälder
incheckning
6ed8ce4f59

+ 1 - 0
.gitignore

@@ -23,6 +23,7 @@ quantum/version.h
 CMakeLists.txt
 CMakeLists.txt
 .DS_STORE
 .DS_STORE
 /util/wsl_downloaded
 /util/wsl_downloaded
+/util/win_downloaded
 
 
 # Eclipse/PyCharm/Other IDE Settings
 # Eclipse/PyCharm/Other IDE Settings
 .cproject
 .cproject

+ 2 - 2
message.mk

@@ -21,8 +21,8 @@ OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n
 ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n
 ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n
 WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n
 WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n
 
 
-TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }'
-TAB_LOG_PLAIN = printf "$$LOG\n"
+TAB_LOG = printf "\n%s\n\n" "$$LOG" | $(AWK) '{ sub(/^/," | "); print }'
+TAB_LOG_PLAIN = printf "%s\n" "$$LOG"
 AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }'
 AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }'
 AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }'
 AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }'
 PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && $(ON_ERROR)
 PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && $(ON_ERROR)

+ 0 - 1
quantum/keymap_common.c

@@ -169,7 +169,6 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
 }
 }
 
 
 // translates key to keycode
 // translates key to keycode
-__attribute__ ((weak))
 uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
 uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
 {
 {
     // Read entire word (16bits)
     // Read entire word (16bits)

+ 4 - 1
tests/basic/keymap.c

@@ -40,4 +40,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
         }
         }
     }
     }
     return MACRO_NONE;
     return MACRO_NONE;
-};
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+}

+ 3 - 0
tests/test_common/matrix.c

@@ -58,3 +58,6 @@ void release_key(uint8_t col, uint8_t row) {
 void clear_all_keys(void) {
 void clear_all_keys(void) {
     memset(matrix, 0, sizeof(matrix));
     memset(matrix, 0, sizeof(matrix));
 }
 }
+
+void led_set(uint8_t usb_led) {
+}

+ 2 - 2
tests/test_common/test_fixture.cpp

@@ -44,8 +44,8 @@ void TestFixture::run_one_scan_loop() {
     advance_time(1);
     advance_time(1);
 }
 }
 
 
-void TestFixture::idle_for(uint time) {
-    for (uint i=0; i<time; i++) {
+void TestFixture::idle_for(unsigned time) {
+    for (unsigned i=0; i<time; i++) {
         run_one_scan_loop();
         run_one_scan_loop();
     }
     }
 }
 }

+ 1 - 1
tests/test_common/test_fixture.hpp

@@ -26,5 +26,5 @@ public:
     static void TearDownTestCase();
     static void TearDownTestCase();
 
 
     void run_one_scan_loop();
     void run_one_scan_loop();
-    void idle_for(uint ms);
+    void idle_for(unsigned ms);
 };
 };

+ 5 - 0
tmk_core/native.mk

@@ -1,3 +1,5 @@
+SYSTEM_TYPE := $(shell gcc -dumpmachine)
+
 CC = gcc
 CC = gcc
 OBJCOPY = 
 OBJCOPY = 
 OBJDUMP = 
 OBJDUMP = 
@@ -14,6 +16,9 @@ COMPILEFLAGS += -funsigned-bitfields
 COMPILEFLAGS += -ffunction-sections
 COMPILEFLAGS += -ffunction-sections
 COMPILEFLAGS += -fdata-sections
 COMPILEFLAGS += -fdata-sections
 COMPILEFLAGS += -fshort-enums
 COMPILEFLAGS += -fshort-enums
+ifneq ($(findstring mingw, ${SYSTEM_TYPE}),)
+COMPILEFLAGS += -mno-ms-bitfields
+endif
 
 
 CFLAGS += $(COMPILEFLAGS)
 CFLAGS += $(COMPILEFLAGS)
 CFLAGS += -fno-inline-small-functions
 CFLAGS += -fno-inline-small-functions

+ 16 - 0
util/activate_msys2.sh

@@ -0,0 +1,16 @@
+#!/bin/bash
+
+function export_variables {
+    local util_dir=~/qmk_utils
+    export PATH=$PATH:$util_dir/dfu-programmer
+    export PATH=$PATH:$util_dir/dfu-util-0.9-win64
+    export PATH=$PATH:$util_dir/flip/bin
+    export PATH=$PATH:$util_dir/avr8-gnu-toolchain/bin
+    export PATH=$PATH:$util_dir/gcc-arm-none-eabi/bin
+}
+
+export_variables
+
+
+
+

+ 117 - 0
util/msys2_install.sh

@@ -0,0 +1,117 @@
+#!/bin/bash
+
+dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
+download_dir=~/qmk_utils
+avrtools=avr8-gnu-toolchain
+armtools=gcc-arm-none-eabi
+installflip=false
+
+echo "Installing dependencies needed for the installation (quazip)"
+pacman --needed -S msys/unzip msys/p7zip base-devel msys/git mingw-w64-x86_64-toolchain
+
+source "$dir/win_shared_install.sh"
+
+function install_avr {
+    rm -f -r "$avrtools"
+    wget "http://www.atmel.com/images/avr8-gnu-toolchain-installer-3.5.4.91-win32.any.x86.exe"
+    7z x avr8-gnu-toolchain-installer-3.5.4.91-win32.any.x86.exe
+    rm avr8-gnu-toolchain-installer-3.5.4.91-win32.any.x86.exe
+}
+
+function install_arm {
+    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"
+    unzip -d gcc-arm-none-eabi gcc-arm-none-eabi.zip
+    rm gcc-arm-none-eabi.zip
+}
+
+function extract_flip {
+    rm -f -r flip
+    7z -oflip x FlipInstaller.exe
+}
+
+pushd "$download_dir"
+
+if [ -f "FlipInstaller.exe" ]; then
+    echo
+    echo "Extracting flip"
+    extract_flip
+fi
+
+if [ ! -d "$avrtools" ]; then
+    while true; do
+        echo
+        echo "The AVR toolchain is not installed."
+        echo "This is needed for building AVR based keboards."
+        read -p "Do you want to install it? (Y/N) " res
+        case $res in
+            [Yy]* ) install_avr; break;;
+            [Nn]* ) break;;
+            * ) echo "Invalid answer";;
+        esac
+    done
+else
+    while true; do
+        echo
+        echo "The AVR toolchain is already installed"
+        read -p "Do you want to reinstall? (Y/N) " res
+        case $res in
+            [Yy]* ) install_avr; break;;
+            [Nn]* ) break;;
+            * ) echo "Invalid answer";;
+        esac
+    done
+fi
+
+if [ ! -d "$armtools" ]; then
+    while true; do
+        echo
+        echo "The ARM toolchain is not installed."
+        echo "This is needed for building ARM based keboards."
+        read -p "Do you want to install it? (Y/N) " res
+        case $res in
+            [Yy]* ) install_arm; break;;
+            [Nn]* ) break;;
+            * ) echo "Invalid answer";;
+        esac
+    done
+else
+    while true; do
+        echo
+        echo "The ARM toolchain is already installed"
+        read -p "Do you want to reinstall? (Y/N) " res
+        case $res in
+            [Yy]* ) install_arm; break;;
+            [Nn]* ) break;;
+            * ) echo "Invalid answer";;
+        esac
+    done
+fi
+popd
+
+cp -f "$dir/activate_msys2.sh" "$download_dir/"
+
+if grep "^source ~/qmk_utils/activate_msys2.sh$" ~/.bashrc
+then
+    echo
+    echo "The line source ~/qmk_utils/activate_msys2.sh is already added to your /.bashrc"
+    echo "Not adding it twice!"
+else
+    while true; do
+        echo
+        echo "Do you want to add 'source ~/qmk_utils/activate_msys2.sh' to the end of your"
+        echo ".bashrc file? Without this make won't find the needed utils, so if you don't"
+        echo "want to do it automatically, then you have to do it manually later."
+        read -p "(Y/N)? " res
+        case $res in
+            [Yy]* ) echo "source ~/qmk_utils/activate_msys2.sh" >> ~/.bashrc; break;;
+            [Nn]* ) break;;
+            * ) echo "Invalid answer";;
+        esac
+    done
+fi
+
+echo
+echo "******************************************************************************"
+echo "Installation completed!"
+echo "Please close this Window and restart MSYS2 MinGW"
+echo "******************************************************************************"

+ 80 - 0
util/win_shared_install.sh

@@ -0,0 +1,80 @@
+#!/bin/bash
+
+function install_utils {
+    rm -f -r "$download_dir"
+    mkdir "$download_dir"
+
+    pushd "$download_dir"
+
+    echo "Installing dfu-programmer"
+    wget 'http://downloads.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip'
+    unzip -d dfu-programmer dfu-programmer-win-0.7.2.zip
+
+    echo "Installing dfu-util"
+    wget 'http://dfu-util.sourceforge.net/releases/dfu-util-0.9-win64.zip'
+    unzip dfu-util-0.9-win64.zip
+
+    echo "Installing teensy_loader_cli"
+    wget 'https://www.pjrc.com/teensy/teensy_loader_cli_windows.zip'
+    unzip teensy_loader_cli_windows.zip
+
+    echo "Installing Atmel Flip"
+    wget 'http://www.atmel.com/images/Flip%20Installer%20-%203.4.7.112.exe'
+    mv Flip\ Installer\ \-\ 3.4.7.112.exe FlipInstaller.exe
+
+    echo "Downloading the QMK driver installer"
+    wget -qO- https://api.github.com/repos/qmk/qmk_driver_installer/releases | grep browser_download_url | head -n 1 | cut -d '"' -f 4 | wget -i -
+
+    rm -f *.zip
+
+    popd > /dev/null
+}
+
+function install_drivers {
+    pushd "$download_dir"
+    cp -f "$dir/drivers.txt" .
+    echo 
+    cmd.exe /c "qmk_driver_installer.exe $1 $2 drivers.txt"
+    popd > /dev/null
+}
+
+pushd "$dir"
+
+if [ ! -d "$download_dir" ]; then
+    install_utils
+else
+    while true; do
+        echo
+        echo "The utils seem to already be downloaded."
+        read -p "Do you want to re-download them and update to the newest version (Y/N) " res
+        case $res in
+            [Yy]* ) install_utils; break;;
+            [Nn]* ) break;;
+            * ) echo "Invalid answer";;
+        esac
+    done
+fi
+
+while true; do
+    echo
+    echo "Which USB drivers do you want to install?"
+    echo "(A)all - All supported drivers will be installed"
+    echo "(C)onnected - Only drivers for connected keyboards (in bootloader/flashing mode)"
+    echo "              will be installed"
+    echo "(F)force - Like all, but will also override existing drivers for connected"
+    echo "           keyboards"
+    echo "(N)one - No drivers will be installed,"
+    echo "         flashing your keyboard will most likely not work"
+    read -p "(A/C/F/N)? " res
+    case $res in
+        [Aa]* ) install_drivers --all; break;;
+        [Cc]* ) install_drivers; break;;
+        [Ff]* ) install_drivers --all --force; break;;
+        [Nn]* ) break;;
+        * ) echo "Invalid answer";;
+    esac
+done
+
+
+popd > /dev/null
+

+ 16 - 78
util/wsl_install.sh

@@ -1,44 +1,7 @@
 #!/bin/bash
 #!/bin/bash
 
 
-download_dir=wsl_downloaded
-
-function install_utils {
-    rm -f -r $download_dir
-    mkdir $download_dir
-
-    pushd $download_dir
-
-    echo "Installing dfu-programmer"
-    wget 'http://downloads.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip'
-    unzip -d dfu-programmer dfu-programmer-win-0.7.2.zip
-
-    echo "Installing dfu-util"
-    wget 'http://dfu-util.sourceforge.net/releases/dfu-util-0.9-win64.zip'
-    unzip dfu-util-0.9-win64.zip
-
-    echo "Installing teensy_loader_cli"
-    wget 'https://www.pjrc.com/teensy/teensy_loader_cli_windows.zip'
-    unzip teensy_loader_cli_windows.zip
-
-    echo "Installing Atmel Flip"
-    wget 'http://www.atmel.com/images/Flip%20Installer%20-%203.4.7.112.exe'
-    mv Flip\ Installer\ \-\ 3.4.7.112.exe FlipInstaller.exe
-
-    echo "Downloading the QMK driver installer"
-    wget -qO- https://api.github.com/repos/qmk/qmk_driver_installer/releases | grep browser_download_url | head -n 1 | cut -d '"' -f 4 | wget -i -
-
-    rm -f *.zip
-
-    popd > /dev/null
-}
-
-function install_drivers {
-    pushd $download_dir
-    cmd.exe /C qmk_driver_installer.exe $1 $2 ../drivers.txt
-    popd > /dev/null
-}
-
 dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
 dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
+pushd "$dir";
 
 
 if [[ $dir != /mnt/* ]];
 if [[ $dir != /mnt/* ]];
 then
 then
@@ -48,7 +11,6 @@ then
     exit 1
     exit 1
 fi
 fi
 
 
-pushd "$dir"
 
 
 while true; do
 while true; do
     echo
     echo
@@ -67,49 +29,25 @@ echo "Installing dependencies needed for the installation (unzip, wget)"
 echo "This will ask for the sudo password"
 echo "This will ask for the sudo password"
 sudo apt-get install unzip wget
 sudo apt-get install unzip wget
 
 
+download_dir=wsl_downloaded
 
 
-if [ ! -d "$download_dir" ]; then
-    install_utils
-else
-    while true; do
-        echo
-        read -p "The utils seem to already be downloaded, do you want to re-download them and update to the newest version (Y/N) " res
-        case $res in
-            [Yy]* ) install_utils; break;;
-            [Nn]* ) break;;
-            * ) echo "Invalid answer";;
-        esac
-    done
-fi
+source "$dir/win_shared_install.sh"
 
 
+pushd "$download_dir"
 while true; do
 while true; do
     echo
     echo
-    read -p "Flip need to be installed if you want to use that for programming, do you want to install it now? (Y/N) " res
+    echo "Flip need to be installed if you want to use that for programming."
+    echo "Please install it to the default location!"
+    read -p "Do you want to install it now? (Y/N) " res
     case $res in
     case $res in
-        [Yy]* ) cmd.exe /c $download_dir\\FlipInstaller.exe; break;;
+        [Yy]* ) cmd.exe /c FlipInstaller.exe; break;;
         [Nn]* ) break;;
         [Nn]* ) break;;
         * ) echo "Invalid answer";;
         * ) echo "Invalid answer";;
     esac
     esac
 done
 done
+popd
 
 
 
 
-while true; do
-    echo
-    echo "Which USB drivers do you want to install?"
-    echo "(A)all - All supported drivers will be installed"
-    echo "(C)onnected - Only drivers for connected keyboards (in bootloader/flashing mode) will be installed"
-    echo "(F)force - Like all, but will also override existing drivers for connected keyboards"
-    echo "(N)one - No drivers will be installed, flashing your keyboard will most likely not work"
-    read -p "(A/C/F/N)? " res
-    case $res in
-        [Aa]* ) install_drivers --all; break;;
-        [Cc]* ) install_drivers; break;;
-        [Ff]* ) install_drivers --all --force; break;;
-        [Nn]* ) break;;
-        * ) echo "Invalid answer";;
-    esac
-done
-
 echo 
 echo 
 echo "Creating a softlink to the utils directory as ~/qmk_utils."
 echo "Creating a softlink to the utils directory as ~/qmk_utils."
 echo "This is needed so that the the make system can find all utils it need."
 echo "This is needed so that the the make system can find all utils it need."
@@ -124,9 +62,9 @@ then
 else
 else
     while true; do
     while true; do
         echo
         echo
-        echo "Do you want to add 'source ~/qmk_utils/activate_wsl.sh' to the end of you .bashrc file?"
-        echo "Without this make won't find the needed utils, so if you don't want to do it automatically,"
-        echo "then you have to do it manually."
+        echo "Do you want to add 'source ~/qmk_utils/activate_wsl.sh' to the end of your"
+        echo ".bashrc file? Without this make won't find the needed utils, so if you don't"
+        echo "want to do it automatically, then you have to do it manually later."
         read -p "(Y/N)? " res
         read -p "(Y/N)? " res
         case $res in
         case $res in
             [Yy]* ) echo "source ~/qmk_utils/activate_wsl.sh" >> ~/.bashrc; break;;
             [Yy]* ) echo "source ~/qmk_utils/activate_wsl.sh" >> ~/.bashrc; break;;
@@ -138,9 +76,10 @@ fi
 
 
 while true; do
 while true; do
     echo
     echo
-    echo "Do you want to add a symlink to the QMK repository in your home directory for convenience?"
-    echo "This will create a folder 'qmk_firmware' in your home directory."
-    echo "In the future you can use this folder instead of the full path on your windows file system"
+    echo "Do you want to add a symlink to the QMK repository in your home directory for"
+    echo "convenience? This will create a folder 'qmk_firmware' in your home directory."
+    echo "In the future you can use this folder instead of the full path on your Windows"
+    echo "file system."
     read -p "(Y/N)? " res
     read -p "(Y/N)? " res
     case $res in
     case $res in
         [Yy]* ) ln -sfn "$dir/.." ~/qmk_firmware; break;;
         [Yy]* ) ln -sfn "$dir/.." ~/qmk_firmware; break;;
@@ -156,4 +95,3 @@ echo "You need to open a new batch command prompt for all the utils to work prop
 echo "******************************************************************************"
 echo "******************************************************************************"
 
 
 popd > /dev/null
 popd > /dev/null
-