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