cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

Kbuild.include (7657B)


      1# SPDX-License-Identifier: GPL-2.0
      2####
      3# kbuild: Generic definitions
      4
      5# Convenient variables
      6comma   := ,
      7quote   := "
      8squote  := '
      9empty   :=
     10space   := $(empty) $(empty)
     11space_escape := _-_SPACE_-_
     12pound := \#
     13
     14###
     15# Name of target with a '.' as filename prefix. foo/bar.o => foo/.bar.o
     16dot-target = $(dir $@).$(notdir $@)
     17
     18###
     19# Name of target with a '.tmp_' as filename prefix. foo/bar.o => foo/.tmp_bar.o
     20tmp-target = $(dir $@).tmp_$(notdir $@)
     21
     22###
     23# The temporary file to save gcc -MMD generated dependencies must not
     24# contain a comma
     25depfile = $(subst $(comma),_,$(dot-target).d)
     26
     27###
     28# filename of target with directory and extension stripped
     29basetarget = $(basename $(notdir $@))
     30
     31###
     32# real prerequisites without phony targets
     33real-prereqs = $(filter-out $(PHONY), $^)
     34
     35###
     36# Escape single quote for use in echo statements
     37escsq = $(subst $(squote),'\$(squote)',$1)
     38
     39###
     40# Quote a string to pass it to C files. foo => '"foo"'
     41stringify = $(squote)$(quote)$1$(quote)$(squote)
     42
     43###
     44# Easy method for doing a status message
     45       kecho := :
     46 quiet_kecho := echo
     47silent_kecho := :
     48kecho := $($(quiet)kecho)
     49
     50###
     51# filechk is used to check if the content of a generated file is updated.
     52# Sample usage:
     53#
     54# filechk_sample = echo $(KERNELRELEASE)
     55# version.h: FORCE
     56#	$(call filechk,sample)
     57#
     58# The rule defined shall write to stdout the content of the new file.
     59# The existing file will be compared with the new one.
     60# - If no file exist it is created
     61# - If the content differ the new file is used
     62# - If they are equal no change, and no timestamp update
     63define filechk
     64	$(check-FORCE)
     65	$(Q)set -e;						\
     66	mkdir -p $(dir $@);					\
     67	trap "rm -f $(dot-target).tmp" EXIT;			\
     68	{ $(filechk_$(1)); } > $(dot-target).tmp;		\
     69	if [ ! -r $@ ] || ! cmp -s $@ $(dot-target).tmp; then	\
     70		$(kecho) '  UPD     $@';			\
     71		mv -f $(dot-target).tmp $@;			\
     72	fi
     73endef
     74
     75###
     76# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
     77# Usage:
     78# $(Q)$(MAKE) $(build)=dir
     79build := -f $(srctree)/scripts/Makefile.build obj
     80
     81###
     82# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.dtbinst obj=
     83# Usage:
     84# $(Q)$(MAKE) $(dtbinst)=dir
     85dtbinst := -f $(srctree)/scripts/Makefile.dtbinst obj
     86
     87###
     88# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=
     89# Usage:
     90# $(Q)$(MAKE) $(clean)=dir
     91clean := -f $(srctree)/scripts/Makefile.clean obj
     92
     93# echo command.
     94# Short version is used, if $(quiet) equals `quiet_', otherwise full one.
     95echo-cmd = $(if $($(quiet)cmd_$(1)),\
     96	echo '  $(call escsq,$($(quiet)cmd_$(1)))$(echo-why)';)
     97
     98# sink stdout for 'make -s'
     99       redirect :=
    100 quiet_redirect :=
    101silent_redirect := exec >/dev/null;
    102
    103# printing commands
    104cmd = @set -e; $(echo-cmd) $($(quiet)redirect) $(cmd_$(1))
    105
    106###
    107# if_changed      - execute command if any prerequisite is newer than
    108#                   target, or command line has changed
    109# if_changed_dep  - as if_changed, but uses fixdep to reveal dependencies
    110#                   including used config symbols
    111# if_changed_rule - as if_changed but execute rule instead
    112# See Documentation/kbuild/makefiles.rst for more info
    113
    114ifneq ($(KBUILD_NOCMDDEP),1)
    115# Check if both commands are the same including their order. Result is empty
    116# string if equal. User may override this check using make KBUILD_NOCMDDEP=1
    117cmd-check = $(filter-out $(subst $(space),$(space_escape),$(strip $(cmd_$@))), \
    118                         $(subst $(space),$(space_escape),$(strip $(cmd_$1))))
    119else
    120cmd-check = $(if $(strip $(cmd_$@)),,1)
    121endif
    122
    123# Replace >$< with >$$< to preserve $ when reloading the .cmd file
    124# (needed for make)
    125# Replace >#< with >$(pound)< to avoid starting a comment in the .cmd file
    126# (needed for make)
    127# Replace >'< with >'\''< to be able to enclose the whole string in '...'
    128# (needed for the shell)
    129make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst $$,$$$$,$(cmd_$(1)))))
    130
    131# Find any prerequisites that are newer than target or that do not exist.
    132# (This is not true for now; $? should contain any non-existent prerequisites,
    133# but it does not work as expected when .SECONDARY is present. This seems a bug
    134# of GNU Make.)
    135# PHONY targets skipped in both cases.
    136newer-prereqs = $(filter-out $(PHONY),$?)
    137
    138# It is a typical mistake to forget the FORCE prerequisite. Check it here so
    139# no more breakage will slip in.
    140check-FORCE = $(if $(filter FORCE, $^),,$(warning FORCE prerequisite is missing))
    141
    142if-changed-cond = $(newer-prereqs)$(cmd-check)$(check-FORCE)
    143
    144# Execute command if command has changed or prerequisite(s) are updated.
    145if_changed = $(if $(if-changed-cond),$(cmd_and_savecmd),@:)
    146
    147cmd_and_savecmd =                                                            \
    148	$(cmd);                                                              \
    149	printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd
    150
    151# Execute the command and also postprocess generated .d dependencies file.
    152if_changed_dep = $(if $(if-changed-cond),$(cmd_and_fixdep),@:)
    153
    154cmd_and_fixdep =                                                             \
    155	$(cmd);                                                              \
    156	scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).cmd;\
    157	rm -f $(depfile)
    158
    159# Usage: $(call if_changed_rule,foo)
    160# Will check if $(cmd_foo) or any of the prerequisites changed,
    161# and if so will execute $(rule_foo).
    162if_changed_rule = $(if $(if-changed-cond),$(rule_$(1)),@:)
    163
    164###
    165# why - tell why a target got built
    166#       enabled by make V=2
    167#       Output (listed in the order they are checked):
    168#          (1) - due to target is PHONY
    169#          (2) - due to target missing
    170#          (3) - due to: file1.h file2.h
    171#          (4) - due to command line change
    172#          (5) - due to missing .cmd file
    173#          (6) - due to target not in $(targets)
    174# (1) PHONY targets are always build
    175# (2) No target, so we better build it
    176# (3) Prerequisite is newer than target
    177# (4) The command line stored in the file named dir/.target.cmd
    178#     differed from actual command line. This happens when compiler
    179#     options changes
    180# (5) No dir/.target.cmd file (used to store command line)
    181# (6) No dir/.target.cmd file and target not listed in $(targets)
    182#     This is a good hint that there is a bug in the kbuild file
    183ifeq ($(KBUILD_VERBOSE),2)
    184why =                                                                        \
    185    $(if $(filter $@, $(PHONY)),- due to target is PHONY,                    \
    186        $(if $(wildcard $@),                                                 \
    187            $(if $(newer-prereqs),- due to: $(newer-prereqs),                \
    188                $(if $(cmd-check),                                           \
    189                    $(if $(cmd_$@),- due to command line change,             \
    190                        $(if $(filter $@, $(targets)),                       \
    191                            - due to missing .cmd file,                      \
    192                            - due to $(notdir $@) not in $$(targets)         \
    193                         )                                                   \
    194                     )                                                       \
    195                 )                                                           \
    196             ),                                                              \
    197             - due to target missing                                         \
    198         )                                                                   \
    199     )
    200
    201echo-why = $(call escsq, $(strip $(why)))
    202endif
    203
    204###############################################################################
    205
    206# delete partially updated (i.e. corrupted) files on error
    207.DELETE_ON_ERROR:
    208
    209# do not delete intermediate files automatically
    210.SECONDARY: