# 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.8
else
  ifeq ($(ARCH), android_arm64)
    DEFINES  = target_arch=arm64 v8_target_arch=arm64 android_target_arch=arm64 android_target_platform=L
    TOOLCHAIN_ARCH = aarch64-linux-android
    TOOLCHAIN_PREFIX = $(TOOLCHAIN_ARCH)
    TOOLCHAIN_VER = 4.9
  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.8

    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.8
      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.8
	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}
DEFINES += OS=android

.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:$(shell pwd)/build:$(PYTHONPATH)" \
	build/gyp/gyp --generator-output="${OUTDIR}" build/all.gyp \
	              -Ibuild/standalone.gypi --depth=. -Ibuild/android.gypi \
	              -S$(suffix $(basename $@))$(suffix $@) ${GYPFLAGS}
