| # 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 |
| ifdef NDK_LOG |
| $(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 |