1# Copyright (C) 2009 The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14# 15 16# ==================================================================== 17# 18# Define the main configuration variables, and read the host-specific 19# configuration file that is normally generated by build/host-setup.sh 20# 21# ==================================================================== 22 23# Detect the NDK installation path by processing this Makefile's location. 24# This assumes we are located under $NDK_ROOT/build/core/main.mk 25# 26NDK_ROOT := $(lastword $(MAKEFILE_LIST)) 27NDK_ROOT := $(strip $(NDK_ROOT:%build/core/main.mk=%)) 28ifeq ($(NDK_ROOT),) 29 # for the case when we're invoked from the NDK install path 30 NDK_ROOT := . 31else 32 # get rid of trailing slash 33 NDK_ROOT := $(NDK_ROOT:%/=%) 34endif 35ifdef NDK_LOG 36 $(info Android NDK: NDK installation path auto-detected: '$(NDK_ROOT)') 37endif 38 39include $(NDK_ROOT)/build/core/init.mk 40 41# ==================================================================== 42# 43# Read all application configuration files 44# 45# Each 'application' must have a corresponding Application.mk file 46# located in apps/<name> where <name> is a liberal name that doesn't 47# contain any space in it, used to uniquely identify the 48# 49# See docs/ANDROID-MK.TXT for their specification. 50# 51# ==================================================================== 52 53NDK_ALL_APPS := 54NDK_APPS_ROOT := $(NDK_ROOT)/apps 55 56# Get the list of apps listed under apps/* 57NDK_APPLICATIONS := $(wildcard $(NDK_APPS_ROOT)/*) 58NDK_ALL_APPS := $(NDK_APPLICATIONS:$(NDK_APPS_ROOT)/%=%) 59 60# Check that APP is not empty 61APP := $(strip $(APP)) 62ifndef APP 63 $(call __ndk_info,\ 64 The APP variable is undefined or empty.) 65 $(call __ndk_info,\ 66 Please define it to one of: $(NDK_ALL_APPS)) 67 $(call __ndk_info,\ 68 You can also add new applications by writing an Application.mk file.) 69 $(call __ndk_info,\ 70 See docs/APPLICATION-MK.TXT for details.) 71 $(call __ndk_error, Aborting) 72endif 73 74# Check that all apps listed in APP do exist 75_bad_apps := $(strip $(filter-out $(NDK_ALL_APPS),$(APP))) 76ifdef _bad_apps 77 $(call __ndk_info,\ 78 APP variable defined to unknown applications: $(_bad_apps)) 79 $(call __ndk_info,\ 80 You might want to use one of the following: $(NDK_ALL_APPS)) 81 $(call __ndk_error, Aborting) 82endif 83 84# Check that all apps listed in APP have an Application.mk 85 86$(foreach _app,$(APP),\ 87 $(eval _application_mk := $(strip $(wildcard $(NDK_ROOT)/apps/$(_app)/Application.mk))) \ 88 $(call ndk_log,Parsing $(_application_mk))\ 89 $(if $(_application_mk),\ 90 $(eval include $(BUILD_SYSTEM)/add-application.mk)\ 91 ,\ 92 $(call __ndk_info,\ 93 Missing file: apps/$(_app)/Application.mk !)\ 94 $(call __ndk_error, Aborting)\ 95 )\ 96) 97 98# clean up environment, just to be safe 99$(call clear-vars, $(NDK_APP_VARS)) 100 101ifeq ($(strip $(NDK_ALL_APPS)),) 102 $(call __ndk_info,\ 103 The NDK could not find a proper application description under apps/*/Application.mk) 104 $(call __ndk_info,\ 105 Please follow the instructions in docs/NDK-APPS.TXT to write one.) 106 $(call __ndk_error, Aborting) 107endif 108 109# now check that APP doesn't contain an unknown app name 110# if it does, we ignore them if there is at least one known 111# app name in the list. Otherwise, abort with an error message 112# 113_unknown_apps := $(filter-out $(NDK_ALL_APPS),$(APP)) 114_known_apps := $(filter $(NDK_ALL_APPS),$(APP)) 115 116NDK_APPS := $(APP) 117 118$(if $(_unknown_apps),\ 119 $(if $(_known_apps),\ 120 $(call __ndk_info,WARNING:\ 121 Removing unknown names from APP variable: $(_unknown_apps))\ 122 $(eval NDK_APPS := $(_known_apps))\ 123 ,\ 124 $(call __ndk_info,\ 125 The APP variable contains unknown app names: $(_unknown_apps))\ 126 $(call __ndk_info,\ 127 Please use one of: $(NDK_ALL_APPS))\ 128 $(call __ndk_error, Aborting)\ 129 )\ 130) 131 132$(call __ndk_info,Building for application '$(NDK_APPS)') 133 134# Where all app-specific generated files will be stored 135NDK_APP_OUT := $(NDK_ROOT)/out/apps 136 137include $(BUILD_SYSTEM)/setup-imports.mk 138include $(BUILD_SYSTEM)/build-all.mk 139