devsisters/libquic

Windows Support

gsymons opened this issue · 4 comments

Is there any plan to support windows 64bit? I want to use goquic, but it will fail as missing libquic.

We currently don't have any Windows development environment. But since Chromium supports Windows platform, I think this is doable. If you are interested in contributing, we are more than happy to help and guide you. :)

Thanks!

@serialx Here are the steps I have made so far in an attempt to compile this on Windows:

  • Installed cmake + added it to PATH
  • Installed ninja + added it to PATH
  • Installed 32bit Strawberry Perl + added it to PATH
  • Installed GO and added it to PATH
  • Installed NASM and installed it to PATH
  • Removed -Werror from boringssl\CMakeLists.txt - line 13 and 14
  • Changed boringssl\crypto\bio\CMakeLists.txt to the following in order to prevent building bio_test.exe (which failed)
include_directories(. .. ../../include)

add_library(
  bio

  OBJECT

  bio.c
  bio_mem.c
  buffer.c
  connect.c
  fd.c
  file.c
  hexdump.c
  pair.c
  printf.c
  socket.c
  socket_helper.c
)

# add_executable(
  # bio_test

  # bio_test.c
# )

# target_link_libraries(bio_test crypto)
# if (WIN32)
  # target_link_libraries(bio_test ws2_32)
# endif()

cmake -GNinja gives the following result

C:\tmp\libquic-master\build>cmake -GNinja ..
Using win32n
-- Configuring done
-- Generating done
-- Build files have been written to: C:/tmp/libquic-master/build

C:\tmp\libquic-master\build>cmake -GNinja ..
-- The C compiler identification is GNU 4.9.2
-- The CXX compiler identification is GNU 4.9.2
-- Check for working C compiler using: Ninja
-- Check for working C compiler using: Ninja -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler using: Ninja
-- Check for working CXX compiler using: Ninja -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Setting build type to 'Debug' as none was specified.
-- Found Perl: C:/StrawberryPerl32/perl/bin/perl.exe (found version "5.22.0")
Using win32n
-- The ASM_NASM compiler identification is unknown
-- Found assembler: C:/nasm/nasm.exe
-- Configuring done
-- Generating done
-- Build files have been written to: C:/tmp/libquic-master/build

ninja now compiles for a while - but gives the following error:

[348/592] Building CXX object CMakeFiles/quic.dir/src/net/quic/quic_connection.cc.obj
FAILED: C:\StrawberryPerl32\c\bin\c++.exe   -DUSE_OPENSSL -I../src -I../src/third_party/modp_b64 -I../boringssl/include -I../src/third_party/protobuf/src -Wall -std=gnu++11 -gdwarf-4 -g -MMD -MT CMakeFiles/quic.dir/src/net/quic/quic_connection.cc.obj -MF CMakeFiles/quic.dir/src/net/quic/quic_connection.cc.obj.d -o CMakeFiles/quic.dir/src/net/quic/quic_connection.cc.obj -c ../src/net/quic/quic_connection.cc
In file included from ../src/net/quic/quic_connection.cc:18:0:
../src/base/format_macros.h:81:2: error: #error "inttypes.h provided by win toolchain should define these."
 #error "inttypes.h provided by win toolchain should define these."
  ^
../src/net/quic/quic_connection.cc: In member function 'void net::QuicConnection::MaybeCloseIfTooManyOutstandingPackets()':
../src/net/quic/quic_connection.cc:1031:36: error: expected ')' before 'PRIu64'
         StringPrintf("More than %" PRIu64 " outstanding.", kMaxTrackedPackets));
                                    ^
../src/net/quic/quic_connection.cc:1031:78: warning: spurious trailing '%' in format [-Wformat=]
         StringPrintf("More than %" PRIu64 " outstanding.", kMaxTrackedPackets));
                                                                              ^
../src/net/quic/quic_connection.cc:1031:78: warning: too many arguments for format [-Wformat-extra-args]
../src/net/quic/quic_connection.cc:1038:36: error: expected ')' before 'PRIu64'
         StringPrintf("More than %" PRIu64 " outstanding.", kMaxTrackedPackets));
                                    ^
../src/net/quic/quic_connection.cc:1038:78: warning: spurious trailing '%' in format [-Wformat=]
         StringPrintf("More than %" PRIu64 " outstanding.", kMaxTrackedPackets));
                                                                              ^
../src/net/quic/quic_connection.cc:1038:78: warning: too many arguments for format [-Wformat-extra-args]
[348/592] Building CXX object CMakeFiles/quic.dir/src/net/quic/crypto/quic_crypto_server_config.cc.obj
In file included from C:/StrawberryPerl32/c/i686-w64-mingw32/include/ws2tcpip.h:17:0,
                 from ../src/net/base/sys_addrinfo.h:20,
                 from ../src/net/base/ip_endpoint.h:15,
                 from ../src/net/quic/crypto/quic_crypto_server_config.h:16,
                 from ../src/net/quic/crypto/quic_crypto_server_config.cc:5:
C:/StrawberryPerl32/c/i686-w64-mingw32/include/winsock2.h:15:2: warning: #warning Please include winsock2.h before windows.h [-Wcpp]
 #warning Please include winsock2.h before windows.h
  ^
ninja: build stopped: subcommand failed.

C:\tmp\libquic-master\build>

After fighting some more and making minor changes to some source files (that only had partial support for win32/64) - i have made some more progress. 407 of 592 files compiled using CMake & Ninja.

[407/592] Building CXX object CMakeFiles/quic.dir/src/net/quic/quic_crypto_client_stream.cc.obj
ninja: build stopped: subcommand failed.

C:\tmp\libquic-master\build>

@serialx Any clue on how to proceed? 😄

Any progress? I'd like to run a QUIC reverse proxy in the same VM my HTTP/1.1 webserver.