-
Notifications
You must be signed in to change notification settings - Fork 29.6k
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
Conversation
2cac79a
to
c697764
Compare
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. |
Wow, is there the machine that is available on our CI or can I check it on some machine somewhere such as Azure? |
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 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. |
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. |
I think that we should be very careful to support arm64 Window on Node.js because OpenSSL says that
I think we should wait for this until we have an arm64 Windows host on our CI. |
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? |
@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. |
@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? |
@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.. |
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. |
@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. |
@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. |
@shigeki - Is there anything else I can do to help? |
For 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 .
In
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 |
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 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 |
c697764
to
ee3e644
Compare
Apparently the AVX2 config files are used on all platforms, so I've pushed a change that adds that case for ARM64 Windows. |
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
The
In total, I believe the arguments generated are correct. |
The asm support on arm64 is disabled due to #23913 issue and it is to be enabled after resolved. I checked the The current |
If it's helpful, here is a with-ASM configdata.pm: Fixing the avx2 naming issue makes more sense to me as a separate PR. I'll tinker with it a little today. |
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-- |
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] |
@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. |
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. |
@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. |
Thanks @BridgeAR. linuxone failed, I resumed, if its a flaky unrelated test, it should pass again. If not, maybe its a real problem. |
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 <[email protected]> Reviewed-By: Sam Roberts <[email protected]>
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 <[email protected]> Reviewed-By: Sam Roberts <[email protected]>
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 <[email protected]> Reviewed-By: Sam Roberts <[email protected]> Signed-off-by: Beth Griggs <[email protected]>
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 <[email protected]> Reviewed-By: Sam Roberts <[email protected]> Signed-off-by: Beth Griggs <[email protected]>
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 <[email protected]> Reviewed-By: Sam Roberts <[email protected]> Signed-off-by: Beth Griggs <[email protected]>
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 <[email protected]> Reviewed-By: Sam Roberts <[email protected]> Signed-off-by: Beth Griggs <[email protected]>
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 <[email protected]> Reviewed-By: Sam Roberts <[email protected]> Signed-off-by: Beth Griggs <[email protected]>
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 <[email protected]> Reviewed-By: Sam Roberts <[email protected]> Signed-off-by: Beth Griggs <[email protected]>
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 <[email protected]> Reviewed-By: Sam Roberts <[email protected]> Signed-off-by: Beth Griggs <[email protected]>
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 <[email protected]> Reviewed-By: Sam Roberts <[email protected]> Signed-off-by: Beth Griggs <[email protected]>
In order to build Node.js for ARM64 Windows, OpenSSL needs to have a matching configuration checked in.
Checklist
make -j4 test
(UNIX), orvcbuild test
(Windows) passesFixes: #25998