1 # Copyright (C) 2009 The Android Open Source Project 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 # 15 16 # this script is included repeatedly by main.mk to add a new toolchain 17 # definition to the NDK build system. 18 # 19 # '_config_mk' must be defined as the path of a toolchain 20 # configuration file (config.mk) that will be included here. 21 # 22 $(call assert-defined, _config_mk) 23 24 # The list of variables that must or may be defined 25 # by the toolchain configuration file 26 # 27 NDK_TOOLCHAIN_VARS_REQUIRED := TOOLCHAIN_ABIS TOOLCHAIN_ARCH 28 NDK_TOOLCHAIN_VARS_OPTIONAL := 29 30 # Clear variables that are supposed to be defined by the config file 31 $(call clear-vars,$(NDK_TOOLCHAIN_VARS_REQUIRED)) 32 $(call clear-vars,$(NDK_TOOLCHAIN_VARS_OPTIONAL)) 33 34 # Include the config file 35 include $(_config_mk) 36 37 # Plug in the undefined 38 ifeq ($(TOOLCHAIN_ABIS)$(TOOLCHAIN_ARCH),) 39 ifeq (1,$(words $(filter-out $(NDK_KNOWN_ARCHS),$(NDK_FOUND_ARCHS)))) 40 TOOLCHAIN_ARCH := $(filter-out $(NDK_KNOWN_ARCHS),$(NDK_FOUND_ARCHS)) 41 TOOLCHAIN_ABIS := $(TOOLCHAIN_ARCH) $(NDK_KNOWN_ABIS:%=$(TOOLCHAIN_ARCH)%) $(NDK_KNOWN_ABIS:%=$(TOOLCHAIN_ARCH)bc%) 42 endif 43 endif 44 45 ifeq ($(TOOLCHAIN_ABIS)$(TOOLCHAIN_ARCH),) 46 # Ignore if both TOOLCHAIN_ABIS and TOOLCHAIN_ARCH are not defined 47 else 48 49 # Check that the proper variables were defined 50 $(call check-required-vars,$(NDK_TOOLCHAIN_VARS_REQUIRED),$(_config_mk)) 51 52 # Check that the file didn't do something stupid 53 $(call assert-defined, _config_mk) 54 55 # Now record the toolchain-specific information 56 _dir := $(patsubst %/,%,$(dir $(_config_mk))) 57 _name := $(notdir $(_dir)) 58 _arch := $(TOOLCHAIN_ARCH) 59 _abis := $(TOOLCHAIN_ABIS) 60 61 _toolchain := NDK_TOOLCHAIN.$(_name) 62 63 # check that the toolchain name is unique 64 $(if $(strip $($(_toolchain).defined)),\ 65 $(call __ndk_error,Toolchain $(_name) defined in $(_parent) is\ 66 already defined in $(NDK_TOOLCHAIN.$(_name).defined))) 67 68 $(_toolchain).defined := $(_toolchain_config) 69 $(_toolchain).arch := $(_arch) 70 $(_toolchain).abis := $(_abis) 71 $(_toolchain).setup := $(wildcard $(_dir)/setup.mk) 72 73 $(if $(strip $($(_toolchain).setup)),,\ 74 $(call __ndk_error, Toolchain $(_name) lacks a setup.mk in $(_dir))) 75 76 NDK_ALL_TOOLCHAINS += $(_name) 77 NDK_ALL_ARCHS += $(_arch) 78 NDK_ALL_ABIS += $(_abis) 79 80 # NDK_ABI.<abi>.toolchains records the list of toolchains that support 81 # a given ABI 82 # 83 $(foreach _abi,$(_abis),\ 84 $(eval NDK_ABI.$(_abi).toolchains += $(_name)) \ 85 $(eval NDK_ABI.$(_abi).arch := $(sort $(NDK_ABI.$(_abi).arch) $(_arch)))\ 86 ) 87 88 NDK_ARCH.$(_arch).toolchains += $(_name) 89 NDK_ARCH.$(_arch).abis := $(sort $(NDK_ARCH.$(_arch).abis) $(_abis)) 90 91 endif 92 93 # done 94