-/* opensslconf.h */
-/* WARNING: Generated automatically from opensslconf.h.in by Configure. */
-
-/* OpenSSL was configured with the following options: */
-#undef OPENSSL_SYSNAME_WIN32
-#if defined(_WIN32)
-# define OPENSSL_SYSNAME_WIN32
-#endif
-
-#ifndef OPENSSL_DOING_MAKEDEPEND
-# ifndef OPENSSL_NO_CAPIENG
-# define OPENSSL_NO_CAPIENG
-# endif
-# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
-# define OPENSSL_NO_EC_NISTP_64_GCC_128
-# endif
-# ifndef OPENSSL_NO_GMP
-# define OPENSSL_NO_GMP
-# endif
-# ifndef OPENSSL_NO_GOST
-# define OPENSSL_NO_GOST
-# endif
-# ifndef OPENSSL_NO_HW_PADLOCK
-# define OPENSSL_NO_HW_PADLOCK
-# endif
-# ifndef OPENSSL_NO_JPAKE
-# define OPENSSL_NO_JPAKE
-# endif
-# ifndef OPENSSL_NO_KRB5
-# define OPENSSL_NO_KRB5
-# endif
-# ifndef OPENSSL_NO_MD2
-# define OPENSSL_NO_MD2
-# endif
-# ifndef OPENSSL_NO_RC5
-# define OPENSSL_NO_RC5
-# endif
-# ifndef OPENSSL_NO_RFC3779
-# define OPENSSL_NO_RFC3779
-# endif
-# ifndef OPENSSL_NO_SCTP
-# define OPENSSL_NO_SCTP
-# endif
-# ifndef OPENSSL_NO_STORE
-# define OPENSSL_NO_STORE
-# endif
-#endif /* OPENSSL_DOING_MAKEDEPEND */
-
-#ifndef OPENSSL_THREADS
-# define OPENSSL_THREADS
-#endif
-#ifndef OPENSSL_NO_DYNAMIC_ENGINE
-# define OPENSSL_NO_DYNAMIC_ENGINE
-#endif
-
-/* The OPENSSL_NO_* macros are also defined as NO_* if the application
- asks for it. This is a transient feature that is provided for those
- who haven't had the time to do the appropriate changes in their
- applications. */
-#ifdef OPENSSL_ALGORITHM_DEFINES
-# if defined(OPENSSL_NO_CAMELLIA) && !defined(NO_CAMELLIA)
-# define NO_CAMELLIA
-# endif
-# if defined(OPENSSL_NO_CAPIENG) && !defined(NO_CAPIENG)
-# define NO_CAPIENG
-# endif
-# if defined(OPENSSL_NO_CAST) && !defined(NO_CAST)
-# define NO_CAST
-# endif
-# if defined(OPENSSL_NO_CMS) && !defined(NO_CMS)
-# define NO_CMS
-# endif
-# if defined(OPENSSL_NO_FIPS) && !defined(NO_FIPS)
-# define NO_FIPS
-# endif
-# if defined(OPENSSL_NO_GMP) && !defined(NO_GMP)
-# define NO_GMP
-# endif
-# if defined(OPENSSL_NO_IDEA) && !defined(NO_IDEA)
-# define NO_IDEA
-# endif
-# if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE)
-# define NO_JPAKE
-# endif
-# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
-# define NO_KRB5
-# endif
-# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)
-# define NO_MD2
-# endif
-# if defined(OPENSSL_NO_MDC2) && !defined(NO_MDC2)
-# define NO_MDC2
-# endif
-# if defined(OPENSSL_NO_RC5) && !defined(NO_RC5)
-# define NO_RC5
-# endif
-# if defined(OPENSSL_NO_RFC3779) && !defined(NO_RFC3779)
-# define NO_RFC3779
-# endif
-# if defined(OPENSSL_NO_SEED) && !defined(NO_SEED)
-# define NO_SEED
-# endif
-# if defined(OPENSSL_NO_SHA0) && !defined(NO_SHA0)
-# define NO_SHA0
-# endif
-# if defined(OPENSSL_NO_STORE) && !defined(NO_STORE)
-# define NO_STORE
-# endif
-# if defined(OPENSSL_NO_WHRLPOOL) && !defined(NO_WHRLPOOL)
-# define NO_WHRLPOOL
-# endif
-# if defined(OPENSSL_NO_MDC2) && !defined(NO_MDC2)
-# define NO_MDC2
-# endif
-#endif
-
-/* crypto/opensslconf.h.in */
-
-#ifdef OPENSSL_DOING_MAKEDEPEND
- /* Include any symbols here that have to be explicitly set to enable a feature
- * that should be visible to makedepend.
- *
- * [Our "make depend" doesn't actually look at this, we use actual build settings
- * instead; we want to make it easy to remove subdirectories with disabled algorithms.]
- */
-# ifndef OPENSSL_FIPS
-# define OPENSSL_FIPS
-# endif
-#endif
-
-/* Generate 80386 code? */
-#undef I386_ONLY
-
-#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
-# if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
-# if defined(_WIN32)
-# define ENGINESDIR "ssl/lib/engines"
-# define OPENSSLDIR "ssl"
-# else
-# define ENGINESDIR "/usr/local/ssl/lib/engines"
-# define OPENSSLDIR "/usr/local/ssl"
-# endif
-# endif
-#endif
-
-#undef OPENSSL_UNISTD
-#define OPENSSL_UNISTD <unistd.h>
-#if !defined(_WIN32) && !defined(__arm__) && !defined(__mips__) && !defined(SWIG)
-# include <unistd.h>
-#endif
-
-#undef OPENSSL_EXPORT_VAR_AS_FUNCTION
-#if defined(_WIN32)
-# define OPENSSL_EXPORT_VAR_AS_FUNCTION
-#endif
-
-#if defined(HEADER_IDEA_H)
-# undef IDEA_INT
-# define IDEA_INT unsigned int
+/*
+ In OpenSSL, opensslconf.h was generated by Configure script with
+ specifying a target argument, where it includes several defines that
+ depend on OS and architecture platform.
+
+ In iojs, we statically mapped --dest-os and --dest-cpu options in
+ configure to the target of Configure in OpenSSL and make
+ `deps/openssl/conf/openssconf.h` so as to include each file
+ according to its target by checking pre-defined compiler macros.
+
+ Included opnesslconf.h files for supported target architectures can
+ be generated by `Makefile` and stored under
+ `archs/{target}/opensslconf.h`. The Makefile also fixes several
+ defines to meet iojs build requirements.
+
+ Here is a map table of configure options in iojs, target arch of
+ Configure in OpenSSL and CI support.
+
+ | --dest-os | --dest-cpu | OpenSSL target arch | CI |
+ | --------- | ---------- | -------------------- | --- |
+ | linux | ia32 | linux-elf | o |
+ | linux | x32 | patched linux-x86_64 | - |
+ | linux | x64 | linux-x86_64 | o |
+ | linux | arm | linux-armv4 | o |
+ | linux | arm64 | N/A | - |
+ | mac | ia32 | darwin-i386-cc | o |
+ | mac | x64 | darwin64-x86-cc | o |
+ | win | ia32 | VC-WIN32 | - |
+ | win | x64 | VC-WIN64A | o |
+ | solaris | ia32 | solaris-x86-gcc | o |
+ | solaris | x64 | solaris64-x86_64-gcc | o |
+ | freebsd | ia32 | BSD-x86 | o |
+ | freebsd | x64 | BSD-x86_64 | o |
+ | openbsd | ia32 | BSD-x86 | - |
+ | openbsd | x64 | BSD-x86_64 | - |
+ | others | others | linux-elf | - |
+
+ --dest-os and --dest-cpu are mapped to pre-defined macros.
+
+ | --dest-os | pre-defined macro |
+ | ------------------ | ------------------------- |
+ | win | _WIN32 |
+ | win(64bit) | _WIN64 |
+ | mac | __APPLE__ && __MACH__ |
+ | solaris | __sun |
+ | freebsd | __FreeBSD__ |
+ | openbsd | __OpenBSD__ |
+ | linux (not andorid)| __linux__ && !__ANDROID__ |
+ | android | __ANDROID__ |
+
+ | --dest-cpu | pre-defined macro |
+ | ---------- | ----------------- |
+ | arm | __arm__ |
+ | arm64 | __aarch64__ |
+ | ia32 | __i386__ |
+ | ia32(win) | _M_IX86 |
+ | mips | __mips__ |
+ | mipsel | __MIPSEL__ |
+ | x32 | __ILP32__ |
+ | x64 | __x86_64__ |
+ | x64(win) | _M_X64 |
+
+ These are the list which is not implemented yet.
+
+ | --dest-os | --dest-cpu | OpenSSL target arch | CI |
+ | --------- | ---------- | -------------------- | --- |
+ | linux | mips | linux-mips32,linux-mips64,linux64-mips64? | --- |
+ | linux | mipsel | ? | --- |
+ | android | ia32 | android-x86 | --- |
+ | android | arm | android-armv7 | --- |
+ | android | mips | android-mips | --- |
+ | android | mipsel | ? | --- |
+
+ Supported target arch list in OpenSSL can be obtained by typing
+ `deps/openssl/openssl/Configure LIST`.
+
+*/
+
+#undef OPENSSL_LINUX
+#if defined(__linux) && !defined(__ANDROID__)
+# define OPENSSL_LINUX 1
#endif
-#if defined(HEADER_MD2_H)
-# undef MD2_INT
-# define MD2_INT unsigned int
+#if defined(OPENSSL_LINUX) && defined(__i386__)
+# include "./archs/linux-elf/opensslconf.h"
+#elif defined(OPENSSL_LINUX) && defined(__ILP32__)
+# include "./archs/linux-x32/opensslconf.h"
+#elif defined(OPENSSL_LINUX) && defined(__x86_64__)
+# include "./archs/linux-x86_64/opensslconf.h"
+#elif defined(OPENSSL_LINUX) && defined(__arm__)
+# include "./archs/linux-armv4/opensslconf.h"
+#elif defined(OPENSSL_LINUX) && defined(__aarch64__)
+ /* Not Supported Yet */
+#elif defined(__APPLE__) && defined(__MACH__) && defined(__i386__)
+# include "./archs/darwin-i386-cc/opensslconf.h"
+#elif defined(__APPLE__) && defined(__MACH__) && defined(__x86_64__)
+# include "./archs/darwin64-x86_64-cc/opensslconf.h"
+#elif defined(_WIN32) && defined(_M_IX86)
+# include "./archs/VC-WIN32/opensslconf.h"
+#elif defined(_WIN32) && defined(_M_X64)
+# include "./archs/VC-WIN64A/opensslconf.h"
+#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__i386__)
+# include "./archs/BSD-x86/opensslconf.h"
+#elif (defined(__FreeBSD__) || defined(__OpenBSD__)) && defined(__x86_64__)
+# include "./archs/BSD-x86_64/opensslconf.h"
+#elif defined(__sun) && defined(__i386__)
+# include "./archs/solaris-x86-gcc/opensslconf.h"
+#elif defined(__sun) && defined(__x86_64__)
+# include "./archs/solaris64-x86_64-gcc/opensslconf.h"
+#else
+# include "./archs/linux-elf/opensslconf.h"
#endif
-#if defined(HEADER_RC2_H)
-/* I need to put in a mod for the alpha - eay */
-# undef RC2_INT
-# define RC2_INT unsigned int
+/* GOST is not included in all platform */
+#ifndef OPENSSL_NO_GOST
+# define OPENSSL_NO_GOST
#endif
-
-#if defined(HEADER_RC4_H)
- /* using int types make the structure larger but make the code faster
- * on most boxes I have tested - up to %20 faster. */
- /*
- * I don't know what does "most" mean, but declaring "int" is a must on:
- * - Intel P6 because partial register stalls are very expensive;
- * - elder Alpha because it lacks byte load/store instructions;
- */
-# undef RC4_INT
-# if defined(__arm__)
-# define RC4_INT unsigned char
-# else
-# define RC4_INT unsigned int
-# endif
-
- /*
- * This enables code handling data aligned at natural CPU word
- * boundary. See crypto/rc4/rc4_enc.c for further details.
- */
-# undef RC4_CHUNK
-# if defined(_M_X64) || defined(__aarch64__) || defined(__x86_64__)
-# define RC4_CHUNK unsigned long long
-# elif defined(__arm__)
-# define RC4_CHUNK unsigned long
-# else
- /* On x86 RC4_CHUNK is not defined */
-# endif
-#endif
-
-#if defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)
- /* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
- * %20 speed up (longs are 8 bytes, int's are 4). */
-# undef DES_LONG
-# define DES_LONG unsigned int
-#endif
-
-#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
-# define CONFIG_HEADER_BN_H
-
- /* Should we define BN_DIV2W here? */
-
- /* Only one for the following should be defined */
- /* The prime number generation stuff may not work when
- * EIGHT_BIT but I don't care since I've only used this mode
- * for debuging the bignum libraries */
-# undef SIXTY_FOUR_BIT_LONG
-# undef SIXTY_FOUR_BIT
-# undef THIRTY_TWO_BIT
-# undef SIXTEEN_BIT
-# undef EIGHT_BIT
-# if defined(_M_X64) || defined(__aarch64__) || defined(__x86_64__)
-# if defined(_LP64)
-# define SIXTY_FOUR_BIT_LONG
-# else
-# define SIXTY_FOUR_BIT
-# endif
-# elif defined(_M_IX86) || defined(__i386__) || defined(__arm__) || defined(__mips__)
-# define THIRTY_TWO_BIT
-# endif
-#endif
-
-#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
-# define CONFIG_HEADER_RC4_LOCL_H
- /* if this is defined data[i] is used instead of *data, this is a %20
- * speedup on x86 */
-# undef RC4_INDEX
-# if defined(_M_IX86) || defined(__i386__)
-# define RC4_INDEX
-# endif
+/* HW_PADLOCK is not included in all platform */
+#ifndef OPENSSL_NO_HW_PADLOCK
+# define OPENSSL_NO_HW_PADLOCK
#endif
-
-#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
-# define CONFIG_HEADER_BF_LOCL_H
-# undef BF_PTR
-# if defined(__arm__)
-# define BF_PTR
-# endif
-#endif /* HEADER_BF_LOCL_H */
-
-#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
-# define CONFIG_HEADER_DES_LOCL_H
-
-# ifndef DES_DEFAULT_OPTIONS
- /* the following is tweaked from a config script, that is why it is a
- * protected undef/define */
-# undef DES_PTR
-# if !defined(_WIN32) && (defined(_M_IX86) || defined(__i386__))
-# define DES_PTR
-# endif
-
- /* This helps C compiler generate the correct code for multiple functional
- * units. It reduces register dependancies at the expense of 2 more
- * registers */
-# undef DES_RISC1
-# if !defined(_WIN32) && (defined(_M_IX86) || defined(__i386__))
-# define DES_RISC1
-# endif
-
-# undef DES_RISC2
-
-# if defined(DES_RISC1) && defined(DES_RISC2)
-# error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
-# endif
-
- /* Unroll the inner loop, this sometimes helps, sometimes hinders.
- * Very mucy CPU dependant */
-# undef DES_UNROLL
-# if !defined(_WIN32)
-# define DES_UNROLL
-# endif
-
- /* These default values were supplied by
- * Peter Gutman <pgut001@cs.auckland.ac.nz>
- * They are only used if nothing else has been defined */
-# if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL)
- /* Special defines which change the way the code is built depending on the
- CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find
- even newer MIPS CPU's, but at the moment one size fits all for
- optimization options. Older Sparc's work better with only UNROLL, but
- there's no way to tell at compile time what it is you're running on */
-# if defined( sun ) /* Newer Sparc's */
-# define DES_PTR
-# define DES_RISC1
-# define DES_UNROLL
-# elif defined( __ultrix ) /* Older MIPS */
-# define DES_PTR
-# define DES_RISC2
-# define DES_UNROLL
-# elif defined( __osf1__ ) /* Alpha */
-# define DES_PTR
-# define DES_RISC2
-# elif defined ( _AIX ) /* RS6000 */
- /* Unknown */
-# elif defined( __hpux ) /* HP-PA */
- /* Unknown */
-# elif defined( __aux ) /* 68K */
- /* Unknown */
-# elif defined( __dgux ) /* 88K (but P6 in latest boxes) */
-# define DES_UNROLL
-# elif defined( __sgi ) /* Newer MIPS */
-# define DES_PTR
-# define DES_RISC2
-# define DES_UNROLL
-# elif defined(i386) || defined(__i386__) /* x86 boxes, should be gcc */
-# define DES_PTR
-# define DES_RISC1
-# define DES_UNROLL
-# endif /* Systems-specific speed defines */
-# endif
-
-# endif /* DES_DEFAULT_OPTIONS */
-#endif /* HEADER_DES_LOCL_H */