Building WSJT-X on MS Windows ============================= Here I describe my set up, you may have other preferences due to your favoured file system layout for tools, utilities, and libraries. Many variations are possible, use this guide as a template. The aim is to provide an environment suitable for general development. Prerequisite Tools and Libraries ================================ Here is an overview list, details are filled out below: * Qt Open Source Framework * Cmake build system generator * FFTW v3 DFT library * libusb usb device library * MSYS2 *nix like command line environment * Hamlib rig control library * Pkg Config Lite * Boost C++ libraries (see separate document) * portaudio library (used by map65) Qt Framework ------------ At the time of writing I recommend using Qt v5.15.2 64-bit, v5.15.1 has a defect that affects us so is best avoided. You need the MinGW version as we do not support the MSVC version due to lack of a suitable FOSS Fortran complier. To install the Qt developer SDK you should download the official Qt on-line installer, this allows you to install one or more variants of the Qt SDK and also to maintain and update the installation at a later date. There are many versions and components within versions available, you only need the base 64-bit MinGW framework for Qt v5.15.2 and the matching MinGW 8.1.0 64-bit developer tools, other components can be unchecked within the on-line installer. The default install location is C:\Qt which is fine, do not attempt to move the location of the installed libraries if you decide you want it elsewhere, the installer patches the libraries for the installed location and it is easier to un-install and re-install if you wish to change the installed location. CMake ----- Download and install a recent version from the official CMake web site. A default installation is fine. I am currently using v3.18.4, versions as old as v3.9 should work. Other tools and libraries without installers -------------------------------------------- For small libraries that don't have a Windows installer and change often I locate them under a directory C:\Tools. This location is arbitrary and just used to aggregate such items in one place, but this document assumes that location so you may need to adjust paths etc. if you use a different location. FFTW v3 DFT library ------------------- The MS Windows builds of FFTW3 can be downloaded from http://www.fftw.org/install/windows.html. The ZIP archives for this package have no directory structure so create a directory under C:\ Tools\ called fftw-3.3.5-dll64 and unzip the archive there. You only need the 64-bit package. libusb library -------------- This library is available from https://libusb.info/, download the .7z archive as the .zip archive does not contain the libraries we require. Unzip this package into C:\Tools. MSYS2 ----- This utility is available from https://www.msys2.org/. Follow the download, installation, and initial upgrading instructions there. Once installed and updated you will need to install some packages, these are needed to provide the necessary *nix tools and utilities to build Hamlib from sources. pacman -S autoconf automake libtool make tar Hamlib ------ There is a fork of the official Hamlib project which we keep up to date with the official project master branch, we recommend building from the 'integration' branch, or a suitable tag on that fork. The fork is a git repository which can be cloned with this command: mkdir -p ~/src/sf/bsomervi cd !$ git clone git://git.code.sf.net/u/bsomervi/hamlib hamlib cd hamlib git checkout integration Next you must build Hamlib using the MinGW compiler tools bundled with Qt. As you will build Hamlib again when there are updates you should set up you MSYS2 command line environment for this. I use a $HOME/.bash_profile file containing these lines: dll_paths_64bit=/c/Tools/libusb-1.0.23/MinGW64/dll:$HOME/local/hamlib/mingw64/release/bin export PATH=/c/Qt/Tools/mingw810_64/bin:$dll_paths_64bit:$PATH Test the amended ~/.bash_profile file by opening a new MSYS2 shell and typing: which gcc which libusb-1.0.dll The first time you checkout the Hamlib sources you must bootstrap the configuration script, this is done with a script at the root of the Hamlib sources: cd ~/src/sf/bsomervi/hamlib ./bootstrap Now you need to configure and build Hamlib from an MSYS2 shell. Create a build directory outside of the Hamlib sources you have just cloned, then change working directory to that build directory. mkdir -p ~/build/hamlib/release cd !$ ~/src/sf/bsomervi/hamlib/configure --enable-shared --disable-static \ --prefix=$HOME/local/hamlib/mingw64/release \ CFLAGS="-DNDEBUG -g -O2 -fdata-sections -ffunction-sections -I/c/Tools/libusb-1.0.23/include" \ CXXFLAGS="-DNDEBUG -g -O2 -fdata-sections -ffunction-sections" \ LDFLAGS="-Wl,--gc-sections" \ LIBUSB_LIBS="-L/c/Tools/libusb-1.0.23/MinGW64/dll -lusb-1.0" Then build and install the Hamlib package into a local directory: make & make install-strip If you wish you can make a debug configuration build of Hamlib which can be useful if you intended to contribute to the Hamlib project, or for tracking down issues: mkdir -p ~/build/hamlib/debug cd !$ ~/src/sf/bsomervi/hamlib/configure --enable-shared --disable-static \ --prefix=$HOME/local/hamlib/mingw64/debug \ CFLAGS="-g -O0 -I/c/Tools/libusb-1.0.23/include" \ CXXFLAGS="-g -O0" \ LIBUSB_LIBS="-L/c/Tools/libusb-1.0.23/MinGW64/dll -lusb-1.0" make && make install To update the Hamlib sources to the latest commit and rebuild: cd ~/src/sf/bsomervi/hamlib git pull cd ~/build/hamlib/release make & make install-strip cd ~/build/hamlib/debug make && make install Note that the WSJT-X CMake build script will not detect an updated build of the Hamlib DLL, so to avoid using an out-of-date Hamlib DLL you should delete the Hamlib DLL (libhamlib-4.dll) from your WSJT-X release configuration install tree before rebuilding and installing WSJT-X after a Hamlib update. Pkg Config Lite --------------- This package allows the WSJT-X CMake configuration to locate and learn the options needed to consume the Hamlib package. You can download it from https://sourceforge.net/projects/pkgconfiglite/files/0.28-1/ and unzip it into a convenient location, as with other ancillary tools and libraries I put these under C:\Tools\. portaudio --------- This library is only available as sources so must be built. It uses autotools and building using MinGW tools from an MSYS2 shell is recommended. Ensure your MSYS2 shell environment (PATH) is correctly set up for the MinGW tool chain you wish to build with, i.e. the MinGW tools bundled with the Qt installation for 32-, or 64-bit as required. Download this specific version's sources tarball from http://files.portaudio.com/download.html , at the time of writing that was the pa_stable_v190600_20161030.tgz file. Unzip and unpack the tarball in a suitable location like ~/src : cd ~/src tar xf ~/Downloads/pa_stable_v190600_20161030.tgz Note that on Windows portaudio will only build static libraries using the standard configuration, we prefer dynamic libraries for portaudio as users may wish to substitute a build of the library with ASIO support for personal use (we cannot redistribute binaries built from proprietary closed source sources like the Steinberg ASIO SDK). In order to build DLLs on Windows the configure script requires a patch as follows: sed -i -e 's/-luuid//g' ~/src/portaudio/configure This removes linker dependencies on the MS uuid library since it is only available as a static archive and using that would disallow shared library creation. Out-of-source-tree builds are recommended, create a build directory in a suitable location like ~/build and change working directory to it: mkdir -p ~/build/portaudio/mingw64 cd !$ Configure and build and install the library in a suitable place (I use ~/local as a root directory for installed packages. ~/src/portaudio/configure --prefix=$HOME/local/portaudio/mingw64 \ --with-winapi=wmme,directx,wdmks --disable-static --enable-shared CFLAGS=-DNDEBUG make && make install Repeat for the 32-bit architecture if required, using a suitable MSYS2 environment for the required tool chain, different build directory, and install location. Update your CMake tool chain files to include the install directory, or directories, above. I have something like this in the 64-bit tool chain files: # ... set (PORTAUDIODIR C:/Users/bill/local/portaudio/mingw64) # ... set (CMAKE_PREFIX_PATH ... ${PORTAUDIODIR} ...) #... and similarly with the 32-bit tool chain file specifying the mingw32 portaudio installation root directory. To run Debug configuration WSJT-X builds you will also need to add the location of the portaudio DLL to your PATH environment variable, like: SET "Path=%UserProfile%\local\portaudio\mingw64\bin;%Path%" Verify the setup with: WHERE libportaudio-2.dll