Zoltan Hudak / QtCreator_Support
Committer:
hudakz
Date:
Wed Oct 21 07:01:25 2020 +0000
Revision:
9:480495caa078
Parent:
8:66aa32957926
Mbed support for QtCreator IDE.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 9:480495caa078 1 #!/bin/bash
hudakz 9:480495caa078 2
hudakz 9:480495caa078 3 # Mbed tool for the QtCreator IDE.
hudakz 9:480495caa078 4
hudakz 9:480495caa078 5 # --------------------------------------------------------------------
hudakz 9:480495caa078 6 # Default settings. You can modify them according to your system.
hudakz 9:480495caa078 7 MBED_SYS_PATH=~/src/arm/sys
hudakz 9:480495caa078 8 LIB_PATH=~/src/arm/lib
hudakz 9:480495caa078 9 OS=6
hudakz 9:480495caa078 10 PROFILE=DEBUG
hudakz 9:480495caa078 11 PROJ_NAME=${PWD##*/}
hudakz 9:480495caa078 12 PORT=/dev/ttyACM0
hudakz 9:480495caa078 13
hudakz 9:480495caa078 14 # --------------------------------------------------------------------
hudakz 9:480495caa078 15 # Mbed command parser. Sets bash variables based on the selected Mbed CLI options.
hudakz 9:480495caa078 16 # Ones parsing is complete the options and arguments can be passed to Mbed CLI or other programs.
hudakz 9:480495caa078 17 MACROS=()
hudakz 9:480495caa078 18 SRC_LIB_PATH=()
hudakz 9:480495caa078 19 while [[ $# -gt 0 ]]
hudakz 9:480495caa078 20 do
hudakz 9:480495caa078 21 key="$1" # Get the first token of the command line
hudakz 9:480495caa078 22
hudakz 9:480495caa078 23 case $key in
hudakz 9:480495caa078 24 all|-f) # Flash target with binary.
hudakz 9:480495caa078 25 FLASH='-f'
hudakz 9:480495caa078 26 shift # past argument
hudakz 9:480495caa078 27 ;;
hudakz 9:480495caa078 28
hudakz 9:480495caa078 29 -c|clean) # Clean files before building.
hudakz 9:480495caa078 30 CLEAN='-c'
hudakz 9:480495caa078 31 shift # past argument
hudakz 9:480495caa078 32 ;;
hudakz 9:480495caa078 33
hudakz 9:480495caa078 34
hudakz 9:480495caa078 35 -D|--macro) # Add macro.
hudakz 9:480495caa078 36 MACROS+=('-D '$2)
hudakz 9:480495caa078 37 shift # past argument
hudakz 9:480495caa078 38 shift # past value
hudakz 9:480495caa078 39 ;;
hudakz 9:480495caa078 40
hudakz 9:480495caa078 41 -l) # Add library with relative path.
hudakz 9:480495caa078 42 SRC_LIB_PATH+=' --source '${LIB_PATH}/$2
hudakz 9:480495caa078 43 shift # past argument
hudakz 9:480495caa078 44 shift # past value
hudakz 9:480495caa078 45 ;;
hudakz 9:480495caa078 46
hudakz 9:480495caa078 47 -m) # Define target Micro-Controller Unit (MCU).
hudakz 9:480495caa078 48 MCU="$2"
hudakz 9:480495caa078 49 shift # past argument
hudakz 9:480495caa078 50 shift # past value
hudakz 9:480495caa078 51 ;;
hudakz 9:480495caa078 52
hudakz 9:480495caa078 53 -os) # Select Mbed Operating System (2 or other).
hudakz 9:480495caa078 54 OS="$2"
hudakz 9:480495caa078 55 shift # past argument
hudakz 9:480495caa078 56 shift # past value
hudakz 9:480495caa078 57 ;;
hudakz 9:480495caa078 58
hudakz 9:480495caa078 59 -p|--port) # Select serial port.
hudakz 9:480495caa078 60 PORT="$2"
hudakz 9:480495caa078 61 shift # past argument
hudakz 9:480495caa078 62 shift # past value
hudakz 9:480495caa078 63 ;;
hudakz 9:480495caa078 64
hudakz 9:480495caa078 65 -r|--release) # Select release build profile
hudakz 9:480495caa078 66 PROFILE=RELEASE
hudakz 9:480495caa078 67 shift # past argument
hudakz 9:480495caa078 68 ;;
hudakz 9:480495caa078 69
hudakz 9:480495caa078 70 *) # Take additional options and pass them to Mbed CLI.
hudakz 9:480495caa078 71 ARGS+=("$key ")
hudakz 9:480495caa078 72 shift # past argument
hudakz 9:480495caa078 73 ;;
hudakz 9:480495caa078 74 esac
hudakz 9:480495caa078 75 done
hudakz 9:480495caa078 76
hudakz 9:480495caa078 77 # --------------------------------------------------------------------
hudakz 9:480495caa078 78 # Set path to the selected Mbed OS tools and profile.
hudakz 9:480495caa078 79 if [ ${OS} == 2 ]
hudakz 9:480495caa078 80 then
hudakz 9:480495caa078 81 GCC_ARM_PATH=/opt/gcc-arm-none-eabi-6-2017-q2-update
hudakz 9:480495caa078 82 MBED_OS_PATH=${MBED_SYS_PATH}/mbed
hudakz 9:480495caa078 83 CUSTOM_TARGETS_PATH=${MBED_SYS_PATH}/custom_targets/mbed
hudakz 9:480495caa078 84 PROF=debug
hudakz 9:480495caa078 85 if [ ${PROFILE} == RELEASE ]
hudakz 9:480495caa078 86 then
hudakz 9:480495caa078 87 PROF=release
hudakz 9:480495caa078 88 fi
hudakz 9:480495caa078 89 else
hudakz 9:480495caa078 90 GCC_ARM_PATH=/opt/gcc-arm-none-eabi-9-2019-q4-major
hudakz 9:480495caa078 91 MBED_OS_PATH=${MBED_SYS_PATH}/mbed-os
hudakz 9:480495caa078 92 CUSTOM_TARGETS_PATH=${MBED_SYS_PATH}/custom_targets/mbed-os
hudakz 9:480495caa078 93 PROF=${MBED_SYS_PATH}/mbed-os/tools/profiles/debug.json
hudakz 9:480495caa078 94 if [ ${PROFILE} == RELEASE ]
hudakz 9:480495caa078 95 then
hudakz 9:480495caa078 96 PROF=${MBED_SYS_PATH}/mbed-os/tools/profiles/release.json
hudakz 9:480495caa078 97 fi
hudakz 9:480495caa078 98 fi
hudakz 9:480495caa078 99
hudakz 9:480495caa078 100 # --------------------------------------------------------------------
hudakz 9:480495caa078 101 # Call Mbed CLI "config" command to set path to the toolchain (GCC ARM) and Mbed OS (2 or other)
hudakz 9:480495caa078 102 mbed config -G GCC_ARM_PATH ${GCC_ARM_PATH}/bin
hudakz 9:480495caa078 103 mbed config -G MBED_OS_DIR ${MBED_OS_PATH}
hudakz 9:480495caa078 104
hudakz 9:480495caa078 105 # --------------------------------------------------------------------
hudakz 9:480495caa078 106 # Create a new project if no such exists yet.
hudakz 9:480495caa078 107 if ! [ -f ./.mbed ]
hudakz 9:480495caa078 108 then
hudakz 9:480495caa078 109 mbed new .
hudakz 9:480495caa078 110 fi
hudakz 9:480495caa078 111
hudakz 9:480495caa078 112 # --------------------------------------------------------------------
hudakz 9:480495caa078 113 # Execute Mbed CLI "export" command using the selected options.
hudakz 9:480495caa078 114 mbed export -i qtcreator -m ${MCU} --source . --source ${CUSTOM_TARGETS_PATH} --source ${MBED_OS_PATH} --source ${GCC_ARM_PATH}/arm-none-eabi/include ${SRC_LIB_PATH}
hudakz 9:480495caa078 115
hudakz 9:480495caa078 116 # --------------------------------------------------------------------
hudakz 9:480495caa078 117 # Add additional files to the project to be available in the QtCreator IDE for editing.
hudakz 9:480495caa078 118 find ~/.local/bin -name "mbed.bat" >> ${PROJ_NAME}.files
hudakz 9:480495caa078 119 find . -name "*.json" >> ${PROJ_NAME}.files
hudakz 9:480495caa078 120 find . -name "*.mbedignore" >> ${PROJ_NAME}.files
hudakz 9:480495caa078 121
hudakz 9:480495caa078 122 # --------------------------------------------------------------------
hudakz 9:480495caa078 123 # Execute Mbed CLI "compile" command using the selected options.
hudakz 9:480495caa078 124 mbed compile -t GCC_ARM -m ${MCU} ${ARGS} --source . --source ${CUSTOM_TARGETS_PATH} --source ${MBED_OS_PATH} ${SRC_LIB_PATH} $CLEAN --profile ${PROF} |tee ./BUILD/compile_output.txt
hudakz 9:480495caa078 125
hudakz 9:480495caa078 126 # Check for a binary built by Mbed CLI.
hudakz 9:480495caa078 127 RESULT=$(grep "Elf2Bin" ./BUILD/compile_output.txt)
hudakz 9:480495caa078 128
hudakz 9:480495caa078 129 # --------------------------------------------------------------------
hudakz 9:480495caa078 130 # The following commands are for flashing some selected targets.
hudakz 9:480495caa078 131 # You can delete (or ignore) the whole section below if you prefer to flash your targets using the "drag & drop" or other methods.
hudakz 9:480495caa078 132
hudakz 9:480495caa078 133 # If the compilation succeeded (a binary exists) flash the target MCU with the resulted binary file.
hudakz 9:480495caa078 134 if [ "${RESULT}" != "" ]
hudakz 9:480495caa078 135 then
hudakz 9:480495caa078 136 # Uncomment the following lines if you want to build a "hex" file for Flash Magic.
hudakz 9:480495caa078 137 #if [ "${MCU}" == "LPC1768DBG" ]
hudakz 9:480495caa078 138 #then
hudakz 9:480495caa078 139 # ${GCC_ARM_PATH}/bin/arm-none-eabi-objcopy -I binary -O ihex ./BUILD/${MCU}/GCC_ARM-${PROFILE}/${PROJ_NAME}.bin ./BUILD/${MCU}/GCC_ARM-${PROFILE}/${PROJ_NAME}.hex
hudakz 9:480495caa078 140 #fi
hudakz 9:480495caa078 141
hudakz 9:480495caa078 142 # If the "all" or "-f" option was selected choose the right tool and configuration.
hudakz 9:480495caa078 143 if [ "${FLASH}" == "-f" ]
hudakz 9:480495caa078 144 then
hudakz 9:480495caa078 145 case ${MCU} in
hudakz 9:480495caa078 146 # Targets supported by pyOCD
hudakz 9:480495caa078 147 LPC1768|LPC1768DBG)
hudakz 9:480495caa078 148 MCU_CFG="pyOCD"
hudakz 9:480495caa078 149 ;;
hudakz 9:480495caa078 150 # Targets supported by OpenOCD.
hudakz 9:480495caa078 151 # Configure OpenOCD according to the selected target.
hudakz 9:480495caa078 152 BLUEPILL|MAPLE_MINI|NUCLEO_F103RB|STM32F103RC|STM32F103VE)
hudakz 9:480495caa078 153 MCU_CFG="/usr/local/share/openocd/scripts/board/st_nucleo_f103rb.cfg"
hudakz 9:480495caa078 154 ;;
hudakz 9:480495caa078 155 NUCLEO_F411RE|NUCLEO_F446RE|STM32F407VE)
hudakz 9:480495caa078 156 MCU_CFG="/usr/local/share/openocd/scripts/board/st_nucleo_f4.cfg"
hudakz 9:480495caa078 157 ;;
hudakz 9:480495caa078 158 NUCLEO_F767ZI)
hudakz 9:480495caa078 159 MCU_CFG="/usr/local/share/openocd/scripts/board/stm32f7discovery.cfg"
hudakz 9:480495caa078 160 ;;
hudakz 9:480495caa078 161 # Warn when flashing of selected target MCU is not supported.
hudakz 9:480495caa078 162 *)
hudakz 9:480495caa078 163 MCU_CFG="not_supported"
hudakz 9:480495caa078 164 echo "No support to flash "${MCU}
hudakz 9:480495caa078 165 ;;
hudakz 9:480495caa078 166 esac
hudakz 9:480495caa078 167
hudakz 9:480495caa078 168 # When the target MCU is supported flash the target MCU with the binary code.
hudakz 9:480495caa078 169 if [ "$MCU_CFG" != "not_supported" ]
hudakz 9:480495caa078 170 then
hudakz 9:480495caa078 171 echo "Flashing the "${MCU}" ..."
hudakz 9:480495caa078 172 case ${MCU_CFG} in
hudakz 9:480495caa078 173 # Use pyOCD to flash the target when port was specified.
hudakz 9:480495caa078 174 pyOCD)
hudakz 9:480495caa078 175 if [ "$PORT" == "/dev/ttyACM0" ]
hudakz 9:480495caa078 176 then
hudakz 9:480495caa078 177 # Use pyOCD to flash the target when port was specified.
hudakz 9:480495caa078 178 ~/.local/bin/pyocd-flashtool -t lpc1768 ./BUILD/${MCU}/GCC_ARM-${PROFILE}/${PROJ_NAME}.bin
hudakz 9:480495caa078 179 else
hudakz 9:480495caa078 180 # Use "lpc2isp" otherwise.
hudakz 9:480495caa078 181 lpc21isp -bin ./BUILD/${MCU}/GCC_ARM-${PROFILE}/${PROJ_NAME}.bin ${PORT} 115200 96000
hudakz 9:480495caa078 182 fi
hudakz 9:480495caa078 183 ;;
hudakz 9:480495caa078 184 # Use OpenOCD to flash the target MCU
hudakz 9:480495caa078 185 *)
hudakz 9:480495caa078 186 openocd -f ${MCU_CFG} -c """program ./BUILD/${MCU}/GCC_ARM-${PROFILE}/${PROJ_NAME}.elf verify reset exit"""
hudakz 9:480495caa078 187 ;;
hudakz 9:480495caa078 188 esac
hudakz 9:480495caa078 189 echo "Done."
hudakz 9:480495caa078 190 fi
hudakz 9:480495caa078 191 fi
hudakz 9:480495caa078 192 fi