v8: support multilib builds

Allow building for multiple architectures at the same time:
Use $(local-generated-sources-dir) instead of $(local-intermediates-dir)
Set LOCAL_CFLAGS_arch instead of ifeq ($(TARGET_ARCH),arch)
Use LOCAL_MODULE_TARGET_ARCH_WARN to restrict which architectures
attempt to build, and print a warning on the rest.

Change-Id: I66dffb36557aa47c92a1ae158683a27e9ca83e53
diff --git a/Android.libv8.mk b/Android.libv8.mk
index 586980c..d83857b 100644
--- a/Android.libv8.mk
+++ b/Android.libv8.mk
@@ -13,64 +13,70 @@
 # Set up the target identity
 LOCAL_MODULE := libv8
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
-intermediates := $(call local-intermediates-dir)
+generated_sources := $(call local-generated-sources-dir)
 
-# Android.v8common.mk defines common V8_LOCAL_SRC_FILES
-# and V8_LOCAL_JS_LIBRARY_FILES
-V8_LOCAL_SRC_FILES :=
+# Android.v8common.mk defines V8_LOCAL_JS_LIBRARY_FILES, LOCAL_SRC_FILES,
+# LOCAL_CFLAGS, LOCAL_SRC_FILES_arch, and LOCAL_CFLAGS_arch
 V8_LOCAL_JS_LIBRARY_FILES :=
 V8_LOCAL_JS_EXPERIMENTAL_LIBRARY_FILES :=
 include $(LOCAL_PATH)/Android.v8common.mk
 
 # Target can only be linux
-V8_LOCAL_SRC_FILES += \
+LOCAL_SRC_FILES += \
   src/platform-linux.cc \
   src/platform-posix.cc
 
-ifeq ($(TARGET_ARCH),x86)
-V8_LOCAL_SRC_FILES += src/atomicops_internals_x86_gcc.cc
-endif
-
-LOCAL_SRC_FILES := $(V8_LOCAL_SRC_FILES)
+LOCAL_SRC_FILES_x86 += src/atomicops_internals_x86_gcc.cc
 
 LOCAL_JS_LIBRARY_FILES := $(addprefix $(LOCAL_PATH)/, $(V8_LOCAL_JS_LIBRARY_FILES))
 LOCAL_JS_EXPERIMENTAL_LIBRARY_FILES := $(addprefix $(LOCAL_PATH)/, $(V8_LOCAL_JS_EXPERIMENTAL_LIBRARY_FILES))
 
-# Copy js2c.py to intermediates directory and invoke there to avoid generating
-# jsmin.pyc in the source directory
-JS2C_PY := $(intermediates)/js2c.py $(intermediates)/jsmin.py
-$(JS2C_PY): $(intermediates)/%.py : $(LOCAL_PATH)/tools/%.py | $(ACP)
+# Copy js2c.py to generated sources directory and invoke there to avoid
+# generating jsmin.pyc in the source directory
+JS2C_PY := $(generated_sources)/js2c.py $(generated_sources)/jsmin.py
+$(JS2C_PY): $(generated_sources)/%.py : $(LOCAL_PATH)/tools/%.py | $(ACP)
 	@echo "Copying $@"
 	$(copy-file-to-target)
 
 # Generate libraries.cc
-GEN1 := $(intermediates)/libraries.cc
-$(GEN1): SCRIPT := $(intermediates)/js2c.py
+GEN1 := $(generated_sources)/libraries.cc
+$(GEN1): SCRIPT := $(generated_sources)/js2c.py
 $(GEN1): $(LOCAL_JS_LIBRARY_FILES) $(JS2C_PY)
 	@echo "Generating libraries.cc"
 	@mkdir -p $(dir $@)
 	python $(SCRIPT) $(GEN1) CORE off $(LOCAL_JS_LIBRARY_FILES)
-V8_GENERATED_LIBRARIES := $(intermediates)/libraries.cc
+V8_GENERATED_LIBRARIES := $(generated_sources)/libraries.cc
 
 # Generate experimental-libraries.cc
