Merge "[MIPS] Add mips64 and mips r6 targets."
diff --git a/Apps-config-host.mk b/Apps-config-host.mk
index 3778f7b..baf5a6a 100644
--- a/Apps-config-host.mk
+++ b/Apps-config-host.mk
@@ -114,6 +114,28 @@
 
 mips_exclude_files :=
 
+mips64_clang_asflags :=
+
+mips64_cflags :=
+
+mips64_src_files :=
+
+mips64_exclude_files :=
+
+mips32r6_clang_asflags :=
+
+mips32r6_cflags :=
+
+mips32r6_src_files :=
+
+mips32r6_exclude_files :=
+
+
+ifdef ARCH_MIPS_REV6
+mips_cflags := $(mips32r6_cflags)
+mips_src_files := $(mips32r6_src_files)
+mips_exclude_files := $(mips32r6_exclude_files)
+endif
 
 LOCAL_CFLAGS += $(common_cflags)
 LOCAL_C_INCLUDES += $(common_c_includes) $(local_c_includes)
diff --git a/Apps-config-target.mk b/Apps-config-target.mk
index 3f3aefd..f2bb032 100644
--- a/Apps-config-target.mk
+++ b/Apps-config-target.mk
@@ -114,6 +114,28 @@
 
 mips_exclude_files :=
 
+mips64_clang_asflags :=
+
+mips64_cflags :=
+
+mips64_src_files :=
+
+mips64_exclude_files :=
+
+mips32r6_clang_asflags :=
+
+mips32r6_cflags :=
+
+mips32r6_src_files :=
+
+mips32r6_exclude_files :=
+
+
+ifdef ARCH_MIPS_REV6
+mips_cflags := $(mips32r6_cflags)
+mips_src_files := $(mips32r6_src_files)
+mips_exclude_files := $(mips32r6_exclude_files)
+endif
 
 LOCAL_CFLAGS += $(common_cflags)
 LOCAL_C_INCLUDES += $(common_c_includes)
@@ -137,3 +159,7 @@
 LOCAL_SRC_FILES_mips += $(filter-out $(mips_exclude_files),$(common_src_files) $(mips_src_files))
 LOCAL_CFLAGS_mips += $(mips_cflags)
 LOCAL_CLANG_ASFLAGS_mips += $(mips_clang_asflags)
+
+LOCAL_SRC_FILES_mips64 += $(filter-out $(mips64_exclude_files),$(common_src_files) $(mips64_src_files))
+LOCAL_CFLAGS_mips64 += $(mips64_cflags)
+LOCAL_CLANG_ASFLAGS_mips64 += $(mips64_clang_asflags)
diff --git a/Crypto-config-host.mk b/Crypto-config-host.mk
index 7207c23..6cd5c0b 100644
--- a/Crypto-config-host.mk
+++ b/Crypto-config-host.mk
@@ -709,12 +709,36 @@
   crypto/aes/aes_core.c \
   crypto/bn/bn_asm.c \
 
+mips64_clang_asflags :=
+
+mips64_cflags := \
+  -DOPENSSL_NO_ASM \
+
+mips64_src_files :=
+
+mips64_exclude_files :=
+
+mips32r6_clang_asflags :=
+
+mips32r6_cflags := \
+  -DOPENSSL_NO_ASM \
+
+mips32r6_src_files :=
+
+mips32r6_exclude_files :=
+
 
 # "Temporary" hack until this can be fixed in openssl.config
 x86_64_cflags += -DRC4_INT="unsigned int"
 
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
 
+ifdef ARCH_MIPS_REV6
+mips_cflags := $(mips32r6_cflags)
+mips_src_files := $(mips32r6_src_files)
+mips_exclude_files := $(mips32r6_exclude_files)
+endif
+
 LOCAL_CFLAGS += $(common_cflags)
 LOCAL_C_INCLUDES += $(common_c_includes) $(local_c_includes)
 
diff --git a/Crypto-config-target.mk b/Crypto-config-target.mk
index a4bf069..7fb86f5 100644
--- a/Crypto-config-target.mk
+++ b/Crypto-config-target.mk
@@ -709,12 +709,36 @@
   crypto/aes/aes_core.c \
   crypto/bn/bn_asm.c \
 
+mips64_clang_asflags :=
+
+mips64_cflags := \
+  -DOPENSSL_NO_ASM \
+
+mips64_src_files :=
+
+mips64_exclude_files :=
+
+mips32r6_clang_asflags :=
+
+mips32r6_cflags := \
+  -DOPENSSL_NO_ASM \
+
+mips32r6_src_files :=
+
+mips32r6_exclude_files :=
+
 
 # "Temporary" hack until this can be fixed in openssl.config
 x86_64_cflags += -DRC4_INT="unsigned int"
 
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
 
