mirror of
https://libwebsockets.org/repo/libwebsockets
synced 2024-12-04 13:57:15 +00:00
9f1d019352
Replace the bash selftest plumbing with CTest. To use the selftests, build with -DLWS_WITH_MINIMAL_EXAMPLES=1 and `CTEST_OUTPUT_ON_FAILURE=1 make test` or just `make test`. To disable tests that require internet access, also give -DLWS_CTEST_INTERNET_AVAILABLE=0 Remove travis and appveyor scripts on master. Remove travis and appveyor decals on README.md.
215 lines
6.6 KiB
Markdown
215 lines
6.6 KiB
Markdown
# Some notes for the windows jungle
|
|
|
|
This was how I compiled libwebsockets starting from a blank windows install
|
|
in March - April 2020. Doing this on a linux distro is way simpler and quicker
|
|
than all this!
|
|
|
|
## Notes on vm installation
|
|
|
|
### Disk size
|
|
|
|
For building you'll need 40GB+ available for the guest storage.
|
|
|
|
### Required: Windows product key
|
|
|
|
Assuming like me the first thing you do with a new laptop is install Linux over
|
|
the windows it came with, you can recover your 'windows tax' windows product key
|
|
from your device typically using `sudo strings /sys/firmware/acpi/tables/MSDM`,
|
|
and use that for your VM install.
|
|
|
|
### Required: Spice guest
|
|
|
|
To have shared clipboard, and for windows video driver to match your vm window
|
|
resolution, you must install spice guest tools inside the windows VM. It also
|
|
installs some virtio pieces you will want.
|
|
|
|
https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe
|
|
|
|
### Blood-pressure reduction: Firefox
|
|
|
|
https://www.mozilla.org/en-US/exp/firefox/
|
|
|
|
When it's up, add-ons: ublock origin, privacy badger, noscript, disable search
|
|
bar prediction
|
|
|
|
### Blood-pressure reduction: Clink
|
|
|
|
This is a hack on cmd.exe that lets it understand Ctrl-R and fixup unix-style
|
|
slashes automagically.
|
|
|
|
https://github.com/mridgers/clink/releases/download/0.4.9/clink_0.4.9_setup.exe
|
|
|
|
If you're usually using *nix, you definitely need this to keep your sanity.
|
|
|
|
### Required: cmake
|
|
|
|
CMake have a windows installer thing downloadable from here
|
|
|
|
[cmake](https://cmake.org/download/)
|
|
|
|
after that you can use `cmake` from the terminal OK.
|
|
|
|
### Required: git
|
|
|
|
Visit the canonical git site to download their windows installer thing
|
|
|
|
[git](https://git-scm.com/download/win)
|
|
|
|
**Select the install option for "extra unix commands"** so you can get `ls -l`,
|
|
`cp`, `mv` and suchlike working in cmd.exe... that's awesome, thanks git!
|
|
|
|
Afterwards you can just use `git` as normal from cmd.exe as well.
|
|
|
|
### Required: Install the "free" "community" visual studio
|
|
|
|
You can do this through "windows store" by searching for "visual studio"
|
|
|
|
I installed as little as possible, we just want the C "C++" tools... 7GB :-)
|
|
|
|
It still wouldn't link without the "mt" helper tool from the
|
|
huge windows SDK, so you have to install GB of that as well.
|
|
|
|
They don't mention it during the install, but after 30 days this "free"
|
|
"community" edition demands you open a microsoft account or it stops working.
|
|
In the install they give you the option to add a microsoft account and the
|
|
alternative is, "not now, maybe later". Compare and contrast to gcc or git or
|
|
the other FOSS projects.
|
|
|
|
### Required: OpenSSL
|
|
|
|
Ugh... I tried using prebuilts but it's unreliable and needs an unfeasible
|
|
amount of trust. So I recommend bite the bullet and build your own... that's
|
|
trivial on Linux but of course windows makes everything nasty.
|
|
|
|
At least hopefully all the "research" is done and listed out here.
|
|
|
|
#### OpenSSL build Prerequisite: install perl binary
|
|
|
|
Move the git version of perl out of the way, it won't work for OpenSSL build
|
|
|
|
```
|
|
mv /usr/bin/perl /usr/bin/perl-git
|
|
```
|
|
|
|
For windows, OpenSSL "recommends" ActiveState perl but it doesn't work for me,
|
|
complaining about stuff needed from cpan and then dying when it was installed.
|
|
"Strawberry Perl" is installed in `C:\Strawberry` and worked out the box.
|
|
|
|
http://strawberryperl.com/download/5.30.2.1/strawberry-perl-5.30.2.1-64bit.msi
|
|
|
|
The installer sets up `%PATH%` if you open a new cmd window.
|
|
|
|
#### OpenSSL build Prerequisite: NASM
|
|
|
|
Go here and click on the latest stable, download the win32 .exe
|
|
|
|
https://nasm.us/
|
|
|
|
Just install via the defaults. Then add it to the PATH temporarily...
|
|
|
|
```
|
|
$ set PATH=%PATH%;C:\Program Files (x86)\NASM
|
|
```
|
|
|
|
#### OpenSSL build setup: source VC env vars
|
|
|
|
These fix up the PATH and include dirs etc necessary for VC build in the cmd
|
|
window.
|
|
|
|
```
|
|
$ call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
|
|
```
|
|
|
|
### OpenSSL build:
|
|
|
|
Grab openssl from git... assuming the prerequisites above went well it will
|
|
just sit there building for 30 minutes or whatever.
|
|
|
|
```
|
|
$ git clone https://github.com/openssl/openssl
|
|
$ cd openssl
|
|
$ perl Configure VC-WIN64A
|
|
$ nmake
|
|
```
|
|
|
|
Afterwards, open an Administrator mode cmd.exe, redo the msvc path and then
|
|
install the build.
|
|
|
|
```
|
|
$ cd openssl
|
|
$ call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
|
|
$ nmake install
|
|
```
|
|
|
|
Oh another grindingly slow windows build action. Finally it's in there in
|
|
`C:\Program Files\OpenSSL`.
|
|
|
|
libraries are looking for a cert bundle at "C:\Program Files\Common Files\SSL\cert.pem"...
|
|
it's not documented or included in the zip file from the above, so...
|
|
|
|
#### Installing a cert bundle
|
|
|
|
You can get a trusted cert bundle from here
|
|
|
|
[drwetter/testssl cert bundle](https://raw.githubusercontent.com/drwetter/testssl.sh/3.1dev/etc/Microsoft.pem)
|
|
|
|
Save it into `C:\Program Files\Common Files\SSL\cert.pem` where openssl will be able to see it.
|
|
|
|
## Required: pthreads
|
|
|
|
It's amazing but after all these years windows doesn't offer pthreads compatibility
|
|
itself. Just like the many other missing POSIX bits like fork().
|
|
|
|
I downloaded the latest (2012) zip release of pthreads-win32 from here
|
|
|
|
ftp://sourceware.org/pub/pthreads-win32
|
|
|
|
Then I created a dir "C:\Program Files (x86)\pthreads", and copied the `dll`,
|
|
`include` and `lib` subdirs from the `prebuilt` folder in the zip there.
|
|
|
|
The cmake incantation to build against pthreads set up like that is
|
|
|
|
```
|
|
$ cmake .. -DLWS_HAVE_PTHREAD_H=1 -DLWS_EXT_PTHREAD_INCLUDE_DIR="C:\Program Files (x86)\pthreads\include" -DLWS_EXT_PTHREAD_LIBRARIES="C:\Program Files (x86)\pthreads\lib\x64\libpthreadGC2.a" -DLWS_WITH_MINIMAL_EXAMPLES=1
|
|
```
|
|
|
|
## Building libwebsockets
|
|
|
|
We'll clone libwebsockets then use cmake to build via vs tools
|
|
|
|
```
|
|
> git clone https://libwebsockets.org/repo/libwebsockets
|
|
> cd libwebsockets
|
|
> mkdir build
|
|
> cd build
|
|
> cmake ..
|
|
> cmake --build . --config DEBUG
|
|
```
|
|
|
|
Installing requires admin privs, I opened a second cmd window as admin and did it
|
|
there.
|
|
|
|
```
|
|
> cmake --install . --config DEBUG
|
|
```
|
|
|
|
### Hack the libs into view
|
|
|
|
The libs we built against aren't visible in the system, I don't know what
|
|
Real Windows Programmers are supposed to do about that, but I used an Admin cmd
|
|
prompt to copy them into C:\windows\system32
|
|
|
|
```
|
|
$ cp "C:\Program Files (x86)\pthreads\dll\x64\pthreadGC2.dll" "C:\Program Files\OpenSSL\bin\libcrypto-3.dll" "C:\Program Files\OpenSSL\bin\libssl-3.dll" C:\Windows\system32
|
|
```
|
|
|
|
After that you can run the test apps OK, eg
|
|
|
|
```
|
|
$ libwebsockets-test-server.exe -s
|
|
```
|
|
|
|
## Note about using paths with spaces in with cmake
|
|
|
|
|