summaryrefslogtreecommitdiffstats
path: root/security/nss/lib/freebl/freebl.gyp
diff options
context:
space:
mode:
Diffstat (limited to 'security/nss/lib/freebl/freebl.gyp')
-rw-r--r--security/nss/lib/freebl/freebl.gyp952
1 files changed, 952 insertions, 0 deletions
diff --git a/security/nss/lib/freebl/freebl.gyp b/security/nss/lib/freebl/freebl.gyp
new file mode 100644
index 0000000000..14f213c1bf
--- /dev/null
+++ b/security/nss/lib/freebl/freebl.gyp
@@ -0,0 +1,952 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+{
+ 'includes': [
+ '../../coreconf/config.gypi'
+ ],
+ 'targets': [
+ {
+ 'target_name': 'intel-gcm-s_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'intel-aes.s',
+ 'intel-gcm.s',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'conditions': [
+ [ 'cc_is_clang==1 and force_integrated_as!=1', {
+ 'cflags': [
+ '-no-integrated-as',
+ ],
+ 'cflags_mozilla': [
+ '-no-integrated-as',
+ ],
+ 'asflags_mozilla': [
+ '-no-integrated-as',
+ ],
+ }],
+ ],
+ },
+ {
+ 'target_name': 'intel-gcm-wrap_c_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'intel-gcm-wrap.c',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'conditions': [
+ [ '(OS=="linux" or OS=="android") and target_arch=="x64"', {
+ 'dependencies': [
+ 'intel-gcm-s_lib',
+ ],
+ }],
+ ],
+ 'cflags': [
+ '-mssse3',
+ ],
+ 'cflags_mozilla': [
+ '-mssse3'
+ ],
+ },
+ {
+ 'target_name': 'hw-acc-crypto-avx',
+ 'type': 'static_library',
+ # 'sources': [
+ # All AVX hardware accelerated crypto currently requires x64
+ # ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'conditions': [
+ [ 'target_arch=="x64"', {
+ 'cflags': [
+ '-mssse3',
+ '-msse4.1',
+ '-msse4.2'
+ ],
+ 'cflags_mozilla': [
+ '-mssse3',
+ '-msse4.1',
+ '-msse4.2',
+ '-mpclmul',
+ '-maes',
+ '-mavx',
+ ],
+ # GCC doesn't define this.
+ 'defines': [
+ '__SSSE3__',
+ ],
+ }],
+ [ 'OS=="linux" or OS=="android" or OS=="dragonfly" or OS=="freebsd" or \
+ OS=="netbsd" or OS=="openbsd"', {
+ 'cflags': [
+ '-mpclmul',
+ '-maes',
+ '-mavx',
+ ],
+ }],
+ # macOS build doesn't use cflags.
+ [ 'OS=="mac" or OS=="ios"', {
+ 'xcode_settings': {
+ 'OTHER_CFLAGS': [
+ '-mssse3',
+ '-msse4.1',
+ '-msse4.2',
+ '-mpclmul',
+ '-maes',
+ '-mavx',
+ ],
+ },
+ }],
+ [ 'target_arch=="arm"', {
+ # Gecko doesn't support non-NEON platform on Android, but tier-3
+ # platform such as Linux/arm will need it
+ 'cflags_mozilla': [
+ '-mfpu=neon'
+ ],
+ }],
+ [ 'target_arch=="x64"', {
+ 'sources': [
+ 'verified/Hacl_Poly1305_128.c',
+ 'verified/Hacl_Chacha20_Vec128.c',
+ 'verified/Hacl_Chacha20Poly1305_128.c',
+ ],
+ }],
+ ],
+ },
+ {
+ 'target_name': 'hw-acc-crypto-avx2',
+ 'type': 'static_library',
+ # 'sources': [
+ # All AVX2 hardware accelerated crypto currently requires x64
+ # ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'conditions': [
+ [ 'target_arch=="x64"', {
+ 'cflags': [
+ '-mssse3',
+ '-msse4.1',
+ '-msse4.2'
+ ],
+ 'cflags_mozilla': [
+ '-mssse3',
+ '-msse4.1',
+ '-msse4.2',
+ '-mpclmul',
+ '-maes',
+ '-mavx',
+ '-mavx2',
+ ],
+ # GCC doesn't define this.
+ 'defines': [
+ '__SSSE3__',
+ ],
+ }],
+ [ 'OS=="linux" or OS=="android" or OS=="dragonfly" or OS=="freebsd" or \
+ OS=="netbsd" or OS=="openbsd"', {
+ 'cflags': [
+ '-mpclmul',
+ '-maes',
+ '-mavx',
+ '-mavx2',
+ ],
+ }],
+ # macOS build doesn't use cflags.
+ [ 'OS=="mac" or OS=="ios"', {
+ 'xcode_settings': {
+ 'OTHER_CFLAGS': [
+ '-mssse3',
+ '-msse4.1',
+ '-msse4.2',
+ '-mpclmul',
+ '-maes',
+ '-mavx',
+ '-mavx2',
+ ],
+ },
+ }],
+ [ 'target_arch=="arm"', {
+ # Gecko doesn't support non-NEON platform on Android, but tier-3
+ # platform such as Linux/arm will need it
+ 'cflags_mozilla': [
+ '-mfpu=neon'
+ ],
+ }],
+ [ 'target_arch=="x64"', {
+ 'sources': [
+ 'verified/Hacl_Poly1305_256.c',
+ 'verified/Hacl_Chacha20_Vec256.c',
+ 'verified/Hacl_Chacha20Poly1305_256.c',
+ ],
+ }],
+ ],
+ },
+ {
+ 'target_name': 'gcm-aes-x86_c_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'gcm-x86.c', 'aes-x86.c'
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ # Enable isa option for pclmul and aes-ni; supported since gcc 4.4.
+ # This is only supported by x84/x64. It's not needed for Windows,
+ # unless clang-cl is used.
+ 'cflags_mozilla': [
+ '-mpclmul', '-maes'
+ ],
+ 'conditions': [
+ [ 'OS=="linux" or OS=="android" or OS=="dragonfly" or OS=="freebsd" or OS=="netbsd" or OS=="openbsd"', {
+ 'cflags': [
+ '-mpclmul', '-maes'
+ ],
+ }],
+ # macOS build doesn't use cflags.
+ [ 'OS=="mac" or OS=="ios"', {
+ 'xcode_settings': {
+ 'OTHER_CFLAGS': [
+ '-mpclmul', '-maes'
+ ],
+ },
+ }]
+ ]
+ },
+ {
+ 'target_name': 'sha-x86_c_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'sha256-x86.c'
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'cflags': [
+ '-msha',
+ '-mssse3',
+ '-msse4.1'
+ ],
+ 'cflags_mozilla': [
+ '-msha',
+ '-mssse3',
+ '-msse4.1'
+ ],
+ 'conditions': [
+ # macOS build doesn't use cflags.
+ [ 'OS=="mac" or OS=="ios"', {
+ 'xcode_settings': {
+ 'OTHER_CFLAGS': [
+ '-msha',
+ '-mssse3',
+ '-msse4.1'
+ ],
+ },
+ }]
+ ]
+ },
+ {
+ 'target_name': 'gcm-aes-arm32-neon_c_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'gcm-arm32-neon.c'
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'cflags': [
+ '-march=armv7',
+ '-mfpu=neon',
+ '<@(softfp_cflags)',
+ ],
+ 'cflags_mozilla': [
+ '-mfpu=neon',
+ '<@(softfp_cflags)',
+ ]
+ },
+ {
+ 'target_name': 'gcm-aes-aarch64_c_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'gcm-aarch64.c'
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'cflags': [
+ '-march=armv8-a+crypto'
+ ],
+ 'cflags_mozilla': [
+ '-march=armv8-a+crypto'
+ ]
+ },
+ {
+ 'target_name': 'gcm-aes-ppc_c_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'gcm-ppc.c',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'conditions': [
+ [ 'disable_crypto_vsx==0', {
+ 'cflags': [
+ '-mcrypto',
+ '-maltivec'
+ ],
+ 'cflags_mozilla': [
+ '-mcrypto',
+ '-maltivec'
+ ],
+ }, 'disable_crypto_vsx==1', {
+ 'cflags': [
+ '-maltivec'
+ ],
+ 'cflags_mozilla': [
+ '-maltivec'
+ ],
+ }],
+ [ 'ppc_abi==2', {
+ 'sources': [
+ 'sha512-p8.s',
+ ],
+ }],
+ ]
+ },
+ {
+ 'target_name': 'gcm-aes-ppc_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'ppc-gcm.s',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'conditions': [
+ [ 'cc_is_clang==1 and force_integrated_as!=1', {
+ 'cflags': [
+ '-no-integrated-as',
+ ],
+ 'cflags_mozilla': [
+ '-no-integrated-as',
+ ],
+ 'asflags_mozilla': [
+ '-no-integrated-as',
+ ],
+ }],
+ ],
+ },
+ {
+ 'target_name': 'ppc-gcm-wrap-nodepend_c_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'ppc-gcm-wrap.c',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports',
+ 'gcm-aes-ppc_lib',
+ ],
+ },
+ {
+ 'target_name': 'ppc-gcm-wrap_c_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'ppc-gcm-wrap.c',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports',
+ 'gcm-aes-ppc_lib',
+ ],
+ 'defines!': [
+ 'FREEBL_NO_DEPEND',
+ ],
+ },
+ {
+ 'target_name': 'gcm-sha512-nodepend-ppc_c_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'sha512.c',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'conditions': [
+ [ 'disable_crypto_vsx==0', {
+ 'cflags': [
+ '-mcrypto',
+ '-maltivec',
+ '-mvsx',
+ '-funroll-loops',
+ '-fpeel-loops'
+ ],
+ 'cflags_mozilla': [
+ '-mcrypto',
+ '-maltivec',
+ '-mvsx',
+ '-funroll-loops',
+ '-fpeel-loops'
+ ],
+ }, 'disable_crypto_vsx==1', {
+ 'cflags': [
+ '-maltivec',
+ '-funroll-loops',
+ '-fpeel-loops'
+ ],
+ 'cflags_mozilla': [
+ '-maltivec',
+ '-funroll-loops',
+ '-fpeel-loops'
+ ],
+ }]
+ ]
+ },
+ {
+ 'target_name': 'gcm-sha512-ppc_c_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'sha512.c',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'conditions': [
+ [ 'disable_crypto_vsx==0', {
+ 'cflags': [
+ '-mcrypto',
+ '-maltivec',
+ '-mvsx',
+ '-funroll-loops',
+ '-fpeel-loops'
+ ],
+ 'cflags_mozilla': [
+ '-mcrypto',
+ '-maltivec',
+ '-mvsx',
+ '-funroll-loops',
+ '-fpeel-loops'
+ ],
+ }, 'disable_crypto_vsx==1', {
+ 'cflags': [
+ '-maltivec',
+ '-funroll-loops',
+ '-fpeel-loops'
+ ],
+ 'cflags_mozilla': [
+ '-maltivec',
+ '-funroll-loops',
+ '-fpeel-loops'
+ ],
+ }]
+ ],
+ 'defines!': [
+ 'FREEBL_NO_DEPEND',
+ ],
+ },
+ {
+ 'target_name': 'chacha20-ppc_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'chacha20poly1305-ppc.c',
+ 'chacha20-ppc64le.S',
+ ]
+ },
+ {
+ 'target_name': 'armv8_c_lib',
+ 'type': 'static_library',
+ 'sources': [
+ 'aes-armv8.c',
+ 'sha1-armv8.c',
+ 'sha256-armv8.c',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'conditions': [
+ [ 'target_arch=="arm"', {
+ 'cflags': [
+ '-march=armv8-a',
+ '-mfpu=crypto-neon-fp-armv8',
+ '<@(softfp_cflags)',
+ ],
+ 'cflags_mozilla': [
+ '-march=armv8-a',
+ '-mfpu=crypto-neon-fp-armv8',
+ '<@(softfp_cflags)',
+ ],
+ }, 'target_arch=="arm64" or target_arch=="aarch64"', {
+ 'cflags': [
+ '-march=armv8-a+crypto'
+ ],
+ 'cflags_mozilla': [
+ '-march=armv8-a+crypto'
+ ],
+ }]
+ ]
+ },
+ {
+ 'target_name': 'freebl',
+ 'type': 'static_library',
+ 'sources': [
+ 'loader.c'
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ]
+ },
+ # Build a static freebl library so we can statically link it into
+ # the binary. This way we don't have to dlopen() the shared lib
+ # but can directly call freebl functions.
+ {
+ 'target_name': 'freebl_static',
+ 'type': 'static_library',
+ 'includes': [
+ 'freebl_base.gypi',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports',
+ 'hw-acc-crypto-avx',
+ 'hw-acc-crypto-avx2',
+ ],
+ 'conditions': [
+ [ 'target_arch=="ia32" or target_arch=="x64"', {
+ 'dependencies': [
+ 'gcm-aes-x86_c_lib',
+ ],
+ }, '(disable_arm_hw_aes==0 or disable_arm_hw_sha1==0 or disable_arm_hw_sha2==0) and (target_arch=="arm" or target_arch=="arm64" or target_arch=="aarch64")', {
+ 'dependencies': [
+ 'armv8_c_lib'
+ ],
+ }],
+ [ '(target_arch=="ia32" or target_arch=="x64") and disable_intel_hw_sha==0', {
+ 'dependencies': [
+ 'sha-x86_c_lib',
+ ],
+ }],
+ [ 'disable_arm32_neon==0 and target_arch=="arm"', {
+ 'dependencies': [
+ 'gcm-aes-arm32-neon_c_lib',
+ ],
+ }],
+ [ 'disable_arm32_neon==1 and target_arch=="arm"', {
+ 'defines!': [
+ 'NSS_DISABLE_ARM32_NEON',
+ ],
+ }],
+ [ 'target_arch=="arm64" or target_arch=="aarch64"', {
+ 'dependencies': [
+ 'gcm-aes-aarch64_c_lib',
+ ],
+ }],
+ [ 'disable_altivec==0 and target_arch=="ppc64"', {
+ 'dependencies': [
+ 'gcm-aes-ppc_c_lib',
+ 'gcm-sha512-ppc_c_lib',
+ ],
+ }],
+ [ 'disable_altivec==0 and target_arch=="ppc64le"', {
+ 'dependencies': [
+ 'gcm-aes-ppc_c_lib',
+ 'gcm-sha512-ppc_c_lib',
+ 'chacha20-ppc_lib',
+ 'ppc-gcm-wrap_c_lib',
+ ],
+ }],
+ [ 'disable_altivec==1 and (target_arch=="ppc64" or target_arch=="ppc64le")', {
+ 'defines!': [
+ 'NSS_DISABLE_ALTIVEC',
+ ],
+ }],
+ [ 'disable_crypto_vsx==1 and (target_arch=="ppc" or target_arch=="ppc64" or target_arch=="ppc64le")', {
+ 'defines!': [
+ 'NSS_DISABLE_CRYPTO_VSX',
+ ],
+ }],
+ [ 'OS=="linux"', {
+ 'defines!': [
+ 'FREEBL_NO_DEPEND',
+ 'FREEBL_LOWHASH',
+ 'USE_HW_AES',
+ 'INTEL_GCM',
+ 'PPC_GCM',
+ ],
+ 'conditions': [
+ [ 'target_arch=="x64"', {
+ # The AES assembler code doesn't work in static builds.
+ # The linker complains about non-relocatable code, and I
+ # currently don't know how to fix this properly.
+ 'sources!': [
+ 'intel-aes.s',
+ 'intel-gcm.s',
+ ],
+ }],
+ ],
+ }],
+ ],
+ },
+ {
+ 'target_name': '<(freebl_name)',
+ 'type': 'shared_library',
+ 'includes': [
+ 'freebl_base.gypi',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports',
+ 'hw-acc-crypto-avx',
+ 'hw-acc-crypto-avx2',
+ ],
+ 'conditions': [
+ [ 'target_arch=="ia32" or target_arch=="x64"', {
+ 'dependencies': [
+ 'gcm-aes-x86_c_lib',
+ ]
+ }, 'target_arch=="arm" or target_arch=="arm64" or target_arch=="aarch64"', {
+ 'dependencies': [
+ 'armv8_c_lib',
+ ],
+ }],
+ [ '(target_arch=="ia32" or target_arch=="x64") and disable_intel_hw_sha==0', {
+ 'dependencies': [
+ 'sha-x86_c_lib',
+ ],
+ }],
+ [ 'disable_arm32_neon==0 and target_arch=="arm"', {
+ 'dependencies': [
+ 'gcm-aes-arm32-neon_c_lib',
+ ],
+ }],
+ [ 'disable_arm32_neon==1 and target_arch=="arm"', {
+ 'defines!': [
+ 'NSS_DISABLE_ARM32_NEON',
+ ],
+ }],
+ [ 'target_arch=="arm64" or target_arch=="aarch64"', {
+ 'dependencies': [
+ 'gcm-aes-aarch64_c_lib',
+ ],
+ }],
+ [ 'disable_altivec==0', {
+ 'conditions': [
+ [ 'target_arch=="ppc64"', {
+ 'dependencies': [
+ 'gcm-aes-ppc_c_lib',
+ 'gcm-sha512-nodepend-ppc_c_lib',
+ ],
+ }, 'target_arch=="ppc64le"', {
+ 'dependencies': [
+ 'gcm-aes-ppc_c_lib',
+ 'gcm-sha512-nodepend-ppc_c_lib',
+ 'ppc-gcm-wrap-nodepend_c_lib',
+ ],
+ }],
+ ],
+ }],
+ [ 'disable_altivec==1 and (target_arch=="ppc64" or target_arch=="ppc64le")', {
+ 'defines!': [
+ 'NSS_DISABLE_ALTIVEC',
+ ],
+ }],
+ [ 'disable_crypto_vsx==1 and (target_arch=="ppc" or target_arch=="ppc64" or target_arch=="ppc64le")', {
+ 'defines!': [
+ 'NSS_DISABLE_CRYPTO_VSX',
+ ],
+ }],
+ [ 'OS!="linux"', {
+ 'conditions': [
+ [ 'moz_fold_libs==0', {
+ 'dependencies': [
+ '<(DEPTH)/lib/util/util.gyp:nssutil3',
+ ],
+ }, {
+ 'libraries': [
+ '<(moz_folded_library_name)',
+ ],
+ }],
+ ],
+ }],
+ [ '(OS=="linux" or OS=="android") and target_arch=="x64"', {
+ 'dependencies': [
+ 'intel-gcm-wrap_c_lib',
+ ],
+ }],
+ [ 'OS=="win" and (target_arch=="ia32" or target_arch=="x64") and cc_is_clang==1', {
+ 'dependencies': [
+ 'intel-gcm-wrap_c_lib',
+ ],
+ }],
+ [ 'OS=="linux"', {
+ 'sources': [
+ 'nsslowhash.c',
+ 'stubs.c',
+ ],
+ }],
+ ],
+ 'variables': {
+ 'conditions': [
+ [ 'OS=="linux"', {
+ 'mapfile': 'freebl_hash_vector.def',
+ }, {
+ 'mapfile': 'freebl.def',
+ }],
+ ]
+ },
+ },
+ {
+ 'target_name': 'freebl_64int_3',
+ 'includes': [
+ 'freebl_base.gypi',
+ ],
+ 'type': 'shared_library',
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports',
+ 'hw-acc-crypto-avx',
+ 'hw-acc-crypto-avx2',
+ ],
+ },
+ {
+ 'target_name': 'freebl_64fpu_3',
+ 'includes': [
+ 'freebl_base.gypi',
+ ],
+ 'type': 'shared_library',
+ 'sources': [
+ 'mpi/mpi_sparc.c',
+ 'mpi/mpv_sparcv9.s',
+ 'mpi/montmulfv9.s',
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports',
+ 'hw-acc-crypto-avx',
+ 'hw-acc-crypto-avx2',
+ ],
+ 'asflags_mozilla': [
+ '-mcpu=v9', '-Wa,-xarch=v9a'
+ ],
+ 'defines': [
+ 'MP_NO_MP_WORD',
+ 'MP_USE_UINT_DIGIT',
+ 'MP_ASSEMBLY_MULTIPLY',
+ 'MP_USING_MONT_MULF',
+ 'MP_MONT_USE_MP_MUL',
+ ],
+ },
+ ],
+ 'conditions': [
+ [ 'OS=="linux"', {
+ # stub build
+ 'targets': [
+ {
+ 'target_name': 'freebl3',
+ 'type': 'shared_library',
+ 'defines': [
+ 'FREEBL_NO_DEPEND',
+ ],
+ 'sources': [
+ 'lowhash_vector.c'
+ ],
+ 'dependencies': [
+ '<(DEPTH)/exports.gyp:nss_exports'
+ ],
+ 'variables': {
+ 'mapfile': 'freebl_hash.def'
+ }
+ },
+ ],
+ }],
+ ],
+ 'target_defaults': {
+ 'include_dirs': [
+ 'mpi',
+ 'ecl',
+ 'verified',
+ 'verified/internal',
+ 'verified/karamel/include',
+ 'verified/karamel/krmllib/dist/minimal',
+ 'deprecated',
+ ],
+ 'defines': [
+ 'SHLIB_SUFFIX=\"<(dll_suffix)\"',
+ 'SHLIB_PREFIX=\"<(dll_prefix)\"',
+ 'SHLIB_VERSION=\"3\"',
+ 'SOFTOKEN_SHLIB_VERSION=\"3\"',
+ 'RIJNDAEL_INCLUDE_TABLES',
+ 'MP_API_COMPATIBLE'
+ ],
+ 'conditions': [
+ [ 'OS=="win" and target_arch=="ia32"', {
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ #TODO: -Ox optimize flags
+ 'PreprocessorDefinitions': [
+ 'MP_ASSEMBLY_MULTIPLY',
+ 'MP_ASSEMBLY_SQUARE',
+ 'MP_ASSEMBLY_DIV_2DX1D',
+ 'MP_USE_UINT_DIGIT',
+ 'MP_NO_MP_WORD',
+ 'USE_HW_AES',
+ 'INTEL_GCM',
+ ],
+ },
+ },
+ }],
+ [ 'OS=="win" and target_arch=="x64"', {
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ #TODO: -Ox optimize flags
+ 'PreprocessorDefinitions': [
+ # Should be copied to mingw defines below
+ 'MP_IS_LITTLE_ENDIAN',
+ 'NSS_BEVAND_ARCFOUR',
+ 'MPI_AMD64',
+ 'MP_ASSEMBLY_MULTIPLY',
+ 'NSS_USE_COMBA',
+ 'USE_HW_AES',
+ 'INTEL_GCM',
+ ],
+ },
+ },
+ }],
+ [ '(OS=="win" or OS=="mac" or OS=="ios") and (target_arch=="ia32" or target_arch=="x64") and disable_intel_hw_sha==0', {
+ 'defines': [
+ 'USE_HW_SHA2',
+ ],
+ }],
+ [ '(OS=="win" or OS=="mac" or OS=="ios") and (target_arch=="arm64" or target_arch=="aarch64") and disable_arm_hw_aes==0', {
+ 'defines': [
+ 'USE_HW_AES',
+ ],
+ }],
+ [ '(OS=="win" or OS=="mac" or OS=="ios") and (target_arch=="arm64" or target_arch=="aarch64") and disable_arm_hw_sha1==0', {
+ 'defines': [
+ 'USE_HW_SHA1',
+ ],
+ }],
+ [ '(OS=="win" or OS=="mac" or OS=="ios") and (target_arch=="arm64" or target_arch=="aarch64") and disable_arm_hw_sha2==0', {
+ 'defines': [
+ 'USE_HW_SHA2',
+ ],
+ }],
+ [ 'cc_use_gnu_ld==1 and OS=="win" and target_arch=="x64"', {
+ # mingw x64
+ 'defines': [
+ 'MP_IS_LITTLE_ENDIAN',
+ ],
+ }],
+ # Poly1305_256 requires the flag to run
+ ['target_arch=="x64"', {
+ 'defines':[
+ 'HACL_CAN_COMPILE_VEC128',
+ 'HACL_CAN_COMPILE_VEC256',
+ 'HACL_CAN_COMPILE_INTRINSICS',
+ ],
+ }],
+ # MSVC has no __int128 type. Use emulated int128 and leave
+ # have_int128_support as-is for Curve25519 impl. selection.
+ [ 'have_int128_support==1 and (OS!="win" or cc_is_clang==1 or cc_is_gcc==1)', {
+ 'defines': [
+ # The Makefile does version-tests on GCC, but we're not doing that here.
+ 'HAVE_INT128_SUPPORT',
+ 'HACL_CAN_COMPILE_UINT128'
+ ],
+ }, {
+ 'defines': [
+ 'KRML_VERIFIED_UINT128',
+ ],
+ }],
+ [ 'OS=="linux"', {
+ 'defines': [
+ 'FREEBL_LOWHASH',
+ 'FREEBL_NO_DEPEND',
+ ],
+ 'conditions': [
+ [ 'disable_altivec==0 and target_arch=="ppc64le"', {
+ 'defines': [
+ 'PPC_GCM',
+ ],
+ }],
+ ],
+ }],
+ [ 'OS=="linux" or OS=="android"', {
+ 'conditions': [
+ [ 'target_arch=="x64"', {
+ 'defines': [
+ 'MP_IS_LITTLE_ENDIAN',
+ 'NSS_BEVAND_ARCFOUR',
+ 'MPI_AMD64',
+ 'MP_ASSEMBLY_MULTIPLY',
+ 'NSS_USE_COMBA',
+ ],
+ }],
+ [ 'target_arch=="x64"', {
+ 'defines': [
+ 'USE_HW_AES',
+ 'INTEL_GCM',
+ ],
+ }],
+ [ 'target_arch=="ia32"', {
+ 'defines': [
+ 'MP_IS_LITTLE_ENDIAN',
+ 'MP_ASSEMBLY_MULTIPLY',
+ 'MP_ASSEMBLY_SQUARE',
+ 'MP_ASSEMBLY_DIV_2DX1D',
+ 'MP_USE_UINT_DIGIT',
+ ],
+ }],
+ [ 'target_arch=="arm"', {
+ 'defines': [
+ 'MP_ASSEMBLY_MULTIPLY',
+ 'MP_ASSEMBLY_SQUARE',
+ 'MP_USE_UINT_DIGIT',
+ 'SHA_NO_LONG_LONG',
+ 'ARMHF',
+ ],
+ }],
+ [ 'disable_intel_hw_sha==0 and (target_arch=="ia32" or target_arch=="x64")', {
+ 'defines': [
+ 'USE_HW_SHA2',
+ ],
+ }],
+ [ 'disable_arm_hw_aes==0 and (target_arch=="arm" or target_arch=="arm64" or target_arch=="aarch64")', {
+ 'defines': [
+ 'USE_HW_AES',
+ ],
+ }],
+ [ 'disable_arm_hw_sha1==0 and (target_arch=="arm" or target_arch=="arm64" or target_arch=="aarch64")', {
+ 'defines': [
+ 'USE_HW_SHA1',
+ ],
+ }],
+ [ 'disable_arm_hw_sha2==0 and (target_arch=="arm" or target_arch=="arm64" or target_arch=="aarch64")', {
+ 'defines': [
+ 'USE_HW_SHA2',
+ ],
+ }],
+ ],
+ }],
+ ],
+ },
+ 'variables': {
+ 'module': 'nss',
+ 'conditions': [
+ [ 'target_arch=="x64" or target_arch=="arm64" or target_arch=="aarch64"', {
+ 'have_int128_support%': 1,
+ }, {
+ 'have_int128_support%': 0,
+ }],
+ [ 'target_arch=="arm"', {
+ # When the compiler uses the softfloat ABI, we want to use the compatible softfp ABI when enabling NEON for these objects.
+ # Confusingly, __SOFTFP__ is the name of the define for the softfloat ABI, not for the softfp ABI.
+ 'softfp_cflags': '<!(sh -c "${CC:-cc} -o - -E -dM - ${CFLAGS} < /dev/null | grep __SOFTFP__ > /dev/null && echo -mfloat-abi=softfp || true")',
+ }],
+ [ 'target_arch=="ppc64" or target_arch=="ppc64le"', {
+ 'ppc_abi': '<!(sh -c "${CC:-cc} -dM -E - < /dev/null | awk \'\\$2 == \\"_CALL_ELF\\" {print \\$3}\'")',
+ }],
+ ],
+ }
+}