+ifdef ARCH_MIPS_REV6
+mips_cflags := $(mips32r6_cflags)
+mips_src_files := $(mips32r6_src_files)
+mips_exclude_files := $(mips32r6_exclude_files)
+endif
+
 LOCAL_CFLAGS += $(common_cflags)
 LOCAL_C_INCLUDES += $(common_c_includes)
 
@@ -737,3 +761,7 @@
 LOCAL_SRC_FILES_mips += $(filter-out $(mips_exclude_files),$(common_src_files) $(mips_src_files))
 LOCAL_CFLAGS_mips += $(mips_cflags)
 LOCAL_CLANG_ASFLAGS_mips += $(mips_clang_asflags)
+
+LOCAL_SRC_FILES_mips64 += $(filter-out $(mips64_exclude_files),$(common_src_files) $(mips64_src_files))
+LOCAL_CFLAGS_mips64 += $(mips64_cflags)
+LOCAL_CLANG_ASFLAGS_mips64 += $(mips64_clang_asflags)
diff --git a/Crypto-config-trusty.mk b/Crypto-config-trusty.mk
index 05ec1df..cc22723 100644
--- a/Crypto-config-trusty.mk
+++ b/Crypto-config-trusty.mk
@@ -253,9 +253,31 @@
 
 mips_exclude_files :=
 
+mips64_clang_asflags :=
+
+mips64_cflags :=
+
+mips64_src_files :=
+
+mips64_exclude_files :=
+
+mips32r6_clang_asflags :=
+
+mips32r6_cflags :=
+
+mips32r6_src_files :=
+
+mips32r6_exclude_files :=
+
 
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
 
+ifdef ARCH_MIPS_REV6
+mips_cflags := $(mips32r6_cflags)
+mips_src_files := $(mips32r6_src_files)
+mips_exclude_files := $(mips32r6_exclude_files)
+endif
+
 LOCAL_CFLAGS += $(common_cflags)
 LOCAL_C_INCLUDES += $(common_c_includes)
 
@@ -278,3 +300,7 @@
 LOCAL_SRC_FILES_mips += $(filter-out $(mips_exclude_files),$(common_src_files) $(mips_src_files))
 LOCAL_CFLAGS_mips += $(mips_cflags)
 LOCAL_CLANG_ASFLAGS_mips += $(mips_clang_asflags)
+
+LOCAL_SRC_FILES_mips64 += $(filter-out $(mips64_exclude_files),$(common_src_files) $(mips64_src_files))
+LOCAL_CFLAGS_mips64 += $(mips64_cflags)
+LOCAL_CLANG_ASFLAGS_mips64 += $(mips64_clang_asflags)
diff --git a/Ssl-config-host.mk b/Ssl-config-host.mk
index ac1b1bb..8f3bdce 100644
--- a/Ssl-config-host.mk
+++ b/Ssl-config-host.mk
@@ -109,9 +109,31 @@
 
 mips_exclude_files :=
 
+mips64_clang_asflags :=
+
+mips64_cflags :=
+
+mips64_src_files :=
+
+mips64_exclude_files :=
+
+mips32r6_clang_asflags :=
+
+mips32r6_cflags :=
+
+mips32r6_src_files :=
+
+mips32r6_exclude_files :=
+
 
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
 
+ifdef ARCH_MIPS_REV6
+mips_cflags := $(mips32r6_cflags)
+mips_src_files := $(mips32r6_src_files)
+mips_exclude_files := $(mips32r6_exclude_files)
+endif
+
 LOCAL_CFLAGS += $(common_cflags)
 LOCAL_C_INCLUDES += $(common_c_includes) $(local_c_includes)
 
diff --git a/Ssl-config-target.mk b/Ssl-config-target.mk
index c3c3749..30a2621 100644
--- a/Ssl-config-target.mk
+++ b/Ssl-config-target.mk
@@ -109,9 +109,31 @@
 
 mips_exclude_files :=
 
+mips64_clang_asflags :=
+
+mips64_cflags :=
+
+mips64_src_files :=
+
+mips64_exclude_files :=
+
+mips32r6_clang_asflags :=
+
+mips32r6_cflags :=
+
+mips32r6_src_files :=
+
+mips32r6_exclude_files :=
+
 
 LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
 
+ifdef ARCH_MIPS_REV6
+mips_cflags := $(mips32r6_cflags)
+mips_src_files := $(mips32r6_src_files)
+mips_exclude_files := $(mips32r6_exclude_files)
+endif
+
 LOCAL_CFLAGS += $(common_cflags)
 LOCAL_C_INCLUDES += $(common_c_includes)
 
