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_RUST_GLUE_TOOL := $(AIDL_RUST_GLUE_TOOL) 156SAVED_$(MODULE)_AIDL_ROOT_RS := $(AIDL_RUST_GLUE_TOOL) 157 158SAVED_$(MODULE)_DEPENDENCY_MODULE := $(DEPENDENCY_MODULE) 159SAVED_$(MODULE)_EXPORT_DEPENDENCY_MODULE := $(EXPORT_DEPENDENCY_MODULE) 160 161# If we're using this isolation wrapper, we're using the new module system and 162# building in-tree 163TRUSTY_NEW_MODULE_SYSTEM := true 164TRUSTY_APP_IN_TREE := true 165 166MODULE := 167MODULE_SRCS := 168MODULE_SRCS_FIRST := 169MODULE_STATIC_LIB := 170MODULE_DEPS := 171MODULE_LIBRARIES := 172MODULE_RLIBS := 173MODULE_LIBRARY_DEPS := 174MODULE_LIBRARY_EXPORTED_DEPS := 175MODULE_LICENSES := 176MODULE_ADD_IMPLICIT_DEPS := true 177MODULE_USE_WHOLE_ARCHIVE := 178MODULE_DEFINES := 179MODULE_COMPILEFLAGS := 180MODULE_CONSTANTS := 181MODULE_CFLAGS := 182MODULE_CPPFLAGS := 183MODULE_ASMFLAGS := 184MODULE_RUSTFLAGS := 185MODULE_RUSTDOCFLAGS := 186MODULE_SKIP_DOCS := 187MODULE_DISABLED := 188MODULE_RUSTDOC_OBJECT := 189MODULE_RUST_ENV := 190MODULE_LDFLAGS := 191MODULE_INCLUDES := 192MODULE_SRCDEPS := 193MODULE_EXTRA_OBJECTS := 194MODULE_WHOLE_ARCHIVES := 195MODULE_ARM_OVERRIDE_SRCS := 196MODULE_IS_RUST := 197MODULE_RUST_USE_CLIPPY := 198MODULE_CRATE_NAME := 199MODULE_RUST_STEM := 200MODULE_RUST_CRATE_TYPES := 201# Don't clear MODULE_RUST_HOST_LIB here because 202# we want it forwarded to dependencies. All 203# of them need to be host libraries if the starting 204# point was a proc-macro crate. 205MODULE_RUST_EDITION := 206MODULE_RUST_TESTS := 207MODULE_BINDGEN_ALLOW_VARS := 208MODULE_BINDGEN_ALLOW_TYPES := 209MODULE_BINDGEN_ALLOW_FUNCTIONS := 210MODULE_BINDGEN_CTYPES_PREFIX := 211MODULE_BINDGEN_FLAGS := 212MODULE_BINDGEN_SRC_HEADER := 213MODULE_SDK_LIB_NAME := 214MODULE_SDK_LIBS := 215MODULE_SDK_HEADER_INSTALL_DIR := 216MODULE_SDK_HEADERS := 217TRUSTY_APP := 218TRUSTY_APP_ELF := 219TRUSTY_APP_ALLOCATOR := 220 221# Reset global variables 222GLOBAL_OPTFLAGS := 223GLOBAL_COMPILEFLAGS := 224GLOBAL_CFLAGS := 225GLOBAL_CPPFLAGS := 226GLOBAL_ASMFLAGS := 227GLOBAL_RUSTFLAGS := 228GLOBAL_INCLUDES := 229GLOBAL_DEFINES := 230 231MODULE_EXPORT_EXTRA_OBJECTS := 232MODULE_EXPORT_COMPILEFLAGS := 233MODULE_EXPORT_CONSTANTS := 234MODULE_EXPORT_CFLAGS := 235MODULE_EXPORT_CPPFLAGS := 236MODULE_EXPORT_ASMFLAGS := 237MODULE_EXPORT_INCLUDES := 238MODULE_EXPORT_LDFLAGS := 239MODULE_EXPORT_LIBRARIES := 240MODULE_EXPORT_RLIBS := 241MODULE_EXPORT_SDK_HEADERS := 242MODULE_EXPORT_EXTRA_OBJECTS := 243MODULE_EXPORT_WHOLE_ARCHIVES := 244MODULE_EXPORT_SRCDEPS := 245 246# make/aidl.mk variables 247MODULE_AIDLS := 248MODULE_AIDL_INCLUDES := 249MODULE_AIDL_FLAGS := 250MODULE_AIDL_PACKAGE := 251MODULE_AIDL_LANGUAGE := 252MODULE_AIDL_RUST_DEPS := 253AIDL_EXT := 254AIDL_HEADER_DIR := 255AIDL_SRCS := 256AIDL_TOOL := 257AIDL_RUST_GLUE_TOOL := 258AIDL_ROOT_RS := 259 260ALLMODULES := 261ALLMODULE_OBJS := 262ALLOBJS := 263MANIFEST := 264MANIFEST_OVERLAY := 265 266EXPORT_DEPENDENCY_MODULE := 267 268include $(DEPENDENCY_MODULE_PATH)/rules.mk 269 270# Restore state from the saved stack 271MODULE := $(lastword $(SAVED_MODULE_STACK)) 272SAVED_MODULE_STACK := $(filter-out $(MODULE),$(SAVED_MODULE_STACK)) 273MODULE_SRCS := $(SAVED_$(MODULE)_SRCS) 274MODULE_SRCS_FIRST := $(SAVED_$(MODULE)_SRCS_FIRST) 275MODULE_STATIC_LIB := $(SAVED_$(MODULE)_STATIC_LIB) 276MODULE_DEPS := $(SAVED_$(MODULE)_DEPS) 277MODULE_LIBRARIES := $(SAVED_$(MODULE)_LIBRARIES) 278MODULE_RLIBS := $(SAVED_$(MODULE)_RLIBS) 279MODULE_LIBRARY_DEPS := $(SAVED_$(MODULE)_LIBRARY_DEPS) 280MODULE_LIBRARY_EXPORTED_DEPS := $(SAVED_$(MODULE)_LIBRARY_EXPORTED_DEPS) 281MODULE_LICENSES := $(SAVED_$(MODULE)_LICENSES) 282MODULE_ADD_IMPLICIT_DEPS := $(SAVED_$(MODULE)_ADD_IMPLICIT_DEPS) 283MODULE_USE_WHOLE_ARCHIVE := $(SAVED_$(MODULE)_USE_WHOLE_ARCHIVE) 284MODULE_DEFINES := $(SAVED_$(MODULE)_DEFINES) 285MODULE_COMPILEFLAGS := $(SAVED_$(MODULE)_COMPILEFLAGS) 286MODULE_CONSTANTS := $(SAVED_$(MODULE)_CONSTANTS) 287MODULE_CFLAGS := $(SAVED_$(MODULE)_CFLAGS) 288MODULE_CPPFLAGS := $(SAVED_$(MODULE)_CPPFLAGS) 289MODULE_ASMFLAGS := $(SAVED_$(MODULE)_ASMFLAGS) 290MODULE_RUSTFLAGS := $(SAVED_$(MODULE)_RUSTFLAGS) 291MODULE_RUSTDOCFLAGS := $(SAVED_$(MODULE)_RUSTDOCFLAGS) 292MODULE_SKIP_DOCS := $(SAVED_$(MODULE)_SKIP_DOCS) 293MODULE_DISABLED := $(SAVED_$(MODULE)_DISABLED) 294MODULE_RUSTDOC_OBJECT := $(SAVED_$(MODULE)_RUSTDOC_OBJECT) 295MODULE_RUST_ENV := $(SAVED_$(MODULE)_RUST_ENV) 296MODULE_LDFLAGS := $(SAVED_$(MODULE)_LDFLAGS) 297MODULE_INCLUDES := $(SAVED_$(MODULE)_INCLUDES) 298MODULE_SRCDEPS := $(SAVED_$(MODULE)_SRCDEPS) 299MODULE_EXTRA_OBJECTS := $(SAVED_$(MODULE)_EXTRA_OBJECTS) 300MODULE_WHOLE_ARCHIVES := $(SAVED_$(MODULE)_WHOLE_ARCHIVES) 301MODULE_ARM_OVERRIDE_SRCS := $(SAVED_$(MODULE)_ARM_OVERRIDE_SRCS) 302MODULE_IS_RUST := $(SAVED_$(MODULE)_IS_RUST) 303MODULE_RUST_USE_CLIPPY := $(SAVED_$(MODULE)_RUST_USE_CLIPPY) 304MODULE_CRATE_NAME := $(SAVED_$(MODULE)_CRATE_NAME) 305MODULE_RUST_STEM := $(SAVED_$(MODULE)_RUST_STEM) 306MODULE_RUST_CRATE_TYPES := $(SAVED_$(MODULE)_RUST_CRATE_TYPES) 307MODULE_RUST_HOST_LIB := $(SAVED_$(MODULE)_RUST_HOST_LIB) 308MODULE_RUST_EDITION := $(SAVED_$(MODULE)_RUST_EDITION) 309MODULE_RUST_TESTS := $(SAVED_$(MODULE)_RUST_TESTS) 310MODULE_BINDGEN_ALLOW_VARS := $(SAVED_$(MODULE)_BINDGEN_ALLOW_VARS) 311MODULE_BINDGEN_ALLOW_TYPES := $(SAVED_$(MODULE)_BINDGEN_ALLOW_TYPES) 312MODULE_BINDGEN_ALLOW_FUNCTIONS := $(SAVED_$(MODULE)_BINDGEN_ALLOW_FUNCTIONS) 313MODULE_BINDGEN_CTYPES_PREFIX := $(SAVED_$(MODULE)_BINDGEN_CTYPES_PREFIX) 314MODULE_BINDGEN_FLAGS := $(SAVED_$(MODULE)_BINDGEN_FLAGS) 315MODULE_BINDGEN_SRC_HEADER := $(SAVED_$(MODULE)_BINDGEN_SRC_HEADER) 316MODULE_SDK_LIB_NAME := $(SAVED_$(MODULE)_SDK_LIB_NAME) 317MODULE_SDK_LIBS := $(SAVED_$(MODULE)_SDK_LIBS) 318MODULE_SDK_HEADER_INSTALL_DIR := $(SAVED_$(MODULE)_SDK_HEADER_INSTALL_DIR) 319MODULE_SDK_HEADERS := $(SAVED_$(MODULE)_SDK_HEADERS) 320TRUSTY_APP := $(SAVED_$(MODULE)_TRUSTY_APP) 321TRUSTY_APP_ELF := $(SAVED_$(MODULE)_TRUSTY_APP_ELF) 322TRUSTY_APP_NAME := $(SAVED_$(MODULE)_TRUSTY_APP_NAME) 323TRUSTY_APP_ALLOCATOR := $(SAVED_$(MODULE)_TRUSTY_APP_ALLOCATOR) 324 325# Restore global variables 326GLOBAL_OPTFLAGS := $(SAVED_$(MODULE)_GLOBAL_OPTFLAGS) 327GLOBAL_COMPILEFLAGS := $(SAVED_$(MODULE)_GLOBAL_COMPILEFLAGS) 328GLOBAL_CFLAGS := $(SAVED_$(MODULE)_GLOBAL_CFLAGS) 329GLOBAL_CPPFLAGS := $(SAVED_$(MODULE)_GLOBAL_CPPFLAGS) 330GLOBAL_ASMFLAGS := $(SAVED_$(MODULE)_GLOBAL_ASMFLAGS) 331GLOBAL_RUSTFLAGS := $(SAVED_$(MODULE)_GLOBAL_RUSTFLAGS) 332GLOBAL_INCLUDES := $(SAVED_$(MODULE)_GLOBAL_INCLUDES) 333GLOBAL_DEFINES := $(SAVED_$(MODULE)_GLOBAL_DEFINES) 334 335BUILDDIR := $(SAVED_$(MODULE)_BUILDDIR) 336MANIFEST := $(SAVED_$(MODULE)_MANIFEST) 337MANIFEST_OVERLAY := $(SAVED_$(MODULE)_MANIFEST_OVERLAY) 338ALLMODULES := $(SAVED_$(MODULE)_ALLMODULES) 339ALLMODULE_OBJS := $(SAVED_$(MODULE)_ALLMODULE_OBJS) 340ALLOBJS := $(SAVED_$(MODULE)_ALLOBJS) $(ALLOBJS) 341 342MODULE_EXPORT_COMPILEFLAGS := $(SAVED_$(MODULE)_EXPORT_COMPILEFLAGS) 343MODULE_EXPORT_CONSTANTS := $(SAVED_$(MODULE)_EXPORT_CONSTANTS) 344MODULE_EXPORT_CFLAGS := $(SAVED_$(MODULE)_EXPORT_CFLAGS) 345MODULE_EXPORT_CPPFLAGS := $(SAVED_$(MODULE)_EXPORT_CPPFLAGS) 346MODULE_EXPORT_ASMFLAGS := $(SAVED_$(MODULE)_EXPORT_ASMFLAGS) 347MODULE_EXPORT_LDFLAGS := $(SAVED_$(MODULE)_EXPORT_LDFLAGS) 348MODULE_EXPORT_LIBRARIES := $(SAVED_$(MODULE)_EXPORT_LIBRARIES) 349MODULE_EXPORT_RLIBS := $(SAVED_$(MODULE)_EXPORT_RLIBS) 350MODULE_EXPORT_SDK_HEADERS := $(SAVED_$(MODULE)_EXPORT_SDK_HEADERS) 351MODULE_EXPORT_INCLUDES := $(SAVED_$(MODULE)_EXPORT_INCLUDES) 352MODULE_EXPORT_EXTRA_OBJECTS := $(SAVED_$(MODULE)_EXPORT_EXTRA_OBJECTS) 353MODULE_EXPORT_WHOLE_ARCHIVES := $(SAVED_$(MODULE)_EXPORT_WHOLE_ARCHIVES) 354MODULE_EXPORT_SRCDEPS := $(SAVED_$(MODULE)_EXPORT_SRCDEPS) 355 356# make/aidl.mk variables 357MODULE_AIDLS := $(SAVED_$(MODULE)_MODULE_AIDLS) 358MODULE_AIDL_INCLUDES := $(SAVED_$(MODULE)_MODULE_AIDL_INCLUDES) 359MODULE_AIDL_FLAGS := $(SAVED_$(MODULE)_MODULE_AIDL_FLAGS) 360MODULE_AIDL_PACKAGE := $(SAVED_$(MODULE)_MODULE_AIDL_PACKAGE) 361MODULE_AIDL_LANGUAGE := $(SAVED_$(MODULE)_MODULE_AIDL_LANGUAGE) 362MODULE_AIDL_RUST_DEPS := $(SAVED_$(MODULE)_MODULE_AIDL_RUST_DEPS) 363AIDL_EXT := $(SAVED_$(MODULE)_AIDL_EXT) 364AIDL_HEADER_DIR := $(SAVED_$(MODULE)_AIDL_HEADER_DIR) 365AIDL_SRCS := $(SAVED_$(MODULE)_AIDL_SRCS) 366AIDL_TOOL := $(SAVED_$(MODULE)_AIDL_TOOL) 367AIDL_RUST_GLUE_TOOL := $(SAVED_$(MODULE)_AIDL_RUST_GLUE_TOOL) 368AIDL_ROOT_RS := $(SAVED_$(MODULE)_AIDL_ROOT_RS) 369 370DEPENDENCY_MODULE := $(SAVED_$(MODULE)_DEPENDENCY_MODULE) 371EXPORT_DEPENDENCY_MODULE := $(SAVED_$(MODULE)_EXPORT_DEPENDENCY_MODULE) 372 373TRUSTY_NEW_MODULE_SYSTEM := 374TRUSTY_APP_IN_TREE := 375 376endif # _MODULES_$(DEPENDENCY_MODULE) not set 377endif # MODULE not in SAVED_MODULE_STACK 378 379ifneq ($(strip $(EXPORT_DEPENDENCY_MODULE)),) 380REEXPORT := true 381else 382REEXPORT := 383endif 384 385define append-export-flags 386$(if $(2),$(eval EXPORT := EXPORT_))\ 387$(eval MODULE_$(EXPORT)$(1) += $(filter-out $(MODULE_$(EXPORT)$(1)),$(_MODULES_$(DEPENDENCY_MODULE)_$(1))))\ 388$(eval EXPORT :=) 389endef 390 391ifeq ($(filter $(DEPENDENCY_MODULE),$(TRUSTY_SDK_MODULES)),) 392# Dependency is NOT part of the SDK 393 394# Only append in-tree headers if this library isn't part of the SDK 395$(call append-export-flags,INCLUDES,$(REEXPORT)) 396 397ifneq ($(filter $(MODULE),$(TRUSTY_SDK_MODULES)),) 398# Module is part of the SDK but our dependency isn't. We need to pick up our 399# dependency's headers here because we don't append MODULE_EXPORT_INCLUDES to 400# our local includes. 401MODULE_INCLUDES += $(filter-out $(MODULE_INCLUDES),$(_MODULES_$(DEPENDENCY_MODULE)_INCLUDES)) 402endif 403 404endif # MODULE in TRUSTY_SDK_MODULES 405 406# Add our dependencies flags to our exported flags. 407# Note that we don't add INCLUDES here. We take care of that above if the 408# dependency is not part of the SDK. If it is, we use the SDK sysroot's headers. 409$(call append-export-flags,DEFINES,$(REEXPORT)) 410$(call append-export-flags,COMPILEFLAGS,$(REEXPORT)) 411$(call append-export-flags,CONSTANTS,$(REEXPORT)) 412$(call append-export-flags,CFLAGS,$(REEXPORT)) 413$(call append-export-flags,CPPFLAGS,$(REEXPORT)) 414$(call append-export-flags,ASMFLAGS,$(REEXPORT)) 415$(call append-export-flags,SRCDEPS,$(REEXPORT)) 416 417# RLIBS need to re-exported explicitly in case we have multiple versions 418# of the same crate. 419$(call append-export-flags,RLIBS,$(REEXPORT)) 420 421$(call append-export-flags,EXTRA_OBJECTS,true) 422$(call append-export-flags,WHOLE_ARCHIVES,true) 423$(call append-export-flags,LDFLAGS,true) 424$(call append-export-flags,SDK_LIBS,true) 425 426# If our dependency is a Rust staticlib, we can't add recursive deps, which may 427# include proc-macros. The rust staticlib should be entirely self-contained. 428ifeq ($(call TOBOOL,$(MODULE_IS_RUST)),false) 429ifneq ($(_MODULES_$(DEPENDENCY_MODULE)_RUST_STATICLIB),) 430INCLUDE_ONLY_STATICLIB := true 431endif 432endif 433 434ifeq ($(call TOBOOL,$(INCLUDE_ONLY_STATICLIB)),true) 435# In the case of a Rust staticlib dependency, just include that static library, 436# not recursive dependencies. 437MODULE_EXPORT_LIBRARIES += $(_MODULES_$(DEPENDENCY_MODULE)_RUST_STATICLIB) 438else 439# We re-export LIBRARIES in most cases (and LDFLAGS in all cases). This is safe 440# to do in the prescence of recursive C deps because libraries and link flags 441# are additive and do not affect the compiliation. If we have a dependency chain 442# like A -> B -> C -> A, we don't need to add A's link flags to C because we 443# will get them in the final link directly from A. 444$(call append-export-flags,LIBRARIES,true) 445endif 446INCLUDE_ONLY_STATICLIB := 447 448# We always want to make sure that all necessary headers have been copied into 449# the SDK before we try to use them. There's no harm in things being copied 450# earlier than they are needed. 451$(call append-export-flags,SDK_HEADERS,true) 452 453$(call INFO_DONE_SILENT,$(MODULE),processing dependencies,$(DEPENDENCY_MODULE)) 454 455DEPENDENCY_MODULE := 456DEPENDENCY_MODULE_PATH := 457EXPORT_DEPENDENCY_MODULE := 458 459EXPORT := 460REEXPORT := 461