These directories contain scripts to help build and package OpenVPN and its dependencies for various hardware platforms and operating systems (e.g. Windows, ARM). You do not need any of these scripts if you're building a native version of OpenVPN on a UNIX-like operatingsystem.
Thorough documentation is available in the OpenVPN wiki:
The "generic" subdir contains scripts to cross-compile OpenVPN using mingw_w64 (e.g. Linux -> Windows).
The "msvc" subdir is used to compile OpenVPN on Windows for Windows using Microsoft Visual Studio 2017.
The "windows-nsis" subdir contains scripts to cross-compile and package OpenVPN for Windows.
Please refer to the README files in the subdirectories for further information.
The "generic/patches" directory contains patches applied to openvpn or its dependencies ("products") before starting the build. The product name is determined from the first part of the patch filename before a dash ("-").
Currently patches are blindly applied regardless of the production version. This is mostly a problem with OpenSSL where differences between releases may be large enough to cause patching failures. In those cases the offending patch can be safely disabled. In particular, OpenSSL 1.1.0j requires a Makefile patch that will fail on OpenSSL 1.1.1. That patch will be removed once upstream has fixed the problem.