# Build Android projects recursively

# Mandatory parameters:
# - LOCAL_NDK_PATH
# - LOCAL_PROJECTS
# Optional parameters:
# - LOCAL_PLATFORM_VERSION
# - LOCAL_OUT
# - LOCAL_NAME

_sdk_dir := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))

include $(_sdk_dir)/path-utilities.mk

ifeq ($(LOCAL_NDK_PATH),)
  $(error LOCAL_NDK_PATH is empty)
endif

ifeq ($(LOCAL_PROJECTS),)
  $(error LOCAL_PROJECTS is empty)
endif

ifeq ($(LOCAL_PLATFORM_VERSION),)
  LOCAL_PLATFORM_VERSION := android-21
endif

ifeq ($(LOCAL_OUT),)
  LOCAL_OUT := ./out/android
endif

# Remove a possible leading slash.
LOCAL_PROJECTS := $(LOCAL_PROJECTS:/=)

# Export CONFIG_ variables to make them visible in Android.mk/Application.mk.
$(foreach _config,$(filter CONFIG_%,$(.VARIABLES)), \
  $(eval export $(_config)))

.PHONY: build
build: _ndk_action =
build: $(LOCAL_PROJECTS)

.PHONY: clean
clean: _ndk_action = clean
clean: $(LOCAL_PROJECTS)

LOCAL_NAME := $(strip $(LOCAL_NAME))
ifneq ($(LOCAL_NAME),)
.PHONY: $(LOCAL_NAME)-clean
clean: $(LOCAL_NAME)-clean
$(LOCAL_NAME)-clean: _ndk_action = clean
$(LOCAL_NAME)-clean: $(LOCAL_PROJECTS)

.PHONY: $(LOCAL_NAME)
$(LOCAL_NAME): $(LOCAL_PROJECTS)
endif

.PHONY: $(LOCAL_PROJECTS)
$(LOCAL_PROJECTS): LOCAL_OUT := $(strip $(LOCAL_OUT))
ifneq ($(LOCAL_NAME),)
  $(LOCAL_PROJECTS): LOCAL_OUT := $(strip $(LOCAL_OUT)/$(LOCAL_NAME))
endif
$(LOCAL_PROJECTS): LOCAL_NDK_PATH := $(LOCAL_NDK_PATH)
$(LOCAL_PROJECTS): LOCAL_PLATFORM_VERSION := $(LOCAL_PLATFORM_VERSION)
$(LOCAL_PROJECTS):
	$(LOCAL_NDK_PATH:=/)ndk-build $(_ndk_action) \
		GNUMAKE=$(MAKE) $(filter -j,$(MAKEFLAGS)) $(filter --jobserver-fds=%,$(MAKEFLAGS)) \
		APP_PLATFORM=$(LOCAL_PLATFORM_VERSION) \
		NDK_PROJECT_PATH=$(@:/=) \
		NDK_LIBS_OUT=$(strip $(LOCAL_OUT)/$(@)) \
		NDK_OUT=$(strip $(LOCAL_OUT)/$(@)) \
		APP_BUILD_SCRIPT=$(@:/=)/Android.mk \
		NDK_APPLICATION_MK=$(@:/=)/Application.mk

#  NDK_DEBUG= \
#  NDK_APP_OUT=

##############
# Clear vars #
##############

include $(_sdk_dir)/clear-vars.mk
