setup-app.mk 3.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 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.
#

16
# this file is included repeatedly from build/core/main.mk
17 18 19 20 21
# and is used to prepare for app-specific build rules.
#

$(call assert-defined,_app)

22 23
_map := NDK_APP.$(_app)

24 25 26 27 28 29 30
# ok, let's parse all Android.mk source files in order to build
# the modules for this app.
#

# Restore the APP_XXX variables just for this pass as NDK_APP_XXX
#
NDK_APP_NAME           := $(_app)
31
NDK_APP_APPLICATION_MK := $(call get,$(_map),Application.mk)
32 33

$(foreach __name,$(NDK_APP_VARS),\
34
  $(eval NDK_$(__name) := $(call get,$(_map),$(__name)))\
35 36
)

37 38 39
# set release/debug build flags. We always use the -g flag because
# we generate symbol versions of the binaries that are later stripped
# when they are copied to the final project's libs/<abi> directory.
40 41
#
ifeq ($(NDK_APP_OPTIM),debug)
42
  NDK_APP_CFLAGS := -O0 -g $(NDK_APP_CFLAGS)
43
else
44
  NDK_APP_CFLAGS := -O2 -DNDEBUG -g $(NDK_APP_CFLAGS)
45 46 47 48 49 50 51
endif

# make the application depend on the modules it requires
.PHONY: ndk-app-$(_app)
ndk-app-$(_app): $(NDK_APP_MODULES)
all: ndk-app-$(_app)

52 53 54
# which platform/abi/toolchain are we going to use?
TARGET_PLATFORM := $(call get,$(_map),APP_PLATFORM)

55
# The ABI(s) to use
56
APP_ABI := $(strip $(NDK_APP_ABI))
57 58 59 60 61 62 63 64 65 66 67 68 69
ifndef APP_ABI
    # the default ABI for now is armeabi
    APP_ABI := armeabi
endif

# check the target ABIs for this application
_bad_abis = $(strip $(filter-out $(NDK_ALL_ABIS),$(APP_ABI)))
ifneq ($(_bad_abis),)
    $(call __ndk_info,NDK Application '$(_app)' targets unknown ABI(s): $(_bad_abis))
    $(call __ndk_info,Please fix the APP_ABI definition in $(NDK_APP_APPLICATION_MK))
    $(call __ndk_error,Aborting)
endif

70 71 72 73 74 75 76 77
# Extract the debuggable flag from the application's manifest
# NOTE: To make unit-testing simpler, handle the case where there is no manifest.
#
NDK_APP_DEBUGGABLE := false
NDK_APP_MANIFEST := $(strip $(wildcard $(NDK_APP_PROJECT_PATH)/AndroidManifest.xml))
ifdef NDK_APP_MANIFEST
    NDK_APP_DEBUGGABLE := $(shell $(HOST_AWK) -f $(BUILD_SYSTEM)/extract-package-debuggable.awk $(NDK_APP_MANIFEST))
endif
78

79 80 81 82 83 84 85 86
ifdef NDK_LOG
  ifeq ($(NDK_APP_DEBUGGABLE),true)
    $(call ndk_log,Application '$(_app)' *is* debuggable)
  else
    $(call ndk_log,Application '$(_app)' is not debuggable)
  endif
endif

87 88 89 90 91
# Clear all installed binaries for this application
# This ensures that if the build fails, you're not going to mistakenly
# package an obsolete version of it. Or if you change the ABIs you're targetting,
# you're not going to leave a stale shared library for the old one.
#
David Turner's avatar
David Turner committed
92 93 94 95 96
ifeq ($(NDK_APP.$(_app).cleaned_binaries),)
    NDK_APP.$(_app).cleaned_binaries := true
    clean-installed-binaries: clean-installed-binaries-for-$(_app)
    .PHONY: clean-installed-binaries-for-$(_app)
    clean-installed-binaries-for-$(_app):
97
	$(hide) rm -f $(NDK_ALL_ABIS:%=$(NDK_APP_PROJECT_PATH)/libs/%/lib*.so) $(NDK_ALL_ABIS:%=$(NDK_APP_PROJECT_PATH)/libs/%/gdbserver)
98 99
endif

100 101 102 103
$(foreach _abi,$(APP_ABI),\
    $(eval TARGET_ARCH_ABI := $(_abi))\
    $(eval include $(BUILD_SYSTEM)/setup-abi.mk) \
)