Skip to content

Support OpenSSL on Windows #11477

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 44 additions & 2 deletions .github/workflows/win.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,13 @@ jobs:
id: cache-libs
uses: actions/cache@v2
with:
path: libs
path: | # openssl and llvm take much longer to build so they are cached separately
libs/pcre.lib
libs/gc.lib
libs/z.lib
libs/mpir.lib
libs/yaml.lib
libs/xml2.lib
key: win-libs-${{ hashFiles('.github/workflows/win.yml') }}
- name: Download libgc
if: steps.cache-libs.outputs.cache-hit != 'true'
Expand Down Expand Up @@ -138,6 +144,41 @@ jobs:
mv libyaml/Release/yaml.lib libs/
mv libxml2/Release/libxml2s.lib libs/xml2.lib

- name: Cache OpenSSL
id: cache-openssl
uses: actions/cache@v2
with:
path: |
libs/crypto.lib
libs/ssl.lib
key: win-openssl-libs-3.0.0
- name: Set up NASM
if: steps.cache-openssl.outputs.cache-hit != 'true'
uses: ilammy/setup-nasm@e2335e5fc95548c09cd2deea2768793e0e8f0941 # v1.2.1
- name: Download OpenSSL
if: steps.cache-openssl.outputs.cache-hit != 'true'
run: |
iwr https://www.openssl.org/source/openssl-3.0.0.tar.gz -OutFile openssl.tar.gz
(Get-FileHash -Algorithm SHA256 .\openssl.tar.gz).hash -eq "59eedfcb46c25214c9bd37ed6078297b4df01d012267fe9e9eee31f61bc70536"
7z x openssl.tar.gz
7z x openssl.tar
del pax_global_header
mv openssl-* openssl
- name: Build OpenSSL
if: steps.cache-openssl.outputs.cache-hit != 'true'
working-directory: ./openssl
run: |
perl Configure VC-WIN64A /MT -static no-tests --with-zlib-lib=..\zlib\Release --with-zlib-include=..\zlib
nmake
- name: Gather OpenSSL
if: steps.cache-openssl.outputs.cache-hit != 'true'
run: |
cp openssl/libcrypto.lib libs/crypto.lib
cp openssl/libssl.lib libs/ssl.lib
- name: Set OpenSSL version
run: |
echo "CRYSTAL_OPENSSL_VERSION=3.0.0" >> ${env:GITHUB_ENV}

- name: Cache LLVM
id: cache-llvm
uses: actions/cache@v2
Expand Down Expand Up @@ -172,6 +213,7 @@ jobs:
- name: Set up environment
run: |
echo "CRYSTAL_PATH=$(pwd)\src" >> ${env:GITHUB_ENV}
echo "CRYSTAL_LIBRARY_PATH=$(pwd)\libs" >> ${env:GITHUB_ENV}
echo "LIB=${env:LIB};$(pwd)\libs" >> ${env:GITHUB_ENV}
echo "TERM=dumb" >> ${env:GITHUB_ENV}
echo "LLVM_CONFIG=$(pwd)\llvm\bin\llvm-config.exe" >> ${env:GITHUB_ENV}
Expand Down Expand Up @@ -206,7 +248,7 @@ jobs:

- name: Build stdlib specs executable
run: |
bin\crystal.exe build spec/std_spec.cr --exclude-warnings spec/std --exclude-warnings spec/compiler -Dwithout_openssl -Di_know_what_im_doing
bin\crystal.exe build spec/std_spec.cr --exclude-warnings spec/std --exclude-warnings spec/compiler -Di_know_what_im_doing
- name: Run socket specs
run: |
.\std_spec.exe --verbose -e TCPSocket
Expand Down
40 changes: 20 additions & 20 deletions spec/win32_std_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,11 @@ require "./std/csv/csv_spec.cr"
require "./std/deque_spec.cr"
require "./std/digest/adler32_spec.cr"
require "./std/digest/crc32_spec.cr"
# require "./std/digest/io_digest_spec.cr" (failed codegen)
# require "./std/digest/md5_spec.cr" (failed codegen)
# require "./std/digest/sha1_spec.cr" (failed codegen)
# require "./std/digest/sha256_spec.cr" (failed codegen)
# require "./std/digest/sha512_spec.cr" (failed codegen)
require "./std/digest/io_digest_spec.cr"
require "./std/digest/md5_spec.cr"
require "./std/digest/sha1_spec.cr"
require "./std/digest/sha256_spec.cr"
require "./std/digest/sha512_spec.cr"
require "./std/dir_spec.cr"
require "./std/double_spec.cr"
require "./std/ecr/ecr_lexer_spec.cr"
Expand Down Expand Up @@ -150,26 +150,26 @@ require "./std/mime_spec.cr"
# require "./std/mutex_spec.cr" (failed codegen)
require "./std/named_tuple_spec.cr"
require "./std/number_spec.cr"
# require "./std/oauth/access_token_spec.cr" (failed codegen)
# require "./std/oauth/authorization_header_spec.cr" (failed codegen)
# require "./std/oauth/consumer_spec.cr" (failed codegen)
# require "./std/oauth/params_spec.cr" (failed codegen)
# require "./std/oauth/request_token_spec.cr" (failed codegen)
# require "./std/oauth/signature_spec.cr" (failed codegen)
# require "./std/oauth2/access_token_spec.cr" (failed codegen)
require "./std/oauth/access_token_spec.cr"
require "./std/oauth/authorization_header_spec.cr"
require "./std/oauth/consumer_spec.cr"
require "./std/oauth/params_spec.cr"
require "./std/oauth/request_token_spec.cr"
require "./std/oauth/signature_spec.cr"
require "./std/oauth2/access_token_spec.cr"
# require "./std/oauth2/client_spec.cr" (failed codegen)
# require "./std/oauth2/session_spec.cr" (failed codegen)
require "./std/object_spec.cr"
# require "./std/openssl/cipher_spec.cr" (failed codegen)
# require "./std/openssl/digest_spec.cr" (failed codegen)
# require "./std/openssl/hmac_spec.cr" (failed codegen)
# require "./std/openssl/pkcs5_spec.cr" (failed codegen)
# require "./std/openssl/ssl/context_spec.cr" (failed codegen)
# require "./std/openssl/ssl/hostname_validation_spec.cr" (failed codegen)
require "./std/openssl/cipher_spec.cr"
require "./std/openssl/digest_spec.cr"
require "./std/openssl/hmac_spec.cr"
require "./std/openssl/pkcs5_spec.cr"
require "./std/openssl/ssl/context_spec.cr"
require "./std/openssl/ssl/hostname_validation_spec.cr"
# require "./std/openssl/ssl/server_spec.cr" (failed codegen)
# require "./std/openssl/ssl/socket_spec.cr" (failed codegen)
# require "./std/openssl/x509/certificate_spec.cr" (failed codegen)
# require "./std/openssl/x509/name_spec.cr" (failed codegen)
require "./std/openssl/x509/certificate_spec.cr"
require "./std/openssl/x509/name_spec.cr"
require "./std/option_parser_spec.cr"
require "./std/overflow_spec.cr"
require "./std/path_spec.cr"
Expand Down
Loading