Skip to content

Commit

Permalink
deps: add ARM64 Windows support in openssl
Browse files Browse the repository at this point in the history
This is eventually the same as no-asm build for VC-WIN64-ARM inherits
from VC-noCE-common that has no asm files.
`openssl_no_asm.gypi` is always used for building.
  • Loading branch information
shigeki committed Feb 23, 2019
1 parent 8d69fdd commit f5fa052
Show file tree
Hide file tree
Showing 7 changed files with 169 additions and 3 deletions.
14 changes: 11 additions & 3 deletions deps/openssl/config/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ endif
PERL = perl

# Supported architecture list
ARCHS = aix-gcc aix64-gcc BSD-x86_64 \
ASM_ARCHS = aix-gcc aix64-gcc BSD-x86_64 \
darwin64-x86_64-cc darwin-i386-cc linux-aarch64 \
linux-armv4 linux-elf linux-x32 linux-x86_64 linux-ppc \
linux-ppc64 linux-ppc64le linux32-s390x linux64-s390x \
solaris-x86-gcc solaris64-x86_64-gcc VC-WIN64A VC-WIN32

NO_ASM_ARCHS = VC-WIN64-ARM

CC = gcc
FAKE_GCC = ../config/fake_gcc.pl

Expand All @@ -40,10 +42,10 @@ INT_CFG_DIR = $(OPSSL_SRC)/crypto/include/internal
PHONY = all clean replace
.PHONY: $(PHONY)

all: $(ARCHS) replace
all: $(ASM_ARCHS) $(NO_ASM_ARCHS) replace

# Configure and generate openssl asm files for each archs
$(ARCHS):
$(ASM_ARCHS):
# Remove openssl git and travis configuration, nodejs has its own (and they
# should not have been packaged by upstream).
rm -rf $(OPSSL_SRC)/.git* $(OPSSL_SRC)/.travis*
Expand All @@ -58,6 +60,12 @@ $(ARCHS):
no-asm $@;
$(PERL) -w -I$(OPSSL_SRC) $(GENERATE) no-asm $@

$(NO_ASM_ARCHS):
# Confgure no-asm and generate no-asm sources
cd $(OPSSL_SRC); $(NO_WARN_ENV) $(PERL) $(CONFIGURE) $(COPTS) \
no-asm $@;
$(PERL) -w -I$(OPSSL_SRC) $(GENERATE) no-asm $@

# Replace and copy arch dependent headers
replace:
cp ./$(CFG).tmpl $(SRC_CFG)
Expand Down
147 changes: 147 additions & 0 deletions deps/openssl/config/Makefile_VC-WIN64-ARM
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@

##
## Makefile for OpenSSL
##
## WARNING: do not edit!
## Generated by Configure from Configurations/common0.tmpl, Configurations/windows-makefile.tmpl, Configurations/common.tmpl


PLATFORM=VC-WIN64-ARM
SRCDIR=.
BLDDIR=.

VERSION=1.1.1a
MAJOR=1
MINOR=1.1

SHLIB_VERSION_NUMBER=1.1

GENERATED_MANDATORY=crypto/include/internal/bn_conf.h crypto/include/internal/dso_conf.h include/openssl/opensslconf.h

INSTALL_LIBS="libcrypto.lib" "libssl.lib"
INSTALL_SHLIBS="libcrypto-1_1-arm64.dll" "libssl-1_1-arm64.dll"
INSTALL_SHLIBPDBS="libcrypto-1_1-arm64.pdb" "libssl-1_1-arm64.pdb"
INSTALL_ENGINES="engines/capi.dll" "engines/padlock.dll"
INSTALL_ENGINEPDBS="engines/capi.pdb" "engines/padlock.pdb"
INSTALL_PROGRAMS="apps/openssl.exe"
INSTALL_PROGRAMPDBS="apps/openssl.pdb"

BIN_SCRIPTS="$(BLDDIR)\tools\c_rehash.pl"
MISC_SCRIPTS="$(BLDDIR)\apps\CA.pl" "$(BLDDIR)\apps\tsget.pl"


APPS_OPENSSL="apps/openssl"

