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