Windows x64 Compiler Setup and Build Environment - df8oe/UHSDR GitHub Wiki

This page in fact contains two guides, a newer one, which gives you a straight forward path to a sucessful build in next to no time on a new machine. The second part is an older guide by Kevin, K2AAE, which is more detailled and flexible and may give you an idea how to setup up things in a more complex scenario. Beginners should use the first guide.

Guide 1: No Fuss Guide to get UHSDR Firmware Development Environment on Windows 7/8/10 64bit

This guide describes how to setup the enviroment and get the first build of the UHSDR firmware in next to no time. It assume you follow the guide exactly. It also assumes that you don't have Git for Windows (or some of the other stuff) already installed with non-default settings. In this case, the guide my or may not work.

The base for this was the following document: https://eclipse-embed-cdt.github.io/plugins/install/

Preparation

  • Create a dedicated folder for downloading and install everything. I use C:\Users\micky\uhsdr-dev in this guide.
  • Create two more folders inside downloads and installs
  • Inside installs create one folder called node
  • The machine must be connected to the Internet for the whole setup time. Later no permanent internet connection is required.

Downloads

These are all files you need to download. Download all of them ahead of time.

Links at the time of writing (2022-11-11)

Tool Link
Git for Windows https://github.com/git-for-windows/git/releases/download/v2.38.1.windows.1/Git-2.38.1-64-bit.exe
Eclipse Embedded CDT https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2022-09/R/eclipse-cpp-2022-09-R-win32-x86_64.zip
Node.js https://nodejs.org/dist/v19.0.1/node-v19.0.1-win-x64.zip
Recommended toolchain https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-win32.zip

Installation

Java Install (no longer required)

Newer Eclipse releases now include their own Java, hence you will not need to install Java anymore in order to use Eclipse. In fact, an installed Java may even cause Eclipse to fail on startup if Java is too old.

Version Control: Git For Windows

This needs administrator rights.

  • Just run the downloaded installer, leave all settings on their defaults.
  • Open Windows file explorer on the folder "C:\Users\micky\uhsdr-dev".
  • Now do open the context menu on this folder (right click). There should be an entry called "Git Bash Here". Select this one
  • A new windows should pop up and great you with a command prompt. Type ls and enter and it should list downloads and installs
  • Close window.
  • If any of this does not work, do not proceed, seek help.

Package Manager: Node.js and XPM

We use node.js to run an simple package manager called XPM

Node.js Install

To keep things simple, we just install node.js locally. If you have other node.js installs, this may be a problem or not. You may skip install and go to XPM Install but you have been warned. This is not supported by this guide.

  • Goto "downloads" folder.
  • Unzip node.js download ZIP
  • Copy the contents of the folder with program node.exe or node into the previously created folder installs/node/. Now node.exe should be found in installs\node
  • Open Git Bash or command prompt on installs\node
  • If any of this does not work, do not proceed, seek help.

XPM Install

  • type ./npm install --global xpm@latest
  • This should download and install xpm
  • You now should see xpm and xpm.cmd inside this folder
  • Keep the Bash window open.
  • If any of this does not work, do not proceed, seek help.

Eclipse Embedded CDT packages Install

In the bash window from the previous step, run the following commands. Do it one by one. These download and install required packages just in the right spot!

  • Use the Windows Bash terminal. It must be in installs\node (the prompt shows this)
./xpm install --global @xpack-dev-tools/windows-build-tools@latest --verbose
./xpm install --global @xpack-dev-tools/arm-none-eabi-gcc@latest --verbose
./xpm install --global @xpack-dev-tools/qemu-arm@latest --verbose
./xpm install --global @xpack-dev-tools/openocd@latest --verbose
./xpm install --global @xpack-dev-tools/cmake@latest --verbose
./xpm install --global @xpack-dev-tools/ninja-build@latest --verbose
./xpm install --global @xpack-dev-tools/meson-build@latest --verbose
  • If any of this does not work, do not proceed, seek help.

Eclipse Embedded CDT Install

  • Unzip the Eclipse Embedded CDT ZIP
  • Move (or copy) the folder eclipse to installs\eclipse
  • Start eclipse by running the program eclipse.exe or eclipse inside installs\eclipse
  • Enter C:\Users\micky\uhsdr-dev\workspace when asked for a workspace location
  • You should see a tool opening, with a welcome screen.
  • If any of this does not work, do not proceed, seek help.

Recommended toolchain setup

  • Goto "downloads" folder.
  • Unzip gcc-arm-none-eabi-xx.ZIP
  • Copy the contents of the folder to installs\GCC
  • Set the path in Eclipse to point recommended toolchan folder Window\Preferences\MCU\Global Arm Toolchain Paths\Toolchain folder set to installs\GCC\bin

The reason for using somewhat outdated toolchain is to make binaries smallest size possible, also latest version of compiler produces errors during build preventing creation of binaries.

Running your first build

We now run a test build using the "official" github repo directly. This is not really suitable for a contributor, but is the best way to test the setup.

Contributors should replace the path below with the path to their own forked clone of the UHSDR repository in Github. See the Contributing.md for more info on this

