deps: make opensslconf.h include each target arch
authorShigeki Ohtsu <ohtsu@iij.ad.jp>
Thu, 9 Apr 2015 08:46:08 +0000 (17:46 +0900)
committerShigeki Ohtsu <ohtsu@iij.ad.jp>
Fri, 10 Apr 2015 00:53:48 +0000 (09:53 +0900)
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 alos 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`.

This also contains to add two new defines for all platform in the
bottom for GOST and Padlock engines are not included in iojs.

PR-URL: https://github.com/iojs/io.js/pull/1377
Reviewed-By: Fedor Indutny <fedor@indutny.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
deps/openssl/config/opensslconf.h

index 84e5de7..ad49a0f 100644 (file)
-/* 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 */