# Do not edit these manually. Use Configure with --prefix or --openssldir
# to change this! Short explanation in the top comment in Configure
INSTALLTOP_dev=
INSTALLTOP_dir=\OpenSSL
OPENSSLDIR_dev=
OPENSSLDIR_dir=\SSL
LIBDIR=lib
ENGINESDIR_dev=
ENGINESDIR_dir=\OpenSSL/lib/engines-1_1
INSTALLTOP=$(INSTALLTOP_dev)$(INSTALLTOP_dir)
OPENSSLDIR=$(OPENSSLDIR_dev)$(OPENSSLDIR_dir)
ENGINESDIR=$(ENGINESDIR_dev)$(ENGINESDIR_dir)

# $(libdir) is chosen to be compatible with the GNU coding standards
libdir=$(INSTALLTOP)\$(LIBDIR)

##### User defined commands and flags ################################

CC=cl
CPP=$(CC) /EP /C
CPPFLAGS=
CFLAGS=/W3 /wd4090 /nologo /O2
LD=link
LDFLAGS=/nologo /debug
EX_LIBS=

PERL=/usr/bin/perl

AR=lib
ARFLAGS= /nologo

MT=mt
MTFLAGS= -nologo

AS=
ASFLAGS=

RC=rc

ECHO="$(PERL)" "$(SRCDIR)\util\echo.pl"

##### Special command flags ##########################################

COUTFLAG=/Fo$(OSSL_EMPTY)
LDOUTFLAG=/out:$(OSSL_EMPTY)
AROUTFLAG=/out:$(OSSL_EMPTY)
MTINFLAG=-manifest $(OSSL_EMPTY)
MTOUTFLAG=-outputresource:$(OSSL_EMPTY)
ASOUTFLAG=$(OSSL_EMPTY)
RCOUTFLAG=/fo$(OSSL_EMPTY)

##### Project flags ##################################################

# Variables starting with CNF_ are common variables for all product types

CNF_ASFLAGS=
CNF_CPPFLAGS=-D"OPENSSL_SYS_WIN32" -D"WIN32_LEAN_AND_MEAN" -D"UNICODE" -D"_UNICODE" -D"_CRT_SECURE_NO_DEPRECATE" -D"_WINSOCK_DEPRECATED_NO_WARNINGS" -D"_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE" -D"OPENSSL_SYS_WIN_CORE" -D"NDEBUG"
CNF_CFLAGS=/Gs0 /GF /Gy /MD
CNF_CXXFLAGS=
CNF_LDFLAGS=/NODEFAULTLIB:kernel32.lib
CNF_EX_LIBS=onecore.lib

# Variables starting with LIB_ are used to build library object files
# and shared libraries.
# Variables starting with DSO_ are used to build DSOs and their object files.
# Variables starting with BIN_ are used to build programs and their object
# files.

LIB_ASFLAGS=$(CNF_ASFLAGS) $(ASFLAGS)
LIB_CPPFLAGS=-D"L_ENDIAN" -D"OPENSSL_PIC" -D"OPENSSLDIR=\"\\SSL\"" -D"ENGINESDIR=\"\\OpenSSL/lib/engines-1_1\"" $(CNF_CPPFLAGS) $(CPPFLAGS)
LIB_CFLAGS=/Zi /Fdossl_static.pdb $(CNF_CFLAGS) $(CFLAGS)
LIB_LDFLAGS=/dll $(CNF_LDFLAGS) $(LDFLAGS)
LIB_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
DSO_ASFLAGS=$(CNF_ASFLAGS) $(ASFLAGS)
DSO_CPPFLAGS=$(CNF_CPPFLAGS) $(CPPFLAGS)
DSO_CFLAGS=/Zi /Fddso.pdb $(CNF_CFLAGS) $(CFLAGS)
DSO_LDFLAGS=/dll $(CNF_LDFLAGS) $(LDFLAGS)
DSO_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
BIN_ASFLAGS=$(CNF_ASFLAGS) $(ASFLAGS)
BIN_CPPFLAGS=$(CNF_CPPFLAGS) $(CPPFLAGS)
BIN_CFLAGS=/Zi /Fdapp.pdb $(CNF_CFLAGS) $(CFLAGS)
BIN_LDFLAGS=/subsystem:console /opt:ref $(CNF_LDFLAGS) $(LDFLAGS)
BIN_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)

# CPPFLAGS_Q is used for one thing only: to build up buildinf.h
CPPFLAGS_Q=-D"L_ENDIAN" -D"OPENSSL_PIC"

PERLASM_SCHEME=

PROCESSOR=

build_generated: $(GENERATED_MANDATORY)

