Extend the CPU ABI specification mechanism.

Add a (read only) system property that is a comma
separated list of ABIs supported by the device in order
of preference. For example, typical arm-v8 device might
define:

ro.cpu.abilist = arm64-v8a,armeabi-v7a,armeabi

For most purposes, a single flattened list like the above is
probably more useful than the parallel system of variables
TARGET_CPU_ABI{2} / TARGET_2ND_ARCH_CPU_ABI{2} that we use
in the build system.

Change-Id: If9102669ad9f5f8fd89a8bcc5bf88cca1acadc3c
diff --git a/core/Makefile b/core/Makefile
index 1a008d8..918a94f 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -191,6 +191,7 @@
 			TARGET_BOOTLOADER_BOARD_NAME="$(TARGET_BOOTLOADER_BOARD_NAME)" \
 			BUILD_FINGERPRINT="$(BUILD_FINGERPRINT)" \
 			TARGET_BOARD_PLATFORM="$(TARGET_BOARD_PLATFORM)" \
+			TARGET_CPU_ABI_LIST="$(TARGET_CPU_ABI_LIST)" \
 			TARGET_CPU_ABI="$(TARGET_CPU_ABI)" \
 			TARGET_CPU_ABI2="$(TARGET_CPU_ABI2)" \
 			TARGET_AAPT_CHARACTERISTICS="$(TARGET_AAPT_CHARACTERISTICS)" \
diff --git a/core/envsetup.mk b/core/envsetup.mk
index 4cb389b..628c95b 100644
--- a/core/envsetup.mk
+++ b/core/envsetup.mk
@@ -143,6 +143,28 @@
 TARGET_DEVICE_DIR := $(patsubst %/,%,$(dir $(board_config_mk)))
 board_config_mk :=
 
+# "ro.product.cpu.abilist" is a comma separated list of ABIs (in order
+# of preference) that the target supports. If a TARGET_CPU_ABI_LIST
+# is specified by the board configuration, we use that. If not, we
+# build a list out of the TARGET_CPU_ABIs specified by the config.
+ifeq (,$(TARGET_CPU_ABI_LIST))
+  TARGET_CPU_ABI_LIST := $(TARGET_CPU_ABI)
+  ifneq (,$(TARGET_CPU_ABI2))
+    TARGET_CPU_ABI_LIST += ,$(TARGET_CPU_ABI2)
+  endif
+  ifneq (,$(TARGET_2ND_CPU_ABI))
+    TARGET_CPU_ABI_LIST += ,$(TARGET_2ND_CPU_ABI)
+  endif
+  ifneq (,$(TARGET_2ND_CPU_ABI2))
+    TARGET_CPU_ABI_LIST += ,$(TARGET_2ND_CPU_ABI2)
+  endif
+
+  # Strip whitespace from the ABI list string.
+  empty :=
+  space := $(empty) $(empty)
+  TARGET_CPU_ABI_LIST := $(subst $(space),,$(TARGET_CPU_ABI_LIST))
+endif
+
 # ---------------------------------------------------------------
 # Set up configuration for target machine.
 # The following must be set: