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