16724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Copyright (C) 2009-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# Initialization of the NDK build system. This file is included by 176724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# several build scripts. 186724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 196724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 206724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Define NDK_LOG in your environment to display log traces when 216724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# using the build scripts. See also the definition of ndk_log below. 226724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 236724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_LOG := $(strip $(NDK_LOG)) 246724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 256724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Check that we have at least GNU Make 3.81 266724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# We do this by detecting whether 'lastword' is supported 276724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 286724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerMAKE_TEST := $(lastword a b c d e f) 296724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifneq ($(MAKE_TEST),f) 306724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(error Android NDK: GNU Make version $(MAKE_VERSION) is too low (should be >= 3.81) 316724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 326724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifdef NDK_LOG 336724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(info Android NDK: GNU Make version $(MAKE_VERSION) detected) 346724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 356724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 366724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# NDK_ROOT *must* be defined and point to the root of the NDK installation 376724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_ROOT := $(strip $(NDK_ROOT)) 386724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifndef NDK_ROOT 396724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(error ERROR while including init.mk: NDK_ROOT must be defined !) 406724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 416724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifneq ($(words $(NDK_ROOT)),1) 426724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(info,The Android NDK installation path contains spaces: '$(NDK_ROOT)') 436724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(error,Please fix the problem by reinstalling to a different location.) 446724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 456724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 466724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ==================================================================== 476724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 486724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Define a few useful variables and functions. 496724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# More stuff will follow in definitions.mk. 506724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 516724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ==================================================================== 526724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 536724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Used to output warnings and error from the library, it's possible to 546724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# disable any warnings or errors by overriding these definitions 556724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# manually or by setting NDK_NO_WARNINGS or NDK_NO_ERRORS 566724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 576724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner__ndk_name := Android NDK 586724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner__ndk_info = $(info $(__ndk_name): $1 $2 $3 $4 $5) 596724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner__ndk_warning = $(warning $(__ndk_name): $1 $2 $3 $4 $5) 606724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner__ndk_error = $(error $(__ndk_name): $1 $2 $3 $4 $5) 616724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 626724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifdef NDK_NO_WARNINGS 636724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner__ndk_warning := 646724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 656724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifdef NDK_NO_ERRORS 666724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner__ndk_error := 676724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 686724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 696724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ----------------------------------------------------------------------------- 706724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Function : ndk_log 716724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Arguments: 1: text to print when NDK_LOG is defined 726724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Returns : None 736724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Usage : $(call ndk_log,<some text>) 746724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ----------------------------------------------------------------------------- 756724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifdef NDK_LOG 766724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerndk_log = $(info $(__ndk_name): $1) 776724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerelse 786724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerndk_log := 796724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 806724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 816724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ==================================================================== 826724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 836724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Host system auto-detection. 846724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 856724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ==================================================================== 866724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 876724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 886724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Determine host system and architecture from the environment 896724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 906724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerHOST_OS := $(strip $(HOST_OS)) 916724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifndef HOST_OS 926724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner # On all modern variants of Windows (including Cygwin and Wine) 936724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner # the OS environment variable is defined to 'Windows_NT' 946724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner # 956724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner # The value of PROCESSOR_ARCHITECTURE will be x86 or AMD64 966724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner # 976724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ifeq ($(OS),Windows_NT) 986724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner HOST_OS := windows 996724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner else 1006724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner # For other systems, use the `uname` output 1016724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner UNAME := $(shell uname -s) 1026724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ifneq (,$(findstring Linux,$(UNAME))) 1036724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner HOST_OS := linux 1046724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner endif 1056724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ifneq (,$(findstring Darwin,$(UNAME))) 1066724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner HOST_OS := darwin 1076724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner endif 1086724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner # We should not be there, but just in case ! 1096724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ifneq (,$(findstring CYGWIN,$(UNAME))) 1106724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner HOST_OS := windows 1116724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner endif 1126724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ifeq ($(HOST_OS),) 1136724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_info,Unable to determine HOST_OS from uname -s: $(UNAME)) 1146724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_info,Please define HOST_OS in your environment.) 1156724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_error,Aborting.) 1166724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner endif 1176724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner endif 1186724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call ndk_log,Host OS was auto-detected: $(HOST_OS)) 1196724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerelse 1206724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call ndk_log,Host OS from environment: $(HOST_OS)) 1216724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 1226724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 1236724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerHOST_ARCH := $(strip $(HOST_ARCH)) 1246724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifndef HOST_ARCH 1256724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ifeq ($(HOST_OS),windows) 1266724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner HOST_ARCH := $(PROCESSOR_ARCHITECTURE) 1276724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ifeq ($(HOST_ARCH),AMD64) 1286724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner HOST_ARCH := x86 1296724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner endif 1306724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner else # HOST_OS != windows 1316724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner UNAME := $(shell uname -m) 1326724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ifneq (,$(findstring 86,$(UNAME))) 1336724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner HOST_ARCH := x86 1346724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner endif 1356724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner # We should probably should not care at all 1366724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ifneq (,$(findstring Power,$(UNAME))) 1376724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner HOST_ARCH := ppc 1386724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner endif 1396724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ifeq ($(HOST_ARCH),) 1406724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_info,Unsupported host architecture: $(UNAME)) 1416724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_error,Aborting) 1426724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner endif 1436724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner endif # HOST_OS != windows 1446724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call ndk_log,Host CPU was auto-detected: $(HOST_ARCH)) 1456724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerelse 1466724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call ndk_log,Host CPU from environment: $(HOST_ARCH)) 1476724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 1486724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 1496724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerHOST_TAG := $(HOST_OS)-$(HOST_ARCH) 15076370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner 15176370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner# If we are on Windows, we need to check that we are not running 15276370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner# Cygwin 1.5, which is deprecated and won't run our toolchain 15376370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner# binaries properly. 15476370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner# 15576370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turnerifeq ($(HOST_TAG),windows-x86) 15676370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner # On cygwin, 'uname -r' returns something like 1.5.23(0.225/5/3) 15776370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner # We recognize 1.5. as the prefix to look for then. 15876370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner CYGWIN_VERSION := $(shell uname -r) 15976370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner ifneq ($(filter XX1.5.%,XX$(CYGWIN_VERSION)),) 16076370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner $(call __ndk_info,You seem to be running Cygwin 1.5, which is not supported.) 16176370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner $(call __ndk_info,Please upgrade to Cygwin 1.7 or higher.) 16276370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner $(call __ndk_error,Aborting.) 16376370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner endif 16476370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner # special-case the host-tag 16576370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turner HOST_TAG := windows 16676370ba56008e8d7fccd217bb6ca5cf02867d1b7David 'Digit' Turnerendif 1676724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner$(call ndk_log,HOST_TAG set to $(HOST_TAG)) 1686724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 1696724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 1706724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Verify that the 'awk' tool has the features we need. 1716724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Both Nawk and Gawk do. 1726724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 1736724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerHOST_AWK := $(strip $(HOST_AWK)) 1746724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifndef HOST_AWK 1756724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner HOST_AWK := awk 1766724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call ndk_log,Host awk tool was auto-detected: $(HOST_AWK)) 1776724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerelse 1786724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call ndk_log,Host awk tool from environment: $(HOST_AWK)) 1796724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 1806724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 1810b2676bac67c271de9989357f6e3b2e762a7adf1David 'Digit' Turner# Location of all awk scripts we use 1820b2676bac67c271de9989357f6e3b2e762a7adf1David 'Digit' TurnerBUILD_AWK := $(NDK_ROOT)/build/awk 1830b2676bac67c271de9989357f6e3b2e762a7adf1David 'Digit' Turner 1840b2676bac67c271de9989357f6e3b2e762a7adf1David 'Digit' TurnerAWK_TEST := $(shell $(HOST_AWK) -f $(BUILD_AWK)/check-awk.awk) 1856724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner$(call ndk_log,Host awk test returned: $(AWK_TEST)) 1866724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifneq ($(AWK_TEST),Pass) 1876724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_info,Host awk tool is outdated. Please define HOST_AWK to point to Gawk or Nawk !) 1886724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_error,Aborting.) 1896724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 1906724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 1916724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# The location of the build system files 1926724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerBUILD_SYSTEM := $(NDK_ROOT)/build/core 1936724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 1946724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Include common definitions 1956724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerinclude $(BUILD_SYSTEM)/definitions.mk 1966724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 1976724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Location where all prebuilt binaries for a given host architectures 1986724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# will be stored. 1996724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerHOST_PREBUILT := $(NDK_ROOT)/build/prebuilt/$(HOST_TAG) 2006724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2016724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ==================================================================== 2026724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 2036724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Read all toolchain-specific configuration files. 2046724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 2056724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Each toolchain must have a corresponding config.mk file located 2066724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# in build/toolchains/<name>/ that will be included here. 2076724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 2086724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Each one of these files should define the following variables: 2096724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# TOOLCHAIN_NAME toolchain name (e.g. arm-eabi-4.2.1) 2106724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# TOOLCHAIN_ABIS list of target ABIs supported by the toolchain. 2116724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 2126724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Then, it should include $(ADD_TOOLCHAIN) which will perform 2136724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# book-keeping for the build system. 2146724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 2156724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ==================================================================== 2166724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2176724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# the build script to include in each toolchain config.mk 2186724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerADD_TOOLCHAIN := $(BUILD_SYSTEM)/add-toolchain.mk 2196724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2206724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# the list of all toolchains in this NDK 2216724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_ALL_TOOLCHAINS := 2226724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_ALL_ABIS := 2236724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2246724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerTOOLCHAIN_CONFIGS := $(wildcard $(NDK_ROOT)/build/toolchains/*/config.mk) 2256724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner$(foreach _config_mk,$(TOOLCHAIN_CONFIGS),\ 2266724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(eval include $(BUILD_SYSTEM)/add-toolchain.mk)\ 2276724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner) 2286724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2296724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_ALL_TOOLCHAINS := $(call uniq,$(NDK_ALL_TOOLCHAINS)) 2306724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_ALL_ABIS := $(call uniq,$(NDK_ALL_ABIS)) 2316724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2326724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# The default toolchain is now arm-eabi-4.4.0, however its 2336724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# C++ compiler is a tad bit more pedantic with certain 2346724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# constructs (e.g. templates) so allow users to switch back 2356724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# to the old 4.2.1 instead if they really want to. 2366724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 2376724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# NOTE: you won't get armeabi-v7a support though ! 2386724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 2396724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_TOOLCHAIN := $(strip $(NDK_TOOLCHAIN)) 2406724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerifdef NDK_TOOLCHAIN 2416724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner # check that the toolchain name is supported 2426724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(if $(filter-out $(NDK_ALL_TOOLCHAINS),$(NDK_TOOLCHAIN)),\ 2436724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_info,NDK_TOOLCHAIN is defined to the unsupported value $(NDK_TOOLCHAIN)) \ 2446724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_info,Please use one of the following values: $(NDK_ALL_TOOLCHAINS))\ 2456724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call __ndk_error,Aborting)\ 2466724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner ,) 2476724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call ndk_log, Using specific toolchain $(NDK_TOOLCHAIN)) 2486724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turnerendif 2496724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2506724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner$(call ndk_log, This NDK supports the following toolchains and target ABIs:) 2516724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner$(foreach tc,$(NDK_ALL_TOOLCHAINS),\ 2526724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(call ndk_log, $(space)$(space)$(tc): $(NDK_TOOLCHAIN.$(tc).abis))\ 2536724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner) 2546724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2556724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ==================================================================== 2566724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 2576724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Read all platform-specific configuration files. 2586724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 2596724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# Each platform must be located in build/platforms/android-<apilevel> 2606724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# where <apilevel> corresponds to an API level number, with: 2616724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 3 -> Android 1.5 2626724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 4 -> next platform release 2636724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# 2646724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ==================================================================== 2656724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2666724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_PLATFORMS_ROOT := $(NDK_ROOT)/build/platforms 2676724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_ALL_PLATFORMS := $(strip $(notdir $(wildcard $(NDK_PLATFORMS_ROOT)/android-*))) 2686724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner$(call ndk_log,Found supported platforms: $(NDK_ALL_PLATFORMS)) 2696724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2706724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner$(foreach _platform,$(NDK_ALL_PLATFORMS),\ 2716724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(eval include $(BUILD_SYSTEM)/add-platform.mk)\ 2726724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner) 2736724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2746724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# we're going to find the maximum platform number of the form android-<number> 2756724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner# ignore others, which could correspond to special and experimental cases 2766724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_ALL_PLATFORM_LEVELS := $(filter android-%,$(NDK_ALL_PLATFORMS)) 2776724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_ALL_PLATFORM_LEVELS := $(patsubst android-%,%,$(NDK_ALL_PLATFORM_LEVELS)) 2786724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner$(call ndk_log,Found stable platform levels: $(NDK_ALL_PLATFORM_LEVELS)) 2796724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 2806724aaa2876f40ad270823bc933edf7552f67436David 'Digit' TurnerNDK_MAX_PLATFORM_LEVEL := 3 2816724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner$(foreach level,$(NDK_ALL_PLATFORM_LEVELS),\ 2826724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner $(eval NDK_MAX_PLATFORM_LEVEL := $$(call max,$$(NDK_MAX_PLATFORM_LEVEL),$$(level)))\ 2836724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner) 2846724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner$(call ndk_log,Found max platform level: $(NDK_MAX_PLATFORM_LEVEL)) 2856724aaa2876f40ad270823bc933edf7552f67436David 'Digit' Turner 286