@@ -134,3 +156,7 @@
 LOCAL_SRC_FILES_mips += $(filter-out $(mips_exclude_files),$(common_src_files) $(mips_src_files))
 LOCAL_CFLAGS_mips += $(mips_cflags)
 LOCAL_CLANG_ASFLAGS_mips += $(mips_clang_asflags)
+
+LOCAL_SRC_FILES_mips64 += $(filter-out $(mips64_exclude_files),$(common_src_files) $(mips64_src_files))
+LOCAL_CFLAGS_mips64 += $(mips64_cflags)
+LOCAL_CLANG_ASFLAGS_mips64 += $(mips64_clang_asflags)
diff --git a/import_openssl.sh b/import_openssl.sh
index c604088..b20c25e 100755
--- a/import_openssl.sh
+++ b/import_openssl.sh
@@ -149,6 +149,8 @@
   CC=true $PERL_EXE "$1" o32 > "$OUT"
 }
 
+# TODO: gen_asm_mips64
+
 function gen_asm_x86 () {
   local OUT
   OUT=$(default_asm_file "$@")
@@ -409,7 +411,8 @@
 function generate_config_mk() {
   declare -r output="$1"
   declare -r prefix="$2"
-  declare -r all_archs="arm arm64 x86 x86_64 mips"
+  declare -r all_archs="arm arm64 x86 x86_64 mips mips64"
+  declare -r variant_archs="mips32r6"
 
   echo "Generating $(basename $output)"
   (
@@ -441,7 +444,7 @@
     common_includes=$(var_sorted_value OPENSSL_${prefix}_INCLUDES)
     print_vardef_with_prefix_in_mk common_c_includes external/openssl/ $common_includes
 
-    for arch in $all_archs; do
+    for arch in $all_archs $variant_archs; do
       arch_clang_asflags=$(var_sorted_value OPENSSL_${prefix}_CLANG_ASFLAGS_${arch})
       print_vardef_in_mk ${arch}_clang_asflags $arch_clang_asflags
 
@@ -467,6 +470,13 @@
 LOCAL_EXPORT_C_INCLUDE_DIRS := \$(LOCAL_PATH)/include"
     fi
 
+    echo "
+ifdef ARCH_MIPS_REV6
+mips_cflags := \$(mips32r6_cflags)
+mips_src_files := \$(mips32r6_src_files)
+mips_exclude_files := \$(mips32r6_exclude_files)
+endif"
+
     if [ $3 == "target" ]; then
       echo "
 LOCAL_CFLAGS += \$(common_cflags)
@@ -550,6 +560,10 @@
   gen_asm_mips crypto/sha/asm/sha1-mips.pl
   gen_asm_mips crypto/sha/asm/sha512-mips.pl crypto/sha/asm/sha256-mips.S
 
+  # TODO: Generate mips32r6 asm
+
+  # TODO: Generate mips64 asm
+
   # Generate x86 asm
   gen_asm_x86 crypto/x86cpuid.pl
   gen_asm_x86 crypto/aes/asm/aes-586.pl
diff --git a/openssl.config b/openssl.config
index 9edd51e..c8b3dbd 100644
--- a/openssl.config
+++ b/openssl.config
@@ -275,6 +275,16 @@
 SHA256_ASM \
 "
 
+# TODO: generate *-mips32r6.S files
+OPENSSL_CRYPTO_DEFINES_mips32r6="\
+OPENSSL_NO_ASM \
+"
+
+# TODO: generate *-mips64.S files
+OPENSSL_CRYPTO_DEFINES_mips64="\
+OPENSSL_NO_ASM \
+"
+
 OPENSSL_CRYPTO_DEFINES_x86="\
 AES_ASM \
 DES_PTR \
@@ -884,6 +894,20 @@
 crypto/bn/bn_asm.c \
 "
 
+# TODO: generate *-mips32r6.S files
+OPENSSL_CRYPTO_SOURCES_mips32r6="\
+"
+
+OPENSSL_CRYPTO_SOURCES_EXCLUDES_mips32r6="\
+"
+
+# TODO: generate *-mips64.S files
+OPENSSL_CRYPTO_SOURCES_mips64="\
+"
+
+OPENSSL_CRYPTO_SOURCES_EXCLUDES_mips64="\
+"
+
 OPENSSL_CRYPTO_SOURCES_x86="\
 crypto/aes/asm/aes-586.S \
 crypto/aes/asm/aesni-x86.S \