• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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