|
@@ -128,6 +128,10 @@ _all:
|
|
|
# Cancel implicit rules on top Makefile
|
|
|
$(CURDIR)/Makefile Makefile: ;
|
|
|
|
|
|
+ifneq ($(words $(subst :, ,$(CURDIR))), 1)
|
|
|
+ $(error main directory cannot contain spaces nor colons)
|
|
|
+endif
|
|
|
+
|
|
|
ifneq ($(KBUILD_OUTPUT),)
|
|
|
# Invoke a second make in the output directory, passing relevant variables
|
|
|
# check that the output directory actually exists
|
|
@@ -142,7 +146,7 @@ PHONY += $(MAKECMDGOALS) sub-make
|
|
|
$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
|
|
|
@:
|
|
|
|
|
|
-sub-make: FORCE
|
|
|
+sub-make:
|
|
|
$(Q)$(MAKE) -C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR) \
|
|
|
-f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))
|
|
|
|
|
@@ -364,7 +368,7 @@ AFLAGS_MODULE =
|
|
|
LDFLAGS_MODULE =
|
|
|
CFLAGS_KERNEL =
|
|
|
AFLAGS_KERNEL =
|
|
|
-CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
|
|
|
+CFLAGS_GCOV = -fprofile-arcs -ftest-coverage -fno-tree-loop-im -Wno-maybe-uninitialized
|
|
|
CFLAGS_KCOV = -fsanitize-coverage=trace-pc
|
|
|
|
|
|
|
|
@@ -617,7 +621,11 @@ KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)
|
|
|
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
|
|
KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,)
|
|
|
else
|
|
|
-KBUILD_CFLAGS += -O2
|
|
|
+ifdef CONFIG_PROFILE_ALL_BRANCHES
|
|
|
+KBUILD_CFLAGS += -O2 $(call cc-disable-warning,maybe-uninitialized,)
|
|
|
+else
|
|
|
+KBUILD_CFLAGS += -O2
|
|
|
+endif
|
|
|
endif
|
|
|
|
|
|
# Tell gcc to never replace conditional load with a non-conditional one
|
|
@@ -697,9 +705,10 @@ KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
|
|
|
KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
|
|
|
else
|
|
|
|
|
|
-# This warning generated too much noise in a regular build.
|
|
|
-# Use make W=1 to enable this warning (see scripts/Makefile.build)
|
|
|
+# These warnings generated too much noise in a regular build.
|
|
|
+# Use make W=1 to enable them (see scripts/Makefile.build)
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
|
|
+KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
|
|
|
endif
|
|
|
|
|
|
ifdef CONFIG_FRAME_POINTER
|
|
@@ -926,27 +935,41 @@ export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(vmlinux-alldirs)) arch Doc
|
|
|
|
|
|
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN)
|
|
|
|
|
|
-# Final link of vmlinux
|
|
|
- cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux)
|
|
|
-quiet_cmd_link-vmlinux = LINK $@
|
|
|
-
|
|
|
-# Include targets which we want to
|
|
|
-# execute if the rest of the kernel build went well.
|
|
|
-vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps) FORCE
|
|
|
+# Include targets which we want to execute sequentially if the rest of the
|
|
|
+# kernel build went well. If CONFIG_TRIM_UNUSED_KSYMS is set, this might be
|
|
|
+# evaluated more than once.
|
|
|
+PHONY += vmlinux_prereq
|
|
|
+vmlinux_prereq: $(vmlinux-deps) FORCE
|
|
|
ifdef CONFIG_HEADERS_CHECK
|
|
|
$(Q)$(MAKE) -f $(srctree)/Makefile headers_check
|
|
|
endif
|
|
|
-ifdef CONFIG_SAMPLES
|
|
|
- $(Q)$(MAKE) $(build)=samples
|
|
|
-endif
|
|
|
ifdef CONFIG_BUILD_DOCSRC
|
|
|
$(Q)$(MAKE) $(build)=Documentation
|
|
|
endif
|
|
|
ifdef CONFIG_GDB_SCRIPTS
|
|
|
$(Q)ln -fsn `cd $(srctree) && /bin/pwd`/scripts/gdb/vmlinux-gdb.py
|
|
|
endif
|
|
|
+ifdef CONFIG_TRIM_UNUSED_KSYMS
|
|
|
+ $(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
|
|
|
+ "$(MAKE) KBUILD_MODULES=1 -f $(srctree)/Makefile vmlinux_prereq"
|
|
|
+endif
|
|
|
+
|
|
|
+# standalone target for easier testing
|
|
|
+include/generated/autoksyms.h: FORCE
|
|
|
+ $(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh true
|
|
|
+
|
|
|
+# Final link of vmlinux
|
|
|
+ cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux)
|
|
|
+quiet_cmd_link-vmlinux = LINK $@
|
|
|
+
|
|
|
+vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE
|
|
|
+$(call if_changed,link-vmlinux)
|
|
|
|
|
|
+# Build samples along the rest of the kernel
|
|
|
+ifdef CONFIG_SAMPLES
|
|
|
+vmlinux-dirs += samples
|
|
|
+endif
|
|
|
+
|
|
|
# The actual objects are generated when descending,
|
|
|
# make sure no implicit rule kicks in
|
|
|
$(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
|
|
@@ -998,10 +1021,12 @@ prepare2: prepare3 outputmakefile asm-generic
|
|
|
prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
|
|
|
include/config/auto.conf
|
|
|
$(cmd_crmodverdir)
|
|
|
+ $(Q)test -e include/generated/autoksyms.h || \
|
|
|
+ touch include/generated/autoksyms.h
|
|
|
|
|
|
archprepare: archheaders archscripts prepare1 scripts_basic
|
|
|
|
|
|
-prepare0: archprepare FORCE
|
|
|
+prepare0: archprepare
|
|
|
$(Q)$(MAKE) $(build)=.
|
|
|
|
|
|
# All the preparing..
|
|
@@ -1061,7 +1086,7 @@ INSTALL_FW_PATH=$(INSTALL_MOD_PATH)/lib/firmware
|
|
|
export INSTALL_FW_PATH
|
|
|
|
|
|
PHONY += firmware_install
|
|
|
-firmware_install: FORCE
|
|
|
+firmware_install:
|
|
|
@mkdir -p $(objtree)/firmware
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_install
|
|
|
|
|
@@ -1081,7 +1106,7 @@ PHONY += archscripts
|
|
|
archscripts:
|
|
|
|
|
|
PHONY += __headers
|
|
|
-__headers: $(version_h) scripts_basic asm-generic archheaders archscripts FORCE
|
|
|
+__headers: $(version_h) scripts_basic asm-generic archheaders archscripts
|
|
|
$(Q)$(MAKE) $(build)=scripts build_unifdef
|
|
|
|
|
|
PHONY += headers_install_all
|
|
@@ -1192,7 +1217,8 @@ else # CONFIG_MODULES
|
|
|
# Modules not configured
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
-modules modules_install: FORCE
|
|
|
+PHONY += modules modules_install
|
|
|
+modules modules_install:
|
|
|
@echo >&2
|
|
|
@echo >&2 "The present kernel configuration has modules disabled."
|
|
|
@echo >&2 "Type 'make config' and enable loadable module support."
|
|
@@ -1283,6 +1309,7 @@ boards := $(sort $(notdir $(boards)))
|
|
|
board-dirs := $(dir $(wildcard $(srctree)/arch/$(SRCARCH)/configs/*/*_defconfig))
|
|
|
board-dirs := $(sort $(notdir $(board-dirs:/=)))
|
|
|
|
|
|
+PHONY += help
|
|
|
help:
|
|
|
@echo 'Cleaning targets:'
|
|
|
@echo ' clean - Remove most generated files but keep the config and'
|
|
@@ -1453,6 +1480,7 @@ $(clean-dirs):
|
|
|
clean: rm-dirs := $(MODVERDIR)
|
|
|
clean: rm-files := $(KBUILD_EXTMOD)/Module.symvers
|
|
|
|
|
|
+PHONY += help
|
|
|
help:
|
|
|
@echo ' Building external modules.'
|
|
|
@echo ' Syntax: make -C path/to/kernel/src M=$$PWD target'
|