Skip to content
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

openssl: add arm64 Windows config files #26001

Closed
wants to merge 2 commits into from

Conversation

jkunkee
Copy link
Contributor

@jkunkee jkunkee commented Feb 8, 2019

In order to build Node.js for ARM64 Windows, OpenSSL needs to have a matching configuration checked in.

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • commit message follows commit guidelines

Fixes: #25998

@nodejs-github-bot nodejs-github-bot added the openssl Issues and PRs related to the OpenSSL dependency. label Feb 8, 2019
@jkunkee jkunkee force-pushed the arm64-openssl branch 2 times, most recently from 2cac79a to c697764 Compare February 8, 2019 04:45
@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 8, 2019

I had to create a new makefile to build configs for a new Windows flavor. Per the docs, this should probably be checked by @shigeki.

@shigeki
Copy link
Contributor

shigeki commented Feb 8, 2019

Wow, is there the machine that is available on our CI or can I check it on some machine somewhere such as Azure?

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 8, 2019

I'm not sure when CI will start doing ARM64 builds. Hopefully soon.

In the meantime, if you check out master, merge #25995, merge this PR, and then run vcbuild arm64, you should see the OpenSSL targets build successfully. v8, ICU, and the tests are expected to fail, but you should get openssl-cli.exe out and you should be able to build just the OpenSSL project with no problems.

Running tests will be another matter; last time I had everything in a working state, Node.js passed all 2000+ tests it had on ARM64.

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 8, 2019

And yes, cross compilation from x64 Windows is expected to work for the OpenSSL projects. It will fail for v8 due to a GYP limitation that I work around by building on ARM64 directly (and running the Hostx86 toolchain emulated). There are additional bits you need in VS2017 to build ARM64 targets detailed in c1f2ce5.

@shigeki
Copy link
Contributor

shigeki commented Feb 12, 2019

I think that we should be very careful to support arm64 Window on Node.js because OpenSSL says that VC-WIN64-ARM is not well tested as

VC-WIN32-ARM has received limited testing with evp_test.exe on Windows 10 IoT Core,
but not VC-WIN64-ARM, no hardware... In other words they are not actually supported...

https://github.com/openssl/openssl/blob/af250b36eb537bc2b185e35e24f187380a98ebb4/Configurations/50-win-onecore.conf#L33-L36

I think we should wait for this until we have an arm64 Windows host on our CI.

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 12, 2019

I'm working on the CI angle with @joaocgreis, but I'm not sure how long that will be.

Would it help if I were to run this version of OpenSSL's unit tests locally on ARM64 Windows and post the results?

@joaocgreis
Copy link
Member

@shigeki we're trying to get ARM64 Windows to Experimental support level, to have it running and passing the tests on our local machines. This PR is necessary to build. Only after we have the tests passing we can enable it in CI and increase the support level.

If you want to check this out yourself, we can give you access to a machine as soon as we have one available.

@shigeki
Copy link
Contributor

shigeki commented Feb 13, 2019

@joaocgreis Thanks. I just want to check compile options and generated asms are the same ones of OpenSSL-1.1.1.

@jkunkee The current active perl in https://www.activestate.com/products/activeperl/downloads/ does not provide a perl binary for arm64 on Windows. The perl is necessary to build OpenSSL. How can you get it?

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 13, 2019

@shigeki - Windows 10 on ARM has an x86 emulation layer. If you download the 32-bit version, it runs fine, though it is somewhat hard to find on their site since they don't publish an x86 32-bit build for every released version. Here's one..

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 15, 2019

Also, @shigeki, I'm working on dropping the contents of one of my local builds somewhere so you can take a look at the compile options and codegen.

@shigeki
Copy link
Contributor

shigeki commented Feb 15, 2019

@jkunkee Thanks. It would be helpful to have two built sources and building output of both Node.js and OpenSSL-1.1.1a itself. Please change its verbose mode to show the all build options.

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 16, 2019

@shigeki - I've posted a build here for your perusal: https://github.com/jkunkee/node/releases/tag/20190215.0-arm64-win-experimental

Note that I captured the stdout of both the builds. For the Node.js build's compiler arguments you'll need Release\node.binlog, while OpenSSL's stdout in openssl\build.log has all of the compiler arguments in it.

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 20, 2019

@shigeki - Is there anything else I can do to help?

@shigeki
Copy link
Contributor

shigeki commented Feb 21, 2019

For 20190215.0-experimental-arm64-win.zip and node-20190215.0-arm64-win-experimental.zip, the following diff needs to be applied to enable asm on armt64 and show the detailed build output.