Import the Github repository

  • In Eclipse select "Import", "Git", and use "Clone URI" https://github.com/df8oe/UHSDR.git
  • In the dialogs do not specify a password or user, even if Eclipse fills these fields.
  • Import at least the branch active-devel but you may also import all branches if you like.
  • You will see two projects listed for import into workspace. Select "uhsdr/mchf-eclipse". The other project is not for the Eclipse Embedded CDT.
  • If any of this does not work, do not proceed, seek help.

Run the build

We don't need to add any settings to our Eclipse, GNU MCU will find all tools by itself since we installed them where GNU MCU Eclipse expects them.

  • Select Project-> Build Configurations -> Set Active -> DebugLibMCHF
  • Eclipse will start building the library, you'll see some output in the console window in the lower part.
  • This should finish without error.
  • If any of this does not work, do not proceed, seek help.
  • Select Project-> Build Configurations -> Set Active -> DebugMCHF
  • Eclipse will start building the firmware, you'll see some output in the console window in the lower part.
  • This should finish without error.
  • The resulting firmware binary is inside "DebugMCHF". Click on this folder in Eclipse, open context menu (right click) and click on the button behind the file name, this will open the Windows explorer on this folder.
  • If any of this does not work, do not proceed, seek help.

Tips

  • You can speed up build time by selecting multiple parallel builds by setting Project\Properties\C/C++ Build\Builder Settings\Builder type: to External builder and then in Behavior set Enable parallel build to Use optimal jobs which usually refers to your physical processors available in Windows. This setting speeds up compiler by increasing number of running compilation instances at the same time.
  • Opening in Eclipse some large source files such as ui_driver.c may cause display of syntax highlighting not working poperly, try to increase the scalability limit from default 5000 lines to lets say 25000. You can find the setting in Window\Preferences\C/C++\Editor\Scalability\Scalability mode detection.

That's all, folks!

Guide 2: GNU MCU Eclipse Install (VERY MUCH OUTDATED)

Sunday, September 17, 2017

Over the last month I've tried different ways to try and setup gcc but have had issues with ST's free stuff. I found GNU MCU Eclipse and tried it but never got it to work, no hello world joy. I found some time to walk through the site at GNU MCU and cherry picked what I thought was needed:

  • Do Not add the path to the environment of anything - This from GNU MCU Eclipse.

I have Windows 10 X64, however the instructions apply equally to Windows 7 and Windows 8 64 bit! Windows 32bit users cannot follow all of it and have a more complicated setup as GNU MCU Eclipse does not release 32bit Eclipse packages anymore.

This is the instructions: for X64 download the X64 software. That is x64 for Java and almost all other modules.

DON’T Get Eclipse - It is bundled with the GNU MCU Eclipse package!!!!!!

