1# 2# Copyright (c) 2020, Google, Inc. All rights reserved 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16 17# Recursively ensure that dependencies are built and include their flags + 18# includes in the current module's build. This file isolates dependencies from 19# their parent module's and the global state, allowing each library to be built 20# independently. 21# 22# args: 23# MODULE : Current module name (required) 24# 25# DEPENDENCY_MODULE : Dependency to build. 26# OR 27# EXPORT_DEPENDENCY_MODULE : Dependency to build, flags exported by the 28# dependency will be re-exported from the current module. 29# 30# This file extends the current MODULE_* flags with $(DEPENDENCY_MODULE)'s 31# MODULE_EXPORT_* flags. In the case of EXPORT_DEPENDENCY_MODULE, the 32# dependency's flags will also be appended to the current MODULE_EXPORT_* flags. 33 34ifneq ($(strip $(DEPENDENCY_MODULE)),) 35ifneq ($(strip $(EXPORT_DEPENDENCY_MODULE)),) 36$(error DEPENDENCY_MODULE and EXPORT_DEPENDENCY_MODULE are mutually exclusive. Please set one or the other when adding dependencies to $(MODULE).) 37endif 38endif 39 40ifneq ($(strip $(EXPORT_DEPENDENCY_MODULE)),) 41DEPENDENCY_MODULE := $(EXPORT_DEPENDENCY_MODULE) 42endif 43 44ifeq ($(strip $(DEPENDENCY_MODULE_PATH)),) 45DEPENDENCY_MODULE_PATH := $(DEPENDENCY_MODULE) 46endif 47 48$(call INFO,$(MODULE),processing dependencies,$(DEPENDENCY_MODULE)) 49 50# SAVED_MODULE_STACK contains a stack of the current dependency chain. We need 51# to recursively keep track of this chain so that we can restore our parent 52# modules private flags after adding our exported flags (and rules if not 53# already emitted). 54ifeq ($(filter $(MODULE),$(SAVED_MODULE_STACK)),) 55ifeq ($(_MODULES_$(DEPENDENCY_MODULE)),) 56 57# Cache our current state, as it will get wiped out when including dependencies 58# in recurse-lib-deps. This must be module-specific as we can have a multi-layer 59# chain and these variable are globally scoped. 60SAVED_MODULE_STACK := $(SAVED_MODULE_STACK) $(MODULE) 61SAVED_$(MODULE)_SRCS := $(MODULE_SRCS) 62SAVED_$(MODULE)_SRCS_FIRST := $(MODULE_SRCS_FIRST) 63SAVED_$(MODULE)_STATIC_LIB := $(MODULE_STATIC_LIB) 64SAVED_$(MODULE)_DEPS := $(MODULE_DEPS) 65SAVED_$(MODULE)_LIBRARIES := $(MODULE_LIBRARIES) 66SAVED_$(MODULE)_RLIBS := $(MODULE_RLIBS) 67SAVED_$(MODULE)_LIBRARY_DEPS := $(MODULE_LIBRARY_DEPS) 68SAVED_$(MODULE)_LIBRARY_EXPORTED_DEPS := $(MODULE_LIBRARY_EXPORTED_DEPS) 69SAVED_$(MODULE)_LICENSES := $(MODULE_LICENSES) 70SAVED_$(MODULE)_ADD_IMPLICIT_DEPS := $(MODULE_ADD_IMPLICIT_DEPS) 71SAVED_$(MODULE)_USE_WHOLE_ARCHIVE := $(MODULE_USE_WHOLE_ARCHIVE) 72SAVED_$(MODULE)_DEFINES := $(MODULE_DEFINES) 73SAVED_$(MODULE)_COMPILEFLAGS := $(MODULE_COMPILEFLAGS) 74SAVED_$(MODULE)_CONSTANTS := $(MODULE_CONSTANTS) 75SAVED_$(MODULE)_CFLAGS := $(MODULE_CFLAGS) 76SAVED_$(MODULE)_CPPFLAGS := $(MODULE_CPPFLAGS) 77SAVED_$(MODULE)_ASMFLAGS := $(MODULE_ASMFLAGS) 78SAVED_$(MODULE)_LDFLAGS := $(MODULE_LDFLAGS) 79SAVED_$(MODULE)_RUSTFLAGS := $(MODULE_RUSTFLAGS) 80SAVED_$(MODULE)_RUSTDOCFLAGS := $(MODULE_RUSTDOCFLAGS) 81SAVED_$(MODULE)_SKIP_DOCS := $(MODULE_SKIP_DOCS) 82SAVED_$(MODULE)_DISABLED := $(MODULE_DISABLED) 83SAVED_$(MODULE)_RUSTDOC_OBJECT := $(MODULE_RUSTDOC_OBJECT) 84SAVED_$(MODULE)_RUST_ENV := $(MODULE_RUST_ENV) 85SAVED_$(MODULE)_INCLUDES := $(MODULE_INCLUDES) 86SAVED_$(MODULE)_SRCDEPS := $(MODULE_SRCDEPS) 87SAVED_$(MODULE)_EXTRA_OBJECTS := $(MODULE_EXTRA_OBJECTS) 88SAVED_$(MODULE)_WHOLE_ARCHIVES := $(MODULE_WHOLE_ARCHIVES) 89SAVED_$(MODULE)_ARM_OVERRIDE_SRCS := $(MODULE_ARM_OVERRIDE_SRCS) 90SAVED_$(MODULE)_IS_RUST := $(MODULE_IS_RUST) 91SAVED_$(MODULE)_RUST_USE_CLIPPY := $(MODULE_RUST_USE_CLIPPY) 92SAVED_$(MODULE)_CRATE_NAME := $(MODULE_CRATE_NAME) 93SAVED_$(MODULE)_RUST_STEM := $(MODULE_RUST_STEM) 94SAVED_$(MODULE)_RUST_CRATE_TYPES := $(MODULE_RUST_CRATE_TYPES) 95SAVED_$(MODULE)_RUST_HOST_LIB := $(MODULE_RUST_HOST_LIB) 96SAVED_$(MODULE)_RUST_EDITION := $(MODULE_RUST_EDITION) 97SAVED_$(MODULE)_RUST_TESTS := $(MODULE_RUST_TESTS) 98SAVED_$(MODULE)_BINDGEN_ALLOW_VARS := $(MODULE_BINDGEN_ALLOW_VARS) 99SAVED_$(MODULE)_BINDGEN_ALLOW_TYPES := $(MODULE_BINDGEN_ALLOW_TYPES) 100SAVED_$(MODULE)_BINDGEN_ALLOW_FUNCTIONS := $(MODULE_BINDGEN_ALLOW_FUNCTIONS) 101SAVED_$(MODULE)_BINDGEN_CTYPES_PREFIX := $(MODULE_BINDGEN_CTYPES_PREFIX) 102SAVED_$(MODULE)_BINDGEN_FLAGS := $(MODULE_BINDGEN_FLAGS) 103SAVED_$(MODULE)_BINDGEN_SRC_HEADER := $(MODULE_BINDGEN_SRC_HEADER) 104SAVED_$(MODULE)_SDK_LIB_NAME := $(MODULE_SDK_LIB_NAME) 105SAVED_$(MODULE)_SDK_LIBS := $(MODULE_SDK_LIBS) 106SAVED_$(MODULE)_SDK_HEADER_INSTALL_DIR := $(MODULE_SDK_HEADER_INSTALL_DIR) 107SAVED_$(MODULE)_SDK_HEADERS := $(MODULE_SDK_HEADERS) 108SAVED_$(MODULE)_TRUSTY_APP := $(TRUSTY_APP) 109SAVED_$(MODULE)_TRUSTY_APP_ELF := $(TRUSTY_APP_ELF) 110SAVED_$(MODULE)_TRUSTY_APP_NAME := $(TRUSTY_APP_NAME) 111SAVED_$(MODULE)_TRUSTY_APP_ALLOCATOR := $(TRUSTY_APP_ALLOCATOR) 112 113# save global variables 114SAVED_$(MODULE)_GLOBAL_OPTFLAGS := $(GLOBAL_OPTFLAGS) 115SAVED_$(MODULE)_GLOBAL_COMPILEFLAGS := $(GLOBAL_COMPILEFLAGS) 116SAVED_$(MODULE)_GLOBAL_CFLAGS := $(GLOBAL_CFLAGS) 117SAVED_$(MODULE)_GLOBAL_CPPFLAGS := $(GLOBAL_CPPFLAGS) 118SAVED_$(MODULE)_GLOBAL_ASMFLAGS := $(GLOBAL_ASMFLAGS) 119SAVED_$(MODULE)_GLOBAL_RUSTFLAGS := $(GLOBAL_RUSTFLAGS) 120SAVED_$(MODULE)_GLOBAL_INCLUDES := $(GLOBAL_INCLUDES) 121SAVED_$(MODULE)_GLOBAL_DEFINES := $(GLOBAL_DEFINES) 122 123SAVED_$(MODULE)_BUILDDIR := $(BUILDDIR) 124SAVED_$(MODULE)_MANIFEST := $(MANIFEST) 125SAVED_$(MODULE)_MANIFEST_OVERLAY := $(MANIFEST_OVERLAY) 126SAVED_$(MODULE)_ALLMODULES := $(ALLMODULES) 127SAVED_$(MODULE)_ALLMODULE_OBJS := $(ALLMODULE_OBJS) 128SAVED_$(MODULE)_ALLOBJS := $(ALLOBJS) 129 130SAVED_$(MODULE)_EXPORT_COMPILEFLAGS := $(MODULE_EXPORT_COMPILEFLAGS) 131SAVED_$(MODULE)_EXPORT_CONSTANTS := $(MODULE_EXPORT_CONSTANTS) 132SAVED_$(MODULE)_EXPORT_CFLAGS := $(MODULE_EXPORT_CFLAGS) 133SAVED_$(MODULE)_EXPORT_CPPFLAGS := $(MODULE_EXPORT_CPPFLAGS) 134SAVED_$(MODULE)_EXPORT_ASMFLAGS := $(MODULE_EXPORT_ASMFLAGS) 135SAVED_$(MODULE)_EXPORT_LIBRARIES := $(MODULE_EXPORT_LIBRARIES) 136SAVED_$(MODULE)_EXPORT_RLIBS := $(MODULE_EXPORT_RLIBS) 137SAVED_$(MODULE)_EXPORT_SDK_HEADERS := $(MODULE_EXPORT_SDK_HEADERS) 138SAVED_$(MODULE)_EXPORT_LDFLAGS := $(MODULE_EXPORT_LDFLAGS) 139SAVED_$(MODULE)_EXPORT_INCLUDES := $(MODULE_EXPORT_INCLUDES) 140SAVED_$(MODULE)_EXPORT_EXTRA_OBJECTS := $(MODULE_EXPORT_EXTRA_OBJECTS) 141SAVED_$(MODULE)_EXPORT_WHOLE_ARCHIVES := $(MODULE_EXPORT_WHOLE_ARCHIVES) 142SAVED_$(MODULE)_EXPORT_SRCDEPS := $(MODULE_EXPORT_SRCDEPS) 143 144# make/aidl.mk variables 145SAVED_$(MODULE)_MODULE_AIDLS := $(MODULE_AIDLS) 146SAVED_$(MODULE)_MODULE_AIDL_INCLUDES := $(MODULE_AIDL_INCLUDES) 147SAVED_$(MODULE)_MODULE_AIDL_FLAGS := $(MODULE_AIDL_FLAGS) 148SAVED_$(MODULE)_MODULE_AIDL_PACKAGE := $(MODULE_AIDL_PACKAGE) 149SAVED_$(MODULE)_MODULE_AIDL_LANGUAGE := $(MODULE_AIDL_LANGUAGE) 150SAVED_$(MODULE)_MODULE_AIDL_RUST_DEPS := $(MODULE_AIDL_RUST_DEPS) 151SAVED_$(MODULE)_AIDL_EXT := $(AIDL_EXT) 152SAVED_$(MODULE)_AIDL_HEADER_DIR := $(AIDL_HEADER_DIR) 153SAVED_$(MODULE)_AIDL_SRCS := $(AIDL_SRCS) 154SAVED_$(MODULE)_AIDL_TOOL := $(AIDL_TOOL) 155SAVED_$(MODULE)_AIDL_ROOT_RS := $(AIDL_ROOT_RS) 156 157SAVED_$(MODULE)_DEPENDENCY_MODULE := $(DEPENDENCY_MODULE) 158SAVED_$(MODULE)_EXPORT_DEPENDENCY_MODULE := $(EXPORT_DEPENDENCY_MODULE) 159 160# If we're using this isolation wrapper, we're using the new module system and 161# building in-tree 162TRUSTY_NEW_MODULE_SYSTEM := true 163TRUSTY_APP_IN_TREE := true 164 165MODULE := 166MODULE_SRCS := 167MODULE_SRCS_FIRST := 168MODULE_STATIC_LIB := 169MODULE_DEPS := 170MODULE_LIBRARIES := 171MODULE_RLIBS := 172MODULE_LIBRARY_DEPS := 173MODULE_LIBRARY_EXPORTED_DEPS := 174MODULE_LICENSES := 175MODULE_ADD_IMPLICIT_DEPS := true 176MODULE_USE_WHOLE_ARCHIVE := 177MODULE_DEFINES := 178MODULE_COMPILEFLAGS := 179MODULE_CONSTANTS := 180MODULE_CFLAGS := 181MODULE_CPPFLAGS := 182MODULE_ASMFLAGS := 183MODULE_RUSTFLAGS := 184MODULE_RUSTDOCFLAGS := 185MODULE_SKIP_DOCS := 186MODULE_DISABLED := 187MODULE_RUSTDOC_OBJECT := 188MODULE_RUST_ENV := 189MODULE_LDFLAGS := 190MODULE_INCLUDES := 191MODULE_SRCDEPS := 192MODULE_EXTRA_OBJECTS := 193MODULE_WHOLE_ARCHIVES := 194MODULE_ARM_OVERRIDE_SRCS := 195MODULE_IS_RUST := 196MODULE_RUST_USE_CLIPPY := 197MODULE_CRATE_NAME := 198MODULE_RUST_STEM := 199MODULE_RUST_CRATE_TYPES := 200# Don't clear MODULE_RUST_HOST_LIB here because 201# we want it forwarded to dependencies. All 202# of them need to be host libraries if the starting 203# point was a proc-macro crate. 204MODULE_RUST_EDITION := 205MODULE_RUST_TESTS := 206MODULE_BINDGEN_ALLOW_VARS := 207MODULE_BINDGEN_ALLOW_TYPES := 208MODULE_BINDGEN_ALLOW_FUNCTIONS := 209MODULE_BINDGEN_CTYPES_PREFIX := 210MODULE_BINDGEN_FLAGS := 211MODULE_BINDGEN_SRC_HEADER := 212MODULE_SDK_LIB_NAME := 213MODULE_SDK_LIBS := 214MODULE_SDK_HEADER_INSTALL_DIR := 215MODULE_SDK_HEADERS := 216TRUSTY_APP := 217TRUSTY_APP_ELF := 218TRUSTY_APP_ALLOCATOR := 219 220# Reset global variables 221GLOBAL_OPTFLAGS := 222GLOBAL_COMPILEFLAGS := 223GLOBAL_CFLAGS := 224GLOBAL_CPPFLAGS := 225GLOBAL_ASMFLAGS := 226GLOBAL_RUSTFLAGS := 227GLOBAL_INCLUDES := 228GLOBAL_DEFINES := 229 230MODULE_EXPORT_EXTRA_OBJECTS := 231MODULE_EXPORT_COMPILEFLAGS := 232MODULE_EXPORT_CONSTANTS := 233MODULE_EXPORT_CFLAGS := 234MODULE_EXPORT_CPPFLAGS := 235MODULE_EXPORT_ASMFLAGS := 236MODULE_EXPORT_INCLUDES := 237MODULE_EXPORT_LDFLAGS := 238MODULE_EXPORT_LIBRARIES := 239MODULE_EXPORT_RLIBS := 240MODULE_EXPORT_SDK_HEADERS := 241MODULE_EXPORT_EXTRA_OBJECTS := 242MODULE_EXPORT_WHOLE_ARCHIVES := 243MODULE_EXPORT_SRCDEPS := 244 245# make/aidl.mk variables 246MODULE_AIDLS := 247MODULE_AIDL_INCLUDES := 248MODULE_AIDL_FLAGS := 249MODULE_AIDL_PACKAGE := 250MODULE_AIDL_LANGUAGE := 251MODULE_AIDL_RUST_DEPS := 252AIDL_EXT := 253AIDL_HEADER_DIR := 254AIDL_SRCS := 255AIDL_TOOL := 256AIDL_ROOT_RS := 257 258ALLMODULES := 259ALLMODULE_OBJS := 260ALLOBJS := 261MANIFEST := 262MANIFEST_OVERLAY := 263 264EXPORT_DEPENDENCY_MODULE := 265 266include $(DEPENDENCY_MODULE_PATH)/rules.mk 267 268# Restore state from the saved stack 269MODULE := $(lastword $(SAVED_MODULE_STACK)) 270SAVED_MODULE_STACK := $(filter-out $(MODULE),$(SAVED_MODULE_STACK)) 271MODULE_SRCS := $(SAVED_$(MODULE)_SRCS) 272MODULE_SRCS_FIRST := $(SAVED_$(MODULE)_SRCS_FIRST) 273MODULE_STATIC_LIB := $(SAVED_$(MODULE)_STATIC_LIB) 274MODULE_DEPS := $(SAVED_$(MODULE)_DEPS) 275MODULE_LIBRARIES := $(SAVED_$(MODULE)_LIBRARIES) 276MODULE_RLIBS := $(SAVED_$(MODULE)_RLIBS) 277MODULE_LIBRARY_DEPS := $(SAVED_$(MODULE)_LIBRARY_DEPS) 278MODULE_LIBRARY_EXPORTED_DEPS := $(SAVED_$(MODULE)_LIBRARY_EXPORTED_DEPS) 279MODULE_LICENSES := $(SAVED_$(MODULE)_LICENSES) 280MODULE_ADD_IMPLICIT_DEPS := $(SAVED_$(MODULE)_ADD_IMPLICIT_DEPS) 281MODULE_USE_WHOLE_ARCHIVE := $(SAVED_$(MODULE)_USE_WHOLE_ARCHIVE) 282MODULE_DEFINES := $(SAVED_$(MODULE)_DEFINES) 283MODULE_COMPILEFLAGS := $(SAVED_$(MODULE)_COMPILEFLAGS) 284MODULE_CONSTANTS := $(SAVED_$(MODULE)_CONSTANTS) 285MODULE_CFLAGS := $(SAVED_$(MODULE)_CFLAGS) 286MODULE_CPPFLAGS := $(SAVED_$(MODULE)_CPPFLAGS) 287MODULE_ASMFLAGS := $(SAVED_$(MODULE)_ASMFLAGS) 288MODULE_RUSTFLAGS := $(SAVED_$(MODULE)_RUSTFLAGS) 289MODULE_RUSTDOCFLAGS := $(SAVED_$(MODULE)_RUSTDOCFLAGS) 290MODULE_SKIP_DOCS := $(SAVED_$(MODULE)_SKIP_DOCS) 291MODULE_DISABLED := $(SAVED_$(MODULE)_DISABLED) 292MODULE_RUSTDOC_OBJECT := $(SAVED_$(MODULE)_RUSTDOC_OBJECT) 293MODULE_RUST_ENV := $(SAVED_$(MODULE)_RUST_ENV) 294MODULE_LDFLAGS := $(SAVED_$(MODULE)_LDFLAGS) 295MODULE_INCLUDES := $(SAVED_$(MODULE)_INCLUDES) 296MODULE_SRCDEPS := $(SAVED_$(MODULE)_SRCDEPS) 297MODULE_EXTRA_OBJECTS := $(SAVED_$(MODULE)_EXTRA_OBJECTS) 298MODULE_WHOLE_ARCHIVES := $(SAVED_$(MODULE)_WHOLE_ARCHIVES) 299MODULE_ARM_OVERRIDE_SRCS := $(SAVED_$(MODULE)_ARM_OVERRIDE_SRCS) 300MODULE_IS_RUST := $(SAVED_$(MODULE)_IS_RUST) 301MODULE_RUST_USE_CLIPPY := $(SAVED_$(MODULE)_RUST_USE_CLIPPY) 302MODULE_CRATE_NAME := $(SAVED_$(MODULE)_CRATE_NAME) 303MODULE_RUST_STEM := $(SAVED_$(MODULE)_RUST_STEM) 304MODULE_RUST_CRATE_TYPES := $(SAVED_$(MODULE)_RUST_CRATE_TYPES) 305MODULE_RUST_HOST_LIB := $(SAVED_$(MODULE)_RUST_HOST_LIB) 306MODULE_RUST_EDITION := $(SAVED_$(MODULE)_RUST_EDITION) 307MODULE_RUST_TESTS := $(SAVED_$(MODULE)_RUST_TESTS) 308MODULE_BINDGEN_ALLOW_VARS := $(SAVED_$(MODULE)_BINDGEN_ALLOW_VARS) 309MODULE_BINDGEN_ALLOW_TYPES := $(SAVED_$(MODULE)_BINDGEN_ALLOW_TYPES) 310MODULE_BINDGEN_ALLOW_FUNCTIONS := $(SAVED_$(MODULE)_BINDGEN_ALLOW_FUNCTIONS) 311MODULE_BINDGEN_CTYPES_PREFIX := $(SAVED_$(MODULE)_BINDGEN_CTYPES_PREFIX) 312MODULE_BINDGEN_FLAGS := $(SAVED_$(MODULE)_BINDGEN_FLAGS) 313MODULE_BINDGEN_SRC_HEADER := $(SAVED_$(MODULE)_BINDGEN_SRC_HEADER) 314MODULE_SDK_LIB_NAME := $(SAVED_$(MODULE)_SDK_LIB_NAME) 315MODULE_SDK_LIBS := $(SAVED_$(MODULE)_SDK_LIBS) 316MODULE_SDK_HEADER_INSTALL_DIR := $(SAVED_$(MODULE)_SDK_HEADER_INSTALL_DIR) 317MODULE_SDK_HEADERS := $(SAVED_$(MODULE)_SDK_HEADERS) 318TRUSTY_APP := $(SAVED_$(MODULE)_TRUSTY_APP) 319TRUSTY_APP_ELF := $(SAVED_$(MODULE)_TRUSTY_APP_ELF) 320TRUSTY_APP_NAME := $(SAVED_$(MODULE)_TRUSTY_APP_NAME) 321TRUSTY_APP_ALLOCATOR := $(SAVED_$(MODULE)_TRUSTY_APP_ALLOCATOR) 322 323# Restore global variables 324GLOBAL_OPTFLAGS := $(SAVED_$(MODULE)_GLOBAL_OPTFLAGS) 325GLOBAL_COMPILEFLAGS := $(SAVED_$(MODULE)_GLOBAL_COMPILEFLAGS) 326GLOBAL_CFLAGS := $(SAVED_$(MODULE)_GLOBAL_CFLAGS) 327GLOBAL_CPPFLAGS := $(SAVED_$(MODULE)_GLOBAL_CPPFLAGS) 328GLOBAL_ASMFLAGS := $(SAVED_$(MODULE)_GLOBAL_ASMFLAGS) 329GLOBAL_RUSTFLAGS := $(SAVED_$(MODULE)_GLOBAL_RUSTFLAGS) 330GLOBAL_INCLUDES := $(SAVED_$(MODULE)_GLOBAL_INCLUDES) 331GLOBAL_DEFINES := $(SAVED_$(MODULE)_GLOBAL_DEFINES) 332 333BUILDDIR := $(SAVED_$(MODULE)_BUILDDIR) 334MANIFEST := $(SAVED_$(MODULE)_MANIFEST) 335MANIFEST_OVERLAY := $(SAVED_$(MODULE)_MANIFEST_OVERLAY) 336ALLMODULES := $(SAVED_$(MODULE)_ALLMODULES) 337ALLMODULE_OBJS := $(SAVED_$(MODULE)_ALLMODULE_OBJS) 338ALLOBJS := $(SAVED_$(MODULE)_ALLOBJS) $(ALLOBJS) 339 340MODULE_EXPORT_COMPILEFLAGS := $(SAVED_$(MODULE)_EXPORT_COMPILEFLAGS) 341MODULE_EXPORT_CONSTANTS := $(SAVED_$(MODULE)_EXPORT_CONSTANTS) 342MODULE_EXPORT_CFLAGS := $(SAVED_$(MODULE)_EXPORT_CFLAGS) 343MODULE_EXPORT_CPPFLAGS := $(SAVED_$(MODULE)_EXPORT_CPPFLAGS) 344MODULE_EXPORT_ASMFLAGS := $(SAVED_$(MODULE)_EXPORT_ASMFLAGS) 345MODULE_EXPORT_LDFLAGS := $(SAVED_$(MODULE)_EXPORT_LDFLAGS) 346MODULE_EXPORT_LIBRARIES := $(SAVED_$(MODULE)_EXPORT_LIBRARIES) 347MODULE_EXPORT_RLIBS := $(SAVED_$(MODULE)_EXPORT_RLIBS) 348MODULE_EXPORT_SDK_HEADERS := $(SAVED_$(MODULE)_EXPORT_SDK_HEADERS) 349MODULE_EXPORT_INCLUDES := $(SAVED_$(MODULE)_EXPORT_INCLUDES) 350MODULE_EXPORT_EXTRA_OBJECTS := $(SAVED_$(MODULE)_EXPORT_EXTRA_OBJECTS) 351MODULE_EXPORT_WHOLE_ARCHIVES := $(SAVED_$(MODULE)_EXPORT_WHOLE_ARCHIVES) 352MODULE_EXPORT_SRCDEPS := $(SAVED_$(MODULE)_EXPORT_SRCDEPS) 353 354# make/aidl.mk variables 355MODULE_AIDLS := $(SAVED_$(MODULE)_MODULE_AIDLS) 356MODULE_AIDL_INCLUDES := $(SAVED_$(MODULE)_MODULE_AIDL_INCLUDES) 357MODULE_AIDL_FLAGS := $(SAVED_$(MODULE)_MODULE_AIDL_FLAGS) 358MODULE_AIDL_PACKAGE := $(SAVED_$(MODULE)_MODULE_AIDL_PACKAGE) 359MODULE_AIDL_LANGUAGE := $(SAVED_$(MODULE)_MODULE_AIDL_LANGUAGE) 360MODULE_AIDL_RUST_DEPS := $(SAVED_$(MODULE)_MODULE_AIDL_RUST_DEPS) 361AIDL_EXT := $(SAVED_$(MODULE)_AIDL_EXT) 362AIDL_HEADER_DIR := $(SAVED_$(MODULE)_AIDL_HEADER_DIR) 363AIDL_SRCS := $(SAVED_$(MODULE)_AIDL_SRCS) 364AIDL_TOOL := $(SAVED_$(MODULE)_AIDL_TOOL) 365AIDL_ROOT_RS := $(SAVED_$(MODULE)_AIDL_ROOT_RS) 366 367DEPENDENCY_MODULE := $(SAVED_$(MODULE)_DEPENDENCY_MODULE) 368EXPORT_DEPENDENCY_MODULE := $(SAVED_$(MODULE)_EXPORT_DEPENDENCY_MODULE) 369 370TRUSTY_NEW_MODULE_SYSTEM := 371TRUSTY_APP_IN_TREE := 372 373endif # _MODULES_$(DEPENDENCY_MODULE) not set 374endif # MODULE not in SAVED_MODULE_STACK 375 376ifneq ($(strip $(EXPORT_DEPENDENCY_MODULE)),) 377REEXPORT := true 378else 379REEXPORT := 380endif 381 382define append-export-flags 383$(if $(2),$(eval EXPORT := EXPORT_))\ 384$(eval MODULE_$(EXPORT)$(1) += $(filter-out $(MODULE_$(EXPORT)$(1)),$(_MODULES_$(DEPENDENCY_MODULE)_$(1))))\ 385$(eval EXPORT :=) 386endef 387 388ifeq ($(filter $(DEPENDENCY_MODULE),$(TRUSTY_SDK_MODULES)),) 389# Dependency is NOT part of the SDK 390 391# Only append in-tree headers if this library isn't part of the SDK 392$(call append-export-flags,INCLUDES,$(REEXPORT)) 393 394ifneq ($(filter $(MODULE),$(TRUSTY_SDK_MODULES)),) 395# Module is part of the SDK but our dependency isn't. We need to pick up our 396# dependency's headers here because we don't append MODULE_EXPORT_INCLUDES to 397# our local includes. 398MODULE_INCLUDES += $(filter-out $(MODULE_INCLUDES),$(_MODULES_$(DEPENDENCY_MODULE)_INCLUDES)) 399endif 400 401endif # MODULE in TRUSTY_SDK_MODULES 402 403# Add our dependencies flags to our exported flags. 404# Note that we don't add INCLUDES here. We take care of that above if the 405# dependency is not part of the SDK. If it is, we use the SDK sysroot's headers. 406$(call append-export-flags,DEFINES,$(REEXPORT)) 407$(call append-export-flags,COMPILEFLAGS,$(REEXPORT)) 408$(call append-export-flags,CONSTANTS,$(REEXPORT)) 409$(call append-export-flags,CFLAGS,$(REEXPORT)) 410$(call append-export-flags,CPPFLAGS,$(REEXPORT)) 411$(call append-export-flags,ASMFLAGS,$(REEXPORT)) 412$(call append-export-flags,SRCDEPS,$(REEXPORT)) 413 414# RLIBS need to re-exported explicitly in case we have multiple versions 415# of the same crate. 416$(call append-export-flags,RLIBS,$(REEXPORT)) 417 418$(call append-export-flags,EXTRA_OBJECTS,true) 419$(call append-export-flags,WHOLE_ARCHIVES,true) 420$(call append-export-flags,LDFLAGS,true) 421$(call append-export-flags,SDK_LIBS,true) 422 423# If our dependency is a Rust staticlib, we can't add recursive deps, which may 424# include proc-macros. The rust staticlib should be entirely self-contained. 425ifeq ($(call TOBOOL,$(MODULE_IS_RUST)),false) 426ifneq ($(_MODULES_$(DEPENDENCY_MODULE)_RUST_STATICLIB),) 427INCLUDE_ONLY_STATICLIB := true 428endif 429endif 430 431ifeq ($(call TOBOOL,$(INCLUDE_ONLY_STATICLIB)),true) 432# In the case of a Rust staticlib dependency, just include that static library, 433# not recursive dependencies. 434MODULE_EXPORT_LIBRARIES += $(_MODULES_$(DEPENDENCY_MODULE)_RUST_STATICLIB) 435else 436# We re-export LIBRARIES in most cases (and LDFLAGS in all cases). This is safe 437# to do in the prescence of recursive C deps because libraries and link flags 438# are additive and do not affect the compiliation. If we have a dependency chain 439# like A -> B -> C -> A, we don't need to add A's link flags to C because we 440# will get them in the final link directly from A. 441$(call append-export-flags,LIBRARIES,true) 442endif 443INCLUDE_ONLY_STATICLIB := 444 445# We always want to make sure that all necessary headers have been copied into 446# the SDK before we try to use them. There's no harm in things being copied 447# earlier than they are needed. 448$(call append-export-flags,SDK_HEADERS,true) 449 450$(call INFO_DONE_SILENT,$(MODULE),processing dependencies,$(DEPENDENCY_MODULE)) 451 452DEPENDENCY_MODULE := 453DEPENDENCY_MODULE_PATH := 454EXPORT_DEPENDENCY_MODULE := 455 456EXPORT := 457REEXPORT := 458