Skip to content

Commit b10165e

Browse files
HertzDeviloprypin
andauthored
Support OpenSSL on Windows (#11477)
Co-authored-by: Oleh Prypin <[email protected]>
1 parent 5f8f4fb commit b10165e

File tree

5 files changed

+216
-147
lines changed

5 files changed

+216
-147
lines changed

.github/workflows/win.yml

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,13 @@ jobs:
4040
id: cache-libs
4141
uses: actions/cache@v2
4242
with:
43-
path: libs
43+
path: | # openssl and llvm take much longer to build so they are cached separately
44+
libs/pcre.lib
45+
libs/gc.lib
46+
libs/z.lib
47+
libs/mpir.lib
48+
libs/yaml.lib
49+
libs/xml2.lib
4450
key: win-libs-${{ hashFiles('.github/workflows/win.yml') }}
4551
- name: Download libgc
4652
if: steps.cache-libs.outputs.cache-hit != 'true'
@@ -138,6 +144,41 @@ jobs:
138144
mv libyaml/Release/yaml.lib libs/
139145
mv libxml2/Release/libxml2s.lib libs/xml2.lib
140146
147+
- name: Cache OpenSSL
148+
id: cache-openssl
149+
uses: actions/cache@v2
150+
with:
151+
path: |
152+
libs/crypto.lib
153+
libs/ssl.lib
154+
key: win-openssl-libs-3.0.0
155+
- name: Set up NASM
156+
if: steps.cache-openssl.outputs.cache-hit != 'true'
157+
uses: ilammy/setup-nasm@e2335e5fc95548c09cd2deea2768793e0e8f0941 # v1.2.1
158+
- name: Download OpenSSL
159+
if: steps.cache-openssl.outputs.cache-hit != 'true'
160+
run: |
161+
iwr https://www.openssl.org/source/openssl-3.0.0.tar.gz -OutFile openssl.tar.gz
162+
(Get-FileHash -Algorithm SHA256 .\openssl.tar.gz).hash -eq "59eedfcb46c25214c9bd37ed6078297b4df01d012267fe9e9eee31f61bc70536"
163+
7z x openssl.tar.gz
164+
7z x openssl.tar
165+
del pax_global_header
166+
mv openssl-* openssl
167+
- name: Build OpenSSL
168+
if: steps.cache-openssl.outputs.cache-hit != 'true'
169+
working-directory: ./openssl
170+
run: |
171+
perl Configure VC-WIN64A /MT -static no-tests --with-zlib-lib=..\zlib\Release --with-zlib-include=..\zlib
172+
nmake
173+
- name: Gather OpenSSL
174+
if: steps.cache-openssl.outputs.cache-hit != 'true'
175+
run: |
176+
cp openssl/libcrypto.lib libs/crypto.lib
177+
cp openssl/libssl.lib libs/ssl.lib
178+
- name: Set OpenSSL version
179+
run: |
180+
echo "CRYSTAL_OPENSSL_VERSION=3.0.0" >> ${env:GITHUB_ENV}
181+
141182
- name: Cache LLVM
142183
id: cache-llvm
143184
uses: actions/cache@v2
@@ -172,6 +213,7 @@ jobs:
172213
- name: Set up environment
173214
run: |
174215
echo "CRYSTAL_PATH=$(pwd)\src" >> ${env:GITHUB_ENV}
216+
echo "CRYSTAL_LIBRARY_PATH=$(pwd)\libs" >> ${env:GITHUB_ENV}
175217
echo "LIB=${env:LIB};$(pwd)\libs" >> ${env:GITHUB_ENV}
176218
echo "TERM=dumb" >> ${env:GITHUB_ENV}
177219
echo "LLVM_CONFIG=$(pwd)\llvm\bin\llvm-config.exe" >> ${env:GITHUB_ENV}
@@ -206,7 +248,7 @@ jobs:
206248

207249
- name: Build stdlib specs executable
208250
run: |
209-
bin\crystal.exe build spec/std_spec.cr --exclude-warnings spec/std --exclude-warnings spec/compiler -Dwithout_openssl -Di_know_what_im_doing
251+
bin\crystal.exe build spec/std_spec.cr --exclude-warnings spec/std --exclude-warnings spec/compiler -Di_know_what_im_doing
210252
- name: Run socket specs
211253
run: |
212254
.\std_spec.exe --verbose -e TCPSocket

spec/win32_std_spec.cr

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ require "./std/csv/csv_spec.cr"
4949
require "./std/deque_spec.cr"
5050
require "./std/digest/adler32_spec.cr"
5151
require "./std/digest/crc32_spec.cr"
52-
# require "./std/digest/io_digest_spec.cr" (failed codegen)
53-
# require "./std/digest/md5_spec.cr" (failed codegen)
54-
# require "./std/digest/sha1_spec.cr" (failed codegen)
55-
# require "./std/digest/sha256_spec.cr" (failed codegen)
56-
# require "./std/digest/sha512_spec.cr" (failed codegen)
52+
require "./std/digest/io_digest_spec.cr"
53+
require "./std/digest/md5_spec.cr"
54+
require "./std/digest/sha1_spec.cr"
55+
require "./std/digest/sha256_spec.cr"
56+
require "./std/digest/sha512_spec.cr"
5757
require "./std/dir_spec.cr"
5858
require "./std/double_spec.cr"
5959
require "./std/ecr/ecr_lexer_spec.cr"
@@ -150,26 +150,26 @@ require "./std/mime_spec.cr"
150150
# require "./std/mutex_spec.cr" (failed codegen)
151151
require "./std/named_tuple_spec.cr"
152152
require "./std/number_spec.cr"
153-
# require "./std/oauth/access_token_spec.cr" (failed codegen)
154-
# require "./std/oauth/authorization_header_spec.cr" (failed codegen)
155-
# require "./std/oauth/consumer_spec.cr" (failed codegen)
156-
# require "./std/oauth/params_spec.cr" (failed codegen)
157-
# require "./std/oauth/request_token_spec.cr" (failed codegen)
158-
# require "./std/oauth/signature_spec.cr" (failed codegen)
159-
# require "./std/oauth2/access_token_spec.cr" (failed codegen)
153+
require "./std/oauth/access_token_spec.cr"
154+
require "./std/oauth/authorization_header_spec.cr"
155+
require "./std/oauth/consumer_spec.cr"
156+
require "./std/oauth/params_spec.cr"
157+
require "./std/oauth/request_token_spec.cr"
158+
require "./std/oauth/signature_spec.cr"
159+
require "./std/oauth2/access_token_spec.cr"
160160
# require "./std/oauth2/client_spec.cr" (failed codegen)
161161
# require "./std/oauth2/session_spec.cr" (failed codegen)
162162
require "./std/object_spec.cr"
163-
# require "./std/openssl/cipher_spec.cr" (failed codegen)
164-
# require "./std/openssl/digest_spec.cr" (failed codegen)
165-
# require "./std/openssl/hmac_spec.cr" (failed codegen)
166-
# require "./std/openssl/pkcs5_spec.cr" (failed codegen)
167-
# require "./std/openssl/ssl/context_spec.cr" (failed codegen)
168-
# require "./std/openssl/ssl/hostname_validation_spec.cr" (failed codegen)
163+
require "./std/openssl/cipher_spec.cr"
164+
require "./std/openssl/digest_spec.cr"
165+
require "./std/openssl/hmac_spec.cr"
166+
require "./std/openssl/pkcs5_spec.cr"
167+
require "./std/openssl/ssl/context_spec.cr"
168+
require "./std/openssl/ssl/hostname_validation_spec.cr"
169169
# require "./std/openssl/ssl/server_spec.cr" (failed codegen)
170170
# require "./std/openssl/ssl/socket_spec.cr" (failed codegen)
171-
# require "./std/openssl/x509/certificate_spec.cr" (failed codegen)
172-
# require "./std/openssl/x509/name_spec.cr" (failed codegen)
171+
require "./std/openssl/x509/certificate_spec.cr"
172+
require "./std/openssl/x509/name_spec.cr"
173173
require "./std/option_parser_spec.cr"
174174
require "./std/overflow_spec.cr"
175175
require "./std/path_spec.cr"

0 commit comments

Comments
 (0)