# Copyright 2012 the V8 project authors. All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
#       copyright notice, this list of conditions and the following
#       disclaimer in the documentation and/or other materials provided
#       with the distribution.
#     * Neither the name of Google Inc. nor the names of its
#       contributors may be used to endorse or promote products derived
#       from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Those definitions should be consistent with the main Makefile
ANDROID_ARCHES = android_ia32 android_arm android_arm64 android_mipsel android_x87
MODES = release debug

# Generates all combinations of ANDROID ARCHES and MODES,
# e.g. "android_ia32.release" or "android_arm.release"
ANDROID_BUILDS = $(foreach mode,$(MODES), \
                   $(addsuffix .$(mode),$(ANDROID_ARCHES)))

HOST_OS = $(shell uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')
ANDROID_NDK_HOST_ARCH ?= $(shell uname -m | sed -e 's/i[3456]86/x86/')
ifeq ($(HOST_OS), linux)
  TOOLCHAIN_DIR = linux-$(ANDROID_NDK_HOST_ARCH)
else
  ifeq ($(HOST_OS), mac)
    TOOLCHAIN_DIR = darwin-$(ANDROID_NDK_HOST_ARCH)
  else
    $(error Host platform "${HOST_OS}" is not supported)
  endif
endif

ifeq ($(ARCH), android_arm)
  DEFINES  = target_arch=arm v8_target_arch=arm android_target_arch=arm android_target_platform=14
  DEFINES += arm_neon=0 arm_version=7
  TOOLCHAIN_ARCH = arm-linux-androideabi
  TOOLCHAIN_PREFIX = $(TOOLCHAIN_ARCH)
  TOOLCHAIN_VER = 4.6
else
  ifeq ($(ARCH), android_arm64)
    DEFINES  = target_arch=arm64 v8_target_arch=arm64 android_target_arch=arm64 android_target_platform=20
    TOOLCHAIN_ARCH = aarch64-linux-android
    TOOLCHAIN_PREFIX = $(TOOLCHAIN_ARCH)
    TOOLCHAIN_VER = 4.8
  else
    ifeq ($(ARCH), android_mipsel)
      DEFINES  = target_arch=mipsel v8_target_arch=mipsel android_target_platform=14
      DEFINES += android_target_arch=mips mips_arch_variant=mips32r2
      TOOLCHAIN_ARCH = mipsel-linux-android
      TOOLCHAIN_PREFIX = $(TOOLCHAIN_ARCH)
      TOOLCHAIN_VER = 4.6

    else
      ifeq ($(ARCH), android_ia32)
        DEFINES = target_arch=ia32 v8_target_arch=ia32 android_target_arch=x86 android_target_platform=14
        TOOLCHAIN_ARCH = x86
        TOOLCHAIN_PREFIX = i686-linux-android
        TOOLCHAIN_VER = 4.6
      else
        ifeq ($(ARCH), android_x87)
          DEFINES = target_arch=x87 v8_target_arch=x87 android_target_arch=x86 android_target_platform=14
          TOOLCHAIN_ARCH = x86
          TOOLCHAIN_PREFIX = i686-linux-android
          TOOLCHAIN_VER = 4.6
	else
          $(error Target architecture "${ARCH}" is not supported)
        endif
      endif
    endif
  endif
endif

TOOLCHAIN_PATH = \
    ${ANDROID_NDK_ROOT}/toolchains/${TOOLCHAIN_ARCH}-${TOOLCHAIN_VER}/prebuilt
ANDROID_TOOLCHAIN ?= ${TOOLCHAIN_PATH}/${TOOLCHAIN_DIR}

ifeq ($(wildcard $(ANDROID_TOOLCHAIN)),)
  $(error Cannot find Android toolchain in "${ANDROID_TOOLCHAIN}".  Please \
          check that ANDROID_NDK_ROOT and ANDROID_NDK_HOST_ARCH are set    \
          correctly)
endif

# For mksnapshot host generation.
DEFINES += host_os=${HOST_OS}

.SECONDEXPANSION:
$(ANDROID_BUILDS): $(OUTDIR)/Makefile.$$@
	@$(MAKE) -C "$(OUTDIR)" -f Makefile.$@ \
	          CXX="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_PREFIX}-g++" \
	          AR="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_PREFIX}-ar" \
	          RANLIB="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_PREFIX}-ranlib" \
	          CC="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_PREFIX}-gcc" \
	          LD="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_PREFIX}-ld" \
	          LINK="$(ANDROID_TOOLCHAIN)/bin/${TOOLCHAIN_PREFIX}-g++" \
	          BUILDTYPE=$(shell echo $(subst .,,$(suffix $@)) | \
	                      python -c "print raw_input().capitalize()") \
	          builddir="$(shell pwd)/$(OUTDIR)/$@"

# Android GYP file generation targets.
ANDROID_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(ANDROID_BUILDS))
$(ANDROID_MAKEFILES):
	GYP_GENERATORS=make-android \
	GYP_DEFINES="${DEFINES}" \
	CC="${ANDROID_TOOLCHAIN}/bin/${TOOLCHAIN_PREFIX}-gcc" \
	CXX="${ANDROID_TOOLCHAIN}/bin/${TOOLCHAIN_PREFIX}-g++" \
	PYTHONPATH="$(shell pwd)/tools/generate_shim_headers:$(PYTHONPATH)" \
	build/gyp/gyp --generator-output="${OUTDIR}" build/all.gyp \
	              -Ibuild/standalone.gypi --depth=. -Ibuild/android.gypi \
	              -S$(suffix $(basename $@))$(suffix $@) ${GYPFLAGS}