index 9c351583b6..3c7172015f 100644
--- a/common.gypi
+++ b/common.gypi
@@ -78,12 +78,6 @@
     ##### end V8 defaults #####

     'conditions': [
-      ['target_arch=="arm64"', {
-        # Disabled pending https://github.com/nodejs/node/issues/23913.
-        'openssl_no_asm%': 1,
-      }, {
-        'openssl_no_asm%': 0,
-      }],
       ['GENERATOR=="ninja"', {
         'obj_dir': '<(PRODUCT_DIR)/obj',
         'conditions': [
diff --git a/vcbuild.bat b/vcbuild.bat
index 9877fb110b..33d9aafa41 100644
--- a/vcbuild.bat
+++ b/vcbuild.bat
@@ -309,7 +309,7 @@ if "%target%"=="Build" (
   if defined cctest set target="Build"
 )
 if "%target%"=="rename_node_bin_win" if exist "%config%\cctest.exe" del "%config%\cctest.exe"
-msbuild node.sln %msbcpu% /t:%target% /p:Configuration=%config% /p:Platform=%msbplatform% /clp:NoItemAndPropertyList;Verbosity=minimal /nologo
+msbuild node.sln %msbcpu% /t:%target% /p:Configuration=%config% /p:Platform=%msbplatform% /clp:NoItemAndPropertyList;Verbosity=detailed /nologo
 if errorlevel 1 (
   if not defined project_generated echo Building Node with reused solution failed. To regenerate project files use "vcbuild projgen"
   goto exit
@@ -404,7 +404,7 @@ if not defined msi goto install-doctools
 echo Building node-v%FULLVERSION%-%target_arch%.msi
 set "msbsdk="
 if defined WindowsSDKVersion set "msbsdk=/p:WindowsTargetPlatformVersion=%WindowsSDKVersion:~0,-1%"
-msbuild "%~dp0tools\msvs\msi\nodemsi.sln" /m /t:Clean,Build %msbsdk% /p:PlatformToolset=%PLATFORM_TOOLSET% /p:GypMsvsVersion=%GYP_MSVS_VERSION% /p:Configuration=%config% /p:Platform=%target_arch% /p:NodeVersion=%NODE_VERSION% /p:FullVersion=%FULLVERSION% /p:DistTypeDir=%DISTTYPEDIR% %noetw_msi_arg% /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo
+msbuild "%~dp0tools\msvs\msi\nodemsi.sln" /m /t:Clean,Build %msbsdk% /p:PlatformToolset=%PLATFORM_TOOLSET% /p:GypMsvsVersion=%GYP_MSVS_VERSION% /p:Configuration=%config% /p:Platform=%target_arch% /p:NodeVersion=%NODE_VERSION% /p:FullVersion=%FULLVERSION% /p:DistTypeDir=%DISTTYPEDIR% %noetw_msi_arg% /clp:NoSummary;NoItemAndPropertyList;Verbosity=detailed /nologo
 if errorlevel 1 goto exit

 if not defined sign goto upload

Please see if the detailed build outputs of openssl sources are show such as those of VC-WIN64A .

 C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\bin\HostX64\x64\CL.exe /c /Iopenssl /Iopenssl\include /Iopenssl\crypto /Iopenssl\crypto\include /Iopenssl\crypto\modes /Iopenssl\crypto\ec\c\
urve448 /Iopenssl\crypto\ec\curve448\arch_32 /Iconfig /I"config\archs\VC-WIN64A\asm" /I"config\archs\VC-WIN64A\asm\include" /I"config\archs\VC-WIN64A\asm\crypto" /I"config\archs\VC-WIN64A\asm\crypto\include\internal" /Z7 /nologo /\
W3 /WX- /diagnostics:classic /MP /Ox /Ob2 /Oi /Ot /Oy /D V8_DEPRECATION_WARNINGS /D V8_IMMINENT_DEPRECATION_WARNINGS /D WIN32 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _HAS_EXCEPTIONS=0 /D BUILDING_V8_SHARED=1 /D\
 BUILDING_UV_SHARED=1 /D OPENSSL_THREADS /D OPENSSL_NO_HW /D NDEBUG /D OPENSSL_SYS_WIN32 /D WIN32_LEAN_AND_MEAN /D UNICODE /D _UNICODE /D _WINSOCK_DEPRECATED_NO_WARNINGS /D OPENSSL_PIC /D OPENSSL_CPUID_OBJ /D OPENSSL_IA32_SSE2 /D \
OPENSSL_BN_ASM_MONT /D OPENSSL_BN_ASM_MONT5 /D OPENSSL_BN_ASM_GF2m /D SHA1_ASM /D SHA256_ASM /D SHA512_ASM /D KECCAK1600_ASM /D RC4_ASM /D MD5_ASM /D AES_ASM /D VPAES_ASM /D BSAES_ASM /D GHASH_ASM /D ECP_NISTZ256_ASM /D X25519_ASM\
 /D PADLOCK_ASM /D POLY1305_ASM /D "OPENSSLDIR=\"C:\Program Files\Common Files\SSL\"" /D "ENGINESDIR=\"NUL\"" /D L_ENDIAN /GF /Gm- /MT /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR- /Fo"Release\obj\openssl\\" /Fd"Rel\
ease\obj\openssl\openssl.pdb" /Gd /TC /wd4351 /wd4355 /wd4800 /wd4251 /wd4275 /wd4244 /wd4267 /FC /errorReport:queue openssl\ssl\bio_ssl.c openssl\ssl\d1_lib.c openssl\ssl\d1_msg.c openssl\ssl\d1_srtp.c openssl\ssl\methods.c opens\
sl\ssl\packet.c openssl\ssl\pqueue.c openssl\ssl\record\dtls1_bitmap.c openssl\ssl\record\rec_layer_d1.c openssl\ssl\record\rec_layer_s3.c openssl\ssl\record\ssl3_buffer.c openssl\ssl\record\ssl3_record.c openssl\ssl\record\ssl3_r\
ecord_tls13.c openssl\ssl\s3_cbc.c openssl\ssl\s3_enc.c openssl\ssl\s3_lib.c openssl\ssl\s3_msg.c openssl\ssl\ssl_asn1.c openssl\ssl\ssl_cert.c openssl\ssl\ssl_ciph.c openssl\ssl\ssl_conf.c openssl\ssl\ssl_err.c openssl\ssl\ssl_in\
it.c openssl\ssl\ssl_lib.c openssl\ssl\ssl_mcnf.c openssl\ssl\ssl_rsa.c openssl\ssl\ssl_sess.c openssl\ssl\ssl_stat.c

In openssl-rel, it seems the openssl was configured without asm support as configdata.pm

perlargv => [ "VC-WIN64-ARM", "no-asm" ],

We need openssl build outputs with asm support in VC-WIN64-ARM.

I'm also wondering what assembler is used in building openssl asms for arm64 because nasm is only for Win32/64. The openssl build outputs would show whether masm is used or not.

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 21, 2019

This is a little confusing. Per #23913, I thought Node.js on ARM64 was deliberately not using ASM in OpenSSL--a restriction I assumed would include ARM64 Windows. That's why I provided only the no-asm versions. I will upload detailed build logs of the x64 and ARM64 Node.js builds with my changes for both asm and no-asm (using your suggested changes).

The goal, then, as I understand it, is to ensure that the compiler options for the ARM64 Windows OpenSSL target in the Node.js build are the same as when building for x64 Windows. Is that right?

The assembler used is armasm64.exe, the MSVC ARM64 assembler. It accepts ARM's assembler's syntax with a few caveats.

In case you're interested, the ARM64 compiler command line for the OpenSSL target in Node.js was (from Release\node.binlog):

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\arm64\CL.exe
/c
/Iopenssl 
/Iopenssl\include 
/Iopenssl\crypto 
/Iopenssl\crypto\include 
/Iopenssl\crypto\modes 
/Iopenssl\crypto\ec\curve448 
/Iopenssl\crypto\ec\curve448\arch_32 
/Iconfig 
/I"config\archs\VC-WIN64-ARM\no-asm" 
/I"config\archs\VC-WIN64-ARM\no-asm\include" 
/I"config\archs\VC-WIN64-ARM\no-asm\crypto" 
/I"config\archs\VC-WIN64-ARM\no-asm\crypto\include\internal" 
/Z7 
/nologo 
/W3
/WX- 
/diagnostics:classic 
/MP 
/Ox 
/Ob2 
/Oi 
/Ot 
/Oy 
/D V8_DEPRECATION_WARNINGS
/D V8_IMMINENT_DEPRECATION_WARNINGS
/D WIN32
/D _CRT_SECURE_NO_DEPRECATE
/D _CRT_NONSTDC_NO_DEPRECATE
/D _HAS_EXCEPTIONS=0
/D BUILDING_V8_SHARED=1
/D BUILDING_UV_SHARED=1
/D OPENSSL_THREADS
/D OPENSSL_NO_ASM
/D OPENSSL_NO_HW
/D NDEBUG
/D OPENSSL_SYS_WIN32
/D WIN32_LEAN_AND_MEAN
/D UNICODE
/D _UNICODE
/D _WINSOCK_DEPRECATED_NO_WARNINGS
/D _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
/D OPENSSL_SYS_WIN_CORE
/D OPENSSL_PIC
/D "OPENSSLDIR=\"C:\Program Files\Common Files\SSL\""
/D "ENGINESDIR=\"NUL\""
/D L_ENDIAN
/D _ARM64_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1
/GF
/Gm-
/MT
/GS
/Gy
/fp:precise
/Zc:wchar_t
/Zc:forScope
/Zc:inline
/GR-
/Fo"Release\obj\openssl\\"
/Fd"Release\obj\openssl\openssl.pdb"
/Gd
/TC
/wd4351 /wd4355 /wd4800 /wd4251 /wd4275 /wd4244 /wd4267
/analyze-
/FC
/errorReport:queue
openssl\ssl\bio_ssl.c openssl\ssl\d1_lib.c openssl\ssl\d1_msg.c openssl\ssl\d1_srtp.c openssl\ssl\methods.c openssl\ssl\packet.c openssl\ssl\pqueue.c openssl\ssl\record\dtls1_bitmap.c openssl\ssl\record\rec_layer_d1.c openssl\ssl\record\rec_layer_s3.c openssl\ssl\record\ssl3_buffer.c openssl\ssl\record\ssl3_record.c openssl\ssl\record\ssl3_record_tls13.c openssl\ssl\s3_cbc.c openssl\ssl\s3_enc.c openssl\ssl\s3_lib.c openssl\ssl\s3_msg.c openssl\ssl\ssl_asn1.c openssl\ssl\ssl_cert.c openssl\ssl\ssl_ciph.c openssl\ssl\ssl_conf.c openssl\ssl\ssl_err.c openssl\ssl\ssl_init.c openssl\ssl\ssl_lib.c openssl\ssl\ssl_mcnf.c openssl\ssl\ssl_rsa.c openssl\ssl\ssl_sess.c openssl\ssl\ssl_stat.c openssl\ssl\ssl_txt.c openssl\ssl\ssl_utst.c openssl\ssl\statem\extensions.c openssl\ssl\statem\extensions_clnt.c openssl\ssl\statem\extensions_cust.c openssl\ssl\statem\extensions_srvr.c openssl\ssl\statem\statem.c openssl\ssl\statem\statem_clnt.c openssl\ssl\statem\statem_dtls.c openssl\ssl\statem\statem_lib.c openssl\ssl\statem\statem_srvr.c openssl\ssl\t1_enc.c openssl\ssl\t1_lib.c openssl\ssl\t1_trce.c openssl\ssl\tls13_enc.c openssl\ssl\tls_srp.c openssl\crypto\aes\aes_cbc.c openssl\crypto\aes\aes_cfb.c openssl\crypto\aes\aes_core.c openssl\crypto\aes\aes_ecb.c openssl\crypto\aes\aes_ige.c openssl\crypto\aes\aes_misc.c openssl\crypto\aes\aes_ofb.c openssl\crypto\aes\aes_wrap.c openssl\crypto\aria\aria.c openssl\crypto\asn1\a_bitstr.c openssl\crypto\asn1\a_d2i_fp.c openssl\crypto\asn1\a_digest.c openssl\crypto\asn1\a_dup.c openssl\crypto\asn1\a_gentm.c openssl\crypto\asn1\a_i2d_fp.c openssl\crypto\asn1\a_int.c openssl\crypto\asn1\a_mbstr.c openssl\crypto\asn1\a_object.c openssl\crypto\asn1\a_octet.c openssl\crypto\asn1\a_print.c openssl\crypto\asn1\a_sign.c openssl\crypto\asn1\a_strex.c openssl\crypto\asn1\a_strnid.c openssl\crypto\asn1\a_time.c openssl\crypto\asn1\a_type.c openssl\crypto\asn1\a_utctm.c openssl\crypto\asn1\a_utf8.c openssl\crypto\asn1\a_verify.c openssl\crypto\asn1\ameth_lib.c openssl\crypto\asn1\asn1_err.c openssl\crypto\asn1\asn1_gen.c openssl\crypto\asn1\asn1_item_list.c openssl\crypto\asn1\asn1_lib.c openssl\crypto\asn1\asn1_par.c openssl\crypto\asn1\asn_mime.c openssl\crypto\asn1\asn_moid.c openssl\crypto\asn1\asn_mstbl.c openssl\crypto\asn1\asn_pack.c openssl\crypto\asn1\bio_asn1.c openssl\crypto\asn1\bio_ndef.c openssl\crypto\asn1\d2i_pr.c openssl\crypto\asn1\d2i_pu.c openssl\crypto\asn1\evp_asn1.c openssl\crypto\asn1\f_int.c openssl\crypto\asn1\f_string.c openssl\crypto\asn1\i2d_pr.c openssl\crypto\asn1\i2d_pu.c openssl\crypto\asn1\n_pkey.c openssl\crypto\asn1\nsseq.c openssl\crypto\asn1\p5_pbe.c openssl\crypto\asn1\p5_pbev2.c openssl\crypto\asn1\p5_scrypt.c openssl\crypto\asn1\p8_pkey.c openssl\crypto\asn1\t_bitst.c openssl\crypto\asn1\t_pkey.c openssl\crypto\asn1\t_spki.c openssl\crypto\asn1\tasn_dec.c openssl\crypto\asn1\tasn_enc.c openssl\crypto\asn1\tasn_fre.c openssl\crypto\asn1\tasn_new.c openssl\crypto\asn1\tasn_prn.c openssl\crypto\asn1\tasn_scn.c openssl\crypto\asn1\tasn_typ.c openssl\crypto\asn1\tasn_utl.c openssl\crypto\asn1\x_algor.c openssl\crypto\asn1\x_bignum.c openssl\crypto\asn1\x_info.c openssl\crypto\asn1\x_int64.c openssl\crypto\asn1\x_long.c openssl\crypto\asn1\x_pkey.c openssl\crypto\asn1\x_sig.c openssl\crypto\asn1\x_spki.c openssl\crypto\asn1\x_val.c openssl\crypto\async\arch\async_null.c openssl\crypto\async\arch\async_posix.c openssl\crypto\async\arch\async_win.c openssl\crypto\async\async.c openssl\crypto\async\async_err.c openssl\crypto\async\async_wait.c openssl\crypto\bf\bf_cfb64.c openssl\crypto\bf\bf_ecb.c openssl\crypto\bf\bf_enc.c openssl\crypto\bf\bf_ofb64.c openssl\crypto\bf\bf_skey.c openssl\crypto\bio\b_addr.c openssl\crypto\bio\b_dump.c openssl\crypto\bio\b_print.c openssl\crypto\bio\b_sock.c openssl\crypto\bio\b_sock2.c openssl\crypto\bio\bf_buff.c openssl\crypto\bio\bf_lbuf.c openssl\crypto\bio\bf_nbio.c openssl\crypto\bio\bf_null.c openssl\crypto\bio\bio_cb.c openssl\crypto\bio\bio_err.c openssl\crypto\bio\bio_lib.c openssl\crypto\bio\bio_meth.c openssl\crypto\bio\bss_acpt.c openssl\crypto\bio\bss_bio.c openssl\crypto\bio\bss_conn.c openssl\crypto\bio\bss_dgram.c openssl\crypto\bio\bss_fd.c openssl\crypto\bio\bss_file.c openssl\crypto\bio\bss_log.c openssl\crypto\bio\bss_mem.c openssl\crypto\bio\bss_null.c openssl\crypto\bio\bss_sock.c openssl\crypto\blake2\blake2b.c openssl\crypto\blake2\blake2s.c openssl\crypto\blake2\m_blake2b.c openssl\crypto\blake2\m_blake2s.c openssl\crypto\bn\bn_add.c openssl\crypto\bn\bn_asm.c openssl\crypto\bn\bn_blind.c openssl\crypto\bn\bn_const.c openssl\crypto\bn\bn_ctx.c openssl\crypto\bn\bn_depr.c openssl\crypto\bn\bn_dh.c openssl\crypto\bn\bn_div.c openssl\crypto\bn\bn_err.c openssl\crypto\bn\bn_exp.c openssl\crypto\bn\bn_exp2.c openssl\crypto\bn\bn_gcd.c openssl\crypto\bn\bn_gf2m.c openssl\crypto\bn\bn_intern.c openssl\crypto\bn\bn_kron.c openssl\crypto\bn\bn_lib.c openssl\crypto\bn\bn_mod.c openssl\crypto\bn\bn_mont.c openssl\crypto\bn\bn_mpi.c openssl\crypto\bn\bn_mul.c openssl\crypto\bn\bn_nist.c openssl\crypto\bn\bn_prime.c openssl\crypto\bn\bn_print.c openssl\crypto\bn\bn_rand.c openssl\crypto\bn\bn_recp.c openssl\crypto\bn\bn_shift.c openssl\crypto\bn\bn_sqr.c openssl\crypto\bn\bn_sqrt.c openssl\crypto\bn\bn_srp.c openssl\crypto\bn\bn_word.c openssl\crypto\bn\bn_x931p.c openssl\crypto\buffer\buf_err.c openssl\crypto\buffer\buffer.c openssl\crypto\camellia\camellia.c openssl\crypto\camellia\cmll_cbc.c openssl\crypto\camellia\cmll_cfb.c openssl\crypto\camellia\cmll_ctr.c openssl\crypto\camellia\cmll_ecb.c openssl\crypto\camellia\cmll_misc.c openssl\crypto\camellia\cmll_ofb.c openssl\crypto\cast\c_cfb64.c openssl\crypto\cast\c_ecb.c openssl\crypto\cast\c_enc.c openssl\crypto\cast\c_ofb64.c openssl\crypto\cast\c_skey.c openssl\crypto\chacha\chacha_enc.c openssl\crypto\cmac\cm_ameth.c openssl\crypto\cmac\cm_pmeth.c openssl\crypto\cmac\cmac.c openssl\crypto\cms\cms_asn1.c openssl\crypto\cms\cms_att.c openssl\crypto\cms\cms_cd.c openssl\crypto\cms\cms_dd.c openssl\crypto\cms\cms_enc.c openssl\crypto\cms\cms_env.c openssl\crypto\cms\cms_err.c openssl\crypto\cms\cms_ess.c openssl\crypto\cms\cms_io.c openssl\crypto\cms\cms_kari.c openssl\crypto\cms\cms_lib.c openssl\crypto\cms\cms_pwri.c openssl\crypto\cms\cms_sd.c openssl\crypto\cms\cms_smime.c openssl\crypto\conf\conf_api.c openssl\crypto\conf\conf_def.c openssl\crypto\conf\conf_err.c openssl\crypto\conf\conf_lib.c openssl\crypto\conf\conf_mall.c openssl\crypto\conf\conf_mod.c openssl\crypto\conf\conf_sap.c openssl\crypto\conf\conf_ssl.c openssl\crypto\cpt_err.c openssl\crypto\cryptlib.c openssl\crypto\ct\ct_b64.c openssl\crypto\ct\ct_err.c openssl\crypto\ct\ct_log.c openssl\crypto\ct\ct_oct.c openssl\crypto\ct\ct_policy.c openssl\crypto\ct\ct_prn.c openssl\crypto\ct\ct_sct.c openssl\crypto\ct\ct_sct_ctx.c openssl\crypto\ct\ct_vfy.c openssl\crypto\ct\ct_x509v3.c openssl\crypto\ctype.c openssl\crypto\cversion.c openssl\crypto\des\cbc_cksm.c openssl\crypto\des\cbc_enc.c openssl\crypto\des\cfb64ede.c openssl\crypto\des\cfb64enc.c openssl\crypto\des\cfb_enc.c openssl\crypto\des\des_enc.c openssl\crypto\des\ecb3_enc.c openssl\crypto\des\ecb_enc.c openssl\crypto\des\fcrypt.c openssl\crypto\des\fcrypt_b.c openssl\crypto\des\ofb64ede.c openssl\crypto\des\ofb64enc.c openssl\crypto\des\ofb_enc.c openssl\crypto\des\pcbc_enc.c openssl\crypto\des\qud_cksm.c openssl\crypto\des\rand_key.c openssl\crypto\des\set_key.c openssl\crypto\des\str2key.c openssl\crypto\des\xcbc_enc.c openssl\crypto\dh\dh_ameth.c openssl\crypto\dh\dh_asn1.c openssl\crypto\dh\dh_check.c openssl\crypto\dh\dh_depr.c openssl\crypto\dh\dh_err.c openssl\crypto\dh\dh_gen.c openssl\crypto\dh\dh_kdf.c openssl\crypto\dh\dh_key.c openssl\crypto\dh\dh_lib.c openssl\crypto\dh\dh_meth.c openssl\crypto\dh\dh_pmeth.c openssl\crypto\dh\dh_prn.c openssl\crypto\dh\dh_rfc5114.c openssl\crypto\dh\dh_rfc7919.c openssl\crypto\dsa\dsa_ameth.c openssl\crypto\dsa\dsa_asn1.c openssl\crypto\dsa\dsa_depr.c openssl\crypto\dsa\dsa_err.c openssl\crypto\dsa\dsa_gen.c openssl\crypto\dsa\dsa_key.c openssl\crypto\dsa\dsa_lib.c openssl\crypto\dsa\dsa_meth.c openssl\crypto\dsa\dsa_ossl.c openssl\crypto\dsa\dsa_pmeth.c openssl\crypto\dsa\dsa_prn.c openssl\crypto\dsa\dsa_sign.c openssl\crypto\dsa\dsa_vrf.c openssl\crypto\dso\dso_dl.c openssl\crypto\dso\dso_dlfcn.c openssl\crypto\dso\dso_err.c openssl\crypto\dso\dso_lib.c openssl\crypto\dso\dso_openssl.c openssl\crypto\dso\dso_vms.c openssl\crypto\dso\dso_win32.c openssl\crypto\ebcdic.c openssl\crypto\ec\curve25519.c openssl\crypto\ec\curve448\arch_32\f_impl.c openssl\crypto\ec\curve448\curve448.c openssl\crypto\ec\curve448\curve448_tables.c openssl\crypto\ec\curve448\eddsa.c openssl\crypto\ec\curve448\f_generic.c openssl\crypto\ec\curve448\scalar.c openssl\crypto\ec\ec2_oct.c openssl\crypto\ec\ec2_smpl.c openssl\crypto\ec\ec_ameth.c openssl\crypto\ec\ec_asn1.c openssl\crypto\ec\ec_check.c openssl\crypto\ec\ec_curve.c openssl\crypto\ec\ec_cvt.c openssl\crypto\ec\ec_err.c openssl\crypto\ec\ec_key.c openssl\crypto\ec\ec_kmeth.c openssl\crypto\ec\ec_lib.c openssl\crypto\ec\ec_mult.c openssl\crypto\ec\ec_oct.c openssl\crypto\ec\ec_pmeth.c openssl\crypto\ec\ec_print.c openssl\crypto\ec\ecdh_kdf.c openssl\crypto\ec\ecdh_ossl.c openssl\crypto\ec\ecdsa_ossl.c openssl\crypto\ec\ecdsa_sign.c openssl\crypto\ec\ecdsa_vrf.c openssl\crypto\ec\eck_prn.c openssl\crypto\ec\ecp_mont.c openssl\crypto\ec\ecp_nist.c openssl\crypto\ec\ecp_nistp224.c openssl\crypto\ec\ecp_nistp256.c openssl\crypto\ec\ecp_nistp521.c openssl\crypto\ec\ecp_nistputil.c openssl\crypto\ec\ecp_oct.c openssl\crypto\ec\ecp_smpl.c openssl\crypto\ec\ecx_meth.c openssl\crypto\engine\eng_all.c openssl\crypto\engine\eng_cnf.c openssl\crypto\engine\eng_ctrl.c openssl\crypto\engine\eng_dyn.c openssl\crypto\engine\eng_err.c openssl\crypto\engine\eng_fat.c openssl\crypto\engine\eng_init.c openssl\crypto\engine\eng_lib.c openssl\crypto\engine\eng_list.c openssl\crypto\engine\eng_openssl.c openssl\crypto\engine\eng_pkey.c openssl\crypto\engine\eng_rdrand.c openssl\crypto\engine\eng_table.c openssl\crypto\engine\tb_asnmth.c openssl\crypto\engine\tb_cipher.c openssl\crypto\engine\tb_dh.c openssl\crypto\engine\tb_digest.c openssl\crypto\engine\tb_dsa.c openssl\crypto\engine\tb_eckey.c openssl\crypto\engine\tb_pkmeth.c openssl\crypto\engine\tb_rand.c openssl\crypto\engine\tb_rsa.c openssl\crypto\err\err.c openssl\crypto\err\err_all.c openssl\crypto\err\err_prn.c openssl\crypto\evp\bio_b64.c openssl\crypto\evp\bio_enc.c openssl\crypto\evp\bio_md.c openssl\crypto\evp\bio_ok.c openssl\crypto\evp\c_allc.c openssl\crypto\evp\c_alld.c openssl\crypto\evp\cmeth_lib.c openssl\crypto\evp\digest.c openssl\crypto\evp\e_aes.c openssl\crypto\evp\e_aes_cbc_hmac_sha1.c openssl\crypto\evp\e_aes_cbc_hmac_sha256.c openssl\crypto\evp\e_aria.c openssl\crypto\evp\e_bf.c openssl\crypto\evp\e_camellia.c openssl\crypto\evp\e_cast.c openssl\crypto\evp\e_chacha20_poly1305.c openssl\crypto\evp\e_des.c openssl\crypto\evp\e_des3.c openssl\crypto\evp\e_idea.c openssl\crypto\evp\e_null.c openssl\crypto\evp\e_old.c openssl\crypto\evp\e_rc2.c openssl\crypto\evp\e_rc4.c openssl\crypto\evp\e_rc4_hmac_md5.c openssl\crypto\evp\e_rc5.c openssl\crypto\evp\e_seed.c openssl\crypto\evp\e_sm4.c openssl\crypto\evp\e_xcbc_d.c openssl\crypto\evp\encode.c openssl\crypto\evp\evp_cnf.c openssl\crypto\evp\evp_enc.c openssl\crypto\evp\evp_err.c openssl\crypto\evp\evp_key.c openssl\crypto\evp\evp_lib.c openssl\crypto\evp\evp_pbe.c openssl\crypto\evp\evp_pkey.c openssl\crypto\evp\m_md2.c openssl\crypto\evp\m_md4.c openssl\crypto\evp\m_md5.c openssl\crypto\evp\m_md5_sha1.c openssl\crypto\evp\m_mdc2.c openssl\crypto\evp\m_null.c openssl\crypto\evp\m_ripemd.c openssl\crypto\evp\m_sha1.c openssl\crypto\evp\m_sha3.c openssl\crypto\evp\m_sigver.c openssl\crypto\evp\m_wp.c openssl\crypto\evp\names.c openssl\crypto\evp\p5_crpt.c openssl\crypto\evp\p5_crpt2.c openssl\crypto\evp\p_dec.c openssl\crypto\evp\p_enc.c openssl\crypto\evp\p_lib.c openssl\crypto\evp\p_open.c openssl\crypto\evp\p_seal.c openssl\crypto\evp\p_sign.c openssl\crypto\evp\p_verify.c openssl\crypto\evp\pbe_scrypt.c openssl\crypto\evp\pmeth_fn.c openssl\crypto\evp\pmeth_gn.c openssl\crypto\evp\pmeth_lib.c openssl\crypto\ex_data.c openssl\crypto\getenv.c openssl\crypto\hmac\hm_ameth.c openssl\crypto\hmac\hm_pmeth.c openssl\crypto\hmac\hmac.c openssl\crypto\idea\i_cbc.c openssl\crypto\idea\i_cfb64.c openssl\crypto\idea\i_ecb.c openssl\crypto\idea\i_ofb64.c openssl\crypto\idea\i_skey.c openssl\crypto\init.c openssl\crypto\kdf\hkdf.c openssl\crypto\kdf\kdf_err.c openssl\crypto\kdf\scrypt.c openssl\crypto\kdf\tls1_prf.c openssl\crypto\lhash\lh_stats.c openssl\crypto\lhash\lhash.c openssl\crypto\md4\md4_dgst.c openssl\crypto\md4\md4_one.c openssl\crypto\md5\md5_dgst.c openssl\crypto\md5\md5_one.c openssl\crypto\mdc2\mdc2_one.c openssl\crypto\mdc2\mdc2dgst.c openssl\crypto\mem.c openssl\crypto\mem_clr.c openssl\crypto\mem_dbg.c openssl\crypto\mem_sec.c openssl\crypto\modes\cbc128.c openssl\crypto\modes\ccm128.c openssl\crypto\modes\cfb128.c openssl\crypto\modes\ctr128.c openssl\crypto\modes\cts128.c openssl\crypto\modes\gcm128.c openssl\crypto\modes\ocb128.c openssl\crypto\modes\ofb128.c openssl\crypto\modes\wrap128.c openssl\crypto\modes\xts128.c openssl\crypto\o_dir.c openssl\crypto\o_fips.c openssl\crypto\o_fopen.c openssl\crypto\o_init.c openssl\crypto\o_str.c openssl\crypto\o_time.c openssl\crypto\objects\o_names.c openssl\crypto\objects\obj_dat.c openssl\crypto\objects\obj_err.c openssl\crypto\objects\obj_lib.c openssl\crypto\objects\obj_xref.c openssl\crypto\ocsp\ocsp_asn.c openssl\crypto\ocsp\ocsp_cl.c openssl\crypto\ocsp\ocsp_err.c openssl\crypto\ocsp\ocsp_ext.c openssl\crypto\ocsp\ocsp_ht.c openssl\crypto\ocsp\ocsp_lib.c openssl\crypto\ocsp\ocsp_prn.c openssl\crypto\ocsp\ocsp_srv.c openssl\crypto\ocsp\ocsp_vfy.c openssl\crypto\ocsp\v3_ocsp.c openssl\crypto\pem\pem_all.c openssl\crypto\pem\pem_err.c openssl\crypto\pem\pem_info.c openssl\crypto\pem\pem_lib.c openssl\crypto\pem\pem_oth.c openssl\crypto\pem\pem_pk8.c openssl\crypto\pem\pem_pkey.c openssl\crypto\pem\pem_sign.c openssl\crypto\pem\pem_x509.c openssl\crypto\pem\pem_xaux.c openssl\crypto\pem\pvkfmt.c openssl\crypto\pkcs12\p12_add.c openssl\crypto\pkcs12\p12_asn.c openssl\crypto\pkcs12\p12_attr.c openssl\crypto\pkcs12\p12_crpt.c openssl\crypto\pkcs12\p12_crt.c openssl\crypto\pkcs12\p12_decr.c openssl\crypto\pkcs12\p12_init.c openssl\crypto\pkcs12\p12_key.c openssl\crypto\pkcs12\p12_kiss.c openssl\crypto\pkcs12\p12_mutl.c openssl\crypto\pkcs12\p12_npas.c openssl\crypto\pkcs12\p12_p8d.c openssl\crypto\pkcs12\p12_p8e.c openssl\crypto\pkcs12\p12_sbag.c openssl\crypto\pkcs12\p12_utl.c openssl\crypto\pkcs12\pk12err.c openssl\crypto\pkcs7\bio_pk7.c openssl\crypto\pkcs7\pk7_asn1.c openssl\crypto\pkcs7\pk7_attr.c openssl\crypto\pkcs7\pk7_doit.c openssl\crypto\pkcs7\pk7_lib.c openssl\crypto\pkcs7\pk7_mime.c openssl\crypto\pkcs7\pk7_smime.c openssl\crypto\pkcs7\pkcs7err.c openssl\crypto\poly1305\poly1305.c openssl\crypto\poly1305\poly1305_ameth.c openssl\crypto\poly1305\poly1305_pmeth.c openssl\crypto\rand\drbg_ctr.c openssl\crypto\rand\drbg_lib.c openssl\crypto\rand\rand_egd.c openssl\crypto\rand\rand_err.c openssl\crypto\rand\rand_lib.c openssl\crypto\rand\rand_unix.c openssl\crypto\rand\rand_vms.c openssl\crypto\rand\rand_win.c openssl\crypto\rand\randfile.c openssl\crypto\rc2\rc2_cbc.c openssl\crypto\rc2\rc2_ecb.c openssl\crypto\rc2\rc2_skey.c openssl\crypto\rc2\rc2cfb64.c openssl\crypto\rc2\rc2ofb64.c openssl\crypto\rc4\rc4_enc.c openssl\crypto\rc4\rc4_skey.c openssl\crypto\ripemd\rmd_dgst.c openssl\crypto\ripemd\rmd_one.c openssl\crypto\rsa\rsa_ameth.c openssl\crypto\rsa\rsa_asn1.c openssl\crypto\rsa\rsa_chk.c openssl\crypto\rsa\rsa_crpt.c openssl\crypto\rsa\rsa_depr.c openssl\crypto\rsa\rsa_err.c openssl\crypto\rsa\rsa_gen.c openssl\crypto\rsa\rsa_lib.c openssl\crypto\rsa\rsa_meth.c openssl\crypto\rsa\rsa_mp.c openssl\crypto\rsa\rsa_none.c openssl\crypto\rsa\rsa_oaep.c openssl\crypto\rsa\rsa_ossl.c openssl\crypto\rsa\rsa_pk1.c openssl\crypto\rsa\rsa_pmeth.c openssl\crypto\rsa\rsa_prn.c openssl\crypto\rsa\rsa_pss.c openssl\crypto\rsa\rsa_saos.c openssl\crypto\rsa\rsa_sign.c openssl\crypto\rsa\rsa_ssl.c openssl\crypto\rsa\rsa_x931.c openssl\crypto\rsa\rsa_x931g.c openssl\crypto\seed\seed.c openssl\crypto\seed\seed_cbc.c openssl\crypto\seed\seed_cfb.c openssl\crypto\seed\seed_ecb.c openssl\crypto\seed\seed_ofb.c openssl\crypto\sha\keccak1600.c openssl\crypto\sha\sha1_one.c openssl\crypto\sha\sha1dgst.c openssl\crypto\sha\sha256.c openssl\crypto\sha\sha512.c openssl\crypto\siphash\siphash.c openssl\crypto\siphash\siphash_ameth.c openssl\crypto\siphash\siphash_pmeth.c openssl\crypto\sm2\sm2_crypt.c openssl\crypto\sm2\sm2_err.c openssl\crypto\sm2\sm2_pmeth.c openssl\crypto\sm2\sm2_sign.c openssl\crypto\sm3\m_sm3.c openssl\crypto\sm3\sm3.c openssl\crypto\sm4\sm4.c openssl\crypto\srp\srp_lib.c openssl\crypto\srp\srp_vfy.c openssl\crypto\stack\stack.c openssl\crypto\store\loader_file.c openssl\crypto\store\store_err.c openssl\crypto\store\store_init.c openssl\crypto\store\store_lib.c openssl\crypto\store\store_register.c openssl\crypto\store\store_strings.c openssl\crypto\threads_none.c openssl\crypto\threads_pthread.c openssl\crypto\threads_win.c openssl\crypto\ts\ts_asn1.c openssl\crypto\ts\ts_conf.c openssl\crypto\ts\ts_err.c openssl\crypto\ts\ts_lib.c openssl\crypto\ts\ts_req_print.c openssl\crypto\ts\ts_req_utils.c openssl\crypto\ts\ts_rsp_print.c openssl\crypto\ts\ts_rsp_sign.c openssl\crypto\ts\ts_rsp_utils.c openssl\crypto\ts\ts_rsp_verify.c openssl\crypto\ts\ts_verify_ctx.c openssl\crypto\txt_db\txt_db.c openssl\crypto\ui\ui_err.c openssl\crypto\ui\ui_lib.c openssl\crypto\ui\ui_null.c openssl\crypto\ui\ui_openssl.c openssl\crypto\ui\ui_util.c openssl\crypto\uid.c openssl\crypto\whrlpool\wp_block.c openssl\crypto\whrlpool\wp_dgst.c openssl\crypto\x509\by_dir.c openssl\crypto\x509\by_file.c openssl\crypto\x509\t_crl.c openssl\crypto\x509\t_req.c openssl\crypto\x509\t_x509.c openssl\crypto\x509\x509_att.c openssl\crypto\x509\x509_cmp.c openssl\crypto\x509\x509_d2.c openssl\crypto\x509\x509_def.c openssl\crypto\x509\x509_err.c openssl\crypto\x509\x509_ext.c openssl\crypto\x509\x509_lu.c openssl\crypto\x509\x509_meth.c openssl\crypto\x509\x509_obj.c openssl\crypto\x509\x509_r2x.c openssl\crypto\x509\x509_req.c openssl\crypto\x509\x509_set.c openssl\crypto\x509\x509_trs.c openssl\crypto\x509\x509_txt.c openssl\crypto\x509\x509_v3.c openssl\crypto\x509\x509_vfy.c openssl\crypto\x509\x509_vpm.c openssl\crypto\x509\x509cset.c openssl\crypto\x509\x509name.c openssl\crypto\x509\x509rset.c openssl\crypto\x509\x509spki.c openssl\crypto\x509\x509type.c openssl\crypto\x509\x_all.c openssl\crypto\x509\x_attrib.c openssl\crypto\x509\x_crl.c openssl\crypto\x509\x_exten.c openssl\crypto\x509\x_name.c openssl\crypto\x509\x_pubkey.c openssl\crypto\x509\x_req.c openssl\crypto\x509\x_x509.c openssl\crypto\x509\x_x509a.c openssl\crypto\x509v3\pcy_cache.c openssl\crypto\x509v3\pcy_data.c openssl\crypto\x509v3\pcy_lib.c openssl\crypto\x509v3\pcy_map.c openssl\crypto\x509v3\pcy_node.c openssl\crypto\x509v3\pcy_tree.c openssl\crypto\x509v3\v3_addr.c openssl\crypto\x509v3\v3_admis.c openssl\crypto\x509v3\v3_akey.c openssl\crypto\x509v3\v3_akeya.c openssl\crypto\x509v3\v3_alt.c openssl\crypto\x509v3\v3_asid.c openssl\crypto\x509v3\v3_bcons.c openssl\crypto\x509v3\v3_bitst.c openssl\crypto\x509v3\v3_conf.c openssl\crypto\x509v3\v3_cpols.c openssl\crypto\x509v3\v3_crld.c openssl\crypto\x509v3\v3_enum.c openssl\crypto\x509v3\v3_extku.c openssl\crypto\x509v3\v3_genn.c openssl\crypto\x509v3\v3_ia5.c openssl\crypto\x509v3\v3_info.c openssl\crypto\x509v3\v3_int.c openssl\crypto\x509v3\v3_lib.c openssl\crypto\x509v3\v3_ncons.c openssl\crypto\x509v3\v3_pci.c openssl\crypto\x509v3\v3_pcia.c openssl\crypto\x509v3\v3_pcons.c openssl\crypto\x509v3\v3_pku.c openssl\crypto\x509v3\v3_pmaps.c openssl\crypto\x509v3\v3_prn.c openssl\crypto\x509v3\v3_purp.c openssl\crypto\x509v3\v3_skey.c openssl\crypto\x509v3\v3_sxnet.c openssl\crypto\x509v3\v3_tlsf.c openssl\crypto\x509v3\v3_utl.c openssl\crypto\x509v3\v3err.c openssl\engines\e_capi.c openssl\engines\e_padlock.c

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 21, 2019

Apparently the AVX2 config files are used on all platforms, so I've pushed a change that adds that case for ARM64 Windows.

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 22, 2019

I've attached nodejs-openssl-x64-arm64-asm-noasm-logs.zip with verbose logs from both OpenSSL and Node.js for x64 and ARM64 with and without ASM.

Comparing the two Node.js with-ASM builds, there are a few differences.

The ARM64 Windows build has these extra arguments:

/D _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
/D OPENSSL_SYS_WIN_CORE
/D _ARM64_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1
/analyze-

While the x64 build has these extra arguments;

/D OPENSSL_CPUID_OBJ
/D OPENSSL_IA32_SSE2
/D OPENSSL_BN_ASM_MONT
/D OPENSSL_BN_ASM_MONT5
/D OPENSSL_BN_ASM_GF2m
/D SHA1_ASM
/D SHA256_ASM
/D SHA512_ASM
/D KECCAK1600_ASM
/D RC4_ASM
/D MD5_ASM
/D AES_ASM
/D VPAES_ASM
/D BSAES_ASM
/D GHASH_ASM
/D ECP_NISTZ256_ASM
/D X25519_ASM
/D PADLOCK_ASM
/D POLY1305_ASM

_ARM64_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE is used to ensure the full desktop SDK is available when building.

OPENSSL_SYS_WIN_CORE is related, I am guessing, to ARM64 Windows OpenSSL being compatible with the Store app environment.

The _ASM defines are used to trigger ASM paths that don't exist for ARM64.

/analyze- simply disables static analysis output in the compiler. It does not affect the generated code. [Edit: added this line]

In total, I believe the arguments generated are correct.

@shigeki
Copy link
Contributor

shigeki commented Feb 22, 2019

The asm support on arm64 is disabled due to #23913 issue and it is to be enabled after resolved.

I checked the configdata.pm of VC-WIN64-ARM and found that it does not have asm support.
It means that only deps/openssl/config/archs/VC-WIN64-ARM/no-asm/ is needed.

The current deps/openssl/config/Makefile generates three types openssl sources of asm, asm_avx2 and no-asm so that the Makefile should be fixed to skip first two in case of VC-WIN64-ARM and its gyp allows only no_ams support.
I can have a time to make a patch during this weekend and ask you to try build with it after that.

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 22, 2019

If it's helpful, here is a with-ASM configdata.pm:

configdata.pm.txt

Fixing the avx2 naming issue makes more sense to me as a separate PR. I'll tinker with it a little today.

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 22, 2019

I tried a few things, and it appears that OpenSSL 1.1.1a's tentative ARM64 Windows support does not include ASM support. The VC-WIN64-ARM definition does not inherit the aarch64_asm sources and there is no infrastructure for invoking armasm64.exe. That just confirms what you said--no-asm is the only option for ARM64 Windows for now.

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 23, 2019

It's a bit messy, but if it helps I prototyped something like what you described. I think it should be in a different PR, but maybe it will help with verifying this change. [edit: clarify/expand last sentence]

@shigeki
Copy link
Contributor

shigeki commented Feb 24, 2019

@jkunkee Please try f5fa052 and 6e8f080 in https://github.com/shigeki/node/tree/openssl_win_arm64. I think this is minimum changes to support arm64 windows and keep compatibilities with Node-v10. For I do not have an arm64 win machine and could not test this patch, please give me all the outputs if any errors occurs.

@jkunkee
Copy link
Contributor Author

jkunkee commented Feb 25, 2019

Wow. Your change is much cleaner than mine. :)

Also, it builds cleanly for me. I'll push a new set of commits with yours at the core shortly.

@BridgeAR BridgeAR added the author ready PRs that have at least one approval, no pending requests for changes, and a CI started. label Apr 3, 2019
@nodejs-github-bot
Copy link
Collaborator

@BridgeAR
Copy link
Member

BridgeAR commented Apr 3, 2019

@jkunkee sadly a couple of our tests are flaky. It is difficult to write tests that work on lots of platforms reliable under all circumstances. As long as you and we can not spot anything related, everything is fine.

@nodejs-github-bot
Copy link
Collaborator

nodejs-github-bot commented Apr 3, 2019

@sam-github
Copy link
Contributor

Thanks @BridgeAR.

linuxone failed, I resumed, if its a flaky unrelated test, it should pass again. If not, maybe its a real problem.

BridgeAR pushed a commit to BridgeAR/node that referenced this pull request Apr 4, 2019
This adds ARM64 Windows support in the OpenSSL build system.

Since OpenSSL's ARM64 Windows support does not have support for ASM--
that is, VC-WIN64-ARM inherits from VC-noCE-common which has no ASM
files--`openssl_no_asm.gypi` is always used for building. This
essentially forces the 'no-asm' Configure flag.

PR-URL: nodejs#26001
Fixes: nodejs#25998
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
BridgeAR pushed a commit to BridgeAR/node that referenced this pull request Apr 4, 2019
This change adds the generated files required for building OpenSSL for
Node.js for ARM64 Windows. I did this on a VM running Ubuntu 18.04. The
basic workflow is to cd to deps/openssl/config and run `make`,
installing any needed packages until all architectures build correctly.

Note that OpenSSL 1.1.1 does not support ASM on ARM64 Windows, so this
change also supports only no-asm on ARM64 Windows.

PR-URL: nodejs#26001
Fixes: nodejs#25998
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
@BridgeAR
Copy link
Member

BridgeAR commented Apr 4, 2019

Landed in a19e8eb, e575ba6 🎉

@BridgeAR BridgeAR closed this Apr 4, 2019
BethGriggs pushed a commit that referenced this pull request Apr 9, 2019
This adds ARM64 Windows support in the OpenSSL build system.

Since OpenSSL's ARM64 Windows support does not have support for ASM--
that is, VC-WIN64-ARM inherits from VC-noCE-common which has no ASM
files--`openssl_no_asm.gypi` is always used for building. This
essentially forces the 'no-asm' Configure flag.

PR-URL: #26001
Fixes: #25998
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Signed-off-by: Beth Griggs <Bethany.Griggs@uk.ibm.com>
BethGriggs pushed a commit that referenced this pull request Apr 9, 2019
This change adds the generated files required for building OpenSSL for
Node.js for ARM64 Windows. I did this on a VM running Ubuntu 18.04. The
basic workflow is to cd to deps/openssl/config and run `make`,
installing any needed packages until all architectures build correctly.

Note that OpenSSL 1.1.1 does not support ASM on ARM64 Windows, so this
change also supports only no-asm on ARM64 Windows.

PR-URL: #26001
Fixes: #25998
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Signed-off-by: Beth Griggs <Bethany.Griggs@uk.ibm.com>
@BethGriggs BethGriggs mentioned this pull request Apr 9, 2019
BethGriggs pushed a commit that referenced this pull request Apr 10, 2019
This adds ARM64 Windows support in the OpenSSL build system.

Since OpenSSL's ARM64 Windows support does not have support for ASM--
that is, VC-WIN64-ARM inherits from VC-noCE-common which has no ASM
files--`openssl_no_asm.gypi` is always used for building. This
essentially forces the 'no-asm' Configure flag.

PR-URL: #26001
Fixes: #25998
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Signed-off-by: Beth Griggs <Bethany.Griggs@uk.ibm.com>
BethGriggs pushed a commit that referenced this pull request Apr 10, 2019
This change adds the generated files required for building OpenSSL for
Node.js for ARM64 Windows. I did this on a VM running Ubuntu 18.04. The
basic workflow is to cd to deps/openssl/config and run `make`,
installing any needed packages until all architectures build correctly.

Note that OpenSSL 1.1.1 does not support ASM on ARM64 Windows, so this
change also supports only no-asm on ARM64 Windows.

PR-URL: #26001
Fixes: #25998
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Signed-off-by: Beth Griggs <Bethany.Griggs@uk.ibm.com>
sam-github pushed a commit to sam-github/node that referenced this pull request Apr 29, 2019
This adds ARM64 Windows support in the OpenSSL build system.

Since OpenSSL's ARM64 Windows support does not have support for ASM--
that is, VC-WIN64-ARM inherits from VC-noCE-common which has no ASM
files--`openssl_no_asm.gypi` is always used for building. This
essentially forces the 'no-asm' Configure flag.

PR-URL: nodejs#26001
Fixes: nodejs#25998
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Signed-off-by: Beth Griggs <Bethany.Griggs@uk.ibm.com>
sam-github pushed a commit to sam-github/node that referenced this pull request May 10, 2019
This adds ARM64 Windows support in the OpenSSL build system.

Since OpenSSL's ARM64 Windows support does not have support for ASM--
that is, VC-WIN64-ARM inherits from VC-noCE-common which has no ASM
files--`openssl_no_asm.gypi` is always used for building. This
essentially forces the 'no-asm' Configure flag.

PR-URL: nodejs#26001
Fixes: nodejs#25998
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Signed-off-by: Beth Griggs <Bethany.Griggs@uk.ibm.com>
@jkunkee jkunkee deleted the arm64-openssl branch May 13, 2019 23:08
MylesBorins pushed a commit that referenced this pull request May 16, 2019
This adds ARM64 Windows support in the OpenSSL build system.

Since OpenSSL's ARM64 Windows support does not have support for ASM--
that is, VC-WIN64-ARM inherits from VC-noCE-common which has no ASM
files--`openssl_no_asm.gypi` is always used for building. This
essentially forces the 'no-asm' Configure flag.

Backport-PR-URL: #27419
PR-URL: #26001
Fixes: #25998
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Signed-off-by: Beth Griggs <Bethany.Griggs@uk.ibm.com>
MylesBorins pushed a commit that referenced this pull request May 16, 2019
This adds ARM64 Windows support in the OpenSSL build system.

Since OpenSSL's ARM64 Windows support does not have support for ASM--
that is, VC-WIN64-ARM inherits from VC-noCE-common which has no ASM
files--`openssl_no_asm.gypi` is always used for building. This
essentially forces the 'no-asm' Configure flag.

Backport-PR-URL: #27419
PR-URL: #26001
Fixes: #25998
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Signed-off-by: Beth Griggs <Bethany.Griggs@uk.ibm.com>
@BethGriggs BethGriggs mentioned this pull request May 16, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
author ready PRs that have at least one approval, no pending requests for changes, and a CI started. openssl Issues and PRs related to the OpenSSL dependency.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants