deps, build: add support older assembler
authorShigeki Ohtsu <ohtsu@iij.ad.jp>
Tue, 31 Mar 2015 05:16:10 +0000 (14:16 +0900)
committerShigeki Ohtsu <ohtsu@iij.ad.jp>
Tue, 14 Apr 2015 15:38:57 +0000 (00:38 +0900)
Asm files for OpenSSL depends on the version of assembler.
We provide two sets of asm files, one is asm_latest(avx2 and addx
supported) and the other asm_obsolute(without avx1/2 and addx)

The asm_latest needs the version of gas >= 2.23, llvm >= 3.3
or ml64 >= 12 as defined in
https://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/crypto/sha/asm/sha512-x86_64.pl#L112-L129
, otherwise asm_obsolute are used.

We take MSVS_VERSION in gyp as a version check of assembler on
Windows because the path to ml64.exe was set after configure in
vcbuild.bat and executing ml64.exe was failed in configure.

Fixes: https://github.com/iojs/io.js/issues/589
PR-URL: https://github.com/iojs/io.js/pull/1389
Reviewed-By: Fedor Indutny <fedor@indutny.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
configure
deps/openssl/asm_obsolete/Makefile [new file with mode: 0644]
deps/openssl/openssl-cli.gypi
deps/openssl/openssl.gyp
deps/openssl/openssl.gypi

index 67440a2..25e5402 100755 (executable)
--- a/configure
+++ b/configure
@@ -357,11 +357,63 @@ def try_check_compiler(cc, lang):
   return (True, is_clang, clang_version, gcc_version)
 
 
+#
+# The version of asm compiler is needed for building openssl asm files.
+# See deps/openssl/openssl.gypi for detail.
+# Commands and reglar expressions to obtain its version number is taken from
+# https://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/crypto/sha/asm/sha512-x86_64.pl#L112-L129
+#
+def get_llvm_version(cc):
+  try:
+    proc = subprocess.Popen(shlex.split(cc) + ['-v'], stdin=subprocess.PIPE,
+                            stderr=subprocess.PIPE, stdout=subprocess.PIPE)
+  except OSError:
+    print '''Node.js configure error: No acceptable C compiler found!
+
+        Please make sure you have a C compiler installed on your system and/or
+        consider adjusting the CC environment variable if you installed
+        it in a non-standard prefix.
+        '''
+    sys.exit()
+
+  match = re.search(r"(^clang version|based on LLVM) ([3-9]\.[0-9]+)",
+                    proc.communicate()[1])
+
+  if match:
+    return match.group(2)
+  else:
+    return 0
+
+
+def get_gas_version(cc):
+  try:
+    proc = subprocess.Popen(shlex.split(cc) + ['-Wa,-v', '-c', '-o',
+                                               '/dev/null', '-x',
+                                               'assembler',  '/dev/null'],
+                            stdin=subprocess.PIPE, stderr=subprocess.PIPE,
+                            stdout=subprocess.PIPE)
+  except OSError:
+    print '''Node.js configure error: No acceptable C compiler found!
+
+        Please make sure you have a C compiler installed on your system and/or
+        consider adjusting the CC environment variable if you installed
+        it in a non-standard prefix.
+        '''
+    sys.exit()
+
+  match = re.match(r"GNU assembler version ([2-9]\.[0-9]+)",
+                   proc.communicate()[1])
+
+  if match:
+    return match.group(1)
+  else:
+    return 0
+
 # Note: Apple clang self-reports as clang 4.2.0 and gcc 4.2.1.  It passes
 # the version check more by accident than anything else but a more rigorous
 # check involves checking the build number against a whitelist.  I'm not
 # quite prepared to go that far yet.
-def check_compiler():
+def check_compiler(o):
   if sys.platform == 'win32':
     return
 
@@ -380,6 +432,15 @@ def check_compiler():
     # to a version that is not completely ancient.
     warn('C compiler too old, need gcc 4.2 or clang 3.2 (CC=%s)' % CC)
 
+    # Need llvm_version or gas_version when openssl asm files are compiled
+  if options.without_ssl or options.openssl_no_asm or options.shared_openssl:
+    return
+
+  if is_clang:
+    o['variables']['llvm_version'] = get_llvm_version(CC)
+  else:
+    o['variables']['gas_version'] = get_gas_version(CC)
+
 
 def cc_macros():
   """Checks predefined macros using the CC command."""
@@ -935,8 +996,16 @@ def configure_intl(o):
         pprint.pformat(icu_config, indent=2) + '\n')
   return  # end of configure_intl
 
+output = {
+  'variables': { 'python': sys.executable },
+  'include_dirs': [],
+  'libraries': [],
+  'defines': [],
+  'cflags': [],
+}
+
 # Print a warning when the compiler is too old.
-check_compiler()
+check_compiler(output)
 
 # determine the "flavor" (operating system) we're building for,
 # leveraging gyp's GetFlavor function
@@ -945,14 +1014,6 @@ if (options.dest_os):
   flavor_params['flavor'] = options.dest_os
 flavor = GetFlavor(flavor_params)
 
-output = {
-  'variables': { 'python': sys.executable },
-  'include_dirs': [],
-  'libraries': [],
-  'defines': [],
-  'cflags': [],
-}
-
 configure_node(output)
 configure_libz(output)
 configure_http_parser(output)
diff --git a/deps/openssl/asm_obsolete/Makefile b/deps/openssl/asm_obsolete/Makefile
new file mode 100644 (file)
index 0000000..c3ccfa4
--- /dev/null
@@ -0,0 +1,376 @@
+PERL   ?= perl
+PERL   += -I../openssl/crypto/perlasm -I../openssl/crypto/bn/asm
+
+# OPENSSL_IA32_SSE2 flag is needed for checking the sse2 feature on ia32
+# see https://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/crypto/sha/asm/sha512-586.pl#L56
+SSE2   = -DOPENSSL_IA32_SSE2
+
+# CC and ASM enviroments are not needed for generating obsoluted asm files
+CC     = ''
+ASM    = ''
+
+OUTPUTS        = \
+       x86-elf-gas/aes/aes-586.s \
+       x86-elf-gas/aes/aesni-x86.s \
+       x86-elf-gas/aes/vpaes-x86.s \
+       x86-elf-gas/bf/bf-586.s \
+       x86-elf-gas/bn/bn-586.s \
+       x86-elf-gas/bn/co-586.s \
+       x86-elf-gas/bn/x86-mont.s \
+       x86-elf-gas/bn/x86-gf2m.s \
+       x86-elf-gas/camellia/cmll-x86.s \
+       x86-elf-gas/cast/cast-586.s \
+       x86-elf-gas/des/crypt586.s \
+       x86-elf-gas/des/des-586.s \
+       x86-elf-gas/md5/md5-586.s \
+       x86-elf-gas/rc4/rc4-586.s \
+       x86-elf-gas/ripemd/rmd-586.s \
+       x86-elf-gas/sha/sha1-586.s \
+       x86-elf-gas/sha/sha256-586.s \
+       x86-elf-gas/sha/sha512-586.s \
+       x86-elf-gas/whrlpool/wp-mmx.s \
+       x86-elf-gas/modes/ghash-x86.s \
+       x86-elf-gas/x86cpuid.s \
+       x64-elf-gas/aes/aes-x86_64.s \
+        x64-elf-gas/aes/aesni-mb-x86_64.s \
+        x64-elf-gas/aes/aesni-sha256-x86_64.s \
+       x64-elf-gas/aes/aesni-x86_64.s \
+       x64-elf-gas/aes/vpaes-x86_64.s \
+       x64-elf-gas/aes/bsaes-x86_64.s \
+       x64-elf-gas/aes/aesni-sha1-x86_64.s \
+        x64-elf-gas/bn/rsaz-avx2.s \
+        x64-elf-gas/bn/rsaz-x86_64.s \
+       x64-elf-gas/bn/x86_64-mont.s \
+       x64-elf-gas/bn/x86_64-mont5.s \
+       x64-elf-gas/bn/x86_64-gf2m.s \
+       x64-elf-gas/camellia/cmll-x86_64.s \
+        x64-elf-gas/ec/ecp_nistz256-x86_64.s \
+       x64-elf-gas/md5/md5-x86_64.s \
+       x64-elf-gas/rc4/rc4-x86_64.s \
+       x64-elf-gas/rc4/rc4-md5-x86_64.s \
+        x64-elf-gas/sha/sha1-mb-x86_64.s \
+       x64-elf-gas/sha/sha1-x86_64.s \
+        x64-elf-gas/sha/sha256-mb-x86_64.s \
+       x64-elf-gas/sha/sha256-x86_64.s \
+       x64-elf-gas/sha/sha512-x86_64.s \
+       x64-elf-gas/whrlpool/wp-x86_64.s \
+        x64-elf-gas/modes/aesni-gcm-x86_64.s \
+       x64-elf-gas/modes/ghash-x86_64.s \
+       x64-elf-gas/x86_64cpuid.s \
+       arm-void-gas/aes/aes-armv4.S \
+       arm-void-gas/aes/bsaes-armv7.S \
+       arm-void-gas/aes/aesv8-armx.S \
+       arm-void-gas/bn/armv4-mont.S \
+       arm-void-gas/bn/armv4-gf2m.S \
+       arm-void-gas/sha/sha1-armv4-large.S \
+       arm-void-gas/sha/sha256-armv4.S \
+       arm-void-gas/sha/sha512-armv4.S \
+       arm-void-gas/modes/ghash-armv4.S \
+       arm-void-gas/modes/ghashv8-armx.S \
+       arm64-linux64-gas/aes/aesv8-armx.S \
+       arm64-linux64-gas/modes/ghashv8-armx.S \
+       arm64-linux64-gas/sha/sha1-armv8.S \
+       arm64-linux64-gas/sha/sha256-armv8.S \
+       arm64-linux64-gas/sha/sha512-armv8.S \
+       x86-macosx-gas/aes/aes-586.s \
+       x86-macosx-gas/aes/aesni-x86.s \
+       x86-macosx-gas/aes/vpaes-x86.s \
+       x86-macosx-gas/bf/bf-586.s \
+       x86-macosx-gas/bn/bn-586.s \
+       x86-macosx-gas/bn/co-586.s \
+       x86-macosx-gas/bn/x86-mont.s \
+       x86-macosx-gas/bn/x86-gf2m.s \
+       x86-macosx-gas/camellia/cmll-x86.s \
+       x86-macosx-gas/cast/cast-586.s \
+       x86-macosx-gas/des/crypt586.s \
+       x86-macosx-gas/des/des-586.s \
+       x86-macosx-gas/md5/md5-586.s \
+       x86-macosx-gas/rc4/rc4-586.s \
+       x86-macosx-gas/ripemd/rmd-586.s \
+       x86-macosx-gas/sha/sha1-586.s \
+       x86-macosx-gas/sha/sha256-586.s \
+       x86-macosx-gas/sha/sha512-586.s \
+       x86-macosx-gas/whrlpool/wp-mmx.s \
+       x86-macosx-gas/modes/ghash-x86.s \
+       x86-macosx-gas/x86cpuid.s \
+       x64-macosx-gas/aes/aes-x86_64.s \
+       x64-macosx-gas/aes/aesni-x86_64.s \
+       x64-macosx-gas/aes/vpaes-x86_64.s \
+       x64-macosx-gas/aes/aesni-mb-x86_64.s \
+       x64-macosx-gas/aes/aesni-sha256-x86_64.s \
+       x64-macosx-gas/aes/bsaes-x86_64.s \
+       x64-macosx-gas/aes/aesni-sha1-x86_64.s \
+       x64-macosx-gas/bn/rsaz-avx2.s \
+       x64-macosx-gas/bn/rsaz-x86_64.s \
+       x64-macosx-gas/bn/x86_64-mont.s \
+       x64-macosx-gas/bn/x86_64-mont5.s \
+       x64-macosx-gas/bn/x86_64-gf2m.s \
+       x64-macosx-gas/camellia/cmll-x86_64.s \
+       x64-macosx-gas/ec/ecp_nistz256-x86_64.s \
+       x64-macosx-gas/md5/md5-x86_64.s \
+       x64-macosx-gas/sha/sha1-mb-x86_64.s \
+       x64-macosx-gas/sha/sha1-x86_64.s \
+       x64-macosx-gas/sha/sha256-mb-x86_64.s \
+       x64-macosx-gas/sha/sha256-x86_64.s \
+       x64-macosx-gas/sha/sha512-x86_64.s \
+       x64-macosx-gas/whrlpool/wp-x86_64.s \
+       x64-macosx-gas/modes/aesni-gcm-x86_64.s \
+       x64-macosx-gas/modes/ghash-x86_64.s \
+       x64-macosx-gas/x86_64cpuid.s \
+       x86-win32-masm/aes/aes-586.asm \
+       x86-win32-masm/aes/aesni-x86.asm \
+       x86-win32-masm/aes/vpaes-x86.asm \
+       x86-win32-masm/bf/bf-586.asm \
+       x86-win32-masm/bn/bn-586.asm \
+       x86-win32-masm/bn/co-586.asm \
+       x86-win32-masm/bn/x86-mont.asm \
+       x86-win32-masm/bn/x86-gf2m.asm \
+       x86-win32-masm/camellia/cmll-x86.asm \
+       x86-win32-masm/cast/cast-586.asm \
+       x86-win32-masm/des/crypt586.asm \
+       x86-win32-masm/des/des-586.asm \
+       x86-win32-masm/md5/md5-586.asm \
+       x86-win32-masm/rc4/rc4-586.asm \
+       x86-win32-masm/ripemd/rmd-586.asm \
+       x86-win32-masm/sha/sha1-586.asm \
+       x86-win32-masm/sha/sha256-586.asm \
+       x86-win32-masm/sha/sha512-586.asm \
+       x86-win32-masm/whrlpool/wp-mmx.asm \
+       x86-win32-masm/modes/ghash-x86.asm \
+       x86-win32-masm/x86cpuid.asm \
+       x64-win32-masm/aes/aes-x86_64.asm \
+        x64-win32-masm/aes/aesni-mb-x86_64.asm \
+        x64-win32-masm/aes/aesni-sha256-x86_64.asm \
+       x64-win32-masm/aes/aesni-x86_64.asm \
+       x64-win32-masm/aes/vpaes-x86_64.asm \
+       x64-win32-masm/aes/bsaes-x86_64.asm \
+       x64-win32-masm/aes/aesni-sha1-x86_64.asm \
+        x64-win32-masm/bn/rsaz-avx2.asm \
+        x64-win32-masm/bn/rsaz-x86_64.asm \
+       x64-win32-masm/bn/x86_64-mont.asm \
+       x64-win32-masm/bn/x86_64-mont5.asm \
+       x64-win32-masm/bn/x86_64-gf2m.asm \
+       x64-win32-masm/camellia/cmll-x86_64.asm \
+        x64-win32-masm/ec/ecp_nistz256-x86_64.asm \
+       x64-win32-masm/md5/md5-x86_64.asm \
+       x64-win32-masm/rc4/rc4-x86_64.asm \
+       x64-win32-masm/rc4/rc4-md5-x86_64.asm \
+        x64-win32-masm/sha/sha1-mb-x86_64.asm \
+       x64-win32-masm/sha/sha1-x86_64.asm \
+        x64-win32-masm/sha/sha256-mb-x86_64.asm \
+       x64-win32-masm/sha/sha256-x86_64.asm \
+        x64-win32-masm/sha/sha512-x86_64.asm \
+       x64-win32-masm/whrlpool/wp-x86_64.asm \
+        x64-win32-masm/modes/aesni-gcm-x86_64.asm \
+       x64-win32-masm/modes/ghash-x86_64.asm \
+       x64-win32-masm/x86_64cpuid.asm \
+
+# sha512 asm files for x86_64 need 512 in the filenames for outputs
+# so that we add new rules to generate sha512 asm files with
+# specifying its filename in the second argument.  See
+# https://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/crypto/sha/asm/sha512-x86_64.pl#L137-L149
+
+x64-elf-gas/sha/sha512-%.s:
+       $(PERL) $< elf $@
+
+x64-elf-gas/%.s:
+       $(PERL) $< elf > $@
+
+arm-void-gas/%.S:
+       $(PERL) $< void > $@
+
+arm64-linux64-gas/sha/sha512-%.S:
+       $(PERL) $< linux64 $@
+
+arm64-linux64-gas/%.S:
+       $(PERL) $< linux64 > $@
+
+x64-macosx-gas/sha/sha512-%.s:
+       $(PERL) $< macosx $@
+
+x64-macosx-gas/%.s:
+       $(PERL) $< macosx > $@
+
+x64-win32-masm/sha/sha512-%.asm:
+       $(PERL) $< masm $@
+
+x64-win32-masm/%.asm:
+       $(PERL) $< masm > $@
+
+x86-elf-gas/%.s:
+       $(PERL) $< elf $(SSE2) > $@
+
+x86-macosx-gas/%.s:
+       $(PERL) $< macosx $(SSE2) > $@
+
+x86-win32-masm/%.asm:
+       $(PERL) $< win32 $(SSE2) > $@
+
+.PHONY:        all clean
+
+all: $(OUTPUTS)
+       # strip trailing whitespace and final blank newline
+       $(PERL) -pi -e 's/\s+$$/\n/; s/^\n$$// if eof' $^
+
+clean:
+       find . -iname '*.asm' -exec rm "{}" \;
+       find . -iname '*.s' -exec rm "{}" \;
+       find . -iname '*.S' -exec rm "{}" \;
+
+
+x64-elf-gas/aes/aes-x86_64.s: ../openssl/crypto/aes/asm/aes-x86_64.pl
+x64-elf-gas/aes/aesni-x86_64.s: ../openssl/crypto/aes/asm/aesni-x86_64.pl
+x64-elf-gas/aes/aesni-mb-x86_64.s: ../openssl/crypto/aes/asm/aesni-mb-x86_64.pl
+x64-elf-gas/aes/aesni-sha256-x86_64.s:  ../openssl/crypto/aes/asm/aesni-sha256-x86_64.pl
+x64-elf-gas/aes/vpaes-x86_64.s: ../openssl/crypto/aes/asm/vpaes-x86_64.pl
+x64-elf-gas/aes/bsaes-x86_64.s: ../openssl/crypto/aes/asm/bsaes-x86_64.pl
+x64-elf-gas/aes/aesni-sha1-x86_64.s: ../openssl/crypto/aes/asm/aesni-sha1-x86_64.pl
+x64-elf-gas/bn/rsaz-avx2.s: ../openssl/crypto/bn/asm/rsaz-avx2.pl
+x64-elf-gas/bn/rsaz-x86_64.s: ../openssl/crypto/bn/asm/rsaz-x86_64.pl
+x64-elf-gas/bn/x86_64-mont.s: ../openssl/crypto/bn/asm/x86_64-mont.pl
+x64-elf-gas/bn/x86_64-mont5.s: ../openssl/crypto/bn/asm/x86_64-mont5.pl
+x64-elf-gas/bn/x86_64-gf2m.s: ../openssl/crypto/bn/asm/x86_64-gf2m.pl
+x64-elf-gas/camellia/cmll-x86_64.s: ../openssl/crypto/camellia/asm/cmll-x86_64.pl
+x64-elf-gas/ec/ecp_nistz256-x86_64.s: ../openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl
+x64-elf-gas/md5/md5-x86_64.s: ../openssl/crypto/md5/asm/md5-x86_64.pl
+x64-elf-gas/rc4/rc4-x86_64.s: ../openssl/crypto/rc4/asm/rc4-x86_64.pl
+x64-elf-gas/rc4/rc4-md5-x86_64.s: ../openssl/crypto/rc4/asm/rc4-md5-x86_64.pl
+x64-elf-gas/sha/sha1-mb-x86_64.s: ../openssl/crypto/sha/asm/sha1-mb-x86_64.pl
+x64-elf-gas/sha/sha1-x86_64.s: ../openssl/crypto/sha/asm/sha1-x86_64.pl
+x64-elf-gas/sha/sha512-x86_64.s: ../openssl/crypto/sha/asm/sha512-x86_64.pl
+x64-elf-gas/sha/sha256-mb-x86_64.s: ../openssl/crypto/sha/asm/sha256-mb-x86_64.pl
+x64-elf-gas/sha/sha256-x86_64.s: ../openssl/crypto/sha/asm/sha512-x86_64.pl
+x64-elf-gas/whrlpool/wp-x86_64.s: ../openssl/crypto/whrlpool/asm/wp-x86_64.pl
+x64-elf-gas/modes/aesni-gcm-x86_64.s: ../openssl/crypto/modes/asm/aesni-gcm-x86_64.pl
+x64-elf-gas/modes/ghash-x86_64.s: ../openssl/crypto/modes/asm/ghash-x86_64.pl
+x64-elf-gas/x86_64cpuid.s: ../openssl/crypto/x86_64cpuid.pl
+x64-macosx-gas/aes/aes-x86_64.s: ../openssl/crypto/aes/asm/aes-x86_64.pl
+x64-macosx-gas/aes/aesni-x86_64.s: ../openssl/crypto/aes/asm/aesni-x86_64.pl
+x64-macosx-gas/aes/vpaes-x86_64.s: ../openssl/crypto/aes/asm/vpaes-x86_64.pl
+x64-macosx-gas/aes/aesni-mb-x86_64.s: ../openssl/crypto/aes/asm/aesni-mb-x86_64.pl
+x64-macosx-gas/aes/aesni-sha256-x86_64.s: ../openssl/crypto/aes/asm/aesni-sha256-x86_64.pl
+x64-macosx-gas/aes/bsaes-x86_64.s: ../openssl/crypto/aes/asm/bsaes-x86_64.pl
+x64-macosx-gas/aes/aesni-sha1-x86_64.s: ../openssl/crypto/aes/asm/aesni-sha1-x86_64.pl
+x64-macosx-gas/bn/rsaz-avx2.s: ../openssl/crypto/bn/asm/rsaz-avx2.pl
+x64-macosx-gas/bn/rsaz-x86_64.s: ../openssl/crypto/bn/asm/rsaz-x86_64.pl
+x64-macosx-gas/bn/x86_64-mont.s: ../openssl/crypto/bn/asm/x86_64-mont.pl
+x64-macosx-gas/bn/x86_64-mont5.s: ../openssl/crypto/bn/asm/x86_64-mont5.pl
+x64-macosx-gas/bn/x86_64-gf2m.s: ../openssl/crypto/bn/asm/x86_64-gf2m.pl
+x64-macosx-gas/camellia/cmll-x86_64.s: ../openssl/crypto/camellia/asm/cmll-x86_64.pl
+x64-macosx-gas/ec/ecp_nistz256-x86_64.s: ../openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl
+x64-macosx-gas/md5/md5-x86_64.s: ../openssl/crypto/md5/asm/md5-x86_64.pl
+x64-macosx-gas/sha/sha1-x86_64.s: ../openssl/crypto/sha/asm/sha1-x86_64.pl
+x64-macosx-gas/sha/sha1-mb-x86_64.s: ../openssl/crypto/sha/asm/sha1-mb-x86_64.pl
+x64-macosx-gas/sha/sha256-mb-x86_64.s: ../openssl/crypto/sha/asm/sha256-mb-x86_64.pl
+x64-macosx-gas/sha/sha256-x86_64.s: ../openssl/crypto/sha/asm/sha512-x86_64.pl
+x64-macosx-gas/sha/sha512-x86_64.s: ../openssl/crypto/sha/asm/sha512-x86_64.pl
+x64-macosx-gas/whrlpool/wp-x86_64.s: ../openssl/crypto/whrlpool/asm/wp-x86_64.pl
+x64-macosx-gas/modes/aesni-gcm-x86_64.s: ../openssl/crypto/modes/asm/aesni-gcm-x86_64.pl
+x64-macosx-gas/modes/ghash-x86_64.s: ../openssl/crypto/modes/asm/ghash-x86_64.pl
+x64-macosx-gas/x86_64cpuid.s: ../openssl/crypto/x86_64cpuid.pl
+x64-win32-masm/aes/aes-x86_64.asm: ../openssl/crypto/aes/asm/aes-x86_64.pl
+x64-win32-masm/aes/aesni-x86_64.asm: ../openssl/crypto/aes/asm/aesni-x86_64.pl
+x64-win32-masm/aes/aesni-mb-x86_64.asm: ../openssl/crypto/aes/asm/aesni-mb-x86_64.pl
+x64-win32-masm/aes/aesni-sha256-x86_64.asm: ../openssl/crypto/aes/asm/aesni-sha256-x86_64.pl
+x64-win32-masm/aes/vpaes-x86_64.asm: ../openssl/crypto/aes/asm/vpaes-x86_64.pl
+x64-win32-masm/aes/bsaes-x86_64.asm: ../openssl/crypto/aes/asm/bsaes-x86_64.pl
+x64-win32-masm/aes/aesni-sha1-x86_64.asm: ../openssl/crypto/aes/asm/aesni-sha1-x86_64.pl
+x64-win32-masm/bn/rsaz-avx2.asm: ../openssl/crypto/bn/asm/rsaz-avx2.pl
+x64-win32-masm/bn/rsaz-x86_64.asm: ../openssl/crypto/bn/asm/rsaz-x86_64.pl
+x64-win32-masm/bn/x86_64-mont.asm: ../openssl/crypto/bn/asm/x86_64-mont.pl
+x64-win32-masm/bn/x86_64-mont5.asm: ../openssl/crypto/bn/asm/x86_64-mont5.pl
+x64-win32-masm/bn/x86_64-gf2m.asm: ../openssl/crypto/bn/asm/x86_64-gf2m.pl
+x64-win32-masm/camellia/cmll-x86_64.asm: ../openssl/crypto/camellia/asm/cmll-x86_64.pl
+x64-win32-masm/ec/ecp_nistz256-x86_64.asm: ../openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl
+x64-win32-masm/md5/md5-x86_64.asm: ../openssl/crypto/md5/asm/md5-x86_64.pl
+x64-win32-masm/rc4/rc4-x86_64.asm: ../openssl/crypto/rc4/asm/rc4-x86_64.pl
+x64-win32-masm/rc4/rc4-md5-x86_64.asm: ../openssl/crypto/rc4/asm/rc4-md5-x86_64.pl
+x64-win32-masm/sha/sha1-mb-x86_64.asm: ../openssl/crypto/sha/asm/sha1-mb-x86_64.pl
+x64-win32-masm/sha/sha1-x86_64.asm: ../openssl/crypto/sha/asm/sha1-x86_64.pl
+x64-win32-masm/sha/sha256-mb-x86_64.asm: ../openssl/crypto/sha/asm/sha256-mb-x86_64.pl
+x64-win32-masm/sha/sha256-x86_64.asm: ../openssl/crypto/sha/asm/sha512-x86_64.pl
+x64-win32-masm/sha/sha512-x86_64.asm: ../openssl/crypto/sha/asm/sha512-x86_64.pl
+x64-win32-masm/whrlpool/wp-x86_64.asm: ../openssl/crypto/whrlpool/asm/wp-x86_64.pl
+x64-win32-masm/modes/aesni-gcm-x86_64.asm: ../openssl/crypto/modes/asm/aesni-gcm-x86_64.pl
+x64-win32-masm/modes/ghash-x86_64.asm: ../openssl/crypto/modes/asm/ghash-x86_64.pl
+x64-win32-masm/x86_64cpuid.asm: ../openssl/crypto/x86_64cpuid.pl
+x86-elf-gas/aes/aes-586.s: ../openssl/crypto/aes/asm/aes-586.pl
+x86-elf-gas/aes/aesni-x86.s: ../openssl/crypto/aes/asm/aesni-x86.pl
+x86-elf-gas/aes/vpaes-x86.s: ../openssl/crypto/aes/asm/vpaes-x86.pl
+x86-elf-gas/bf/bf-586.s: ../openssl/crypto/bf/asm/bf-586.pl
+x86-elf-gas/bn/bn-586.s: ../openssl/crypto/bn/asm/bn-586.pl
+x86-elf-gas/bn/co-586.s: ../openssl/crypto/bn/asm/co-586.pl
+x86-elf-gas/bn/x86-mont.s: ../openssl/crypto/bn/asm/x86-mont.pl
+x86-elf-gas/bn/x86-gf2m.s: ../openssl/crypto/bn/asm/x86-gf2m.pl
+x86-elf-gas/camellia/cmll-x86.s: ../openssl/crypto/camellia/asm/cmll-x86.pl
+x86-elf-gas/cast/cast-586.s: ../openssl/crypto/cast/asm/cast-586.pl
+x86-elf-gas/des/crypt586.s: ../openssl/crypto/des/asm/crypt586.pl
+x86-elf-gas/des/des-586.s: ../openssl/crypto/des/asm/des-586.pl
+x86-elf-gas/md5/md5-586.s: ../openssl/crypto/md5/asm/md5-586.pl
+x86-elf-gas/rc4/rc4-586.s: ../openssl/crypto/rc4/asm/rc4-586.pl
+x86-elf-gas/rc5/rc5-586.s: ../openssl/crypto/rc5/asm/rc5-586.pl
+x86-elf-gas/ripemd/rmd-586.s: ../openssl/crypto/ripemd/asm/rmd-586.pl
+x86-elf-gas/sha/sha1-586.s: ../openssl/crypto/sha/asm/sha1-586.pl
+x86-elf-gas/sha/sha256-586.s: ../openssl/crypto/sha/asm/sha256-586.pl
+x86-elf-gas/sha/sha512-586.s: ../openssl/crypto/sha/asm/sha512-586.pl
+x86-elf-gas/whrlpool/wp-mmx.s: ../openssl/crypto/whrlpool/asm/wp-mmx.pl
+x86-elf-gas/modes/ghash-x86.s: ../openssl/crypto/modes/asm/ghash-x86.pl
+x86-elf-gas/x86cpuid.s: ../openssl/crypto/x86cpuid.pl
+x86-macosx-gas/aes/aes-586.s: ../openssl/crypto/aes/asm/aes-586.pl
+x86-macosx-gas/aes/aesni-x86.s: ../openssl/crypto/aes/asm/aesni-x86.pl
+x86-macosx-gas/aes/vpaes-x86.s: ../openssl/crypto/aes/asm/vpaes-x86.pl
+x86-macosx-gas/bf/bf-586.s: ../openssl/crypto/bf/asm/bf-686.pl
+x86-macosx-gas/bn/bn-586.s: ../openssl/crypto/bn/asm/bn-586.pl
+x86-macosx-gas/bn/co-586.s: ../openssl/crypto/bn/asm/co-586.pl
+x86-macosx-gas/bn/x86-mont.s: ../openssl/crypto/bn/asm/x86-mont.pl
+x86-macosx-gas/bn/x86-gf2m.s: ../openssl/crypto/bn/asm/x86-gf2m.pl
+x86-macosx-gas/camellia/cmll-x86.s: ../openssl/crypto/camellia/asm/cmll-x86.pl
+x86-macosx-gas/cast/cast-586.s: ../openssl/crypto/cast/asm/cast-586.pl
+x86-macosx-gas/des/crypt586.s: ../openssl/crypto/des/asm/crypt586.pl
+x86-macosx-gas/des/des-586.s: ../openssl/crypto/des/asm/des-586.pl
+x86-macosx-gas/md5/md5-586.s: ../openssl/crypto/md5/asm/md5-586.pl
+x86-macosx-gas/rc4/rc4-586.s: ../openssl/crypto/rc4/asm/rc4-586.pl
+x86-macosx-gas/rc5/rc5-586.s: ../openssl/crypto/rc5/asm/rc5-586.pl
+x86-macosx-gas/ripemd/rmd-586.s: ../openssl/crypto/ripemd/asm/rmd-586.pl
+x86-macosx-gas/sha/sha1-586.s: ../openssl/crypto/sha/asm/sha1-586.pl
+x86-macosx-gas/sha/sha256-586.s: ../openssl/crypto/sha/asm/sha256-586.pl
+x86-macosx-gas/sha/sha512-586.s: ../openssl/crypto/sha/asm/sha512-586.pl
+x86-macosx-gas/whrlpool/wp-mmx.s: ../openssl/crypto/whrlpool/asm/wp-mmx.pl
+x86-macosx-gas/modes/ghash-x86.s: ../openssl/crypto/modes/asm/ghash-x86.pl
+x86-macosx-gas/x86cpuid.s: ../openssl/crypto/x86cpuid.pl
+x86-win32-masm/aes/aes-586.asm: ../openssl/crypto/aes/asm/aes-586.pl
+x86-win32-masm/aes/aesni-x86.asm: ../openssl/crypto/aes/asm/aesni-x86.pl
+x86-win32-masm/aes/vpaes-x86.asm: ../openssl/crypto/aes/asm/vpaes-x86.pl
+x86-win32-masm/bf/bf-586.asm: ../openssl/crypto/bf/asm/bf-586.pl
+x86-win32-masm/bn/bn-586.asm: ../openssl/crypto/bn/asm/bn-586.pl
+x86-win32-masm/bn/co-586.asm: ../openssl/crypto/bn/asm/co-586.pl
+x86-win32-masm/bn/x86-gf2m.asm: ../openssl/crypto/bn/asm/x86-gf2m.pl
+x86-win32-masm/bn/x86-mont.asm: ../openssl/crypto/bn/asm/x86-mont.pl
+x86-win32-masm/camellia/cmll-x86.asm: ../openssl/crypto/camellia/asm/cmll-x86.pl
+x86-win32-masm/cast/cast-586.asm: ../openssl/crypto/cast/asm/cast-586.pl
+x86-win32-masm/des/crypt586.asm: ../openssl/crypto/des/asm/crypt586.pl
+x86-win32-masm/des/des-586.asm: ../openssl/crypto/des/asm/des-586.pl
+x86-win32-masm/md5/md5-586.asm: ../openssl/crypto/md5/asm/md5-586.pl
+x86-win32-masm/rc4/rc4-586.asm: ../openssl/crypto/rc4/asm/rc4-586.pl
+x86-win32-masm/ripemd/rmd-586.asm: ../openssl/crypto/ripemd/asm/rmd-586.pl
+x86-win32-masm/sha/sha1-586.asm: ../openssl/crypto/sha/asm/sha1-586.pl
+x86-win32-masm/sha/sha256-586.asm: ../openssl/crypto/sha/asm/sha256-586.pl
+x86-win32-masm/sha/sha512-586.asm: ../openssl/crypto/sha/asm/sha512-586.pl
+x86-win32-masm/whrlpool/wp-mmx.asm: ../openssl/crypto/whrlpool/asm/wp-mmx.pl
+x86-win32-masm/modes/ghash-x86.asm: ../openssl/crypto/modes/asm/ghash-x86.pl
+x86-win32-masm/x86cpuid.asm: ../openssl/crypto/x86cpuid.pl
+arm-void-gas/aes/aes-armv4.S: ../openssl/crypto/aes/asm/aes-armv4.pl
+arm-void-gas/aes/bsaes-armv7.S: ../openssl/crypto/aes/asm/bsaes-armv7.pl
+arm-void-gas/aes/aesv8-armx.S: ../openssl/crypto/aes/asm/aesv8-armx.pl
+arm-void-gas/bn/armv4-mont.S: ../openssl/crypto/bn/asm/armv4-mont.pl
+arm-void-gas/bn/armv4-gf2m.S: ../openssl/crypto/bn/asm/armv4-gf2m.pl
+arm-void-gas/sha/sha1-armv4-large.S: ../openssl/crypto/sha/asm/sha1-armv4-large.pl
+arm-void-gas/sha/sha512-armv4.S: ../openssl/crypto/sha/asm/sha512-armv4.pl
+arm-void-gas/sha/sha256-armv4.S: ../openssl/crypto/sha/asm/sha256-armv4.pl
+arm-void-gas/modes/ghash-armv4.S: ../openssl/crypto/modes/asm/ghash-armv4.pl
+arm-void-gas/modes/ghashv8-armx.S: ../openssl/crypto/modes/asm/ghashv8-armx.pl
+arm64-linux64-gas/aes/aesv8-armx.S: ../openssl/crypto/aes/asm/aesv8-armx.pl
+arm64-linux64-gas/modes/ghashv8-armx.S: ../openssl/crypto/modes/asm/ghashv8-armx.pl
+arm64-linux64-gas/sha/sha1-armv8.S: ../openssl/crypto/sha/asm/sha1-armv8.pl
+arm64-linux64-gas/sha/sha256-armv8.S: ../openssl/crypto/sha/asm/sha512-armv8.pl
+arm64-linux64-gas/sha/sha512-armv8.S: ../openssl/crypto/sha/asm/sha512-armv8.pl
index c0d4a2a..1209d64 100644 (file)
@@ -5,6 +5,7 @@
   'defines': [
     'MONOLITH'
   ],
