1#
2# Copyright (c) 2024, Google, Inc. All rights reserved
3#
4# Permission is hereby granted, free of charge, to any person obtaining
5# a copy of this software and associated documentation files
6# (the "Software"), to deal in the Software without restriction,
7# including without limitation the rights to use, copy, modify, merge,
8# publish, distribute, sublicense, and/or sell copies of the Software,
9# and to permit persons to whom the Software is furnished to do so,
10# subject to the following conditions:
11#
12# The above copyright notice and this permission notice shall be
13# included in all copies or substantial portions of the Software.
14#
15# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22#
23
24# Query variables set by another module's rules.mk file
25#
26# args:
27# QUERY_MODULE : the path to the module directory to query
28# QUERY_VARIABLES : a space-separated list of variables to query
29#
30# sets:
31# QUERY_foo for each variable "foo" named in QUERY_VARIABLES
32
33# these come from module.mk, rust.mk, and library.mk (in sections):
34define QUERY_STOMPED_VARIABLES
35MODULE
36MODULE_SRCDIR
37MODULE_BUILDDIR
38MODULE_DEPS
39MODULE_SRCS
40MODULE_OBJS
41MODULE_DEFINES
42MODULE_OPTFLAGS
43MODULE_COMPILEFLAGS
44MODULE_CFLAGS
45MODULE_CPPFLAGS
46MODULE_ASMFLAGS
47MODULE_RUSTFLAGS
48MODULE_RUSTDOCFLAGS
49MODULE_SRCDEPS
50MODULE_INCLUDES
51MODULE_EXTRA_ARCHIVES
52MODULE_EXTRA_OBJS
53MODULE_CONFIG
54MODULE_OBJECT
55MODULE_ARM_OVERRIDE_SRCS
56MODULE_SRCS_FIRST
57MODULE_INIT_OBJS
58MODULE_DISABLE_LTO
59MODULE_LTO_ENABLED
60MODULE_DISABLE_CFI
61MODULE_DISABLE_STACK_PROTECTOR
62MODULE_DISABLE_SCS
63MODULE_RSSRC
64MODULE_IS_RUST
65MODULE_RUST_USE_CLIPPY
66MODULE_RSOBJS
67MODULE_RUST_EDITION
68MODULE_RUSTDOC_OBJECT
69MODULE_RUSTDOCFLAGS
70MODULE_KERNEL_RUST_DEPS
71MODULE_SKIP_DOCS
72MODULE_ADD_IMPLICIT_DEPS
73
74MODULE_RUST_CRATE_TYPES
75
76MODULE
77MODULE_CRATE_NAME
78MODULE_RUST_STEM
79MODULE_SRCDEPS
80MODULE_LIBRARY_DEPS
81MODULE_LIBRARY_EXPORTED_DEPS
82MODULE_USE_WHOLE_ARCHIVE
83MODULE_LIBRARIES
84MODULE_LICENSES
85MODULE_RLIBS
86MODULE_RSOBJS
87MODULE_RUSTDOC_OBJECT
88MODULE_RUSTDOCFLAGS
89MODULE_SKIP_DOCS
90MODULE_DISABLED
91MODULE_SDK_LIB_NAME
92MODULE_SDK_HEADER_INSTALL_DIR
93MODULE_SDK_HEADERS
94endef
95
96ifeq ($(QUERY_MODULE),)
97$(error QUERY_MODULE must be set to a module path before including query.mk)
98endif
99
100# save state
101$(foreach var,$(QUERY_STOMPED_VARIABLES),$(eval QUERY_SAVED_$(var) := $($(var))))
102
103# clear state
104$(foreach var,$(QUERY_STOMPED_VARIABLES),$(eval $(var) :=))
105
106# include specified target rules.mk
107include $(QUERY_MODULE)/rules.mk
108
109# "return" queried variables
110$(foreach var,$(QUERY_VARIABLES),$(eval QUERY_$(var) := $($(var))))
111
112# restore state
113$(foreach var,$(QUERY_STOMPED_VARIABLES),$(eval $(var) := $(QUERY_SAVED_$(var))))
114QUERY_MODULE :=
115