0f5e2d2484
Impact: Bug fix If bzip2 or lzma fails (for example, if they aren't installed on the system), we need to propagate the failure out to "make". However, they were masked by being followed by a semicolon. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
202 lines
7.7 KiB
Text
202 lines
7.7 KiB
Text
# Backward compatibility
|
|
asflags-y += $(EXTRA_AFLAGS)
|
|
ccflags-y += $(EXTRA_CFLAGS)
|
|
cppflags-y += $(EXTRA_CPPFLAGS)
|
|
ldflags-y += $(EXTRA_LDFLAGS)
|
|
|
|
# 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)))
|
|
|
|
|
|
# Handle objects in subdirs
|
|
# ---------------------------------------------------------------------------
|
|
# o if we encounter foo/ in $(obj-y), replace it by foo/built-in.o
|
|
# and add the directory to the list of dirs to descend into: $(subdir-y)
|
|
# o if we encounter foo/ in $(obj-m), remove it from $(obj-m)
|
|
# and add the directory to the list of dirs to descend into: $(subdir-m)
|
|
|
|
# Determine modorder.
|
|
# Unfortunately, we don't have information about ordering between -y
|
|
# and -m subdirs. Just put -y's first.
|
|
modorder := $(patsubst %/,%/modules.order, $(filter %/, $(obj-y)) $(obj-m:.o=.ko))
|
|
|
|
__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y)))
|
|
subdir-y += $(__subdir-y)
|
|
__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m)))
|
|
subdir-m += $(__subdir-m)
|
|
obj-y := $(patsubst %/, %/built-in.o, $(obj-y))
|
|
obj-m := $(filter-out %/, $(obj-m))
|
|
|
|
# Subdirectories we need to descend into
|
|
|
|
subdir-ym := $(sort $(subdir-y) $(subdir-m))
|
|
|
|
# if $(foo-objs) exists, foo.o is a composite object
|
|
multi-used-y := $(sort $(foreach m,$(obj-y), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m))))
|
|
multi-used-m := $(sort $(foreach m,$(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))), $(m))))
|
|
multi-used := $(multi-used-y) $(multi-used-m)
|
|
single-used-m := $(sort $(filter-out $(multi-used-m),$(obj-m)))
|
|
|
|
# Build list of the parts of our composite objects, our composite
|
|
# objects depend on those (obviously)
|
|
multi-objs-y := $(foreach m, $(multi-used-y), $($(m:.o=-objs)) $($(m:.o=-y)))
|
|
multi-objs-m := $(foreach m, $(multi-used-m), $($(m:.o=-objs)) $($(m:.o=-y)))
|
|
multi-objs := $(multi-objs-y) $(multi-objs-m)
|
|
|
|
# $(subdir-obj-y) is the list of objects in $(obj-y) which uses dir/ to
|
|
# tell kbuild to descend
|
|
subdir-obj-y := $(filter %/built-in.o, $(obj-y))
|
|
|
|
# $(obj-dirs) is a list of directories that contain object files
|
|
obj-dirs := $(dir $(multi-objs) $(subdir-obj-y))
|
|
|
|
# Replace multi-part objects by their individual parts, look at local dir only
|
|
real-objs-y := $(foreach m, $(filter-out $(subdir-obj-y), $(obj-y)), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m))) $(extra-y)
|
|
real-objs-m := $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs)) $($(m:.o=-y))),$($(m:.o=-objs)) $($(m:.o=-y)),$(m)))
|
|
|
|
# Add subdir path
|
|
|
|
extra-y := $(addprefix $(obj)/,$(extra-y))
|
|
always := $(addprefix $(obj)/,$(always))
|
|
targets := $(addprefix $(obj)/,$(targets))
|
|
modorder := $(addprefix $(obj)/,$(modorder))
|
|
obj-y := $(addprefix $(obj)/,$(obj-y))
|
|
obj-m := $(addprefix $(obj)/,$(obj-m))
|
|
lib-y := $(addprefix $(obj)/,$(lib-y))
|
|
subdir-obj-y := $(addprefix $(obj)/,$(subdir-obj-y))
|
|
real-objs-y := $(addprefix $(obj)/,$(real-objs-y))
|
|
real-objs-m := $(addprefix $(obj)/,$(real-objs-m))
|
|
single-used-m := $(addprefix $(obj)/,$(single-used-m))
|
|
multi-used-y := $(addprefix $(obj)/,$(multi-used-y))
|
|
multi-used-m := $(addprefix $(obj)/,$(multi-used-m))
|
|
multi-objs-y := $(addprefix $(obj)/,$(multi-objs-y))
|
|
multi-objs-m := $(addprefix $(obj)/,$(multi-objs-m))
|
|
subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
|
|
obj-dirs := $(addprefix $(obj)/,$(obj-dirs))
|
|
|
|
# These flags are needed for modversions and compiling, so we define them here
|
|
# already
|
|
# $(modname_flags) #defines KBUILD_MODNAME as the name of the module it will
|
|
# end up in (or would, if it gets compiled in)
|
|
# Note: It's possible that one object gets potentially linked into more
|
|
# than one module. In that case KBUILD_MODNAME will be set to foo_bar,
|
|
# where foo and bar are the name of the modules.
|
|
name-fix = $(subst $(comma),_,$(subst -,_,$1))
|
|
basename_flags = -D"KBUILD_BASENAME=KBUILD_STR($(call name-fix,$(basetarget)))"
|
|
modname_flags = $(if $(filter 1,$(words $(modname))),\
|
|
-D"KBUILD_MODNAME=KBUILD_STR($(call name-fix,$(modname)))")
|
|
|
|
#hash values
|
|
ifdef CONFIG_DYNAMIC_PRINTK_DEBUG
|
|
debug_flags = -D"DEBUG_HASH=$(shell ./scripts/basic/hash djb2 $(@D)$(modname))"\
|
|
-D"DEBUG_HASH2=$(shell ./scripts/basic/hash r5 $(@D)$(modname))"
|
|
else
|
|
debug_flags =
|
|
endif
|
|
|
|
orig_c_flags = $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) \
|
|
$(ccflags-y) $(CFLAGS_$(basetarget).o)
|
|
_c_flags = $(filter-out $(CFLAGS_REMOVE_$(basetarget).o), $(orig_c_flags))
|
|
_a_flags = $(KBUILD_CPPFLAGS) $(KBUILD_AFLAGS) \
|
|
$(asflags-y) $(AFLAGS_$(basetarget).o)
|
|
_cpp_flags = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(@F))
|
|
|
|
# If building the kernel in a separate objtree expand all occurrences
|
|
# of -Idir to -I$(srctree)/dir except for absolute paths (starting with '/').
|
|
|
|
ifeq ($(KBUILD_SRC),)
|
|
__c_flags = $(_c_flags)
|
|
__a_flags = $(_a_flags)
|
|
__cpp_flags = $(_cpp_flags)
|
|
else
|
|
|
|
# -I$(obj) locates generated .h files
|
|
# $(call addtree,-I$(obj)) locates .h files in srctree, from generated .c files
|
|
# and locates generated .h files
|
|
# FIXME: Replace both with specific CFLAGS* statements in the makefiles
|
|
__c_flags = $(call addtree,-I$(obj)) $(call flags,_c_flags)
|
|
__a_flags = $(call flags,_a_flags)
|
|
__cpp_flags = $(call flags,_cpp_flags)
|
|
endif
|
|
|
|
c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
|
|
$(__c_flags) $(modkern_cflags) \
|
|
-D"KBUILD_STR(s)=\#s" $(basename_flags) $(modname_flags) \
|
|
$(debug_flags)
|
|
|
|
a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
|
|
$(__a_flags) $(modkern_aflags)
|
|
|
|
cpp_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \
|
|
$(__cpp_flags)
|
|
|
|
ld_flags = $(LDFLAGS) $(ldflags-y)
|
|
|
|
# Finds the multi-part object the current object will be linked into
|
|
modname-multi = $(sort $(foreach m,$(multi-used),\
|
|
$(if $(filter $(subst $(obj)/,,$*.o), $($(m:.o=-objs)) $($(m:.o=-y))),$(m:.o=))))
|
|
|
|
# Shipped files
|
|
# ===========================================================================
|
|
|
|
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 extra-y so that we know we have to
|
|
# read in the saved command line
|
|
|
|
# Linking
|
|
# ---------------------------------------------------------------------------
|
|
|
|
quiet_cmd_ld = LD $@
|
|
cmd_ld = $(LD) $(LDFLAGS) $(ldflags-y) $(LDFLAGS_$(@F)) \
|
|
$(filter-out FORCE,$^) -o $@
|
|
|
|
# Objcopy
|
|
# ---------------------------------------------------------------------------
|
|
|
|
quiet_cmd_objcopy = OBJCOPY $@
|
|
cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
|
|
|
|
# Gzip
|
|
# ---------------------------------------------------------------------------
|
|
|
|
quiet_cmd_gzip = GZIP $@
|
|
cmd_gzip = gzip -f -9 < $< > $@
|
|
|
|
|
|
# Bzip2
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Bzip2 does not include size in file... so we have to fake that
|
|
size_append=$(CONFIG_SHELL) $(srctree)/scripts/bin_size
|
|
|
|
quiet_cmd_bzip2 = BZIP2 $@
|
|
cmd_bzip2 = (bzip2 -9 < $< && $(size_append) $<) > $@ || (rm -f $@ ; false)
|
|
|
|
# Lzma
|
|
# ---------------------------------------------------------------------------
|
|
|
|
quiet_cmd_lzma = LZMA $@
|
|
cmd_lzma = (lzma -9 -c $< && $(size_append) $<) >$@ || (rm -f $@ ; false)
|