138 lines
4.5 KiB
Makefile
138 lines
4.5 KiB
Makefile
# 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
|