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