The tristate checker, like the Makefile.modbuiltin that preceded it, relies on running the makefiles with some CONFIG_ variables set to uppercase values ('Y' or 'M'). Large portions of the core build system assume that these values are lowercase, but we mostly don't care about those because they are only involved in actual building, and make tristatecheck doesn't build anything (the parts that do need changing so that recursion etc still worked were changed as part of the tristate commit). But some makefiles that are not part of the core build system also contain assumptions that CONFIG_ variables are always lowercase (every one of these was also broken wrt the old modules.builtin machinery, but now this is part of a verifier, the problems are more obvious). In most cases this is just something like obj-$(subst m,y,$(CONFIG_FOO)) += blah.o to indicate that blah.o is always built in even if CONFIG_FOO is a module. There is a new macro to help this relatively common case, which should now be rewritten as obj-$(call always_built_in,$(CONFIG_FOO)) += blah.o One other case we handle is that in net/dccp where things are built as modules iff any member of some other set are modular; this is now handled like so: obj-$(call module_if_any_modular,$(CONFIG_IP_DCCP)$(CONFIG_IPV6)) += dccp_ipv6.o dccp_ipv6-$(call module_if_any_modular,$(CONFIG_IP_DCCP)$(CONFIG_IPV6)) := ipv6.o Signed-off-by: Nick Alcock <nick.alcock@xxxxxxxxxx> --- Notes: v10: new. drivers/Makefile | 2 +- drivers/hv/Makefile | 2 +- drivers/mmc/Makefile | 2 +- drivers/net/wireless/silabs/wfx/Makefile | 2 +- drivers/s390/char/Makefile | 2 +- drivers/s390/crypto/Makefile | 2 +- net/8021q/Makefile | 2 +- net/Makefile | 2 +- net/bridge/Makefile | 4 ++-- net/dccp/Makefile | 4 ++-- net/ipv6/Makefile | 2 +- net/l2tp/Makefile | 12 ++++++------ net/netfilter/Makefile | 2 +- net/netlabel/Makefile | 2 +- net/sctp/Makefile | 2 +- scripts/Kbuild.include | 15 +++++++++++++++ 16 files changed, 37 insertions(+), 22 deletions(-) diff --git a/drivers/Makefile b/drivers/Makefile index bdf1c66141c9..a6d3296f0c23 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -159,7 +159,7 @@ obj-$(CONFIG_SOUNDWIRE) += soundwire/ # Virtualization drivers obj-$(CONFIG_VIRT_DRIVERS) += virt/ -obj-$(subst m,y,$(CONFIG_HYPERV)) += hv/ +obj-$(call always_built_in,$(CONFIG_HYPERV)) += hv/ obj-$(CONFIG_PM_DEVFREQ) += devfreq/ obj-$(CONFIG_EXTCON) += extcon/ diff --git a/drivers/hv/Makefile b/drivers/hv/Makefile index d76df5c8c2a9..06777af02a78 100644 --- a/drivers/hv/Makefile +++ b/drivers/hv/Makefile @@ -13,4 +13,4 @@ hv_vmbus-$(CONFIG_HYPERV_TESTING) += hv_debugfs.o hv_utils-y := hv_util.o hv_kvp.o hv_snapshot.o hv_fcopy.o hv_utils_transport.o # Code that must be built-in -obj-$(subst m,y,$(CONFIG_HYPERV)) += hv_common.o +obj-$(call always_built_in,$(CONFIG_HYPERV)) += hv_common.o diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile index 3ea0126a9a72..1f4f9ce02490 100644 --- a/drivers/mmc/Makefile +++ b/drivers/mmc/Makefile @@ -4,4 +4,4 @@ # obj-$(CONFIG_MMC) += core/ -obj-$(subst m,y,$(CONFIG_MMC)) += host/ +obj-$(call always_built_in,$(CONFIG_MMC)) += host/ diff --git a/drivers/net/wireless/silabs/wfx/Makefile b/drivers/net/wireless/silabs/wfx/Makefile index c8b356f71c99..9fe47f5a050a 100644 --- a/drivers/net/wireless/silabs/wfx/Makefile +++ b/drivers/net/wireless/silabs/wfx/Makefile @@ -20,6 +20,6 @@ wfx-y := \ debug.o wfx-$(CONFIG_SPI) += bus_spi.o # When CONFIG_MMC == m, append to 'wfx-y' (and not to 'wfx-m') -wfx-$(subst m,y,$(CONFIG_MMC)) += bus_sdio.o +wfx-$(call always_built_in,$(CONFIG_MMC)) += bus_sdio.o obj-$(CONFIG_WFX) += wfx.o diff --git a/drivers/s390/char/Makefile b/drivers/s390/char/Makefile index ce32270082f5..d21086e99528 100644 --- a/drivers/s390/char/Makefile +++ b/drivers/s390/char/Makefile @@ -34,7 +34,7 @@ obj-$(CONFIG_SCLP_VT220_TTY) += sclp_vt220.o obj-$(CONFIG_PCI) += sclp_pci.o -obj-$(subst m,y,$(CONFIG_ZCRYPT)) += sclp_ap.o +obj-$(call always_built_in,$(CONFIG_ZCRYPT)) += sclp_ap.o obj-$(CONFIG_VMLOGRDR) += vmlogrdr.o obj-$(CONFIG_VMCP) += vmcp.o diff --git a/drivers/s390/crypto/Makefile b/drivers/s390/crypto/Makefile index 22d2db690cd3..e3594486d8f3 100644 --- a/drivers/s390/crypto/Makefile +++ b/drivers/s390/crypto/Makefile @@ -4,7 +4,7 @@ # ap-objs := ap_bus.o ap_card.o ap_queue.o -obj-$(subst m,y,$(CONFIG_ZCRYPT)) += ap.o +obj-$(call always_built_in,$(CONFIG_ZCRYPT)) += ap.o # zcrypt_api.o and zcrypt_msgtype*.o depend on ap.o zcrypt-objs := zcrypt_api.o zcrypt_card.o zcrypt_queue.o zcrypt-objs += zcrypt_msgtype6.o zcrypt_msgtype50.o diff --git a/net/8021q/Makefile b/net/8021q/Makefile index e05d4d7aab35..50b48af58322 100644 --- a/net/8021q/Makefile +++ b/net/8021q/Makefile @@ -2,7 +2,7 @@ # # Makefile for the Linux VLAN layer. # -obj-$(subst m,y,$(CONFIG_VLAN_8021Q)) += vlan_core.o +obj-$(call always_built_in,$(CONFIG_VLAN_8021Q)) += vlan_core.o obj-$(CONFIG_VLAN_8021Q) += 8021q.o 8021q-y := vlan.o vlan_dev.o vlan_netlink.o diff --git a/net/Makefile b/net/Makefile index 6a62e5b27378..94165eb38b65 100644 --- a/net/Makefile +++ b/net/Makefile @@ -42,7 +42,7 @@ obj-$(CONFIG_PHONET) += phonet/ ifneq ($(CONFIG_VLAN_8021Q),) obj-y += 8021q/ endif -obj-$(CONFIG_IP_DCCP) += dccp/ +obj-$(call always_built_in,$(CONFIG_IP_DCCP)) += dccp/ obj-$(CONFIG_IP_SCTP) += sctp/ obj-$(CONFIG_RDS) += rds/ obj-$(CONFIG_WIRELESS) += wireless/ diff --git a/net/bridge/Makefile b/net/bridge/Makefile index 24bd1c0a9a5a..4f3109e170c8 100644 --- a/net/bridge/Makefile +++ b/net/bridge/Makefile @@ -12,10 +12,10 @@ bridge-y := br.o br_device.o br_fdb.o br_forward.o br_if.o br_input.o \ bridge-$(CONFIG_SYSFS) += br_sysfs_if.o br_sysfs_br.o -bridge-$(subst m,y,$(CONFIG_BRIDGE_NETFILTER)) += br_nf_core.o +bridge-$(call always_built_in,$(CONFIG_BRIDGE_NETFILTER)) += br_nf_core.o br_netfilter-y := br_netfilter_hooks.o -br_netfilter-$(subst m,y,$(CONFIG_IPV6)) += br_netfilter_ipv6.o +br_netfilter-$(call always_built_in,$(CONFIG_IPV6)) += br_netfilter_ipv6.o obj-$(CONFIG_BRIDGE_NETFILTER) += br_netfilter.o bridge-$(CONFIG_BRIDGE_IGMP_SNOOPING) += br_multicast.o br_mdb.o br_multicast_eht.o diff --git a/net/dccp/Makefile b/net/dccp/Makefile index 5b4ff37bc806..607f6d3dd795 100644 --- a/net/dccp/Makefile +++ b/net/dccp/Makefile @@ -17,8 +17,8 @@ dccp-$(CONFIG_IP_DCCP_TFRC_LIB) += ccids/lib/tfrc.o \ dccp_ipv4-y := ipv4.o # build dccp_ipv6 as module whenever either IPv6 or DCCP is a module -obj-$(subst y,$(CONFIG_IP_DCCP),$(CONFIG_IPV6)) += dccp_ipv6.o -dccp_ipv6-y := ipv6.o +obj-$(call module_if_any_modular,$(CONFIG_IP_DCCP)$(CONFIG_IPV6)) += dccp_ipv6.o +dccp_ipv6-$(call module_if_any_modular,$(CONFIG_IP_DCCP)$(CONFIG_IPV6)) := ipv6.o obj-$(CONFIG_INET_DCCP_DIAG) += dccp_diag.o diff --git a/net/ipv6/Makefile b/net/ipv6/Makefile index 3036a45e8a1e..b05b0e4668f5 100644 --- a/net/ipv6/Makefile +++ b/net/ipv6/Makefile @@ -47,7 +47,7 @@ obj-y += addrconf_core.o exthdrs_core.o ip6_checksum.o ip6_icmp.o obj-$(CONFIG_INET) += output_core.o protocol.o \ ip6_offload.o tcpv6_offload.o exthdrs_offload.o -obj-$(subst m,y,$(CONFIG_IPV6)) += inet6_hashtables.o +obj-$(call always_built_in,$(CONFIG_IPV6)) += inet6_hashtables.o ifneq ($(CONFIG_IPV6),) obj-$(CONFIG_NET_UDP_TUNNEL) += ip6_udp_tunnel.o diff --git a/net/l2tp/Makefile b/net/l2tp/Makefile index cf8f27071d3f..ff94be92a36e 100644 --- a/net/l2tp/Makefile +++ b/net/l2tp/Makefile @@ -8,11 +8,11 @@ obj-$(CONFIG_L2TP) += l2tp_core.o CFLAGS_l2tp_core.o += -I$(src) # Build l2tp as modules if L2TP is M -obj-$(subst y,$(CONFIG_L2TP),$(CONFIG_PPPOL2TP)) += l2tp_ppp.o -obj-$(subst y,$(CONFIG_L2TP),$(CONFIG_L2TP_IP)) += l2tp_ip.o -obj-$(subst y,$(CONFIG_L2TP),$(CONFIG_L2TP_V3)) += l2tp_netlink.o -obj-$(subst y,$(CONFIG_L2TP),$(CONFIG_L2TP_ETH)) += l2tp_eth.o -obj-$(subst y,$(CONFIG_L2TP),$(CONFIG_L2TP_DEBUGFS)) += l2tp_debugfs.o +obj-$(subst Y,$(CONFIG_L2TP),$(subst y,$(CONFIG_L2TP),$(CONFIG_PPPOL2TP))) += l2tp_ppp.o +obj-$(subst Y,$(CONFIG_L2TP),$(subst y,$(CONFIG_L2TP),$(CONFIG_L2TP_IP))) += l2tp_ip.o +obj-$(subst Y,$(CONFIG_L2TP),$(subst y,$(CONFIG_L2TP),$(CONFIG_L2TP_V3))) += l2tp_netlink.o +obj-$(subst Y,$(CONFIG_L2TP),$(subst y,$(CONFIG_L2TP),$(CONFIG_L2TP_ETH))) += l2tp_eth.o +obj-$(subst Y,$(CONFIG_L2TP),$(subst y,$(CONFIG_L2TP),$(CONFIG_L2TP_DEBUGFS))) += l2tp_debugfs.o ifneq ($(CONFIG_IPV6),) -obj-$(subst y,$(CONFIG_L2TP),$(CONFIG_L2TP_IP)) += l2tp_ip6.o +obj-$(subst Y,$(CONFIG_L2TP),$(subst y,$(CONFIG_L2TP),$(CONFIG_L2TP_IP))) += l2tp_ip6.o endif diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile index 0f060d100880..a6f65c956b1b 100644 --- a/net/netfilter/Makefile +++ b/net/netfilter/Makefile @@ -6,7 +6,7 @@ nf_conntrack-y := nf_conntrack_core.o nf_conntrack_standalone.o nf_conntrack_exp nf_conntrack_proto_icmp.o \ nf_conntrack_extend.o nf_conntrack_acct.o nf_conntrack_seqadj.o -nf_conntrack-$(subst m,y,$(CONFIG_IPV6)) += nf_conntrack_proto_icmpv6.o +nf_conntrack-$(call always_built_in,$(CONFIG_IPV6)) += nf_conntrack_proto_icmpv6.o nf_conntrack-$(CONFIG_NF_CONNTRACK_TIMEOUT) += nf_conntrack_timeout.o nf_conntrack-$(CONFIG_NF_CONNTRACK_TIMESTAMP) += nf_conntrack_timestamp.o nf_conntrack-$(CONFIG_NF_CONNTRACK_EVENTS) += nf_conntrack_ecache.o diff --git a/net/netlabel/Makefile b/net/netlabel/Makefile index 5a46381a64e7..8052bd8e7af8 100644 --- a/net/netlabel/Makefile +++ b/net/netlabel/Makefile @@ -13,4 +13,4 @@ obj-y += netlabel_mgmt.o # protocol modules obj-y += netlabel_unlabeled.o obj-y += netlabel_cipso_v4.o -obj-$(subst m,y,$(CONFIG_IPV6)) += netlabel_calipso.o +obj-$(call always_built_in,$(CONFIG_IPV6)) += netlabel_calipso.o diff --git a/net/sctp/Makefile b/net/sctp/Makefile index e845e4588535..683a345f3626 100644 --- a/net/sctp/Makefile +++ b/net/sctp/Makefile @@ -21,4 +21,4 @@ sctp-$(CONFIG_SCTP_DBG_OBJCNT) += objcnt.o sctp-$(CONFIG_PROC_FS) += proc.o sctp-$(CONFIG_SYSCTL) += sysctl.o -sctp-$(subst m,y,$(CONFIG_IPV6)) += ipv6.o +sctp-$(call always_built_in,$(CONFIG_IPV6)) += ipv6.o diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index 8042c067312e..701bbb499427 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -188,6 +188,21 @@ cmd_and_fixdep = \ # and if so will execute $(rule_foo). if_changed_rule = $(if $(if-changed-cond),$(rule_$(1)),@:) +# Usage. $(call always-built-in,CONFIG_VAR) +# Expands to y if CONFIG_VAR is m, suitable for always-built-in pieces +# of things that otherwise may be modular. +always_built_in = $(subst M,Y,$(subst m,y,$(1))) + +# Usage, obj-$(call module_if_any_modular,$(CONCATENATED)$(CONFIG)$(VARS)) +# Expands to m if any of the concatenated config vars are m, otherwise +# y if any of them are y, otherwise n +module_if_any_modular = $(strip \ + $(if $(findstring m,$(subst M,m,$(1))), \ + $(if $(findstring M,$(1)),M,m), \ + $(if $(findstring y,$(subst Y,y,$(1))), \ + $(if $(findstring Y,$(1)),Y,y), \ + $(if $(findstring N,$(1)),N,n)))) + ### # why - tell why a target got built # enabled by make V=2 -- 2.38.0.266.g481848f278