What to download and install

  • Java JRE

  • Get The latest recommended ARM tool chain

    • Download it from (https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads). You may either use the installer gcc-arm-none-eabi-X-20XX-qX-xxxxx-win32-sha2.exe for Windows 7 or newer or the zip gcc-arm-none-eabi-X-20XX-qX-xxxxx-win32.zip. Yes, there is only a 32bit variant of the tool chain, no 64 bit. The gcc-arm-none-eabi-8-2018-q4 win32-xxx packages are broken and don't work! Install the previous (or newer releases if they appear). Not this one.
    • Install it in the default location or unzip the zip and remember the path.
  • Get the Windows Build Tools

  • Get real-time debugging and direct flashing tools

    • OpenOCD (required for ST-Link)

    • J-Link (optional, requires J-Link debugger) If you own (or plan to getting a) J-link debugger (or want to use a reflashed ST-Link):

  • QEMU (Optional, not used)

  • GNU MCU Eclipse and Eclipse:

    • Download the latest version 20XXXXXX-XXXXXX-gnumcueclipse-X.X.X-XXXXXXX.win32.x86_64.zip from here (https://github.com/gnu-mcu-eclipse/org.eclipse.epp.packages/releases/) .
    • expand the zip to the ROOT of your drive (or within a folder path) with a rather short length. Expand may break during expansion with Filename too long if you try to expand in a folder with a too long name.

Setting up everything in Eclipse

  • Double click C:\eclispe\eclipse.exe (or where you unpacked the GNU MCU Eclipse package) and leave it alone for a few minutes.
  • then go to: Help/Check for Updates and install any updates.
  • Finally go to Window/Preferences/MCU/Global Arm Toolchains Paths and set up the path to the previously installed tools.

My tool chain from above was (replace with your installation paths and the "bin" at the end of most paths):

Settings Name Value(s) Comment
GNU Tools for ARM Embedded Processors C:\Program Files (x86)\GNU Tools ARM Embedded\7 2018-q2-update\bin I used the installer here
Global Build Tools Path Folder: C:\Users\kevin\GNU MCU Eclipse\Build Tools\2.11-20180428-1604\bin I unpacked in my user directory, you need to enter the full path to the bin directory!
Global OpenOCD Path Executable: openocd.exe, Folder: C:\Program Files\GNU ARM Eclipse\OpenOCD\0.10.0-10-20181020-0522\bin Required for real-time debugging with ST-Link
pyOCD - not used
Global QEMU Path Exectutable: qemu-system-gnuarmeclipse.exe, Folder: C:\Program Files\GNU ARM Eclipse\QEMU\2.8.0-201612271623-dev\bin optional, not used
Global SEGGER J-Link Path C:\Program Files (x86)\SEGGER/JLink_V620a\ optional, only if using a J-Link compatible debugger, not required for ST-Link

The Workspace setting override Global - Leave blank unless you know what you are doing. And never change these settings in the UHSDR project itself, leave also blank to use global or workspace settings.

Test Your Eclipse Setup

Create a Hello World Project to test:

  • Go to File/New/C Project
  • Enter Project name Hello
  • Select Hello World ARM C Project
  • Next and fill in the blanks
  • Next
  • Select GNU ARM Cross Toolchain
  • Finish
  • Select menu item Project/Build All. You shouldn't get any errors and the ouput in the build console (lower right) should look like this:
17:24:38 **** Build of configuration Release for project Hello ****
make all 
Building file: ../src/main.c
Invoking: GNU ARM Cross C Compiler
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections  -g -std=gnu11 -MMD -MP -MF"src/main.d" -MT"src/main.o" -c -o "src/main.o" "../src/main.c"
Finished building: ../src/main.c
 
Building target: Hello.elf
Invoking: GNU ARM Cross C Linker
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections  -g -Xlinker --gc-sections -Wl,-Map,"Hello.map" --specs=rdimon.specs -Wl,--start-group -lgcc -lc -lc -lm -lrdimon -Wl,--end-group -o "Hello.elf"  ./src/main.o   
Finished building target: Hello.elf
 
Invoking: GNU ARM Cross Create Flash Image
arm-none-eabi-objcopy -O ihex "Hello.elf"  "Hello.hex"
Finished building: Hello.hex
 
Invoking: GNU ARM Cross Print Size
arm-none-eabi-size --format=berkeley "Hello.elf"
   text	   data	    bss	    dec	    hex	filename
   8440	   2416	    296	  11152	   2b90	Hello.elf
Finished building: Hello.siz
 

17:24:39 Build Finished (took 1s.125ms)

Git Software

  • First you'll need a Github account, after you login visit https://github.com/df8oe/UHSDR and in the top right click Fork.
  • After you have your 'Fork' switch to your github account and select the new Git, click Clone and copy the URL.
  • Open your local repository folder, I keep mine at C:\gits so I would cd gits. You can use git: git clone https://github.com/YOURGITHUBREPOUSERNAME/UHSDR.git which will clone your fork of the git to c:\gits\UHSDR or use GitKracken or Github Desktop to clone your git.

After several days I noticed my github fork was behind the main git, you can update it with:

  • open command prompt or Git bash there / cd into any of your UHSDR firmware directories
  • Only once: git remote add upstream https://github.com/df8oe/UHSDR.git
  • The actual update: git pull --rebase upstream But that only updates the local HD copy. After hunting for a means to update the forked git in github I found how to do this with Github Desktop.

Updating my GitHub repo with the current version from my local disk

  • Branch drop down Merge into current branch... they list upstream/active-devel by selecting that as the current branch. I can Fetch all changes from DF8OE/UHSDR to my Github Local HD updating it to current, takes about 2 seconds,
  • then the Github Desktop shows I have objects to Push, click on that and the changes are Pushed into your Github Git. You can do the same with the git command line:
  • open command prompt or Git bash there / cd into any of your UHSDR firmware directories
  • Just do git push -f upstream

Import Project into Eclipse

After cloning the git I followed the prompts from the startup page in Eclipse to Import project from Git, selecting local git. After setting Active DebugLibMCHF and building I set Active DebugMCHF and built the project resulting in:

16:22:15 **** Incremental Build of configuration DebugMCHF for project mchf-eclipse ****
make -j4 all 
Building target: fw-mchf.elf
Invoking: Cross ARM C++ Linker
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -O2 -ffunction-sections -fdata-sections -flto -Wall  -g3 -T "C:\UHSDR\mchf-eclipse\arm-gcc-link.ld" -Xlinker --gc-sections -L"C:\UHSDR\mchf-eclipse\DebugLibMCHF" -Wl,-Map,"fw-mchf.map" --specs=nano.specs -u _printf_float -o 
--------snip ----- way to much information --
   -lmchf-eclipse -lc -lm -lnosys
Finished building target: fw-mchf.elf
 
Invoking: Cross ARM GNU Create Flash Image
Invoking: Cross ARM GNU Print Size
arm-none-eabi-objcopy -O binary "fw-mchf.elf"  "fw-mchf.bin"
arm-none-eabi-size --format=berkeley "fw-mchf.elf"
   text	   data	    bss	    dec	    hex	filename
 447876	   1992	  89976	 539844	  83cc4	fw-mchf.elf
Finished building: fw-mchf.siz
 
Finished building: fw-mchf.bin
 

16:22:41 Build Finished (took 26s.186ms)

Excellent Work on the project build! I believe this is the first time I've install a compiler, downloaded a project and built the project without errors in 30 years.

Kevin K2AAE