crypto/buildinf.h:
"$(PERL)" "util/mkbuildinf.pl" "$(CC) $(LIB_CFLAGS) $(CPPFLAGS_Q)" "$(PLATFORM)" > $@

apps/progs.h:
"$(PERL)" "apps/progs.pl" $(APPS_OPENSSL) > $@

crypto/include/internal/bn_conf.h:
"$(PERL)" "-I$(BLDDIR)" -Mconfigdata "util/dofile.pl" \
"-omakefile" "crypto/include/internal/bn_conf.h.in" > $@
crypto/include/internal/dso_conf.h:
"$(PERL)" "-I$(BLDDIR)" -Mconfigdata "util/dofile.pl" \
"-omakefile" "crypto/include/internal/dso_conf.h.in" > $@
include/openssl/opensslconf.h:
"$(PERL)" "-I$(BLDDIR)" -Mconfigdata "util/dofile.pl" \
"-omakefile" "include/openssl/opensslconf.h.in" > $@

distclean:
$(RM) $(GENERATED)
$(RM) /Q /F configdata.pm
$(RM) /Q /F makefile
2 changes: 2 additions & 0 deletions deps/openssl/config/bn_conf_no-asm.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
# include "./archs/VC-WIN32/no-asm/crypto/include/internal/bn_conf.h"
#elif defined(_WIN32) && defined(_M_X64)
# include "./archs/VC-WIN64A/no-asm/crypto/include/internal/bn_conf.h"
#elif defined(_WIN32) && defined(_M_ARM64)
# include "./archs/VC-WIN64-ARM/no-asm/crypto/include/internal/bn_conf.h"
#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
# include "./archs/BSD-x86/no-asm/crypto/include/internal/bn_conf.h"
#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)
Expand Down
2 changes: 2 additions & 0 deletions deps/openssl/config/dso_conf_no-asm.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
# include "./archs/VC-WIN32/no-asm/crypto/include/internal/dso_conf.h"
#elif defined(_WIN32) && defined(_M_X64)
# include "./archs/VC-WIN64A/no-asm/crypto/include/internal/dso_conf.h"
#elif defined(_WIN32) && defined(_M_ARM64)
# include "./archs/VC-WIN64-ARM/no-asm/crypto/include/internal/dso_conf.h"
#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
# include "./archs/BSD-x86/no-asm/crypto/include/internal/dso_conf.h"
#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)
Expand Down
2 changes: 2 additions & 0 deletions deps/openssl/config/opensslconf_no-asm.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
# include "./archs/VC-WIN32/no-asm/include/openssl/opensslconf.h"
#elif defined(_WIN32) && defined(_M_X64)
# include "./archs/VC-WIN64A/no-asm/include/openssl/opensslconf.h"
#elif defined(_WIN32) && defined(_M_ARM64)
# include "./archs/VC-WIN64-ARM/no-asm/include/openssl/opensslconf.h"
#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
# include "./archs/BSD-x86/no-asm/include/openssl/opensslconf.h"
#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)
Expand Down
3 changes: 3 additions & 0 deletions deps/openssl/openssl.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
'conditions': [
[ 'openssl_no_asm==1', {
'includes': ['./openssl_no_asm.gypi'],
}, 'target_arch=="arm64" and OS=="win"', {
# VC-WIN64-ARM inherits from VC-noCE-common that has no asms.
'includes': ['./openssl_no_asm.gypi'],
}, 'gas_version >= "2.26" or nasm_version >= "2.11.8"', {
# Require AVX512IFMA supported. See
# https://www.openssl.org/docs/man1.1.1/man3/OPENSSL_ia32cap.html
Expand Down
2 changes: 2 additions & 0 deletions deps/openssl/openssl_no_asm.gypi
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@
'includes': ['config/archs/solaris64-x86_64-gcc/no-asm/openssl.gypi'],
}, 'target_arch=="x64" and OS=="win"', {
'includes': ['config/archs/VC-WIN64A/no-asm/openssl.gypi'],
}, 'target_arch=="arm64" and OS=="win"', {
'includes': ['config/archs/VC-WIN64-ARM/no-asm/openssl.gypi'],
}, 'target_arch=="x64" and OS=="linux"', {
'includes': ['config/archs/linux-x86_64/no-asm/openssl.gypi'],
}, {
Expand Down

0 comments on commit f5fa052

Please sign in to comment.