+  'includes': ['openssl.gypi'],
   'sources': ['<@(openssl_cli_sources)'],
   'conditions': [
     ['OS=="solaris"', {
index 6d8b10d..5a3dc9b 100644 (file)
@@ -6,13 +6,15 @@
   'variables': {
     'is_clang': 0,
     'gcc_version': 0,
-    'openssl_no_asm%': 0
+    'openssl_no_asm%': 0,
+    'llvm_version%': 0,
+    'gas_version%': 0,
   },
-  'includes': ['openssl.gypi'],
   'targets': [
     {
       'target_name': 'openssl',
       'type': '<(library)',
+      'includes': ['openssl.gypi'],
       'sources': ['<@(openssl_sources)'],
       'sources/': [
         ['exclude', 'md2/.*$'],
     }
   ],
   'target_defaults': {
+    'includes': ['openssl.gypi'],
     'include_dirs': ['<@(openssl_default_include_dirs)'],
     'defines': ['<@(openssl_default_defines_all)'],
     'conditions': [
index 4082e9b..840b479 100644 (file)
       'openssl/crypto/rc4/rc4_skey.c',
       'openssl/crypto/whrlpool/wp_block.c'
     ],
-    'openssl_sources_ia32_elf_gas': [
+    'openssl_sources_asm_latest_ia32_elf_gas': [
       'asm/x86-elf-gas/aes/aes-586.s',
       'asm/x86-elf-gas/aes/aesni-x86.s',
       'asm/x86-elf-gas/aes/vpaes-x86.s',
       'asm/x86-elf-gas/whrlpool/wp-mmx.s',
       'asm/x86-elf-gas/modes/ghash-x86.s',
       'asm/x86-elf-gas/x86cpuid.s',
+    ],
+    'openssl_sources_asm_obsolete_ia32_elf_gas': [
+      'asm_obsolete/x86-elf-gas/aes/aes-586.s',
+      'asm_obsolete/x86-elf-gas/aes/aesni-x86.s',
+      'asm_obsolete/x86-elf-gas/aes/vpaes-x86.s',
+      'asm_obsolete/x86-elf-gas/bf/bf-586.s',
+      'asm_obsolete/x86-elf-gas/bn/bn-586.s',
+      'asm_obsolete/x86-elf-gas/bn/co-586.s',
+      'asm_obsolete/x86-elf-gas/bn/x86-mont.s',
+      'asm_obsolete/x86-elf-gas/bn/x86-gf2m.s',
+      'asm_obsolete/x86-elf-gas/camellia/cmll-x86.s',
+      'asm_obsolete/x86-elf-gas/cast/cast-586.s',
+      'asm_obsolete/x86-elf-gas/des/crypt586.s',
+      'asm_obsolete/x86-elf-gas/des/des-586.s',
+      'asm_obsolete/x86-elf-gas/md5/md5-586.s',
+      'asm_obsolete/x86-elf-gas/rc4/rc4-586.s',
+      'asm_obsolete/x86-elf-gas/ripemd/rmd-586.s',
+      'asm_obsolete/x86-elf-gas/sha/sha1-586.s',
+      'asm_obsolete/x86-elf-gas/sha/sha256-586.s',
+      'asm_obsolete/x86-elf-gas/sha/sha512-586.s',
+      'asm_obsolete/x86-elf-gas/whrlpool/wp-mmx.s',
+      'asm_obsolete/x86-elf-gas/modes/ghash-x86.s',
+      'asm_obsolete/x86-elf-gas/x86cpuid.s',
+    ],
+    'openssl_sources_common_ia32': [
       'openssl/crypto/whrlpool/wp_block.c'
     ],
-    'openssl_sources_x64_elf_gas': [
+    'openssl_sources_asm_latest_x64_elf_gas': [
       'asm/x64-elf-gas/aes/aes-x86_64.s',
       'asm/x64-elf-gas/aes/aesni-mb-x86_64.s',
       'asm/x64-elf-gas/aes/aesni-sha256-x86_64.s',
       'asm/x64-elf-gas/modes/aesni-gcm-x86_64.s',
       'asm/x64-elf-gas/modes/ghash-x86_64.s',
       'asm/x64-elf-gas/x86_64cpuid.s',
+    ],
+    'openssl_sources_asm_obsolete_x64_elf_gas': [
+      'asm_obsolete/x64-elf-gas/aes/aes-x86_64.s',
+      'asm_obsolete/x64-elf-gas/aes/aesni-mb-x86_64.s',
+      'asm_obsolete/x64-elf-gas/aes/aesni-sha256-x86_64.s',
+      'asm_obsolete/x64-elf-gas/aes/aesni-x86_64.s',
+      'asm_obsolete/x64-elf-gas/aes/vpaes-x86_64.s',
+      'asm_obsolete/x64-elf-gas/aes/bsaes-x86_64.s',
+      'asm_obsolete/x64-elf-gas/aes/aesni-sha1-x86_64.s',
+      'asm_obsolete/x64-elf-gas/bn/rsaz-avx2.s',
+      'asm_obsolete/x64-elf-gas/bn/rsaz-x86_64.s',
+      'asm_obsolete/x64-elf-gas/bn/x86_64-mont.s',
+      'asm_obsolete/x64-elf-gas/bn/x86_64-mont5.s',
+      'asm_obsolete/x64-elf-gas/bn/x86_64-gf2m.s',
+      'asm_obsolete/x64-elf-gas/camellia/cmll-x86_64.s',
+      'asm_obsolete/x64-elf-gas/ec/ecp_nistz256-x86_64.s',
+      'asm_obsolete/x64-elf-gas/md5/md5-x86_64.s',
+      'asm_obsolete/x64-elf-gas/rc4/rc4-x86_64.s',
+      'asm_obsolete/x64-elf-gas/rc4/rc4-md5-x86_64.s',
+      'asm_obsolete/x64-elf-gas/sha/sha1-mb-x86_64.s',
+      'asm_obsolete/x64-elf-gas/sha/sha1-x86_64.s',
+      'asm_obsolete/x64-elf-gas/sha/sha256-mb-x86_64.s',
+      'asm_obsolete/x64-elf-gas/sha/sha256-x86_64.s',
+      'asm_obsolete/x64-elf-gas/sha/sha512-x86_64.s',
+      'asm_obsolete/x64-elf-gas/whrlpool/wp-x86_64.s',
+      'asm_obsolete/x64-elf-gas/modes/aesni-gcm-x86_64.s',
+      'asm_obsolete/x64-elf-gas/modes/ghash-x86_64.s',
+      'asm_obsolete/x64-elf-gas/x86_64cpuid.s',
+    ],
+    'openssl_sources_common_x64_elf_gas': [
       # Non-generated asm
       'openssl/crypto/bn/asm/x86_64-gcc.c',
       # No asm available
       'openssl/crypto/ec/ecp_nistz256.c',
       'openssl/crypto/ui/ui_compat.c'
     ],
-    'openssl_sources_ia32_mac_gas': [
+    'openssl_sources_asm_latest_ia32_mac_gas': [
       'asm/x86-macosx-gas/aes/aes-586.s',
       'asm/x86-macosx-gas/aes/aesni-x86.s',
       'asm/x86-macosx-gas/aes/vpaes-x86.s',
       'asm/x86-macosx-gas/whrlpool/wp-mmx.s',
       'asm/x86-macosx-gas/modes/ghash-x86.s',
       'asm/x86-macosx-gas/x86cpuid.s',
-      'openssl/crypto/whrlpool/wp_block.c',
     ],
-    'openssl_sources_x64_mac_gas': [
+    'openssl_sources_asm_obsolete_ia32_mac_gas': [
+      'asm_obsolete/x86-macosx-gas/aes/aes-586.s',
+      'asm_obsolete/x86-macosx-gas/aes/aesni-x86.s',
+      'asm_obsolete/x86-macosx-gas/aes/vpaes-x86.s',
+      'asm_obsolete/x86-macosx-gas/bf/bf-586.s',
+      'asm_obsolete/x86-macosx-gas/bn/bn-586.s',
+      'asm_obsolete/x86-macosx-gas/bn/co-586.s',
+      'asm_obsolete/x86-macosx-gas/bn/x86-mont.s',
+      'asm_obsolete/x86-macosx-gas/bn/x86-gf2m.s',
+      'asm_obsolete/x86-macosx-gas/camellia/cmll-x86.s',
+      'asm_obsolete/x86-macosx-gas/cast/cast-586.s',
+      'asm_obsolete/x86-macosx-gas/des/crypt586.s',
+      'asm_obsolete/x86-macosx-gas/des/des-586.s',
+      'asm_obsolete/x86-macosx-gas/md5/md5-586.s',
+      'asm_obsolete/x86-macosx-gas/rc4/rc4-586.s',
+      'asm_obsolete/x86-macosx-gas/ripemd/rmd-586.s',
+      'asm_obsolete/x86-macosx-gas/sha/sha1-586.s',
+      'asm_obsolete/x86-macosx-gas/sha/sha256-586.s',
+      'asm_obsolete/x86-macosx-gas/sha/sha512-586.s',
+      'asm_obsolete/x86-macosx-gas/whrlpool/wp-mmx.s',
+      'asm_obsolete/x86-macosx-gas/modes/ghash-x86.s',
+      'asm_obsolete/x86-macosx-gas/x86cpuid.s',
+    ],
+    'openssl_sources_asm_latest_x64_mac_gas': [
       'asm/x64-macosx-gas/aes/aes-x86_64.s',
       'asm/x64-macosx-gas/aes/aesni-x86_64.s',
       'asm/x64-macosx-gas/aes/vpaes-x86_64.s',
       'asm/x64-macosx-gas/modes/aesni-gcm-x86_64.s',
       'asm/x64-macosx-gas/modes/ghash-x86_64.s',
       'asm/x64-macosx-gas/x86_64cpuid.s',
+    ],
+    'openssl_sources_asm_obsolete_x64_mac_gas': [
+      'asm_obsolete/x64-macosx-gas/aes/aes-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/aes/aesni-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/aes/vpaes-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/aes/aesni-mb-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/aes/aesni-sha256-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/aes/bsaes-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/aes/aesni-sha1-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/bn/rsaz-avx2.s',
+      'asm_obsolete/x64-macosx-gas/bn/rsaz-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/bn/x86_64-mont.s',
+      'asm_obsolete/x64-macosx-gas/bn/x86_64-mont5.s',
+      'asm_obsolete/x64-macosx-gas/bn/x86_64-gf2m.s',
+      'asm_obsolete/x64-macosx-gas/camellia/cmll-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/ec/ecp_nistz256-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/md5/md5-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/sha/sha1-mb-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/sha/sha1-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/sha/sha256-mb-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/sha/sha256-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/sha/sha512-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/whrlpool/wp-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/modes/aesni-gcm-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/modes/ghash-x86_64.s',
+      'asm_obsolete/x64-macosx-gas/x86_64cpuid.s',
+    ],
+    'openssl_sources_common_x64_mac_gas': [
       # Non-generated asm
       'openssl/crypto/bn/asm/x86_64-gcc.c',
       # No asm available
       'openssl/crypto/armcap.c',
       'openssl/crypto/arm64cpuid.S',
     ],
-    'openssl_sources_ia32_win_masm': [
+    'openssl_sources_asm_ia32_win_masm': [
       'asm/x86-win32-masm/aes/aes-586.asm',
       'asm/x86-win32-masm/aes/aesni-x86.asm',
       'asm/x86-win32-masm/aes/vpaes-x86.asm',
       'asm/x86-win32-masm/whrlpool/wp-mmx.asm',
       'asm/x86-win32-masm/modes/ghash-x86.asm',
       'asm/x86-win32-masm/x86cpuid.asm',
-      'openssl/crypto/whrlpool/wp_block.c'
     ],
-    'openssl_sources_x64_win_masm': [
+    'openssl_sources_asm_latest_x64_win_masm': [
       'asm/x64-win32-masm/aes/aes-x86_64.asm',
       'asm/x64-win32-masm/aes/aesni-x86_64.asm',
       'asm/x64-win32-masm/aes/aesni-mb-x86_64.asm',
       'asm/x64-win32-masm/modes/aesni-gcm-x86_64.asm',
       'asm/x64-win32-masm/modes/ghash-x86_64.asm',
       'asm/x64-win32-masm/x86_64cpuid.asm',
+    ],
+    'openssl_sources_asm_obsolete_x64_win_masm': [
+      'asm_obsolete/x64-win32-masm/aes/aes-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/aes/aesni-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/aes/aesni-mb-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/aes/aesni-sha256-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/aes/vpaes-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/aes/bsaes-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/aes/aesni-sha1-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/bn/rsaz-avx2.asm',
+      'asm_obsolete/x64-win32-masm/bn/rsaz-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/bn/x86_64-mont.asm',
+      'asm_obsolete/x64-win32-masm/bn/x86_64-mont5.asm',
+      'asm_obsolete/x64-win32-masm/bn/x86_64-gf2m.asm',
+      'asm_obsolete/x64-win32-masm/camellia/cmll-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/ec/ecp_nistz256-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/md5/md5-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/rc4/rc4-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/rc4/rc4-md5-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/sha/sha1-mb-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/sha/sha1-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/sha/sha256-mb-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/sha/sha256-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/sha/sha512-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/whrlpool/wp-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/modes/aesni-gcm-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/modes/ghash-x86_64.asm',
+      'asm_obsolete/x64-win32-masm/x86_64cpuid.asm',
+    ],
+    'openssl_sources_common_x64_win_masm': [
       # No asm available
       'openssl/crypto/bn/bn_asm.c',
       'openssl/crypto/bf/bf_enc.c',
       'openssl/crypto/ec/ecp_nistz256.c',
       'openssl/crypto/ui/ui_compat.c'
     ],
+    'openssl_sources_ia32_win_masm': [
+      '<@(openssl_sources_asm_ia32_win_masm)',
+      '<@(openssl_sources_common_ia32)',
+    ],
+    #
+    # Asm files are changed depending on the version of assembler.
+    # We provide two sets of asm files, one is asm_latest(avx2 and
+    # addx supported) and the other asm_obsolete(without avx1/2 and addx)
+    # The asm_latest follows the version as defined in
+    # https://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/crypto/ec/asm/ecp_nistz256-avx2.pl#L45-L67
+    #
+    'conditions': [
+      ['(OS=="win" and MSVS_VERSION>="2012") or '
+       'llvm_version>="3.3" or gas_version>="2.23"', {
+        'openssl_sources_x64_win_masm': [
+          '<@(openssl_sources_asm_latest_x64_win_masm)',
+          '<@(openssl_sources_common_x64_win_masm)',
+        ],
+        'openssl_sources_ia32_mac_gas': [
+          '<@(openssl_sources_asm_latest_ia32_mac_gas)',
+          '<@(openssl_sources_common_ia32)',
+        ],
+        'openssl_sources_x64_mac_gas': [
+          '<@(openssl_sources_asm_latest_x64_mac_gas)',
+          '<@(openssl_sources_common_x64_mac_gas)',
+        ],
+        'openssl_sources_ia32_elf_gas': [
+          '<@(openssl_sources_asm_latest_ia32_elf_gas)',
+          '<@(openssl_sources_common_ia32)',
+        ],
+        'openssl_sources_x64_elf_gas': [
+          '<@(openssl_sources_asm_latest_x64_elf_gas)',
+          '<@(openssl_sources_common_x64_elf_gas)',
+        ],
+      }, {
+        'openssl_sources_x64_win_masm': [
+          '<@(openssl_sources_asm_obsolete_x64_win_masm)',
+          '<@(openssl_sources_common_x64_win_masm)',
+        ],
+        'openssl_sources_ia32_mac_gas': [
+          '<@(openssl_sources_asm_obsolete_ia32_mac_gas)',
+          '<@(openssl_sources_common_ia32)',
+        ],
+        'openssl_sources_x64_mac_gas': [
+          '<@(openssl_sources_asm_obsolete_x64_mac_gas)',
+          '<@(openssl_sources_common_x64_mac_gas)',
+        ],
+        'openssl_sources_ia32_elf_gas': [
+          '<@(openssl_sources_asm_obsolete_ia32_elf_gas)',
+          '<@(openssl_sources_common_ia32)',
+        ],
+        'openssl_sources_x64_elf_gas': [
+          '<@(openssl_sources_asm_obsolete_x64_elf_gas)',
+          '<@(openssl_sources_common_x64_elf_gas)',
+        ],
+      }]
+    ],
     'openssl_cli_sources': [
       'openssl/apps/app_rand.c',
       'openssl/apps/apps.c',