From edbb5317f8e22a2c59497713e75701288b63b324 Mon Sep 17 00:00:00 2001 From: Laxman Dewangan Date: Mon, 1 Jul 2024 03:58:10 +0000 Subject: [PATCH] nvidia-oot: Remove the builds of device tree from nvidia-oot The build of device tree is moved to new folder/repo and hence it is not required to have build support file for device-tree. Remove the unused file. Bug 4654821 Change-Id: Id01d634d551d36bc9b36c8971b13ed27f7b6b6d6 Signed-off-by: Laxman Dewangan Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3165347 --- device-tree/platform/generic-dts/Makefile | 150 ------ device-tree/platform/legacy-dts/Makefile | 145 ------ scripts/Makefile.build | 570 ---------------------- scripts/Makefile.lib | 523 -------------------- 4 files changed, 1388 deletions(-) delete mode 100644 device-tree/platform/generic-dts/Makefile delete mode 100644 device-tree/platform/legacy-dts/Makefile delete mode 100644 scripts/Makefile.build delete mode 100644 scripts/Makefile.lib diff --git a/device-tree/platform/generic-dts/Makefile b/device-tree/platform/generic-dts/Makefile deleted file mode 100644 index e887f3a1..00000000 --- a/device-tree/platform/generic-dts/Makefile +++ /dev/null @@ -1,150 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: GPL-2.0-only - -objtree ?= $(srctree) - -# Redefine the fixdep command -cmd_and_fixdep = \ - $(cmd); \ - $(objtree)/scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).cmd;\ - rm -f $(depfile) - -include $(oottree)/scripts/Makefile.lib - -DTC_CPP_FLAGS += $(EXTRA_CPP_FLAGS) - -DTC_CPP_FLAGS += -DLINUX_VERSION=600 -DTEGRA_HOST1X_DT_VERSION=2 -DOS_LINUX - -ifneq ($(findstring ack_src,$(NV_BUILD_KERNEL_OPTIONS)),) -ifneq ($(TOP),) -SOURCE_TOP := $(TOP) -else -$(error TOP is not defined) -endif -else -ifneq ($(TEGRA_TOP),) -SOURCE_TOP := $(TEGRA_TOP) -else ifneq ($(TOP),) -SOURCE_TOP := $(TOP) -else -$(error TEGRA_TOP or TOP is not defined) -endif -endif - -tegra-dtstree := $(SOURCE_TOP)/hardware/nvidia - -# Get relative path for tegra-dtstree from this makefile -null := -space :=$(null) $(null) -obj-path := $(obj) -obj-path-from-top := $(subst $(SOURCE_TOP),,$(obj-path)) -rel-top-path := $(subst /, $(space)/,$(obj-path-from-top)) -rel-top-path := $(patsubst /%,../,$(rel-top-path)) -rel-top-path := $(subst $(space),,$(rel-top-path)) -tegra-rel-dtstree := $(rel-top-path)/hardware/nvidia - -DTC_INCLUDE := -# SOC independent common include -DTC_INCLUDE += $(tegra-dtstree)/tegra/nv-public -DTC_INCLUDE += $(tegra-dtstree)/tegra/nv-public/include/kernel - -# SOC T23X specific common include -DTC_INCLUDE += $(tegra-dtstree)/t23x/nv-public/include/kernel -DTC_INCLUDE += $(tegra-dtstree)/t23x/nv-public/include/nvidia-oot -DTC_INCLUDE += $(tegra-dtstree)/t23x/nv-public/include/platforms -DTC_INCLUDE += $(tegra-dtstree)/t23x/nv-public -DTC_INCLUDE += $(tegra-dtstree)/t264/nv-public/include/kernel-t264 -DTC_INCLUDE += $(tegra-dtstree)/t264/nv-public - -dtb-y := -dtbo-y := - -DTB_LIST := $(dtb-y) -DTBO_LIST := $(dtbo-y) -dtb-y := -fdts := $(tegra-dtstree)/t23x -fdts += $(tegra-dtstree)/t264 - -# Add internal SOCs to scan the DT makefiles -ifneq ($(internal_soc_list),) -fdts += $(addprefix $(tegra-dtstree)/,$(internal_soc_list)) -endif - -# Remove the DTs from protected soc list -ifneq ($(protected_soc_list),) -kdts := $(foreach dt_path, $(fdts), $(if $(filter $(protected_soc_list),$(patsubst -,$(space),$(subst /, $(space),$(dt_path)))),,$(dt_path))) -kdts := $(filter-out $(space)$(space),$(kdts)) -else -kdts := $(fdts) -endif - -dts_makefile=$(foreach d,$(wildcard $1*), $(call dts_makefile,$(d)/,$(2)) $(if $(findstring Makefile,$(d)),$(d))) -dts_mfiles = $(call dts_makefile, $(kdts), Makefile) - -ifneq ($(dts_mfiles),) -dts-include := -include $(dts_mfiles) -dtb-y := $(addprefix $(tegra-rel-dtstree)/,$(dtb-y)) -dtbo-y := $(addprefix $(tegra-rel-dtstree)/,$(dtbo-y)) -ifneq ($(dts-include),) -DTC_INCLUDE += $(addprefix $(tegra-dtstree)/,$(dts-include)) -endif -endif - -DTB_LIST += $(dtb-y) -DTBO_LIST += $(dtbo-y) -DTB_NEW_RULE_LIST := $(dtb-y) -DTBO_NEW_RULE_LIST := $(dtbo-y) - -# Now save DTB_LIST to dtb-y -dtb-y := $(DTB_LIST) -dtbo-y := $(DTBO_LIST) - -# Add path of main Makefile to each dtb/dtbo list -DTB_OBJS := $(addprefix $(obj)/,$(DTB_LIST)) -DTBO_OBJS := $(addprefix $(obj)/,$(DTBO_LIST)) - -### -# remove the ../ -replace_ddot = $(subst ../,,$(1)) - -define _define_dtb_rule -$(obj)/$(call replace_ddot,$(1)): $(src)/$(patsubst %.dtb,%.dts,$(1)) FORCE -endef - -$(foreach _dtb, $(DTB_NEW_RULE_LIST), $(eval $(call _define_dtb_rule,$(_dtb)))) - -DTB_OBJS := $(call replace_ddot,$(DTB_OBJS)) -DTB_NEW_RULE_LIST := $(addprefix $(obj)/,$(DTB_NEW_RULE_LIST)) -DTB_NEW_RULE_LIST := $(call replace_ddot,$(DTB_NEW_RULE_LIST)) - -$(DTB_NEW_RULE_LIST): - $(call if_changed_dep,dtc) - -define _define_dtbo_rule -$(obj)/$(call replace_ddot,$(1)): $(src)/$(patsubst %.dtbo,%.dts,$(1)) FORCE -endef - -$(foreach _dtbo, $(DTBO_NEW_RULE_LIST), $(eval $(call _define_dtbo_rule,$(_dtbo)))) - -DTBO_OBJS := $(call replace_ddot,$(DTBO_OBJS)) -DTBO_NEW_RULE_LIST := $(addprefix $(obj)/,$(DTBO_NEW_RULE_LIST)) -DTBO_NEW_RULE_LIST := $(call replace_ddot,$(DTBO_NEW_RULE_LIST)) - -$(DTBO_NEW_RULE_LIST): - $(call if_changed_dep,dtc) - -DTBS_DTBOS := $(DTB_OBJS)$(DTBO_OBJS) - -dtbs: $(DTB_OBJS) $(DTBO_OBJS) FORCE - if [ ! -d $(obj)/dtbs/ ] ; then \ - mkdir -p $(obj)/dtbs/ ; \ - fi - if [ ! -z "$(DTBS_DTBOS)" ] ; then \ - cp -u $(DTB_OBJS) $(DTBO_OBJS) $(obj)/dtbs/ ; \ - fi - if [ -d $(obj)/hardware/ ] ; then \ - rm -rf $(obj)/hardware/ ; \ - fi - -clean-files := *.dtb *.dtbo *.tmp diff --git a/device-tree/platform/legacy-dts/Makefile b/device-tree/platform/legacy-dts/Makefile deleted file mode 100644 index 035f73ff..00000000 --- a/device-tree/platform/legacy-dts/Makefile +++ /dev/null @@ -1,145 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: GPL-2.0-only - -objtree = $(srctree) - -# Redefine the fixdep command -cmd_and_fixdep = \ - $(cmd); \ - $(objtree)/scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).cmd;\ - rm -f $(depfile) - -include $(oottree)/scripts/Makefile.lib - -# Stop warning of the graph port and graph endpoint -DTC_FLAGS += -Wno-graph_port -DTC_FLAGS += -Wno-graph_endpoint - -DTC_CPP_FLAGS += $(EXTRA_CPP_FLAGS) - -DTC_CPP_FLAGS += -DLINUX_VERSION=600 -DTEGRA_HOST1X_DT_VERSION=2 -DOS_LINUX - -ifneq ($(findstring ack_src,$(NV_BUILD_KERNEL_OPTIONS)),) -ifneq ($(TOP),) -SOURCE_TOP := $(TOP) -else -$(error TOP is not defined) -endif -else -ifneq ($(TEGRA_TOP),) -SOURCE_TOP := $(TEGRA_TOP) -else ifneq ($(TOP),) -SOURCE_TOP := $(TOP) -else -$(error TEGRA_TOP or TOP is not defined) -endif -endif - -tegra-dtstree := $(SOURCE_TOP)/hardware/nvidia -# Get relative path for tegra-dtstree from this makefile -null := -space :=$(null) $(null) -obj-path := $(obj) -obj-path-from-top := $(subst $(SOURCE_TOP),,$(obj-path)) -rel-top-path := $(subst /, $(space)/,$(obj-path-from-top)) -rel-top-path := $(patsubst /%,../,$(rel-top-path)) -rel-top-path := $(subst $(space),,$(rel-top-path)) -tegra-rel-dtstree := $(rel-top-path)/hardware/nvidia - -DTC_INCLUDE := -# SOC independent common include -DTC_INCLUDE += $(tegra-dtstree)/soc/tegra/kernel-include -DTC_INCLUDE += $(tegra-dtstree)/platform/tegra/common/kernel-dts - -# SOC T23X specific common include -DTC_INCLUDE += $(tegra-dtstree)/soc/t23x/kernel-include -DTC_INCLUDE += $(tegra-dtstree)/soc/t23x/kernel-dts -DTC_INCLUDE += $(tegra-dtstree)/platform/t23x/common/kernel-dts -DTC_INCLUDE += $(tegra-dtstree)/platform/t23x/automotive/kernel-dts/common/linux/ - -dtb-oot-y := -dtbo-oot-y := - -DTB_LIST := $(dtb-oot-y) -DTBO_LIST := $(dtbo-oot-y) -dtb-oot-y := -fdts := $(shell find $(tegra-dtstree)/platform -name kernel-dts) - -# Remove the DTs from protected soc list -ifneq ($(protected_soc_list),) -kdts := $(foreach dt_path, $(fdts), $(if $(filter $(protected_soc_list),$(patsubst -,$(space),$(subst /, $(space),$(dt_path)))),,$(dt_path))) -kdts := $(filter-out $(space)$(space),$(kdts)) -else -kdts := $(fdts) -endif - -dts_makefile=$(foreach d,$(wildcard $1*), $(call dts_makefile,$(d)/,$(2)) $(if $(findstring Makefile,$(d)),$(d))) -dts_mfiles = $(call dts_makefile, $(kdts), Makefile) - -ifneq ($(dts_mfiles),) -dts-include := -include $(dts_mfiles) -dtb-oot-y := $(addprefix $(tegra-rel-dtstree)/,$(dtb-oot-y)) -dtbo-oot-y := $(addprefix $(tegra-rel-dtstree)/,$(dtbo-oot-y)) -ifneq ($(dts-include),) -DTC_INCLUDE += $(addprefix $(tegra-dtstree)/,$(dts-include)) -endif -endif - -DTB_LIST += $(dtb-oot-y) -DTBO_LIST += $(dtbo-oot-y) -DTB_NEW_RULE_LIST := $(dtb-oot-y) -DTBO_NEW_RULE_LIST := $(dtbo-oot-y) - -# Now save DTB_LIST to dtb-oot-y -dtb-oot-y := $(DTB_LIST) -dtbo-oot-y := $(DTBO_LIST) - -# Add path of main Makefile to each dtb/dtbo list -DTB_OBJS := $(addprefix $(obj)/,$(DTB_LIST)) -DTBO_OBJS := $(addprefix $(obj)/,$(DTBO_LIST)) - -### -# remove the ../ -replace_ddot = $(subst ../,,$(1)) - -define _define_dtb_rule -$(obj)/$(call replace_ddot,$(1)): $(src)/$(patsubst %.dtb,%.dts,$(1)) FORCE -endef - -$(foreach _dtb, $(DTB_NEW_RULE_LIST), $(eval $(call _define_dtb_rule,$(_dtb)))) - -DTB_OBJS := $(call replace_ddot,$(DTB_OBJS)) -DTB_NEW_RULE_LIST := $(addprefix $(obj)/,$(DTB_NEW_RULE_LIST)) -DTB_NEW_RULE_LIST := $(call replace_ddot,$(DTB_NEW_RULE_LIST)) - -$(DTB_NEW_RULE_LIST): - $(call if_changed_dep,dtc) - -define _define_dtbo_rule -$(obj)/$(call replace_ddot,$(1)): $(src)/$(patsubst %.dtbo,%.dts,$(1)) FORCE -endef - -$(foreach _dtbo, $(DTBO_NEW_RULE_LIST), $(eval $(call _define_dtbo_rule,$(_dtbo)))) - -DTBO_OBJS := $(call replace_ddot,$(DTBO_OBJS)) -DTBO_NEW_RULE_LIST := $(addprefix $(obj)/,$(DTBO_NEW_RULE_LIST)) -DTBO_NEW_RULE_LIST := $(call replace_ddot,$(DTBO_NEW_RULE_LIST)) - -$(DTBO_NEW_RULE_LIST): - $(call if_changed_dep,dtc) - -DTBS_DTBOS := $(DTB_OBJS)$(DTBO_OBJS) - -dtbs: $(DTB_OBJS) $(DTBO_OBJS) FORCE - if [ ! -d $(obj)/dtbs/ ] ; then \ - mkdir -p $(obj)/dtbs/ ; \ - fi - if [ ! -z "$(DTBS_DTBOS)" ] ; then \ - cp -u $(DTB_OBJS) $(DTBO_OBJS) $(obj)/dtbs/ ; \ - fi - if [ -d $(obj)/hardware/ ] ; then \ - rm -rf $(obj)/hardware/ ; \ - fi - -clean-files := *.dtb *.dtbo *.tmp diff --git a/scripts/Makefile.build b/scripts/Makefile.build deleted file mode 100644 index 1e516963..00000000 --- a/scripts/Makefile.build +++ /dev/null @@ -1,570 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# ========================================================================== -# Building -# ========================================================================== - -src := $(obj) - -PHONY := __build -__build: - -# Init all relevant variables used in kbuild files so -# 1) they have correct type -# 2) they do not inherit any value from the environment -obj-y := -obj-m := -lib-y := -lib-m := -always-y := -always-m := -targets := -subdir-y := -subdir-m := -EXTRA_AFLAGS := -EXTRA_CFLAGS := -EXTRA_CPPFLAGS := -EXTRA_LDFLAGS := -asflags-y := -ccflags-y := -cppflags-y := -ldflags-y := - -subdir-asflags-y := -subdir-ccflags-y := - -# Read auto.conf if it exists, otherwise ignore --include include/config/auto.conf - -include $(srctree)/scripts/Kbuild.include -include $(srctree)/scripts/Makefile.compiler - -# The filename Kbuild has precedence over Makefile -kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) -kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile) -include $(kbuild-file) - -include $(oottree)/scripts/Makefile.lib - -# Do not include hostprogs rules unless needed. -# $(sort ...) is used here to remove duplicated words and excessive spaces. -hostprogs := $(sort $(hostprogs)) -ifneq ($(hostprogs),) -include $(srctree)/scripts/Makefile.host -endif - -# Do not include userprogs rules unless needed. -# $(sort ...) is used here to remove duplicated words and excessive spaces. -userprogs := $(sort $(userprogs)) -ifneq ($(userprogs),) -include $(srctree)/scripts/Makefile.userprogs -endif - -ifndef obj -$(warning kbuild: Makefile.build is included improperly) -endif - -ifeq ($(need-modorder),) -ifneq ($(obj-m),) -$(warning $(patsubst %.o,'%.ko',$(obj-m)) will not be built even though obj-m is specified.) -$(warning You cannot use subdir-y/m to visit a module Makefile. Use obj-y/m instead.) -endif -endif - -# =========================================================================== - -# subdir-builtin and subdir-modorder may contain duplications. Use $(sort ...) -subdir-builtin := $(sort $(filter %/built-in.a, $(real-obj-y))) -subdir-modorder := $(sort $(filter %/modules.order, $(obj-m))) - -targets-for-builtin := $(extra-y) - -ifneq ($(strip $(lib-y) $(lib-m) $(lib-)),) -targets-for-builtin += $(obj)/lib.a -endif - -ifdef need-builtin -targets-for-builtin += $(obj)/built-in.a -endif - -targets-for-modules := $(patsubst %.o, %.mod, $(filter %.o, $(obj-m))) - -ifdef CONFIG_LTO_CLANG -targets-for-modules += $(patsubst %.o, %.lto.o, $(filter %.o, $(obj-m))) -endif - -ifdef need-modorder -targets-for-modules += $(obj)/modules.order -endif - -targets += $(targets-for-builtin) $(targets-for-modules) - -# Linus' kernel sanity checking tool -ifeq ($(KBUILD_CHECKSRC),1) - quiet_cmd_checksrc = CHECK $< - cmd_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< -else ifeq ($(KBUILD_CHECKSRC),2) - quiet_cmd_force_checksrc = CHECK $< - cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< -endif - -ifneq ($(KBUILD_EXTRA_WARN),) - cmd_checkdoc = $(srctree)/scripts/kernel-doc -none $< -endif - -# Compile C sources (.c) -# --------------------------------------------------------------------------- - -quiet_cmd_cc_s_c = CC $(quiet_modtag) $@ - cmd_cc_s_c = $(CC) $(filter-out $(DEBUG_CFLAGS) $(CC_FLAGS_LTO), $(c_flags)) -fverbose-asm -S -o $@ $< - -$(obj)/%.s: $(src)/%.c FORCE - $(call if_changed_dep,cc_s_c) - -quiet_cmd_cpp_i_c = CPP $(quiet_modtag) $@ -cmd_cpp_i_c = $(CPP) $(c_flags) -o $@ $< - -$(obj)/%.i: $(src)/%.c FORCE - $(call if_changed_dep,cpp_i_c) - -# These mirror gensymtypes_S and co below, keep them in synch. -cmd_gensymtypes_c = \ - $(CPP) -D__GENKSYMS__ $(c_flags) $< | \ - scripts/genksyms/genksyms $(if $(1), -T $(2)) \ - $(patsubst y,-R,$(CONFIG_MODULE_REL_CRCS)) \ - $(if $(KBUILD_PRESERVE),-p) \ - -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null)) - -quiet_cmd_cc_symtypes_c = SYM $(quiet_modtag) $@ -cmd_cc_symtypes_c = \ - $(call cmd_gensymtypes_c,true,$@) >/dev/null; \ - test -s $@ || rm -f $@ - -$(obj)/%.symtypes : $(src)/%.c FORCE - $(call cmd,cc_symtypes_c) - -# LLVM assembly -# Generate .ll files from .c -quiet_cmd_cc_ll_c = CC $(quiet_modtag) $@ - cmd_cc_ll_c = $(CC) $(c_flags) -emit-llvm -S -o $@ $< - -$(obj)/%.ll: $(src)/%.c FORCE - $(call if_changed_dep,cc_ll_c) - -# C (.c) files -# The C file is compiled and updated dependency information is generated. -# (See cmd_cc_o_c + relevant part of rule_cc_o_c) - -quiet_cmd_cc_o_c = CC $(quiet_modtag) $@ - cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< - -ifdef CONFIG_MODVERSIONS -# When module versioning is enabled the following steps are executed: -# o compile a .o from .c -# o if .o doesn't contain a __ksymtab version, i.e. does -# not export symbols, it's done. -# o otherwise, we calculate symbol versions using the good old -# genksyms on the preprocessed source and postprocess them in a way -# that they are usable as a linker script -# o generate .tmp_.o from .o using the linker to -# replace the unresolved symbols __crc_exported_symbol with -# the actual value of the checksum generated by genksyms -# o remove .tmp_.o to .o - -ifdef CONFIG_LTO_CLANG -# Generate .o.symversions files for each .o with exported symbols, and link these -# to the kernel and/or modules at the end. -cmd_modversions_c = \ - if $(NM) $@ 2>/dev/null | grep -q __ksymtab; then \ - $(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ - > $@.symversions; \ - else \ - rm -f $@.symversions; \ - fi; -else -cmd_modversions_c = \ - if $(OBJDUMP) -h $@ | grep -q __ksymtab; then \ - $(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ - > $(@D)/.tmp_$(@F:.o=.ver); \ - \ - $(LD) $(KBUILD_LDFLAGS) -r -o $(@D)/.tmp_$(@F) $@ \ - -T $(@D)/.tmp_$(@F:.o=.ver); \ - mv -f $(@D)/.tmp_$(@F) $@; \ - rm -f $(@D)/.tmp_$(@F:.o=.ver); \ - fi -endif -endif - -ifdef CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT -# compiler will not generate __mcount_loc use recordmcount or recordmcount.pl -ifdef BUILD_C_RECORDMCOUNT -ifeq ("$(origin RECORDMCOUNT_WARN)", "command line") - RECORDMCOUNT_FLAGS = -w -endif -# Due to recursion, we must skip empty.o. -# The empty.o file is created in the make process in order to determine -# the target endianness and word size. It is made before all other C -# files, including recordmcount. -sub_cmd_record_mcount = \ - if [ $(@) != "scripts/mod/empty.o" ]; then \ - $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)"; \ - fi; -recordmcount_source := $(srctree)/scripts/recordmcount.c \ - $(srctree)/scripts/recordmcount.h -else -sub_cmd_record_mcount = perl $(srctree)/scripts/recordmcount.pl "$(ARCH)" \ - "$(if $(CONFIG_CPU_BIG_ENDIAN),big,little)" \ - "$(if $(CONFIG_64BIT),64,32)" \ - "$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS)" \ - "$(LD) $(KBUILD_LDFLAGS)" "$(NM)" "$(RM)" "$(MV)" \ - "$(if $(part-of-module),1,0)" "$(@)"; -recordmcount_source := $(srctree)/scripts/recordmcount.pl -endif # BUILD_C_RECORDMCOUNT -cmd_record_mcount = $(if $(findstring $(strip $(CC_FLAGS_FTRACE)),$(_c_flags)), \ - $(sub_cmd_record_mcount)) -endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT - -ifdef CONFIG_STACK_VALIDATION -ifndef CONFIG_LTO_CLANG - -__objtool_obj := $(objtree)/tools/objtool/objtool - -# 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory -# 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file -# 'OBJECT_FILES_NON_STANDARD_foo.o := 'n': override directory skip for a file -cmd_objtool = $(if $(patsubst y%,, \ - $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \ - $(__objtool_obj) $(objtool_args) $@) -objtool_obj = $(if $(patsubst y%,, \ - $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \ - $(__objtool_obj)) - -endif # CONFIG_LTO_CLANG -endif # CONFIG_STACK_VALIDATION - -# Rebuild all objects when objtool changes, or is enabled/disabled. -objtool_dep = $(objtool_obj) \ - $(wildcard include/config/ORC_UNWINDER \ - include/config/STACK_VALIDATION) - -ifdef CONFIG_TRIM_UNUSED_KSYMS -cmd_gen_ksymdeps = \ - $(CONFIG_SHELL) $(srctree)/scripts/gen_ksymdeps.sh $@ >> $(dot-target).cmd - -# List module undefined symbols -undefined_syms = $(NM) $< | $(AWK) '$$1 == "U" { printf("%s%s", x++ ? " " : "", $$2) }'; -endif - -define rule_cc_o_c - $(call cmd_and_fixdep,cc_o_c) - $(call cmd,gen_ksymdeps) - $(call cmd,checksrc) - $(call cmd,checkdoc) - $(call cmd,objtool) - $(call cmd,modversions_c) - $(call cmd,record_mcount) -endef - -define rule_as_o_S - $(call cmd_and_fixdep,as_o_S) - $(call cmd,gen_ksymdeps) - $(call cmd,objtool) - $(call cmd,modversions_S) -endef - -# Built-in and composite module parts -.SECONDEXPANSION: -$(obj)/%.o: $(src)/%.c $(recordmcount_source) $$(objtool_dep) FORCE - $(call if_changed_rule,cc_o_c) - $(call cmd,force_checksrc) - -ifdef CONFIG_LTO_CLANG -# Module .o files may contain LLVM bitcode, compile them into native code -# before ELF processing -quiet_cmd_cc_lto_link_modules = LTO [M] $@ -cmd_cc_lto_link_modules = \ - $(LD) $(ld_flags) -r -o $@ \ - $(shell [ -s $(@:.lto.o=.o.symversions) ] && \ - echo -T $(@:.lto.o=.o.symversions)) \ - --whole-archive $(filter-out FORCE,$^) - -ifdef CONFIG_STACK_VALIDATION -# objtool was skipped for LLVM bitcode, run it now that we have compiled -# modules into native code -cmd_cc_lto_link_modules += ; \ - $(objtree)/tools/objtool/objtool $(objtool_args) --module $@ -endif - -$(obj)/%.lto.o: $(obj)/%.o FORCE - $(call if_changed,cc_lto_link_modules) -endif - -cmd_mod = { \ - echo $(if $($*-objs)$($*-y)$($*-m), $(addprefix $(obj)/, $($*-objs) $($*-y) $($*-m)), $(@:.mod=.o)); \ - $(undefined_syms) echo; \ - } > $@ - -$(obj)/%.mod: $(obj)/%$(mod-prelink-ext).o FORCE - $(call if_changed,mod) - -quiet_cmd_cc_lst_c = MKLST $@ - cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \ - $(CONFIG_SHELL) $(srctree)/scripts/makelst $*.o \ - System.map $(OBJDUMP) > $@ - -$(obj)/%.lst: $(src)/%.c FORCE - $(call if_changed_dep,cc_lst_c) - -# Compile assembler sources (.S) -# --------------------------------------------------------------------------- - -# .S file exports must have their C prototypes defined in asm/asm-prototypes.h -# or a file that it includes, in order to get versioned symbols. We build a -# dummy C file that includes asm-prototypes and the EXPORT_SYMBOL lines from -# the .S file (with trailing ';'), and run genksyms on that, to extract vers. -# -# This is convoluted. The .S file must first be preprocessed to run guards and -# expand names, then the resulting exports must be constructed into plain -# EXPORT_SYMBOL(symbol); to build our dummy C file, and that gets preprocessed -# to make the genksyms input. -# -# These mirror gensymtypes_c and co above, keep them in synch. -cmd_gensymtypes_S = \ - { echo "\#include " ; \ - echo "\#include " ; \ - $(CPP) $(a_flags) $< | \ - grep "\<___EXPORT_SYMBOL\>" | \ - sed 's/.*___EXPORT_SYMBOL[[:space:]]*\([a-zA-Z0-9_]*\)[[:space:]]*,.*/EXPORT_SYMBOL(\1);/' ; } | \ - $(CPP) -D__GENKSYMS__ $(c_flags) -xc - | \ - scripts/genksyms/genksyms $(if $(1), -T $(2)) \ - $(patsubst y,-R,$(CONFIG_MODULE_REL_CRCS)) \ - $(if $(KBUILD_PRESERVE),-p) \ - -r $(firstword $(wildcard $(2:.symtypes=.symref) /dev/null)) - -quiet_cmd_cc_symtypes_S = SYM $(quiet_modtag) $@ -cmd_cc_symtypes_S = \ - $(call cmd_gensymtypes_S,true,$@) >/dev/null; \ - test -s $@ || rm -f $@ - -$(obj)/%.symtypes : $(src)/%.S FORCE - $(call cmd,cc_symtypes_S) - - -quiet_cmd_cpp_s_S = CPP $(quiet_modtag) $@ -cmd_cpp_s_S = $(CPP) $(a_flags) -o $@ $< - -$(obj)/%.s: $(src)/%.S FORCE - $(call if_changed_dep,cpp_s_S) - -quiet_cmd_as_o_S = AS $(quiet_modtag) $@ - cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< - -ifdef CONFIG_ASM_MODVERSIONS - -# versioning matches the C process described above, with difference that -# we parse asm-prototypes.h C header to get function definitions. - -cmd_modversions_S = \ - if $(OBJDUMP) -h $@ | grep -q __ksymtab; then \ - $(call cmd_gensymtypes_S,$(KBUILD_SYMTYPES),$(@:.o=.symtypes)) \ - > $(@D)/.tmp_$(@F:.o=.ver); \ - \ - $(LD) $(KBUILD_LDFLAGS) -r -o $(@D)/.tmp_$(@F) $@ \ - -T $(@D)/.tmp_$(@F:.o=.ver); \ - mv -f $(@D)/.tmp_$(@F) $@; \ - rm -f $(@D)/.tmp_$(@F:.o=.ver); \ - fi -endif - -$(obj)/%.o: $(src)/%.S $$(objtool_dep) FORCE - $(call if_changed_rule,as_o_S) - -targets += $(filter-out $(subdir-builtin), $(real-obj-y)) -targets += $(filter-out $(subdir-modorder), $(real-obj-m)) -targets += $(real-dtb-y) $(lib-y) $(always-y) $(MAKECMDGOALS) - -# Linker scripts preprocessor (.lds.S -> .lds) -# --------------------------------------------------------------------------- -quiet_cmd_cpp_lds_S = LDS $@ - cmd_cpp_lds_S = $(CPP) $(cpp_flags) -P -U$(ARCH) \ - -D__ASSEMBLY__ -DLINKER_SCRIPT -o $@ $< - -$(obj)/%.lds: $(src)/%.lds.S FORCE - $(call if_changed_dep,cpp_lds_S) - -# ASN.1 grammar -# --------------------------------------------------------------------------- -quiet_cmd_asn1_compiler = ASN.1 $(basename $@).[ch] - cmd_asn1_compiler = $(objtree)/scripts/asn1_compiler $< \ - $(basename $@).c $(basename $@).h - -$(obj)/%.asn1.c $(obj)/%.asn1.h: $(src)/%.asn1 $(objtree)/scripts/asn1_compiler - $(call cmd,asn1_compiler) - -# Build the compiled-in targets -# --------------------------------------------------------------------------- - -# To build objects in subdirs, we need to descend into the directories -$(subdir-builtin): $(obj)/%/built-in.a: $(obj)/% ; -$(subdir-modorder): $(obj)/%/modules.order: $(obj)/% ; - -# combine symversions for later processing -ifeq ($(CONFIG_LTO_CLANG) $(CONFIG_MODVERSIONS),y y) - cmd_update_lto_symversions = \ - rm -f $@.symversions \ - $(foreach n, $(filter-out FORCE,$^), \ - $(if $(shell test -s $(n).symversions && echo y), \ - ; cat $(n).symversions >> $@.symversions)) -else - cmd_update_lto_symversions = echo >/dev/null -endif - -# -# Rule to compile a set of .o files into one .a file (without symbol table) -# - -quiet_cmd_ar_builtin = AR $@ - cmd_ar_builtin = rm -f $@; $(AR) cDPrST $@ $(real-prereqs) - -quiet_cmd_ar_and_symver = AR $@ - cmd_ar_and_symver = $(cmd_update_lto_symversions); $(cmd_ar_builtin) - -$(obj)/built-in.a: $(real-obj-y) FORCE - $(call if_changed,ar_and_symver) - -# -# Rule to create modules.order file -# -# Create commands to either record .ko file or cat modules.order from -# a subdirectory -# Add $(obj-m) as the prerequisite to avoid updating the timestamp of -# modules.order unless contained modules are updated. - -cmd_modules_order = { $(foreach m, $(real-prereqs), \ - $(if $(filter %/modules.order, $m), cat $m, echo $(patsubst %.o,%.ko,$m));) :; } \ - | $(AWK) '!x[$$0]++' - > $@ - -$(obj)/modules.order: $(obj-m) FORCE - $(call if_changed,modules_order) - -# -# Rule to compile a set of .o files into one .a file (with symbol table) -# -quiet_cmd_ar_lib = AR $@ - cmd_ar_lib = $(cmd_update_lto_symversions); $(cmd_ar) - -$(obj)/lib.a: $(lib-y) FORCE - $(call if_changed,ar_lib) - -# NOTE: -# Do not replace $(filter %.o,^) with $(real-prereqs). When a single object -# module is turned into a multi object module, $^ will contain header file -# dependencies recorded in the .*.cmd file. -ifdef CONFIG_LTO_CLANG -quiet_cmd_link_multi-m = AR [M] $@ -cmd_link_multi-m = \ - $(cmd_update_lto_symversions); \ - rm -f $@; \ - $(AR) cDPrsT $@ $(filter %.o,$^) -else -quiet_cmd_link_multi-m = LD [M] $@ - cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ $(filter %.o,$^) -endif - -$(multi-obj-m): FORCE - $(call if_changed,link_multi-m) -$(call multi_depend, $(multi-obj-m), .o, -objs -y -m) - -targets += $(multi-obj-m) -targets := $(filter-out $(PHONY), $(targets)) - -# Add intermediate targets: -# When building objects with specific suffix patterns, add intermediate -# targets that the final targets are derived from. -intermediate_targets = $(foreach sfx, $(2), \ - $(patsubst %$(strip $(1)),%$(sfx), \ - $(filter %$(strip $(1)), $(targets)))) -# %.asn1.o <- %.asn1.[ch] <- %.asn1 -# %.dtb.o <- %.dtb.S <- %.dtb <- %.dts -# %.lex.o <- %.lex.c <- %.l -# %.tab.o <- %.tab.[ch] <- %.y -targets += $(call intermediate_targets, .asn1.o, .asn1.c .asn1.h) \ - $(call intermediate_targets, .dtb.o, .dtb.S .dtb) \ - $(call intermediate_targets, .lex.o, .lex.c) \ - $(call intermediate_targets, .tab.o, .tab.c .tab.h) - -# Build -# --------------------------------------------------------------------------- - -ifdef single-build - -KBUILD_SINGLE_TARGETS := $(filter $(obj)/%, $(KBUILD_SINGLE_TARGETS)) - -curdir-single := $(sort $(foreach x, $(KBUILD_SINGLE_TARGETS), \ - $(if $(filter $(x) $(basename $(x)).o, $(targets)), $(x)))) - -# Handle single targets without any rule: show "Nothing to be done for ..." or -# "No rule to make target ..." depending on whether the target exists. -unknown-single := $(filter-out $(addsuffix /%, $(subdir-ym)), \ - $(filter-out $(curdir-single), $(KBUILD_SINGLE_TARGETS))) - -single-subdirs := $(foreach d, $(subdir-ym), \ - $(if $(filter $(d)/%, $(KBUILD_SINGLE_TARGETS)), $(d))) - -__build: $(curdir-single) $(single-subdirs) -ifneq ($(unknown-single),) - $(Q)$(MAKE) -f /dev/null $(unknown-single) -endif - @: - -ifeq ($(curdir-single),) -# Nothing to do in this directory. Do not include any .*.cmd file for speed-up -targets := -else -targets += $(curdir-single) -endif - -else - -__build: $(if $(KBUILD_BUILTIN), $(targets-for-builtin)) \ - $(if $(KBUILD_MODULES), $(targets-for-modules)) \ - $(subdir-ym) $(always-y) - @: - -endif - -# Descending -# --------------------------------------------------------------------------- - -PHONY += $(subdir-ym) -$(subdir-ym): - $(Q)$(MAKE) $(build)=$@ \ - $(if $(filter $@/, $(KBUILD_SINGLE_TARGETS)),single-build=) \ - need-builtin=$(if $(filter $@/built-in.a, $(subdir-builtin)),1) \ - need-modorder=$(if $(filter $@/modules.order, $(subdir-modorder)),1) - -# Add FORCE to the prequisites of a target to force it to be always rebuilt. -# --------------------------------------------------------------------------- - -PHONY += FORCE - -FORCE: - -# Read all saved command lines and dependencies for the $(targets) we -# may be building above, using $(if_changed{,_dep}). As an -# optimization, we don't need to read them if the target does not -# exist, we will rebuild anyway in that case. - -existing-targets := $(wildcard $(sort $(targets))) - --include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd) - -# Create directories for object files if they do not exist -obj-dirs := $(sort $(patsubst %/,%, $(dir $(targets)))) -# If targets exist, their directories apparently exist. Skip mkdir. -existing-dirs := $(sort $(patsubst %/,%, $(dir $(existing-targets)))) -obj-dirs := $(strip $(filter-out $(existing-dirs), $(obj-dirs))) -ifneq ($(obj-dirs),) -$(shell mkdir -p $(obj-dirs)) -endif - -.PHONY: $(PHONY) diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib deleted file mode 100644 index 0314ea29..00000000 --- a/scripts/Makefile.lib +++ /dev/null @@ -1,523 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Backward compatibility -asflags-y += $(EXTRA_AFLAGS) -ccflags-y += $(EXTRA_CFLAGS) -cppflags-y += $(EXTRA_CPPFLAGS) -ldflags-y += $(EXTRA_LDFLAGS) - -# flags that take effect in current and sub directories -KBUILD_AFLAGS += $(subdir-asflags-y) -KBUILD_CFLAGS += $(subdir-ccflags-y) - -# Figure out what we need to build from the various variables -# =========================================================================== - -# When an object is listed to be built compiled-in and modular, -# only build the compiled-in version -obj-m := $(filter-out $(obj-y),$(obj-m)) - -# Libraries are always collected in one lib file. -# Filter out objects already built-in -lib-y := $(filter-out $(obj-y), $(sort $(lib-y) $(lib-m))) - -# Subdirectories we need to descend into -subdir-ym := $(sort $(subdir-y) $(subdir-m) \ - $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-m)))) - -# Handle objects in subdirs: -# - If we encounter foo/ in $(obj-y), replace it by foo/built-in.a and -# foo/modules.order -# - If we encounter foo/ in $(obj-m), replace it by foo/modules.order -# -# Generate modules.order to determine modorder. Unfortunately, we don't have -# information about ordering between -y and -m subdirs. Just put -y's first. - -ifdef need-modorder -obj-m := $(patsubst %/,%/modules.order, $(filter %/, $(obj-y)) $(obj-m)) -else -obj-m := $(filter-out %/, $(obj-m)) -endif - -ifdef need-builtin -obj-y := $(patsubst %/, %/built-in.a, $(obj-y)) -else -obj-y := $(filter-out %/, $(obj-y)) -endif - -# Expand $(foo-objs) $(foo-y) etc. by replacing their individuals -suffix-search = $(strip $(foreach s, $3, $($(1:%$(strip $2)=%$s)))) -# List composite targets that are constructed by combining other targets -multi-search = $(sort $(foreach m, $1, $(if $(call suffix-search, $m, $2, $3 -), $m))) -# List primitive targets that are compiled from source files -real-search = $(foreach m, $1, $(if $(call suffix-search, $m, $2, $3 -), $(call suffix-search, $m, $2, $3), $m)) - -# If $(foo-objs), $(foo-y), $(foo-m), or $(foo-) exists, foo.o is a composite object -multi-obj-y := $(call multi-search, $(obj-y), .o, -objs -y) -multi-obj-m := $(call multi-search, $(obj-m), .o, -objs -y -m) -multi-obj-ym := $(multi-obj-y) $(multi-obj-m) - -# Replace multi-part objects by their individual parts, -# including built-in.a from subdirectories -real-obj-y := $(call real-search, $(obj-y), .o, -objs -y) -real-obj-m := $(call real-search, $(obj-m), .o, -objs -y -m) - -always-y += $(always-m) - -# hostprogs-always-y += foo -# ... is a shorthand for -# hostprogs += foo -# always-y += foo -hostprogs += $(hostprogs-always-y) $(hostprogs-always-m) -always-y += $(hostprogs-always-y) $(hostprogs-always-m) - -# userprogs-always-y is likewise. -userprogs += $(userprogs-always-y) $(userprogs-always-m) -always-y += $(userprogs-always-y) $(userprogs-always-m) - -# DTB -# If CONFIG_OF_ALL_DTBS is enabled, all DT blobs are built -dtb-$(CONFIG_OF_ALL_DTBS) += $(dtb-) - -# Composite DTB (i.e. DTB constructed by overlay) -multi-dtb-y := $(call multi-search, $(dtb-y), .dtb, -dtbs) -# Primitive DTB compiled from *.dts -real-dtb-y := $(call real-search, $(dtb-y), .dtb, -dtbs) -# Base DTB that overlay is applied onto (each first word of $(*-dtbs) expansion) -base-dtb-y := $(foreach m, $(multi-dtb-y), $(firstword $(call suffix-search, $m, .dtb, -dtbs))) - -always-y += $(dtb-y) - -ifneq ($(CHECK_DTBS),) -always-y += $(patsubst %.dtb,%.dt.yaml, $(real-dtb-y)) -always-y += $(patsubst %.dtbo,%.dt.yaml, $(real-dtb-y)) -endif - -# Add subdir path - -extra-y := $(addprefix $(obj)/,$(extra-y)) -always-y := $(addprefix $(obj)/,$(always-y)) -targets := $(addprefix $(obj)/,$(targets)) -obj-m := $(addprefix $(obj)/,$(obj-m)) -lib-y := $(addprefix $(obj)/,$(lib-y)) -real-obj-y := $(addprefix $(obj)/,$(real-obj-y)) -real-obj-m := $(addprefix $(obj)/,$(real-obj-m)) -multi-obj-m := $(addprefix $(obj)/, $(multi-obj-m)) -multi-dtb-y := $(addprefix $(obj)/, $(multi-dtb-y)) -real-dtb-y := $(addprefix $(obj)/, $(real-dtb-y)) -subdir-ym := $(addprefix $(obj)/,$(subdir-ym)) - -# Finds the multi-part object the current object will be linked into. -# If the object belongs to two or more multi-part objects, list them all. -modname-multi = $(sort $(foreach m,$(multi-obj-ym),\ - $(if $(filter $*.o, $(call suffix-search, $m, .o, -objs -y -m)),$(m:.o=)))) - -__modname = $(if $(modname-multi),$(modname-multi),$(basetarget)) - -modname = $(subst $(space),:,$(__modname)) -modfile = $(addprefix $(obj)/,$(__modname)) - -# target with $(obj)/ and its suffix stripped -target-stem = $(basename $(patsubst $(obj)/%,%,$@)) - -# These flags are needed for modversions and compiling, so we define them here -# $(modname_flags) defines KBUILD_MODNAME as the name of the module it will -# end up in (or would, if it gets compiled in) -name-fix-token = $(subst $(comma),_,$(subst -,_,$1)) -name-fix = $(call stringify,$(call name-fix-token,$1)) -basename_flags = -DKBUILD_BASENAME=$(call name-fix,$(basetarget)) -modname_flags = -DKBUILD_MODNAME=$(call name-fix,$(modname)) \ - -D__KBUILD_MODNAME=kmod_$(call name-fix-token,$(modname)) -modfile_flags = -DKBUILD_MODFILE=$(call stringify,$(modfile)) - -_c_flags = $(filter-out $(CFLAGS_REMOVE_$(target-stem).o), \ - $(filter-out $(ccflags-remove-y), \ - $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(ccflags-y)) \ - $(CFLAGS_$(target-stem).o)) -_a_flags = $(filter-out $(AFLAGS_REMOVE_$(target-stem).o), \ - $(filter-out $(asflags-remove-y), \ - $(KBUILD_CPPFLAGS) $(KBUILD_AFLAGS) $(asflags-y)) \ - $(AFLAGS_$(target-stem).o)) -_cpp_flags = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(target-stem).lds) - -# -# Enable gcov profiling flags for a file, directory or for all files depending -# on variables GCOV_PROFILE_obj.o, GCOV_PROFILE and CONFIG_GCOV_PROFILE_ALL -# (in this order) -# -ifeq ($(CONFIG_GCOV_KERNEL),y) -_c_flags += $(if $(patsubst n%,, \ - $(GCOV_PROFILE_$(basetarget).o)$(GCOV_PROFILE)$(CONFIG_GCOV_PROFILE_ALL)), \ - $(CFLAGS_GCOV)) -endif - -# -# Enable address sanitizer flags for kernel except some files or directories -# we don't want to check (depends on variables KASAN_SANITIZE_obj.o, KASAN_SANITIZE) -# -ifeq ($(CONFIG_KASAN),y) -ifneq ($(CONFIG_KASAN_HW_TAGS),y) -_c_flags += $(if $(patsubst n%,, \ - $(KASAN_SANITIZE_$(basetarget).o)$(KASAN_SANITIZE)y), \ - $(CFLAGS_KASAN), $(CFLAGS_KASAN_NOSANITIZE)) -endif -endif - -ifeq ($(CONFIG_UBSAN),y) -_c_flags += $(if $(patsubst n%,, \ - $(UBSAN_SANITIZE_$(basetarget).o)$(UBSAN_SANITIZE)$(CONFIG_UBSAN_SANITIZE_ALL)), \ - $(CFLAGS_UBSAN)) -endif - -ifeq ($(CONFIG_KCOV),y) -_c_flags += $(if $(patsubst n%,, \ - $(KCOV_INSTRUMENT_$(basetarget).o)$(KCOV_INSTRUMENT)$(CONFIG_KCOV_INSTRUMENT_ALL)), \ - $(CFLAGS_KCOV)) -endif - -# -# Enable KCSAN flags except some files or directories we don't want to check -# (depends on variables KCSAN_SANITIZE_obj.o, KCSAN_SANITIZE) -# -ifeq ($(CONFIG_KCSAN),y) -_c_flags += $(if $(patsubst n%,, \ - $(KCSAN_SANITIZE_$(basetarget).o)$(KCSAN_SANITIZE)y), \ - $(CFLAGS_KCSAN)) -endif - -# $(srctree)/$(src) for including checkin headers from generated source files -# $(objtree)/$(obj) for including generated headers from checkin source files -ifeq ($(KBUILD_EXTMOD),) -ifdef building_out_of_srctree -_c_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj) -_a_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj) -_cpp_flags += -I $(srctree)/$(src) -I $(objtree)/$(obj) -endif -endif - -part-of-module = $(if $(filter $(basename $@).o, $(real-obj-m)),y) -quiet_modtag = $(if $(part-of-module),[M], ) - -modkern_cflags = \ - $(if $(part-of-module), \ - $(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE), \ - $(KBUILD_CFLAGS_KERNEL) $(CFLAGS_KERNEL) $(modfile_flags)) - -modkern_aflags = $(if $(part-of-module), \ - $(KBUILD_AFLAGS_MODULE) $(AFLAGS_MODULE), \ - $(KBUILD_AFLAGS_KERNEL) $(AFLAGS_KERNEL)) - -c_flags = -Wp,-MMD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ - -include $(srctree)/include/linux/compiler_types.h \ - $(_c_flags) $(modkern_cflags) \ - $(basename_flags) $(modname_flags) - -a_flags = -Wp,-MMD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ - $(_a_flags) $(modkern_aflags) - -cpp_flags = -Wp,-MMD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ - $(_cpp_flags) - -ld_flags = $(KBUILD_LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F)) - -DTC_INCLUDE += $(srctree)/scripts/dtc/include-prefixes - -dtc_cpp_flags = -Wp,-MMD,$(depfile).pre.tmp -nostdinc \ - $(addprefix -I,$(DTC_INCLUDE)) \ - $(DTC_CPP_FLAGS) \ - -undef -D__DTS__ - -ifeq ($(CONFIG_LTO_CLANG),y) -# With CONFIG_LTO_CLANG, .o files in modules might be LLVM bitcode, so we -# need to run LTO to compile them into native code (.lto.o) before further -# processing. -mod-prelink-ext := .lto -endif - -# Objtool arguments are also needed for modfinal with LTO, so we define -# then here to avoid duplication. -objtool_args = \ - $(if $(CONFIG_UNWINDER_ORC),orc generate,check) \ - $(if $(part-of-module), --module) \ - $(if $(CONFIG_FRAME_POINTER),, --no-fp) \ - $(if $(CONFIG_GCOV_KERNEL)$(CONFIG_LTO_CLANG), --no-unreachable)\ - $(if $(CONFIG_RETPOLINE), --retpoline) \ - $(if $(CONFIG_X86_SMAP), --uaccess) \ - $(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount) - -# Useful for describing the dependency of composite objects -# Usage: -# $(call multi_depend, multi_used_targets, suffix_to_remove, suffix_to_add) -define multi_depend -$(foreach m, $(notdir $1), \ - $(eval $(obj)/$m: \ - $(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s))))))) -endef - -quiet_cmd_copy = COPY $@ - cmd_copy = cp $< $@ - -# Shipped files -# =========================================================================== -# 'cp' preserves permissions. If you use it to copy a file in read-only srctree, -# the copy would be read-only as well, leading to an error when executing the -# rule next time. Use 'cat' instead in order to generate a writable file. - -quiet_cmd_shipped = SHIPPED $@ -cmd_shipped = cat $< > $@ - -$(obj)/%: $(src)/%_shipped - $(call cmd,shipped) - -# Commands useful for building a boot image -# =========================================================================== -# -# Use as following: -# -# target: source(s) FORCE -# $(if_changed,ld/objcopy/gzip) -# -# and add target to 'targets' so that we know we have to -# read in the saved command line - -# Linking -# --------------------------------------------------------------------------- - -quiet_cmd_ld = LD $@ - cmd_ld = $(LD) $(ld_flags) $(real-prereqs) -o $@ - -# Archive -# --------------------------------------------------------------------------- - -quiet_cmd_ar = AR $@ - cmd_ar = rm -f $@; $(AR) cDPrsT $@ $(real-prereqs) - -# Objcopy -# --------------------------------------------------------------------------- - -quiet_cmd_objcopy = OBJCOPY $@ -cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@ - -# Gzip -# --------------------------------------------------------------------------- - -quiet_cmd_gzip = GZIP $@ - cmd_gzip = cat $(real-prereqs) | $(KGZIP) -n -f -9 > $@ - -# DTC -# --------------------------------------------------------------------------- -DTC ?= $(objtree)/scripts/dtc/dtc -DTC_FLAGS += -Wno-interrupt_provider - -# Disable noisy checks by default -ifeq ($(findstring 1,$(KBUILD_EXTRA_WARN)),) -DTC_FLAGS += -Wno-unit_address_vs_reg \ - -Wno-unit_address_format \ - -Wno-avoid_unnecessary_addr_size \ - -Wno-alias_paths \ - -Wno-graph_child_address \ - -Wno-simple_bus_reg \ - -Wno-unique_unit_address -endif - -ifneq ($(findstring 2,$(KBUILD_EXTRA_WARN)),) -DTC_FLAGS += -Wnode_name_chars_strict \ - -Wproperty_name_chars_strict \ - -Winterrupt_provider -endif - -DTC_FLAGS += $(DTC_FLAGS_$(basetarget)) - -# Set -@ if the target is a base DTB that overlay is applied onto -DTC_FLAGS += $(if $(filter $(patsubst $(obj)/%,%,$@), $(base-dtb-y)), -@) - -# Generate an assembly file to wrap the output of the device tree compiler -quiet_cmd_dt_S_dtb= DTB $@ -cmd_dt_S_dtb= \ -{ \ - echo '\#include '; \ - echo '.section .dtb.init.rodata,"a"'; \ - echo '.balign STRUCT_ALIGNMENT'; \ - echo '.global __dtb_$(subst -,_,$(*F))_begin'; \ - echo '__dtb_$(subst -,_,$(*F))_begin:'; \ - echo '.incbin "$<" '; \ - echo '__dtb_$(subst -,_,$(*F))_end:'; \ - echo '.global __dtb_$(subst -,_,$(*F))_end'; \ - echo '.balign STRUCT_ALIGNMENT'; \ -} > $@ - -$(obj)/%.dtb.S: $(obj)/%.dtb FORCE - $(call if_changed,dt_S_dtb) - -quiet_cmd_dtc = DTC $@ -cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \ - $(HOSTCC) -E $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ - $(DTC) -o $@ -b 0 \ - $(addprefix -i,$(dir $<) $(DTC_INCLUDE)) $(DTC_FLAGS) \ - -d $(depfile).dtc.tmp $(dtc-tmp) ; \ - cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile) - -$(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE - $(call if_changed_dep,dtc) - -$(obj)/%.dtbo: $(src)/%.dts $(DTC) FORCE - $(call if_changed_dep,dtc) - -quiet_cmd_fdtoverlay = DTOVL $@ - cmd_fdtoverlay = $(objtree)/scripts/dtc/fdtoverlay -o $@ -i $(real-prereqs) - -$(multi-dtb-y): FORCE - $(call if_changed,fdtoverlay) -$(call multi_depend, $(multi-dtb-y), .dtb, -dtbs) - -DT_CHECKER ?= dt-validate -DT_CHECKER_FLAGS ?= $(if $(DT_SCHEMA_FILES),,-m) -DT_BINDING_DIR := Documentation/devicetree/bindings -# DT_TMP_SCHEMA may be overridden from Documentation/devicetree/bindings/Makefile -DT_TMP_SCHEMA ?= $(objtree)/$(DT_BINDING_DIR)/processed-schema.json - -quiet_cmd_dtb_check = CHECK $@ - cmd_dtb_check = $(DT_CHECKER) $(DT_CHECKER_FLAGS) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@ - -define rule_dtc - $(call cmd_and_fixdep,dtc) - $(call cmd,dtb_check) -endef - -$(obj)/%.dt.yaml: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE - $(call if_changed_rule,dtc) - -dtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp) - -# Bzip2 -# --------------------------------------------------------------------------- - -# Bzip2 and LZMA do not include size in file... so we have to fake that; -# append the size as a 32-bit littleendian number as gzip does. -size_append = printf $(shell \ -dec_size=0; \ -for F in $(real-prereqs); do \ - fsize=$$($(CONFIG_SHELL) $(srctree)/scripts/file-size.sh $$F); \ - dec_size=$$(expr $$dec_size + $$fsize); \ -done; \ -printf "%08x\n" $$dec_size | \ - sed 's/\(..\)/\1 /g' | { \ - read ch0 ch1 ch2 ch3; \ - for ch in $$ch3 $$ch2 $$ch1 $$ch0; do \ - printf '%s%03o' '\\' $$((0x$$ch)); \ - done; \ - } \ -) - -quiet_cmd_bzip2 = BZIP2 $@ - cmd_bzip2 = { cat $(real-prereqs) | $(KBZIP2) -9; $(size_append); } > $@ - -# Lzma -# --------------------------------------------------------------------------- - -quiet_cmd_lzma = LZMA $@ - cmd_lzma = { cat $(real-prereqs) | $(LZMA) -9; $(size_append); } > $@ - -quiet_cmd_lzo = LZO $@ - cmd_lzo = { cat $(real-prereqs) | $(KLZOP) -9; $(size_append); } > $@ - -quiet_cmd_lz4 = LZ4 $@ - cmd_lz4 = { cat $(real-prereqs) | $(LZ4) -l -c1 stdin stdout; \ - $(size_append); } > $@ - -# U-Boot mkimage -# --------------------------------------------------------------------------- - -MKIMAGE := $(srctree)/scripts/mkuboot.sh - -# SRCARCH just happens to match slightly more than ARCH (on sparc), so reduces -# the number of overrides in arch makefiles -UIMAGE_ARCH ?= $(SRCARCH) -UIMAGE_COMPRESSION ?= $(if $(2),$(2),none) -UIMAGE_OPTS-y ?= -UIMAGE_TYPE ?= kernel -UIMAGE_LOADADDR ?= arch_must_set_this -UIMAGE_ENTRYADDR ?= $(UIMAGE_LOADADDR) -UIMAGE_NAME ?= 'Linux-$(KERNELRELEASE)' - -quiet_cmd_uimage = UIMAGE $@ - cmd_uimage = $(BASH) $(MKIMAGE) -A $(UIMAGE_ARCH) -O linux \ - -C $(UIMAGE_COMPRESSION) $(UIMAGE_OPTS-y) \ - -T $(UIMAGE_TYPE) \ - -a $(UIMAGE_LOADADDR) -e $(UIMAGE_ENTRYADDR) \ - -n $(UIMAGE_NAME) -d $< $@ - -# XZ -# --------------------------------------------------------------------------- -# Use xzkern to compress the kernel image and xzmisc to compress other things. -# -# xzkern uses a big LZMA2 dictionary since it doesn't increase memory usage -# of the kernel decompressor. A BCJ filter is used if it is available for -# the target architecture. xzkern also appends uncompressed size of the data -# using size_append. The .xz format has the size information available at -# the end of the file too, but it's in more complex format and it's good to -# avoid changing the part of the boot code that reads the uncompressed size. -# Note that the bytes added by size_append will make the xz tool think that -# the file is corrupt. This is expected. -# -# xzmisc doesn't use size_append, so it can be used to create normal .xz -# files. xzmisc uses smaller LZMA2 dictionary than xzkern, because a very -# big dictionary would increase the memory usage too much in the multi-call -# decompression mode. A BCJ filter isn't used either. -quiet_cmd_xzkern = XZKERN $@ - cmd_xzkern = { cat $(real-prereqs) | sh $(srctree)/scripts/xz_wrap.sh; \ - $(size_append); } > $@ - -quiet_cmd_xzmisc = XZMISC $@ - cmd_xzmisc = cat $(real-prereqs) | $(XZ) --check=crc32 --lzma2=dict=1MiB > $@ - -# ZSTD -# --------------------------------------------------------------------------- -# Appends the uncompressed size of the data using size_append. The .zst -# format has the size information available at the beginning of the file too, -# but it's in a more complex format and it's good to avoid changing the part -# of the boot code that reads the uncompressed size. -# -# Note that the bytes added by size_append will make the zstd tool think that -# the file is corrupt. This is expected. -# -# zstd uses a maximum window size of 8 MB. zstd22 uses a maximum window size of -# 128 MB. zstd22 is used for kernel compression because it is decompressed in a -# single pass, so zstd doesn't need to allocate a window buffer. When streaming -# decompression is used, like initramfs decompression, zstd22 should likely not -# be used because it would require zstd to allocate a 128 MB buffer. - -quiet_cmd_zstd = ZSTD $@ - cmd_zstd = { cat $(real-prereqs) | $(ZSTD) -19; $(size_append); } > $@ - -quiet_cmd_zstd22 = ZSTD22 $@ - cmd_zstd22 = { cat $(real-prereqs) | $(ZSTD) -22 --ultra; $(size_append); } > $@ - -# ASM offsets -# --------------------------------------------------------------------------- - -# Default sed regexp - multiline due to syntax constraints -# -# Use [:space:] because LLVM's integrated assembler inserts around -# the .ascii directive whereas GCC keeps the as-is. -define sed-offsets - 's:^[[:space:]]*\.ascii[[:space:]]*"\(.*\)".*:\1:; \ - /^->/{s:->#\(.*\):/* \1 */:; \ - s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \ - s:->::; p;}' -endef - -# Use filechk to avoid rebuilds when a header changes, but the resulting file -# does not -define filechk_offsets - echo "#ifndef $2"; \ - echo "#define $2"; \ - echo "/*"; \ - echo " * DO NOT MODIFY."; \ - echo " *"; \ - echo " * This file was generated by Kbuild"; \ - echo " */"; \ - echo ""; \ - sed -ne $(sed-offsets) < $<; \ - echo ""; \ - echo "#endif" -endef