16724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Copyright (C) 2010 The Android Open Source Project 26724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 36724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Licensed under the Apache License, Version 2.0 (the "License"); 46724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# you may not use this file except in compliance with the License. 56724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# You may obtain a copy of the License at 66724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 76724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# http://www.apache.org/licenses/LICENSE-2.0 86724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 96724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Unless required by applicable law or agreed to in writing, software 106724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# distributed under the License is distributed on an "AS IS" BASIS, 116724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 126724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# See the License for the specific language governing permissions and 136724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# limitations under the License. 146724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 156724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 166724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# This file is designed to be called from the 'ndk-build' script 176724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# or similar wrapper tool. 186724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 196724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 206724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Detect the NDK installation path by processing this Makefile's location. 216724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# This assumes we are located under $NDK_ROOT/build/core/main.mk 226724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 236724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_ROOT := $(dir $(lastword $(MAKEFILE_LIST))) 246724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_ROOT := $(strip $(NDK_ROOT:%build/core/=%)) 256724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_ROOT := $(NDK_ROOT:%/=%) 266724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifeq ($(NDK_ROOT),) 276724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner # for the case when we're invoked from the NDK install path 286724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner NDK_ROOT := . 296724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 306724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifdef NDK_LOG 316724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(info Android NDK: NDK installation path auto-detected: '$(NDK_ROOT)') 326724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 336724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifneq ($(words $(NDK_ROOT)),1) 346724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(info Android NDK: You NDK installation path contains spaces.) 356724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(info Android NDK: Please re-install to a different location to fix the issue !) 366724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(error Aborting.) 376724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 386724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 396724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerinclude $(NDK_ROOT)/build/core/init.mk 406724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 416724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ==================================================================== 426724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 43fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner# If NDK_PROJECT_PATH is not defined, find the application's project 44fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner# path by looking at the manifest file in the current directory or 45fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner# any of its parents. If none is found, try again with 'jni/Android.mk' 46fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner# 47fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner# It turns out that some people use ndk-build to generate static 48fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner# libraries without a full Android project tree. 496724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 506724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ==================================================================== 516724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 52fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turnerfind-project-dir = $(strip $(call find-project-dir-inner,$1,$2)) 536724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 546724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerfind-project-dir-inner = \ 55a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner $(eval __found_project_path := )\ 566724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(eval __find_project_path := $1)\ 57fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner $(eval __find_project_file := $2)\ 586724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call find-project-dir-inner-2)\ 59a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner $(__found_project_path) 606724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 616724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerfind-project-dir-inner-2 = \ 62fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner $(call ndk_log,Looking for $(__find_project_file) in $(__find_project_path))\ 63fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner $(eval __find_project_manifest := $(strip $(wildcard $(__find_project_path)/$(__find_project_file))))\ 646724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(if $(__find_project_manifest),\ 65a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner $(call ndk_log, Found it !)\ 66a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner $(eval __found_project_path := $(__find_project_path))\ 67a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner ,\ 686724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(eval __find_project_parent := $(patsubst %/,%,$(dir $(__find_project_path))))\ 696724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(if $(__find_project_parent),\ 706724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(eval __find_project_path := $(__find_project_parent))\ 716724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call find-project-dir-inner-2)\ 726724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner )\ 736724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ) 746724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 75fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' TurnerNDK_PROJECT_PATH := $(strip $(NDK_PROJECT_PATH)) 76fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turnerifndef NDK_PROJECT_PATH 77fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner NDK_PROJECT_PATH := $(call find-project-dir,$(strip $(shell pwd)),AndroidManifest.xml) 78fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turnerendif 79fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turnerifndef NDK_PROJECT_PATH 80fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner NDK_PROJECT_PATH := $(call find-project-dir,$(strip $(shell pwd)),jni/Android.mk) 81fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turnerendif 82a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turnerifndef NDK_PROJECT_PATH 83fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner $(call __ndk_info,Could not find application project directory !) 84fba9e492fc1bda504161a37225bd2ba05e1f4a2bDavid 'Digit' Turner $(call __ndk_info,Please define the NDK_PROJECT_PATH variable to point to it.) 856724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_error,Aborting) 866724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 876724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 886724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Check that there are no spaces in the project path, or bad things will happen 89a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turnerifneq ($(words $(NDK_PROJECT_PATH)),1) 90a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner $(call __ndk_info,Your Android application project path contains spaces: '$(NDK_PROJECT_PATH)') 916724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_info,The Android NDK build cannot work here. Please move your project to a different location.) 926724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_error,Aborting.) 936724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 946724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 95a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' TurnerNDK_APPLICATION_MK := $(strip $(wildcard $(NDK_PROJECT_PATH)/jni/Application.mk)) 966724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifndef NDK_APPLICATION_MK 976724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner NDK_APPLICATION_MK := $(NDK_ROOT)/build/core/default-application.mk 986724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 996724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 100a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner$(call ndk_log,Found project path: $(NDK_PROJECT_PATH)) 101a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner 1026724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Place all generated files here 103824b722a8b00de0cf6dcbd93015caf66cbf71c8aDavid 'Digit' TurnerNDK_APP_OUT := $(NDK_PROJECT_PATH)/obj 1046724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 1056724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Fake an application named 'local' 1066724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner_app := local 1076724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner_application_mk := $(NDK_APPLICATION_MK) 1086724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_APPS := $(_app) 1096724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 1106724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerinclude $(BUILD_SYSTEM)/add-application.mk 1116724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 112a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner# If a goal is DUMP_xxx then we dump a variable xxx instead 113a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner# of building anything 114a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner# 115a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' TurnerDUMP_VAR := $(patsubst DUMP_%,%,$(filter DUMP_%,$(MAKECMDGOALS))) 116a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' TurnerMAKECMDGOALS := $(filter-out DUMP_$(DUMP_VAR),$(MAKECMDGOALS)) 117a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner 118a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turnerifneq (,$(DUMP_VAR)) 119a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner 120a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner# We only support a single DUMP_XXX goal at a time for now. 121a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turnerifneq ($(words $(DUMP_VAR)),1) 122a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner $(call __ndk_error,!!TOO-MANY-DUMP-VARIABLES!!) 123a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turnerendif 124a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner 125a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner$(foreach _app,$(NDK_APPS),\ 126a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner $(eval include $(BUILD_SYSTEM)/setup-app.mk)\ 127a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner) 128a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner 129a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' TurnerDUMP_$(DUMP_VAR): 130a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner @echo $($(DUMP_VAR)) 131a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turnerelse 132a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner # Build it 133a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turner include $(BUILD_SYSTEM)/build-all.mk 134a08d605794902f5c7ed79b3d894adb722e1b6cacDavid 'Digit' Turnerendif 135