171eb4000SDmitri TikhonovLiteSpeed QUIC (LSQUIC) Library - Building for Windows 271eb4000SDmitri Tikhonov====================================================== 3eef4f2fcSDmitri Tikhonov 4eef4f2fcSDmitri TikhonovDescription 5eef4f2fcSDmitri Tikhonov----------- 6eef4f2fcSDmitri Tikhonov 7eef4f2fcSDmitri TikhonovThis document is intended to supplement the document README.md at the 871eb4000SDmitri Tikhonovroot of the distribution of the LiteSpeed QUIC (LSQUIC) Library 9eef4f2fcSDmitri Tikhonovto build the library and programs in a Windows environment. 10eef4f2fcSDmitri Tikhonov 1171eb4000SDmitri TikhonovThe addition of Windows support to the LSQUIC was a contribution 12eef4f2fcSDmitri Tikhonovfrom the user community and this document was based on our experiences 13eef4f2fcSDmitri Tikhonovof validating the code. As for the overall implementation, do not hesitate 14eef4f2fcSDmitri Tikhonovto report bugs back to us. Even better, continue to send us fixes and 15eef4f2fcSDmitri Tikhonovimprovements - it makes the code better for everyone. 16eef4f2fcSDmitri Tikhonov 17eef4f2fcSDmitri Tikhonov 18eef4f2fcSDmitri TikhonovPreliminaries 19eef4f2fcSDmitri Tikhonov------------- 20eef4f2fcSDmitri TikhonovIt it recommended that the installer have experience with Windows development, 21eef4f2fcSDmitri TikhonovVisual Studio, and open source projects in Windows. These instructions assume 22eef4f2fcSDmitri Tikhonova general build, primarily for 64-bit, both of a debug and a release version. 23eef4f2fcSDmitri Tikhonov 24eef4f2fcSDmitri TikhonovSome open source code required to be installed to build the code include: 25eef4f2fcSDmitri Tikhonov - The [Git version control system executable for Windows](https://git-scm.com/download/win). 26eef4f2fcSDmitri Tikhonov - A version of the Visual Studio development environment for Windows. 27eef4f2fcSDmitri Tikhonov The Windows SDK and C++ must be installed from it. The 28eef4f2fcSDmitri Tikhonov [Visual Studio Community Edition](https://www.visualstudio.com/thank-you-downloading-visual-studio) will be just fine. 29eef4f2fcSDmitri Tikhonov - [cmake for Windows](https://cmake.org/download/). Download and install the 30eef4f2fcSDmitri Tikhonov version appropriate for the development/target platform (32 vs 64-bits, 31eef4f2fcSDmitri Tikhonov etc.). 32eef4f2fcSDmitri Tikhonov - The Windows vcpkg package manager. It can be cloned from [here](https://github.com/Microsoft/vcpkg). 3371eb4000SDmitri Tikhonov Clone it at the same level to be used to clone/develop the lsquic. 34eef4f2fcSDmitri Tikhonov The package must be compiled following the instructions on the git 359711bfbaSLiteSpeed Tech repository. 369711bfbaSLiteSpeed Tech - Perform builds using the _Developer Command Prompt for Visual Studio_ instead 379711bfbaSLiteSpeed Tech of the regular `cmd.exe`. 38eef4f2fcSDmitri Tikhonov - Once the package manager has been built, it must be used to install 39eef4f2fcSDmitri Tikhonov and build some open source projects. Before doing that, an environment 40eef4f2fcSDmitri Tikhonov variable must be defined which specifies how the package should be built. 41eef4f2fcSDmitri Tikhonov The easiest way would be to add it into the system environment variables 42eef4f2fcSDmitri Tikhonov in the System applet of the Windows Control Panel. This example assumes 43eef4f2fcSDmitri Tikhonov 64-bit static libraries will be built, which is what is generally 44eef4f2fcSDmitri Tikhonov recommended: 45eef4f2fcSDmitri Tikhonov ``` 46eef4f2fcSDmitri Tikhonov VCPKG_DEFAULT_TRIPLET=x64-windows-static 47eef4f2fcSDmitri Tikhonov ``` 48eef4f2fcSDmitri Tikhonov - From the command line, once the variable above has been defined, install 49eef4f2fcSDmitri Tikhonov both *zlib* and *libevent*. Note that libevent may also automatically 50eef4f2fcSDmitri Tikhonov install *openssl*. If it does not, it may need to be manually specified 5171eb4000SDmitri Tikhonov to properly link the lsquic executables. 52eef4f2fcSDmitri Tikhonov ``` 538573794bSMaxim Sharabayko vcpkg install zlib:x64-windows-static 549711bfbaSLiteSpeed Tech vcpkg install libevent:x64-windows-static 559711bfbaSLiteSpeed Tech vcpkg integrate install 56eef4f2fcSDmitri Tikhonov ``` 579711bfbaSLiteSpeed Tech - Clone and compile boringssl. It can be cloned from [here](https://boringssl.googlesource.com/boringssl). 589711bfbaSLiteSpeed Tech 59eef4f2fcSDmitri Tikhonov ``` 609711bfbaSLiteSpeed Tech git clone https://boringssl.googlesource.com/boringssl 619711bfbaSLiteSpeed Tech cd boringssl 62eef4f2fcSDmitri Tikhonov cmake -DCMAKE_GENERATOR_PLATFORM=x64 --config Debug -DBUILD_SHARED_LIBS=OFF -DOPENSSL_NO_ASM=1 . 639711bfbaSLiteSpeed Tech msbuild ALL_BUILD.vcxproj 649711bfbaSLiteSpeed Tech set boringssl=%cd% 65eef4f2fcSDmitri Tikhonov ``` 66eef4f2fcSDmitri Tikhonov - Visual Studio can be run, and the project opened within the boringssl 67eef4f2fcSDmitri Tikhonov directory. Set the solution configuration to *Debug* and the solution 68eef4f2fcSDmitri Tikhonov platform to *64-bit*. Compile the project. 69eef4f2fcSDmitri Tikhonov - Repeat the cmake and compile steps replacing *Debug* with *Release*. 70eef4f2fcSDmitri Tikhonov 7171eb4000SDmitri TikhonovMake and Compile LSQUIC 7271eb4000SDmitri Tikhonov----------------------- 73eef4f2fcSDmitri Tikhonov 749711bfbaSLiteSpeed Tech 7571eb4000SDmitri TikhonovClone lsquic: 769711bfbaSLiteSpeed Tech 77eef4f2fcSDmitri Tikhonov ``` 7871eb4000SDmitri Tikhonov git clone https://github.com/litespeedtech/lsquic.git --recurse-submodules 7971eb4000SDmitri Tikhonov cd lsquic 80eef4f2fcSDmitri Tikhonov ``` 81eef4f2fcSDmitri Tikhonov 829711bfbaSLiteSpeed TechConfigure the build using cmake (you can specify `Release` instead of `Debug` 839711bfbaSLiteSpeed Techto build an optimized version of the library, but that won't build tests): 849711bfbaSLiteSpeed Tech 85eef4f2fcSDmitri Tikhonov ``` 869711bfbaSLiteSpeed Tech cmake -DCMAKE_GENERATOR_PLATFORM=x64 -DBUILD_SHARED_LIBS=OFF ^ 879711bfbaSLiteSpeed Tech -DVCPKG_TARGET_TRIPLET=x64-windows-static -DCMAKE_BUILD_TYPE=Debug ^ 889711bfbaSLiteSpeed Tech -DCMAKE_TOOLCHAIN_FILE=c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake ^ 899711bfbaSLiteSpeed Tech -DBORINGSSL_DIR=%boringssl% . 90eef4f2fcSDmitri Tikhonov ``` 91eef4f2fcSDmitri Tikhonov 929711bfbaSLiteSpeed TechCompile everything (add `/m` flag if you have processors to spare): 93eef4f2fcSDmitri Tikhonov 94eef4f2fcSDmitri Tikhonov ``` 959711bfbaSLiteSpeed Tech msbuild ALL_BUILD.vcxproj 96eef4f2fcSDmitri Tikhonov ``` 97eef4f2fcSDmitri Tikhonov 989711bfbaSLiteSpeed Tech`http_client.exe` should be found in the `Debug` (or `Release`) directory. 999711bfbaSLiteSpeed Tech 1009711bfbaSLiteSpeed TechRun tests (assuming `Debug` build): 1019711bfbaSLiteSpeed Tech 1029711bfbaSLiteSpeed Tech ``` 1039711bfbaSLiteSpeed Tech msbuild RUN_TESTS.vcxproj 1049711bfbaSLiteSpeed Tech ``` 105eef4f2fcSDmitri Tikhonov 106eef4f2fcSDmitri TikhonovHave fun, 107eef4f2fcSDmitri Tikhonov 108eef4f2fcSDmitri TikhonovLiteSpeed QUIC Team. 109eef4f2fcSDmitri Tikhonov 11071eb4000SDmitri TikhonovCopyright (c) 2017 - 2020 LiteSpeed Technologies Inc 111