Supports Arm64 (aarch64) protoc artifacts
diff --git a/protoc-artifacts/build-protoc.sh b/protoc-artifacts/build-protoc.sh
index 57523a4..fe1dec2 100755
--- a/protoc-artifacts/build-protoc.sh
+++ b/protoc-artifacts/build-protoc.sh
@@ -6,6 +6,12 @@
 # Usage: build-protoc.sh <OS> <ARCH> <TARGET>
 # <OS> and <ARCH> are ${os.detected.name} and ${os.detected.arch} from os-maven-plugin
 # <TARGET> can be "protoc" or "protoc-gen-javalite"
+#
+# The script now supports cross-compiling windows and linux-arm64 in linux-x86
+# environment. Required packages:
+# - Windows: i686-w64-mingw32-gcc (32bit) and x86_64-w64-mingw32-gcc (64bit)
+# - Arm64: g++-aarch64-linux-gnu
+
 OS=$1
 ARCH=$2
 MAKE_TARGET=$3
@@ -73,6 +79,8 @@
         assertEq $format "elf32-i386" $LINENO
       elif [[ "$ARCH" == x86_64 ]]; then
         assertEq $format "elf64-x86-64" $LINENO
+      elif [[ "$ARCH" == aarch_64 ]]; then
+        assertEq $format "elf64-little" $LINENO
       else
         fail "Unsupported arch: $ARCH"
       fi
@@ -116,6 +124,9 @@
       white_list="linux-gate\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|ld-linux\.so\.2"
     elif [[ "$ARCH" == x86_64 ]]; then
       white_list="linux-vdso\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|ld-linux-x86-64\.so\.2"
+    elif [[ "$ARCH" == aarch_64 ]]; then
+      dump_cmd='objdump -p '"$1"' | grep NEEDED'
+      white_list="libpthread\.so\.0\|libc\.so\.6\|ld-linux-aarch64\.so\.1"
     fi
   elif [[ "$OS" == osx ]]; then
     dump_cmd='otool -L '"$1"' | fgrep dylib'
@@ -180,6 +191,8 @@
       CXXFLAGS="$CXXFLAGS -m64"
     elif [[ "$ARCH" == x86_32 ]]; then
       CXXFLAGS="$CXXFLAGS -m32"
+    elif [[ "$ARCH" == aarch_64 ]]; then
+      CONFIGURE_ARGS="$CONFIGURE_ARGS --host=aarch64-linux-gnu"
     else
       fail "Unsupported arch: $ARCH"
     fi