# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ====================================================================
#
# Define the main configuration variables, and read the host-specific
# configuration file that is normally generated by build/host-setup.sh
#
# ====================================================================
# Detect the NDK installation path by processing this Makefile's location.
# This assumes we are located under $NDK_ROOT/build/core/main.mk
#
NDK_ROOT := $(lastword $(MAKEFILE_LIST))
NDK_ROOT := $(strip $(NDK_ROOT:%build/core/main.mk=%))
ifeq ($(NDK_ROOT),)
# for the case when we're invoked from the NDK install path
NDK_ROOT := .
else
# get rid of trailing slash
NDK_ROOT := $(NDK_ROOT:%/=%)
endif
ifeq ($(NDK_LOG),1)
$(info Android NDK: NDK installation path auto-detected: '$(NDK_ROOT)')
endif
include $(NDK_ROOT)/build/core/init.mk
# ====================================================================
#
# Read all application configuration files
#
# Each 'application' must have a corresponding Application.mk file
# located in apps/<name> where <name> is a liberal name that doesn't
# contain any space in it, used to uniquely identify the
#
# See docs/ANDROID-MK.TXT for their specification.
#
# ====================================================================
NDK_ALL_APPS :=
NDK_APPS_ROOT := $(NDK_ROOT)/apps
# Get the list of apps listed under apps/*
NDK_APPLICATIONS := $(wildcard $(NDK_APPS_ROOT)/*)
NDK_ALL_APPS := $(NDK_APPLICATIONS:$(NDK_APPS_ROOT)/%=%)
# Check that APP is not empty
APP := $(strip $(APP))
ifndef APP
$(call __ndk_info,\
The APP variable is undefined or empty.)
$(call __ndk_info,\
Please define it to one of: $(NDK_ALL_APPS))
$(call __ndk_info,\
You can also add new applications by writing an Application.mk file.)
$(call __ndk_info,\
See docs/APPLICATION-MK.TXT for details.)
$(call __ndk_error, Aborting)
endif
# Check that all apps listed in APP do exist
_bad_apps := $(strip $(filter-out $(NDK_ALL_APPS),$(APP)))
ifdef _bad_apps
$(call __ndk_info,\
APP variable defined to unknown applications: $(_bad_apps))
$(call __ndk_info,\
You might want to use one of the following: $(NDK_ALL_APPS))
$(call __ndk_error, Aborting)
endif
# Check that all apps listed in APP have an Application.mk
$(foreach _app,$(APP),\
$(eval _application_mk := $(strip $(wildcard $(NDK_ROOT)/apps/$(_app)/Application.mk))) \
$(call ndk_log,Parsing $(_application_mk))\
$(if $(_application_mk),\
$(eval include $(BUILD_SYSTEM)/add-application.mk)\
,\
$(call __ndk_info,\
Missing file: apps/$(_app)/Application.mk !)\
$(call __ndk_error, Aborting)\
)\
)
# clean up environment, just to be safe
$(call clear-vars, $(NDK_APP_VARS))
ifeq ($(strip $(NDK_ALL_APPS)),)
$(call __ndk_info,\
The NDK could not find a proper application description under apps/*/Application.mk)
$(call __ndk_info,\
Please follow the instructions in docs/NDK-APPS.TXT to write one.)
$(call __ndk_error, Aborting)
endif
# now check that APP doesn't contain an unknown app name
# if it does, we ignore them if there is at least one known
# app name in the list. Otherwise, abort with an error message
#
_unknown_apps := $(filter-out $(NDK_ALL_APPS),$(APP))
_known_apps := $(filter $(NDK_ALL_APPS),$(APP))
NDK_APPS := $(APP)
$(if $(_unknown_apps),\
$(if $(_known_apps),\
$(call __ndk_info,WARNING:\
Removing unknown names from APP variable: $(_unknown_apps))\
$(eval NDK_APPS := $(_known_apps))\
,\
$(call __ndk_info,\
The APP variable contains unknown app names: $(_unknown_apps))\
$(call __ndk_info,\
Please use one of: $(NDK_ALL_APPS))\
$(call __ndk_error, Aborting)\
)\
)
$(call __ndk_info,Building for application '$(NDK_APPS)')
# Where all app-specific generated files will be stored
NDK_APP_OUT := $(NDK_ROOT)/out/apps
include $(BUILD_SYSTEM)/setup-imports.mk
include $(BUILD_SYSTEM)/build-all.mk