-GEN2 := $(intermediates)/experimental-libraries.cc
-$(GEN2): SCRIPT := $(intermediates)/js2c.py
+GEN2 := $(generated_sources)/experimental-libraries.cc
+$(GEN2): SCRIPT := $(generated_sources)/js2c.py
 $(GEN2): $(LOCAL_JS_EXPERIMENTAL_LIBRARY_FILES) $(JS2C_PY)
 	@echo "Generating experimental-libraries.cc"
 	@mkdir -p $(dir $@)
 	python $(SCRIPT) $(GEN2) EXPERIMENTAL off $(LOCAL_JS_EXPERIMENTAL_LIBRARY_FILES)
-V8_GENERATED_LIBRARIES += $(intermediates)/experimental-libraries.cc
+V8_GENERATED_LIBRARIES += $(generated_sources)/experimental-libraries.cc
 
 LOCAL_GENERATED_SOURCES += $(V8_GENERATED_LIBRARIES)
 
 # Generate snapshot.cc
 ifeq ($(ENABLE_V8_SNAPSHOT),true)
-SNAP_GEN := $(intermediates)/snapshot.cc
+
+SNAP_GEN := $(generated_sources)/snapshot_$(TARGET_ARCH).cc
 MKSNAPSHOT := $(HOST_OUT_EXECUTABLES)/mksnapshot.$(TARGET_ARCH)
-$(SNAP_GEN): PRIVATE_CUSTOM_TOOL = $(MKSNAPSHOT) --logfile $(intermediates)/v8.log $(SNAP_GEN)
+$(SNAP_GEN): PRIVATE_CUSTOM_TOOL = $(MKSNAPSHOT) --logfile $(generated_sources)/v8.log $(SNAP_GEN)
 $(SNAP_GEN): $(MKSNAPSHOT)
 	$(transform-generated-source)
-LOCAL_GENERATED_SOURCES += $(SNAP_GEN)
+LOCAL_GENERATED_SOURCES_$(TARGET_ARCH) += $(SNAP_GEN)
+
+ifdef TARGET_2ND_ARCH
+SNAP_GEN := $(generated_sources)/snapshot_$(TARGET_2ND_ARCH).cc
+MKSNAPSHOT := $(HOST_OUT_EXECUTABLES)/mksnapshot.$(TARGET_2ND_ARCH)
+$(SNAP_GEN): PRIVATE_CUSTOM_TOOL = $(MKSNAPSHOT) --logfile $(generated_sources)/v8.log $(SNAP_GEN)
+$(SNAP_GEN): $(MKSNAPSHOT)
+	$(transform-generated-source)
+LOCAL_GENERATED_SOURCES_$(TARGET_2ND_ARCH) += $(SNAP_GEN)
+endif # TARGET_2ND_ARCH
+
 else
 LOCAL_SRC_FILES += \
   src/snapshot-empty.cc
@@ -90,20 +96,14 @@
 	-DV8_NATIVE_REGEXP \
 	-Wno-unused-parameter
 
-ifeq ($(TARGET_ARCH),arm)
-	LOCAL_CFLAGS += -DARM -DV8_TARGET_ARCH_ARM
-endif
+LOCAL_CFLAGS_arm += -DARM -DV8_TARGET_ARCH_ARM
 
-ifeq ($(TARGET_ARCH),mips)
-	LOCAL_CFLAGS += -DV8_TARGET_ARCH_MIPS
-	LOCAL_CFLAGS += -Umips
-	LOCAL_CFLAGS += -finline-limit=64
-	LOCAL_CFLAGS += -fno-strict-aliasing
-endif
+LOCAL_CFLAGS_mips += -DV8_TARGET_ARCH_MIPS
+LOCAL_CFLAGS_mips += -Umips
+LOCAL_CFLAGS_mips += -finline-limit=64
+LOCAL_CFLAGS_mips += -fno-strict-aliasing
 
-ifeq ($(TARGET_ARCH),x86)
-	LOCAL_CFLAGS += -DV8_TARGET_ARCH_IA32
-endif
+LOCAL_CFLAGS_x86 += -DV8_TARGET_ARCH_IA32
 
 ifeq ($(DEBUG_V8),true)
 	LOCAL_CFLAGS += -DDEBUG -UNDEBUG
@@ -111,4 +111,6 @@
 
 LOCAL_C_INCLUDES += $(LOCAL_PATH)/src
 
+LOCAL_MODULE_TARGET_ARCH_WARN := $(V8_SUPPORTED_ARCH)
+
 include $(BUILD_STATIC_LIBRARY)