* [PATCH 1/4] kbuild: add image_name to no-sync-config-targets @ 2021-02-28 6:10 Masahiro Yamada 2021-02-28 6:10 ` [PATCH 2/4] kbuild: prefix $(srctree)/ to some included Makefiles Masahiro Yamada ` (3 more replies) 0 siblings, 4 replies; 11+ messages in thread From: Masahiro Yamada @ 2021-02-28 6:10 UTC (permalink / raw) To: linux-kbuild; +Cc: linux-kernel, Masahiro Yamada, Michal Marek 'make image_name' needs include/config/auto.conf to show the correct output because KBUILD_IMAGE depends on CONFIG options, but should not attempt to resync the configuration. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 633d2769b6ec..c84a9311df29 100644 --- a/Makefile +++ b/Makefile @@ -263,7 +263,8 @@ no-dot-config-targets := $(clean-targets) \ $(version_h) headers headers_% archheaders archscripts \ %asm-generic kernelversion %src-pkg dt_binding_check \ outputmakefile -no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease +no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \ + image_name single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ config-build := -- 2.27.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/4] kbuild: prefix $(srctree)/ to some included Makefiles 2021-02-28 6:10 [PATCH 1/4] kbuild: add image_name to no-sync-config-targets Masahiro Yamada @ 2021-02-28 6:10 ` Masahiro Yamada 2021-02-28 6:10 ` [PATCH 3/4] kbuild: spilt cc-option and friends to scripts/Makefile.compiler Masahiro Yamada ` (2 subsequent siblings) 3 siblings, 0 replies; 11+ messages in thread From: Masahiro Yamada @ 2021-02-28 6:10 UTC (permalink / raw) To: linux-kbuild; +Cc: linux-kernel, Masahiro Yamada, Michal Marek VPATH is used in Kbuild to make pattern rules to search for prerequisites in both $(objtree) and $(srctree). Some source files may not be real sources, but generated by tools such as flex, bison, perl. In contrast, I doubt the benefit of --include-dir=$(abs_srctree) because it is always clear which Makefiles are real sources, and which are not. So, my hope is to add $(srctree)/ prefix to all check-in Makefiles, then remove --include-dir=$(abs_srctree) flag in the future. I am touching only some Kbuild core parts for now. Treewide fixes will be needed to achieve this goal. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- Makefile | 8 ++++---- scripts/Makefile.asm-generic | 4 ++-- scripts/Makefile.build | 8 ++++---- scripts/Makefile.clean | 2 +- scripts/Makefile.dtbinst | 2 +- scripts/Makefile.headersinst | 2 +- scripts/Makefile.modinst | 2 +- scripts/Makefile.modpost | 4 ++-- scripts/Makefile.modsign | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index c84a9311df29..2253e31a6bcf 100644 --- a/Makefile +++ b/Makefile @@ -338,14 +338,14 @@ __build_one_by_one: else # !mixed-build -include scripts/Kbuild.include +include $(srctree)/scripts/Kbuild.include # Read KERNELRELEASE from include/config/kernel.release (if it exists) KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION -include scripts/subarch.include +include $(srctree)/scripts/subarch.include # Cross compiling and selecting different set of gcc/bin-utils # --------------------------------------------------------------------------- @@ -590,7 +590,7 @@ ifdef config-build # Read arch specific Makefile to set KBUILD_DEFCONFIG as needed. # KBUILD_DEFCONFIG may point out an alternative default configuration # used for 'make defconfig' -include arch/$(SRCARCH)/Makefile +include $(srctree)/arch/$(SRCARCH)/Makefile export KBUILD_DEFCONFIG KBUILD_KCONFIG CC_VERSION_TEXT config: outputmakefile scripts_basic FORCE @@ -677,7 +677,7 @@ RETPOLINE_VDSO_CFLAGS := $(call cc-option,$(RETPOLINE_VDSO_CFLAGS_GCC),$(call cc export RETPOLINE_CFLAGS export RETPOLINE_VDSO_CFLAGS -include arch/$(SRCARCH)/Makefile +include $(srctree)/arch/$(SRCARCH)/Makefile ifdef need-config ifdef may-sync-config diff --git a/scripts/Makefile.asm-generic b/scripts/Makefile.asm-generic index 82ad63dcd62b..1d501c57f9ef 100644 --- a/scripts/Makefile.asm-generic +++ b/scripts/Makefile.asm-generic @@ -14,10 +14,10 @@ src := $(subst /generated,,$(obj)) # $(generic)/Kbuild lists mandatory-y. Exclude um since it is a special case. ifneq ($(SRCARCH),um) -include $(generic)/Kbuild +include $(srctree)/$(generic)/Kbuild endif -include scripts/Kbuild.include +include $(srctree)/scripts/Kbuild.include redundant := $(filter $(mandatory-y) $(generated-y), $(generic-y)) redundant += $(foreach f, $(generic-y), $(if $(wildcard $(srctree)/$(src)/$(f)),$(f))) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 1b6094a13034..750d6d5225af 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -35,27 +35,27 @@ subdir-ccflags-y := # Read auto.conf if it exists, otherwise ignore -include include/config/auto.conf -include scripts/Kbuild.include +include $(srctree)/scripts/Kbuild.include # 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 scripts/Makefile.lib +include $(srctree)/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 scripts/Makefile.host +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 scripts/Makefile.userprogs +include $(srctree)/scripts/Makefile.userprogs endif ifndef obj diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean index 22a8172bce1f..fd6175322470 100644 --- a/scripts/Makefile.clean +++ b/scripts/Makefile.clean @@ -8,7 +8,7 @@ src := $(obj) PHONY := __clean __clean: -include scripts/Kbuild.include +include $(srctree)/scripts/Kbuild.include # The filename Kbuild has precedence over Makefile kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) diff --git a/scripts/Makefile.dtbinst b/scripts/Makefile.dtbinst index ba01f5ba2517..190d781e84f4 100644 --- a/scripts/Makefile.dtbinst +++ b/scripts/Makefile.dtbinst @@ -14,7 +14,7 @@ PHONY := __dtbs_install __dtbs_install: include include/config/auto.conf -include scripts/Kbuild.include +include $(srctree)/scripts/Kbuild.include include $(src)/Makefile dtbs := $(addprefix $(dst)/, $(dtb-y) $(if $(CONFIG_OF_ALL_DTBS),$(dtb-))) diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst index 708fbd08a2c5..029d85bb0b23 100644 --- a/scripts/Makefile.headersinst +++ b/scripts/Makefile.headersinst @@ -12,7 +12,7 @@ PHONY := __headers __headers: -include scripts/Kbuild.include +include $(srctree)/scripts/Kbuild.include src := $(srctree)/$(obj) gen := $(objtree)/$(subst include/,include/generated/,$(obj)) diff --git a/scripts/Makefile.modinst b/scripts/Makefile.modinst index 5a4579e76485..ad1981233d0b 100644 --- a/scripts/Makefile.modinst +++ b/scripts/Makefile.modinst @@ -6,7 +6,7 @@ PHONY := __modinst __modinst: -include scripts/Kbuild.include +include $(srctree)/scripts/Kbuild.include modules := $(sort $(shell cat $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/)modules.order)) diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 066beffca09a..df57e259fac3 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -41,10 +41,10 @@ PHONY := __modpost __modpost: include include/config/auto.conf -include scripts/Kbuild.include +include $(srctree)/scripts/Kbuild.include # for ld_flags -include scripts/Makefile.lib +include $(srctree)/scripts/Makefile.lib MODPOST = scripts/mod/modpost \ $(if $(CONFIG_MODVERSIONS),-m) \ diff --git a/scripts/Makefile.modsign b/scripts/Makefile.modsign index d7325cefe709..ddf9b5ca77d7 100644 --- a/scripts/Makefile.modsign +++ b/scripts/Makefile.modsign @@ -6,7 +6,7 @@ PHONY := __modsign __modsign: -include scripts/Kbuild.include +include $(srctree)/scripts/Kbuild.include modules := $(sort $(shell cat modules.order)) -- 2.27.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/4] kbuild: spilt cc-option and friends to scripts/Makefile.compiler 2021-02-28 6:10 [PATCH 1/4] kbuild: add image_name to no-sync-config-targets Masahiro Yamada 2021-02-28 6:10 ` [PATCH 2/4] kbuild: prefix $(srctree)/ to some included Makefiles Masahiro Yamada @ 2021-02-28 6:10 ` Masahiro Yamada 2021-04-13 12:51 ` Janosch Frank 2021-02-28 6:10 ` [PATCH 4/4] kbuild: include Makefile.compiler only when compiler is required Masahiro Yamada 2021-03-08 14:10 ` [PATCH 1/4] kbuild: add image_name to no-sync-config-targets Masahiro Yamada 3 siblings, 1 reply; 11+ messages in thread From: Masahiro Yamada @ 2021-02-28 6:10 UTC (permalink / raw) To: linux-kbuild; +Cc: linux-kernel, Masahiro Yamada, Michal Marek scripts/Kbuild.include is included everywhere, but macros such as cc-option are needed by build targets only. For example, when 'make clean' traverses the tree, it does not need to evaluate $(call cc-option,). Split cc-option, ld-option, etc. to scripts/Makefile.compiler, which is only included from the top Makefile and scripts/Makefile.build. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- Makefile | 4 ++ scripts/Kbuild.include | 80 --------------------------------------- scripts/Makefile.build | 1 + scripts/Makefile.compiler | 77 +++++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 80 deletions(-) create mode 100644 scripts/Makefile.compiler diff --git a/Makefile b/Makefile index 2253e31a6bcf..eec7a94f5c33 100644 --- a/Makefile +++ b/Makefile @@ -582,6 +582,10 @@ KBUILD_AFLAGS += $(CLANG_FLAGS) export CLANG_FLAGS endif +# Include this also for config targets because some architectures need +# cc-cross-prefix to determine CROSS_COMPILE. +include $(srctree)/scripts/Makefile.compiler + ifdef config-build # =========================================================================== # *config targets only - make sure prerequisites are updated, and descend diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index 509e0856d653..82dd1b65b7a8 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -67,86 +67,6 @@ define filechk fi endef -###### -# gcc support functions -# See documentation in Documentation/kbuild/makefiles.rst - -# cc-cross-prefix -# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-) -# Return first <prefix> where a <prefix>gcc is found in PATH. -# If no gcc found in PATH with listed prefixes return nothing -# -# Note: '2>/dev/null' is here to force Make to invoke a shell. Otherwise, it -# would try to directly execute the shell builtin 'command'. This workaround -# should be kept for a long time since this issue was fixed only after the -# GNU Make 4.2.1 release. -cc-cross-prefix = $(firstword $(foreach c, $(1), \ - $(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c)))) - -# output directory for tests below -TMPOUT = $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_$$$$ - -# try-run -# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise) -# Exit code chooses option. "$$TMP" serves as a temporary file and is -# automatically cleaned up. -try-run = $(shell set -e; \ - TMP=$(TMPOUT)/tmp; \ - TMPO=$(TMPOUT)/tmp.o; \ - mkdir -p $(TMPOUT); \ - trap "rm -rf $(TMPOUT)" EXIT; \ - if ($(1)) >/dev/null 2>&1; \ - then echo "$(2)"; \ - else echo "$(3)"; \ - fi) - -# as-option -# Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,) - -as-option = $(call try-run,\ - $(CC) $(KBUILD_CFLAGS) $(1) -c -x assembler /dev/null -o "$$TMP",$(1),$(2)) - -# as-instr -# Usage: cflags-y += $(call as-instr,instr,option1,option2) - -as-instr = $(call try-run,\ - printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3)) - -# __cc-option -# Usage: MY_CFLAGS += $(call __cc-option,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586) -__cc-option = $(call try-run,\ - $(1) -Werror $(2) $(3) -c -x c /dev/null -o "$$TMP",$(3),$(4)) - -# cc-option -# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) - -cc-option = $(call __cc-option, $(CC),\ - $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS),$(1),$(2)) - -# cc-option-yn -# Usage: flag := $(call cc-option-yn,-march=winchip-c6) -cc-option-yn = $(call try-run,\ - $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n) - -# cc-disable-warning -# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable) -cc-disable-warning = $(call try-run,\ - $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) - -# cc-ifversion -# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) -cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4)) - -# ld-option -# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y) -ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3)) - -# ld-ifversion -# Usage: $(call ld-ifversion, -ge, 22252, y) -ld-ifversion = $(shell [ $(CONFIG_LD_VERSION)0 $(1) $(2)0 ] && echo $(3) || echo $(4)) - -###### - ### # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj= # Usage: diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 750d6d5225af..d74d3383666e 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -36,6 +36,7 @@ subdir-ccflags-y := -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)) diff --git a/scripts/Makefile.compiler b/scripts/Makefile.compiler new file mode 100644 index 000000000000..5f759ecc4f04 --- /dev/null +++ b/scripts/Makefile.compiler @@ -0,0 +1,77 @@ +###### +# gcc support functions +# See documentation in Documentation/kbuild/makefiles.rst + +# cc-cross-prefix +# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-) +# Return first <prefix> where a <prefix>gcc is found in PATH. +# If no gcc found in PATH with listed prefixes return nothing +# +# Note: '2>/dev/null' is here to force Make to invoke a shell. Otherwise, it +# would try to directly execute the shell builtin 'command'. This workaround +# should be kept for a long time since this issue was fixed only after the +# GNU Make 4.2.1 release. +cc-cross-prefix = $(firstword $(foreach c, $(1), \ + $(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c)))) + +# output directory for tests below +TMPOUT = $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_$$$$ + +# try-run +# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise) +# Exit code chooses option. "$$TMP" serves as a temporary file and is +# automatically cleaned up. +try-run = $(shell set -e; \ + TMP=$(TMPOUT)/tmp; \ + TMPO=$(TMPOUT)/tmp.o; \ + mkdir -p $(TMPOUT); \ + trap "rm -rf $(TMPOUT)" EXIT; \ + if ($(1)) >/dev/null 2>&1; \ + then echo "$(2)"; \ + else echo "$(3)"; \ + fi) + +# as-option +# Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,) + +as-option = $(call try-run,\ + $(CC) $(KBUILD_CFLAGS) $(1) -c -x assembler /dev/null -o "$$TMP",$(1),$(2)) + +# as-instr +# Usage: cflags-y += $(call as-instr,instr,option1,option2) + +as-instr = $(call try-run,\ + printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3)) + +# __cc-option +# Usage: MY_CFLAGS += $(call __cc-option,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586) +__cc-option = $(call try-run,\ + $(1) -Werror $(2) $(3) -c -x c /dev/null -o "$$TMP",$(3),$(4)) + +# cc-option +# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) + +cc-option = $(call __cc-option, $(CC),\ + $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS),$(1),$(2)) + +# cc-option-yn +# Usage: flag := $(call cc-option-yn,-march=winchip-c6) +cc-option-yn = $(call try-run,\ + $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n) + +# cc-disable-warning +# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable) +cc-disable-warning = $(call try-run,\ + $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) + +# cc-ifversion +# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) +cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4)) + +# ld-option +# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y) +ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3)) + +# ld-ifversion +# Usage: $(call ld-ifversion, -ge, 22252, y) +ld-ifversion = $(shell [ $(CONFIG_LD_VERSION)0 $(1) $(2)0 ] && echo $(3) || echo $(4)) -- 2.27.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] kbuild: spilt cc-option and friends to scripts/Makefile.compiler 2021-02-28 6:10 ` [PATCH 3/4] kbuild: spilt cc-option and friends to scripts/Makefile.compiler Masahiro Yamada @ 2021-04-13 12:51 ` Janosch Frank 2021-04-13 13:11 ` Christian Borntraeger 0 siblings, 1 reply; 11+ messages in thread From: Janosch Frank @ 2021-04-13 12:51 UTC (permalink / raw) To: Masahiro Yamada, linux-kbuild Cc: linux-kernel, Michal Marek, Christian Borntraeger, Marc Hartmayer, Heiko Carstens On 2/28/21 7:10 AM, Masahiro Yamada wrote: > scripts/Kbuild.include is included everywhere, but macros such as > cc-option are needed by build targets only. > > For example, when 'make clean' traverses the tree, it does not need > to evaluate $(call cc-option,). > > Split cc-option, ld-option, etc. to scripts/Makefile.compiler, which > is only included from the top Makefile and scripts/Makefile.build. > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> This commit broke the KVM selftest compilation under s390 in linux-next for me. Funny enough the compilation is only broken on Ubuntu, under Fedora the test fails with an assertion. FEDORA: [root@fedora kvm]# ./set_memory_region_test Allowed number of memory slots: 32767 ==== Test Assertion Failure ==== lib/kvm_util.c:142: vm->fd >= 0 pid=1541645 tid=1541645 - Invalid argument 1 0x0000000001002f4b: vm_open at kvm_util.c:142 2 (inlined by) vm_create at kvm_util.c:258 3 0x00000000010015ef: test_add_max_memory_regions at set_memory_region_test.c:351 4 (inlined by) main at set_memory_region_test.c:397 5 0x000003ffa3d2bb89: ?? ??:0 6 0x00000000010017ad: .annobin_abi_note.c.hot at crt1.o:? KVM_CREATE_VM ioctl failed, rc: -1 errno: 22 Ubuntu: make[1]: Leaving directory '/mnt/dev/linux' gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../tools/arch/s390/include -I../../../../usr/include/ -Iinclude -Ilib -Iinclude/s390x -I.. -c lib/sparsebit.c -o /mnt/dev/linux/tools/testing/selftests/kvm/lib/sparsebit.o gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../tools/arch/s390/include -I../../../../usr/include/ -Iinclude -Ilib -Iinclude/s390x -I.. -c lib/kvm_util.c -o /mnt/dev/linux/tools/testing/selftests/kvm/lib/kvm_util.o gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../tools/arch/s390/include -I../../../../usr/include/ -Iinclude -Ilib/s390x -Iinclude/s390x -I.. -c lib/s390x/diag318_test_handler.c -o /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.o ar crs /mnt/dev/linux/tools/testing/selftests/kvm/libkvm.a /mnt/dev/linux/tools/testing/selftests/kvm/lib/assert.o /mnt/dev/linux/tools/testing/selftests/kvm/lib/elf.o /mnt/dev/linux/tools/testing/selftests/kvm/lib/io.o /mnt/dev/linux/tools/testing/selftests/kvm/lib/kvm_util.o /mnt/dev/linux/tools/testing/selftests/kvm/lib/sparsebit.o /mnt/dev/linux/tools/testing/selftests/kvm/lib/test_util.o /mnt/dev/linux/tools/testing/selftests/kvm/lib/guest_modes.o /mnt/dev/linux/tools/testing/selftests/kvm/lib/perf_test_util.o /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/processor.o /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/ucall.o /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.o gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../tools/arch/s390/include -I../../../../usr/include/ -Iinclude -Is390x -Iinclude/s390x -I.. -pthread s390x/memop.c /mnt/dev/linux/tools/testing/selftests/kvm/libkvm.a -o /mnt/dev/linux/tools/testing/selftests/kvm/s390x/memop /usr/bin/ld: /tmp/ccFU8WYF.o: `stdout@@GLIBC_2.2' non-PLT reloc for symbol defined in shared library and accessed from executable (rebuild file with -fPIC ?) /usr/bin/ld: final link failed: bad value collect2: error: ld returned 1 exit status make: *** [../lib.mk:139: /mnt/dev/linux/tools/testing/selftests/kvm/s390x/memop] Error 1 > --- > > Makefile | 4 ++ > scripts/Kbuild.include | 80 --------------------------------------- > scripts/Makefile.build | 1 + > scripts/Makefile.compiler | 77 +++++++++++++++++++++++++++++++++++++ > 4 files changed, 82 insertions(+), 80 deletions(-) > create mode 100644 scripts/Makefile.compiler > > diff --git a/Makefile b/Makefile > index 2253e31a6bcf..eec7a94f5c33 100644 > --- a/Makefile > +++ b/Makefile > @@ -582,6 +582,10 @@ KBUILD_AFLAGS += $(CLANG_FLAGS) > export CLANG_FLAGS > endif > > +# Include this also for config targets because some architectures need > +# cc-cross-prefix to determine CROSS_COMPILE. > +include $(srctree)/scripts/Makefile.compiler > + > ifdef config-build > # =========================================================================== > # *config targets only - make sure prerequisites are updated, and descend > diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include > index 509e0856d653..82dd1b65b7a8 100644 > --- a/scripts/Kbuild.include > +++ b/scripts/Kbuild.include > @@ -67,86 +67,6 @@ define filechk > fi > endef > > -###### > -# gcc support functions > -# See documentation in Documentation/kbuild/makefiles.rst > - > -# cc-cross-prefix > -# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-) > -# Return first <prefix> where a <prefix>gcc is found in PATH. > -# If no gcc found in PATH with listed prefixes return nothing > -# > -# Note: '2>/dev/null' is here to force Make to invoke a shell. Otherwise, it > -# would try to directly execute the shell builtin 'command'. This workaround > -# should be kept for a long time since this issue was fixed only after the > -# GNU Make 4.2.1 release. > -cc-cross-prefix = $(firstword $(foreach c, $(1), \ > - $(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c)))) > - > -# output directory for tests below > -TMPOUT = $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_$$$$ > - > -# try-run > -# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise) > -# Exit code chooses option. "$$TMP" serves as a temporary file and is > -# automatically cleaned up. > -try-run = $(shell set -e; \ > - TMP=$(TMPOUT)/tmp; \ > - TMPO=$(TMPOUT)/tmp.o; \ > - mkdir -p $(TMPOUT); \ > - trap "rm -rf $(TMPOUT)" EXIT; \ > - if ($(1)) >/dev/null 2>&1; \ > - then echo "$(2)"; \ > - else echo "$(3)"; \ > - fi) > - > -# as-option > -# Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,) > - > -as-option = $(call try-run,\ > - $(CC) $(KBUILD_CFLAGS) $(1) -c -x assembler /dev/null -o "$$TMP",$(1),$(2)) > - > -# as-instr > -# Usage: cflags-y += $(call as-instr,instr,option1,option2) > - > -as-instr = $(call try-run,\ > - printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3)) > - > -# __cc-option > -# Usage: MY_CFLAGS += $(call __cc-option,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586) > -__cc-option = $(call try-run,\ > - $(1) -Werror $(2) $(3) -c -x c /dev/null -o "$$TMP",$(3),$(4)) > - > -# cc-option > -# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) > - > -cc-option = $(call __cc-option, $(CC),\ > - $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS),$(1),$(2)) > - > -# cc-option-yn > -# Usage: flag := $(call cc-option-yn,-march=winchip-c6) > -cc-option-yn = $(call try-run,\ > - $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n) > - > -# cc-disable-warning > -# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable) > -cc-disable-warning = $(call try-run,\ > - $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) > - > -# cc-ifversion > -# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) > -cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4)) > - > -# ld-option > -# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y) > -ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3)) > - > -# ld-ifversion > -# Usage: $(call ld-ifversion, -ge, 22252, y) > -ld-ifversion = $(shell [ $(CONFIG_LD_VERSION)0 $(1) $(2)0 ] && echo $(3) || echo $(4)) > - > -###### > - > ### > # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj= > # Usage: > diff --git a/scripts/Makefile.build b/scripts/Makefile.build > index 750d6d5225af..d74d3383666e 100644 > --- a/scripts/Makefile.build > +++ b/scripts/Makefile.build > @@ -36,6 +36,7 @@ subdir-ccflags-y := > -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)) > diff --git a/scripts/Makefile.compiler b/scripts/Makefile.compiler > new file mode 100644 > index 000000000000..5f759ecc4f04 > --- /dev/null > +++ b/scripts/Makefile.compiler > @@ -0,0 +1,77 @@ > +###### > +# gcc support functions > +# See documentation in Documentation/kbuild/makefiles.rst > + > +# cc-cross-prefix > +# Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-) > +# Return first <prefix> where a <prefix>gcc is found in PATH. > +# If no gcc found in PATH with listed prefixes return nothing > +# > +# Note: '2>/dev/null' is here to force Make to invoke a shell. Otherwise, it > +# would try to directly execute the shell builtin 'command'. This workaround > +# should be kept for a long time since this issue was fixed only after the > +# GNU Make 4.2.1 release. > +cc-cross-prefix = $(firstword $(foreach c, $(1), \ > + $(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c)))) > + > +# output directory for tests below > +TMPOUT = $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_$$$$ > + > +# try-run > +# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise) > +# Exit code chooses option. "$$TMP" serves as a temporary file and is > +# automatically cleaned up. > +try-run = $(shell set -e; \ > + TMP=$(TMPOUT)/tmp; \ > + TMPO=$(TMPOUT)/tmp.o; \ > + mkdir -p $(TMPOUT); \ > + trap "rm -rf $(TMPOUT)" EXIT; \ > + if ($(1)) >/dev/null 2>&1; \ > + then echo "$(2)"; \ > + else echo "$(3)"; \ > + fi) > + > +# as-option > +# Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,) > + > +as-option = $(call try-run,\ > + $(CC) $(KBUILD_CFLAGS) $(1) -c -x assembler /dev/null -o "$$TMP",$(1),$(2)) > + > +# as-instr > +# Usage: cflags-y += $(call as-instr,instr,option1,option2) > + > +as-instr = $(call try-run,\ > + printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3)) > + > +# __cc-option > +# Usage: MY_CFLAGS += $(call __cc-option,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586) > +__cc-option = $(call try-run,\ > + $(1) -Werror $(2) $(3) -c -x c /dev/null -o "$$TMP",$(3),$(4)) > + > +# cc-option > +# Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586) > + > +cc-option = $(call __cc-option, $(CC),\ > + $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS),$(1),$(2)) > + > +# cc-option-yn > +# Usage: flag := $(call cc-option-yn,-march=winchip-c6) > +cc-option-yn = $(call try-run,\ > + $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n) > + > +# cc-disable-warning > +# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable) > +cc-disable-warning = $(call try-run,\ > + $(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1))) > + > +# cc-ifversion > +# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1) > +cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4)) > + > +# ld-option > +# Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y) > +ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3)) > + > +# ld-ifversion > +# Usage: $(call ld-ifversion, -ge, 22252, y) > +ld-ifversion = $(shell [ $(CONFIG_LD_VERSION)0 $(1) $(2)0 ] && echo $(3) || echo $(4)) > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] kbuild: spilt cc-option and friends to scripts/Makefile.compiler 2021-04-13 12:51 ` Janosch Frank @ 2021-04-13 13:11 ` Christian Borntraeger 2021-04-15 7:34 ` Masahiro Yamada 0 siblings, 1 reply; 11+ messages in thread From: Christian Borntraeger @ 2021-04-13 13:11 UTC (permalink / raw) To: Janosch Frank, Masahiro Yamada, linux-kbuild Cc: linux-kernel, Michal Marek, Marc Hartmayer, Heiko Carstens On 13.04.21 14:51, Janosch Frank wrote: > On 2/28/21 7:10 AM, Masahiro Yamada wrote: >> scripts/Kbuild.include is included everywhere, but macros such as >> cc-option are needed by build targets only. >> >> For example, when 'make clean' traverses the tree, it does not need >> to evaluate $(call cc-option,). >> >> Split cc-option, ld-option, etc. to scripts/Makefile.compiler, which >> is only included from the top Makefile and scripts/Makefile.build. >> >> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > This commit broke the KVM selftest compilation under s390 in linux-next > for me. Funny enough the compilation is only broken on Ubuntu, under > Fedora the test fails with an assertion. > > FEDORA: > [root@fedora kvm]# ./set_memory_region_test > Allowed number of memory slots: 32767 > ==== Test Assertion Failure ==== > lib/kvm_util.c:142: vm->fd >= 0 > pid=1541645 tid=1541645 - Invalid argument > 1 0x0000000001002f4b: vm_open at kvm_util.c:142 > 2 (inlined by) vm_create at kvm_util.c:258 > 3 0x00000000010015ef: test_add_max_memory_regions at > set_memory_region_test.c:351 > 4 (inlined by) main at set_memory_region_test.c:397 > 5 0x000003ffa3d2bb89: ?? ??:0 > 6 0x00000000010017ad: .annobin_abi_note.c.hot at crt1.o:? > KVM_CREATE_VM ioctl failed, rc: -1 errno: 22 > > > Ubuntu: > make[1]: Leaving directory '/mnt/dev/linux' > gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 > -fno-stack-protector -fno-PIE -I../../../../tools/include > -I../../../../tools/arch/s390/include -I../../../../usr/include/ > -Iinclude -Ilib -Iinclude/s390x -I.. -c lib/sparsebit.c -o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/sparsebit.o > gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 > -fno-stack-protector -fno-PIE -I../../../../tools/include > -I../../../../tools/arch/s390/include -I../../../../usr/include/ > -Iinclude -Ilib -Iinclude/s390x -I.. -c lib/kvm_util.c -o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/kvm_util.o > gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 > -fno-stack-protector -fno-PIE -I../../../../tools/include > -I../../../../tools/arch/s390/include -I../../../../usr/include/ > -Iinclude -Ilib/s390x -Iinclude/s390x -I.. -c > lib/s390x/diag318_test_handler.c -o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.o > ar crs /mnt/dev/linux/tools/testing/selftests/kvm/libkvm.a > /mnt/dev/linux/tools/testing/selftests/kvm/lib/assert.o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/elf.o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/io.o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/kvm_util.o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/sparsebit.o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/test_util.o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/guest_modes.o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/perf_test_util.o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/processor.o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/ucall.o > /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.o > gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 > -fno-stack-protector -fno-PIE -I../../../../tools/include > -I../../../../tools/arch/s390/include -I../../../../usr/include/ > -Iinclude -Is390x -Iinclude/s390x -I.. -pthread s390x/memop.c > /mnt/dev/linux/tools/testing/selftests/kvm/libkvm.a -o > /mnt/dev/linux/tools/testing/selftests/kvm/s390x/memop > /usr/bin/ld: /tmp/ccFU8WYF.o: `stdout@@GLIBC_2.2' non-PLT reloc for > symbol defined in shared library and accessed from executable (rebuild > file with -fPIC ?) > /usr/bin/ld: final link failed: bad value > collect2: error: ld returned 1 exit status > make: *** [../lib.mk:139: > /mnt/dev/linux/tools/testing/selftests/kvm/s390x/memop] Error 1 > It looks like that from tools/testing/selftests/kvm/Makefile additional linker flags are being ignored with this patch. no-pie-option := $(call try-run, echo 'int main() { return 0; }' | \ $(CC) -Werror -no-pie -x c - -o "$$TMP", -no-pie) # On s390, build the testcases KVM-enabled pgste-option = $(call try-run, echo 'int main() { return 0; }' | \ $(CC) -Werror -Wl$(comma)--s390-pgste -x c - -o "$$TMP",-Wl$(comma)--s390-pgste) LDFLAGS += -pthread $(no-pie-option) $(pgste-option) ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] kbuild: spilt cc-option and friends to scripts/Makefile.compiler 2021-04-13 13:11 ` Christian Borntraeger @ 2021-04-15 7:34 ` Masahiro Yamada 0 siblings, 0 replies; 11+ messages in thread From: Masahiro Yamada @ 2021-04-15 7:34 UTC (permalink / raw) To: Christian Borntraeger Cc: Janosch Frank, Linux Kbuild mailing list, Linux Kernel Mailing List, Michal Marek, Marc Hartmayer, Heiko Carstens On Tue, Apr 13, 2021 at 10:11 PM Christian Borntraeger <borntraeger@de.ibm.com> wrote: > > > > On 13.04.21 14:51, Janosch Frank wrote: > > On 2/28/21 7:10 AM, Masahiro Yamada wrote: > >> scripts/Kbuild.include is included everywhere, but macros such as > >> cc-option are needed by build targets only. > >> > >> For example, when 'make clean' traverses the tree, it does not need > >> to evaluate $(call cc-option,). > >> > >> Split cc-option, ld-option, etc. to scripts/Makefile.compiler, which > >> is only included from the top Makefile and scripts/Makefile.build. > >> > >> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > > > This commit broke the KVM selftest compilation under s390 in linux-next > > for me. Funny enough the compilation is only broken on Ubuntu, under > > Fedora the test fails with an assertion. > > > > FEDORA: > > [root@fedora kvm]# ./set_memory_region_test > > Allowed number of memory slots: 32767 > > ==== Test Assertion Failure ==== > > lib/kvm_util.c:142: vm->fd >= 0 > > pid=1541645 tid=1541645 - Invalid argument > > 1 0x0000000001002f4b: vm_open at kvm_util.c:142 > > 2 (inlined by) vm_create at kvm_util.c:258 > > 3 0x00000000010015ef: test_add_max_memory_regions at > > set_memory_region_test.c:351 > > 4 (inlined by) main at set_memory_region_test.c:397 > > 5 0x000003ffa3d2bb89: ?? ??:0 > > 6 0x00000000010017ad: .annobin_abi_note.c.hot at crt1.o:? > > KVM_CREATE_VM ioctl failed, rc: -1 errno: 22 > > > > > > Ubuntu: > > make[1]: Leaving directory '/mnt/dev/linux' > > gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 > > -fno-stack-protector -fno-PIE -I../../../../tools/include > > -I../../../../tools/arch/s390/include -I../../../../usr/include/ > > -Iinclude -Ilib -Iinclude/s390x -I.. -c lib/sparsebit.c -o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/sparsebit.o > > gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 > > -fno-stack-protector -fno-PIE -I../../../../tools/include > > -I../../../../tools/arch/s390/include -I../../../../usr/include/ > > -Iinclude -Ilib -Iinclude/s390x -I.. -c lib/kvm_util.c -o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/kvm_util.o > > gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 > > -fno-stack-protector -fno-PIE -I../../../../tools/include > > -I../../../../tools/arch/s390/include -I../../../../usr/include/ > > -Iinclude -Ilib/s390x -Iinclude/s390x -I.. -c > > lib/s390x/diag318_test_handler.c -o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.o > > ar crs /mnt/dev/linux/tools/testing/selftests/kvm/libkvm.a > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/assert.o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/elf.o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/io.o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/kvm_util.o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/sparsebit.o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/test_util.o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/guest_modes.o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/perf_test_util.o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/processor.o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/ucall.o > > /mnt/dev/linux/tools/testing/selftests/kvm/lib/s390x/diag318_test_handler.o > > gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 > > -fno-stack-protector -fno-PIE -I../../../../tools/include > > -I../../../../tools/arch/s390/include -I../../../../usr/include/ > > -Iinclude -Is390x -Iinclude/s390x -I.. -pthread s390x/memop.c > > /mnt/dev/linux/tools/testing/selftests/kvm/libkvm.a -o > > /mnt/dev/linux/tools/testing/selftests/kvm/s390x/memop > > /usr/bin/ld: /tmp/ccFU8WYF.o: `stdout@@GLIBC_2.2' non-PLT reloc for > > symbol defined in shared library and accessed from executable (rebuild > > file with -fPIC ?) > > /usr/bin/ld: final link failed: bad value > > collect2: error: ld returned 1 exit status > > make: *** [../lib.mk:139: > > /mnt/dev/linux/tools/testing/selftests/kvm/s390x/memop] Error 1 > > > > > > It looks like that from tools/testing/selftests/kvm/Makefile > additional linker flags are being ignored with this patch. > > no-pie-option := $(call try-run, echo 'int main() { return 0; }' | \ > $(CC) -Werror -no-pie -x c - -o "$$TMP", -no-pie) > > # On s390, build the testcases KVM-enabled > pgste-option = $(call try-run, echo 'int main() { return 0; }' | \ > $(CC) -Werror -Wl$(comma)--s390-pgste -x c - -o "$$TMP",-Wl$(comma)--s390-pgste) > > > LDFLAGS += -pthread $(no-pie-option) $(pgste-option) > Thanks. I will separate Kbuild and the tool build system. https://patchwork.kernel.org/project/linux-kbuild/patch/20210415072700.147125-2-masahiroy@kernel.org/ I do not want to be bothered by the can of worms. -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 4/4] kbuild: include Makefile.compiler only when compiler is required 2021-02-28 6:10 [PATCH 1/4] kbuild: add image_name to no-sync-config-targets Masahiro Yamada 2021-02-28 6:10 ` [PATCH 2/4] kbuild: prefix $(srctree)/ to some included Makefiles Masahiro Yamada 2021-02-28 6:10 ` [PATCH 3/4] kbuild: spilt cc-option and friends to scripts/Makefile.compiler Masahiro Yamada @ 2021-02-28 6:10 ` Masahiro Yamada 2021-02-28 7:00 ` Masahiro Yamada 2021-03-18 21:13 ` Nathan Chancellor 2021-03-08 14:10 ` [PATCH 1/4] kbuild: add image_name to no-sync-config-targets Masahiro Yamada 3 siblings, 2 replies; 11+ messages in thread From: Masahiro Yamada @ 2021-02-28 6:10 UTC (permalink / raw) To: linux-kbuild; +Cc: linux-kernel, Masahiro Yamada, Michal Marek Since commit f2f02ebd8f38 ("kbuild: improve cc-option to clean up all temporary files"), running 'make kernelversion' in a read-only source tree emits a bunch of warnings: mkdir: cannot create directory '.tmp_12345': Permission denied Non-build targets such as kernelversion, clean, help, etc. do not need to evaluate $(call cc-option,) and friends. Do not include Makefile.compiler so $(call cc-option,) becomes no-op. This not only fix the warnings, but also runs non-build targets much faster. Basically, all installation targets should also be non-build targets. Unfortunately, vdso_install requires the compiler because it builds vdso before installtion. This is a problem that must be fixed by a separate patch. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- I am not adding Reported-by for now because a reporter sent me an email privately. If he allows me to add Reported-by, I will add it to record the credit. (Perhaps, another person might have reported a similar issue somewhere, but my memory is obsure. I cannot recall it.) Makefile | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Makefile b/Makefile index eec7a94f5c33..20724711dc71 100644 --- a/Makefile +++ b/Makefile @@ -263,6 +263,10 @@ no-dot-config-targets := $(clean-targets) \ $(version_h) headers headers_% archheaders archscripts \ %asm-generic kernelversion %src-pkg dt_binding_check \ outputmakefile +# Installation targets should not require compiler. Unfortunately, vdso_install +# is an exception where build artifacts may be updated. This must be fixed. +no-compiler-targets := $(no-dot-config-targets) install dtbs_install \ + headers_install modules_install kernelrelease image_name no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \ image_name single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ @@ -270,6 +274,7 @@ single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ config-build := mixed-build := need-config := 1 +need-compiler := 1 may-sync-config := 1 single-build := @@ -279,6 +284,12 @@ ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) endif endif +ifneq ($(filter $(no-compiler-targets), $(MAKECMDGOALS)),) + ifeq ($(filter-out $(no-compiler-targets), $(MAKECMDGOALS)),) + need-compiler := + endif +endif + ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),) ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),) may-sync-config := @@ -584,7 +595,9 @@ endif # Include this also for config targets because some architectures need # cc-cross-prefix to determine CROSS_COMPILE. +ifdef need-compiler include $(srctree)/scripts/Makefile.compiler +endif ifdef config-build # =========================================================================== -- 2.27.0 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 4/4] kbuild: include Makefile.compiler only when compiler is required 2021-02-28 6:10 ` [PATCH 4/4] kbuild: include Makefile.compiler only when compiler is required Masahiro Yamada @ 2021-02-28 7:00 ` Masahiro Yamada 2021-03-18 21:13 ` Nathan Chancellor 1 sibling, 0 replies; 11+ messages in thread From: Masahiro Yamada @ 2021-02-28 7:00 UTC (permalink / raw) To: Linux Kbuild mailing list Cc: Linux Kernel Mailing List, Michal Marek, Israel Tsadok On Sun, Feb 28, 2021 at 3:10 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > Since commit f2f02ebd8f38 ("kbuild: improve cc-option to clean up all > temporary files"), running 'make kernelversion' in a read-only source > tree emits a bunch of warnings: > > mkdir: cannot create directory '.tmp_12345': Permission denied > > Non-build targets such as kernelversion, clean, help, etc. do not > need to evaluate $(call cc-option,) and friends. Do not include > Makefile.compiler so $(call cc-option,) becomes no-op. > > This not only fix the warnings, but also runs non-build targets much > faster. > > Basically, all installation targets should also be non-build targets. > Unfortunately, vdso_install requires the compiler because it builds > vdso before installtion. This is a problem that must be fixed by a > separate patch. > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > > I am not adding Reported-by for now because a reporter sent me > an email privately. > > If he allows me to add Reported-by, I will add it to record > the credit. > > (Perhaps, another person might have reported a similar issue > somewhere, but my memory is obsure. I cannot recall it.) > Now, I got acknowledge to add this: Reported-by: Israel Tsadok <itsadok@gmail.com> > Makefile | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/Makefile b/Makefile > index eec7a94f5c33..20724711dc71 100644 > --- a/Makefile > +++ b/Makefile > @@ -263,6 +263,10 @@ no-dot-config-targets := $(clean-targets) \ > $(version_h) headers headers_% archheaders archscripts \ > %asm-generic kernelversion %src-pkg dt_binding_check \ > outputmakefile > +# Installation targets should not require compiler. Unfortunately, vdso_install > +# is an exception where build artifacts may be updated. This must be fixed. > +no-compiler-targets := $(no-dot-config-targets) install dtbs_install \ > + headers_install modules_install kernelrelease image_name > no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \ > image_name > single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ > @@ -270,6 +274,7 @@ single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ > config-build := > mixed-build := > need-config := 1 > +need-compiler := 1 > may-sync-config := 1 > single-build := > > @@ -279,6 +284,12 @@ ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) > endif > endif > > +ifneq ($(filter $(no-compiler-targets), $(MAKECMDGOALS)),) > + ifeq ($(filter-out $(no-compiler-targets), $(MAKECMDGOALS)),) > + need-compiler := > + endif > +endif > + > ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),) > ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),) > may-sync-config := > @@ -584,7 +595,9 @@ endif > > # Include this also for config targets because some architectures need > # cc-cross-prefix to determine CROSS_COMPILE. > +ifdef need-compiler > include $(srctree)/scripts/Makefile.compiler > +endif > > ifdef config-build > # =========================================================================== > -- > 2.27.0 > -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/4] kbuild: include Makefile.compiler only when compiler is required 2021-02-28 6:10 ` [PATCH 4/4] kbuild: include Makefile.compiler only when compiler is required Masahiro Yamada 2021-02-28 7:00 ` Masahiro Yamada @ 2021-03-18 21:13 ` Nathan Chancellor 2021-03-18 23:36 ` Masahiro Yamada 1 sibling, 1 reply; 11+ messages in thread From: Nathan Chancellor @ 2021-03-18 21:13 UTC (permalink / raw) To: Masahiro Yamada; +Cc: linux-kbuild, linux-kernel, Michal Marek On Sun, Feb 28, 2021 at 03:10:28PM +0900, Masahiro Yamada wrote: > Since commit f2f02ebd8f38 ("kbuild: improve cc-option to clean up all > temporary files"), running 'make kernelversion' in a read-only source > tree emits a bunch of warnings: > > mkdir: cannot create directory '.tmp_12345': Permission denied > > Non-build targets such as kernelversion, clean, help, etc. do not > need to evaluate $(call cc-option,) and friends. Do not include > Makefile.compiler so $(call cc-option,) becomes no-op. > > This not only fix the warnings, but also runs non-build targets much > faster. > > Basically, all installation targets should also be non-build targets. > Unfortunately, vdso_install requires the compiler because it builds > vdso before installtion. This is a problem that must be fixed by a > separate patch. > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > > I am not adding Reported-by for now because a reporter sent me > an email privately. > > If he allows me to add Reported-by, I will add it to record > the credit. > > (Perhaps, another person might have reported a similar issue > somewhere, but my memory is obsure. I cannot recall it.) > > > Makefile | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/Makefile b/Makefile > index eec7a94f5c33..20724711dc71 100644 > --- a/Makefile > +++ b/Makefile > @@ -263,6 +263,10 @@ no-dot-config-targets := $(clean-targets) \ > $(version_h) headers headers_% archheaders archscripts \ > %asm-generic kernelversion %src-pkg dt_binding_check \ > outputmakefile > +# Installation targets should not require compiler. Unfortunately, vdso_install > +# is an exception where build artifacts may be updated. This must be fixed. > +no-compiler-targets := $(no-dot-config-targets) install dtbs_install \ > + headers_install modules_install kernelrelease image_name > no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \ > image_name > single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ > @@ -270,6 +274,7 @@ single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ > config-build := > mixed-build := > need-config := 1 > +need-compiler := 1 > may-sync-config := 1 > single-build := > > @@ -279,6 +284,12 @@ ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) > endif > endif > > +ifneq ($(filter $(no-compiler-targets), $(MAKECMDGOALS)),) > + ifeq ($(filter-out $(no-compiler-targets), $(MAKECMDGOALS)),) > + need-compiler := > + endif > +endif > + > ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),) > ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),) > may-sync-config := > @@ -584,7 +595,9 @@ endif > > # Include this also for config targets because some architectures need > # cc-cross-prefix to determine CROSS_COMPILE. > +ifdef need-compiler > include $(srctree)/scripts/Makefile.compiler > +endif > > ifdef config-build > # =========================================================================== > -- > 2.27.0 > Hi Masahiro, I see a new warning in my builds on arm64 now when running 'modules_install' or 'dtbs_install' because ld-option evaluates to nothing, which triggers the warning in arch/arm64/Makefile: $ make -skj"$(nproc)" \ ARCH=arm64 \ CROSS_COMPILE=aarch64-linux- \ INSTALL_DTBS_PATH=rootfs \ INSTALL_MOD_PATH=rootfs \ O=build/arm64 \ distclean defconfig all modules_install dtbs_install ... /home/nathan/cbl/src/linux-next/arch/arm64/Makefile:25: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum /home/nathan/cbl/src/linux-next/arch/arm64/Makefile:25: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum $ sed -n '23,29p' arch/arm64/Makefile ifeq ($(CONFIG_ARM64_ERRATUM_843419),y) ifeq ($(call ld-option, --fix-cortex-a53-843419),) $(warning ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum) else LDFLAGS_vmlinux += --fix-cortex-a53-843419 endif endif I am not sure how this should be resolved, hence just the report. Cheers, Nathan ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/4] kbuild: include Makefile.compiler only when compiler is required 2021-03-18 21:13 ` Nathan Chancellor @ 2021-03-18 23:36 ` Masahiro Yamada 0 siblings, 0 replies; 11+ messages in thread From: Masahiro Yamada @ 2021-03-18 23:36 UTC (permalink / raw) To: Nathan Chancellor Cc: Linux Kbuild mailing list, Linux Kernel Mailing List, Michal Marek, linux-arm-kernel, Will Deacon (CC: Will and ARM ML) On Fri, Mar 19, 2021 at 6:14 AM Nathan Chancellor <nathan@kernel.org> wrote: > > On Sun, Feb 28, 2021 at 03:10:28PM +0900, Masahiro Yamada wrote: > > Since commit f2f02ebd8f38 ("kbuild: improve cc-option to clean up all > > temporary files"), running 'make kernelversion' in a read-only source > > tree emits a bunch of warnings: > > > > mkdir: cannot create directory '.tmp_12345': Permission denied > > > > Non-build targets such as kernelversion, clean, help, etc. do not > > need to evaluate $(call cc-option,) and friends. Do not include > > Makefile.compiler so $(call cc-option,) becomes no-op. > > > > This not only fix the warnings, but also runs non-build targets much > > faster. > > > > Basically, all installation targets should also be non-build targets. > > Unfortunately, vdso_install requires the compiler because it builds > > vdso before installtion. This is a problem that must be fixed by a > > separate patch. > > > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > --- > > > > I am not adding Reported-by for now because a reporter sent me > > an email privately. > > > > If he allows me to add Reported-by, I will add it to record > > the credit. > > > > (Perhaps, another person might have reported a similar issue > > somewhere, but my memory is obsure. I cannot recall it.) > > > > > > Makefile | 13 +++++++++++++ > > 1 file changed, 13 insertions(+) > > > > diff --git a/Makefile b/Makefile > > index eec7a94f5c33..20724711dc71 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -263,6 +263,10 @@ no-dot-config-targets := $(clean-targets) \ > > $(version_h) headers headers_% archheaders archscripts \ > > %asm-generic kernelversion %src-pkg dt_binding_check \ > > outputmakefile > > +# Installation targets should not require compiler. Unfortunately, vdso_install > > +# is an exception where build artifacts may be updated. This must be fixed. > > +no-compiler-targets := $(no-dot-config-targets) install dtbs_install \ > > + headers_install modules_install kernelrelease image_name > > no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \ > > image_name > > single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ > > @@ -270,6 +274,7 @@ single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ > > config-build := > > mixed-build := > > need-config := 1 > > +need-compiler := 1 > > may-sync-config := 1 > > single-build := > > > > @@ -279,6 +284,12 @@ ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) > > endif > > endif > > > > +ifneq ($(filter $(no-compiler-targets), $(MAKECMDGOALS)),) > > + ifeq ($(filter-out $(no-compiler-targets), $(MAKECMDGOALS)),) > > + need-compiler := > > + endif > > +endif > > + > > ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),) > > ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),) > > may-sync-config := > > @@ -584,7 +595,9 @@ endif > > > > # Include this also for config targets because some architectures need > > # cc-cross-prefix to determine CROSS_COMPILE. > > +ifdef need-compiler > > include $(srctree)/scripts/Makefile.compiler > > +endif > > > > ifdef config-build > > # =========================================================================== > > -- > > 2.27.0 > > > > Hi Masahiro, > > I see a new warning in my builds on arm64 now when running > 'modules_install' or 'dtbs_install' because ld-option evaluates to > nothing, which triggers the warning in arch/arm64/Makefile: > > $ make -skj"$(nproc)" \ > ARCH=arm64 \ > CROSS_COMPILE=aarch64-linux- \ > INSTALL_DTBS_PATH=rootfs \ > INSTALL_MOD_PATH=rootfs \ > O=build/arm64 \ > distclean defconfig all modules_install dtbs_install > ... > /home/nathan/cbl/src/linux-next/arch/arm64/Makefile:25: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum > /home/nathan/cbl/src/linux-next/arch/arm64/Makefile:25: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum > > $ sed -n '23,29p' arch/arm64/Makefile > ifeq ($(CONFIG_ARM64_ERRATUM_843419),y) > ifeq ($(call ld-option, --fix-cortex-a53-843419),) > $(warning ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum) > else > LDFLAGS_vmlinux += --fix-cortex-a53-843419 > endif > endif > > I am not sure how this should be resolved, hence just the report. > > Cheers, > Nathan I see this a few lines below: ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS), y) ifneq ($(CONFIG_ARM64_LSE_ATOMICS), y) $(warning LSE atomics not supported by binutils) endif endif We can move ld-option evaluation to Kconfig. ifeq ($(CONFIG_ARM64_ERRATUM_843419),y) ifneq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419,y)) $(warning ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum) else LDFLAGS_vmlinux += --fix-cortex-a53-843419 endif endif I do not know what CONFIG name is preferred. -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/4] kbuild: add image_name to no-sync-config-targets 2021-02-28 6:10 [PATCH 1/4] kbuild: add image_name to no-sync-config-targets Masahiro Yamada ` (2 preceding siblings ...) 2021-02-28 6:10 ` [PATCH 4/4] kbuild: include Makefile.compiler only when compiler is required Masahiro Yamada @ 2021-03-08 14:10 ` Masahiro Yamada 3 siblings, 0 replies; 11+ messages in thread From: Masahiro Yamada @ 2021-03-08 14:10 UTC (permalink / raw) To: Linux Kbuild mailing list; +Cc: Linux Kernel Mailing List, Michal Marek On Sun, Feb 28, 2021 at 3:10 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > 'make image_name' needs include/config/auto.conf to show the correct > output because KBUILD_IMAGE depends on CONFIG options, but should not > attempt to resync the configuration. > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- All applied to linux-kbuild. > Makefile | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/Makefile b/Makefile > index 633d2769b6ec..c84a9311df29 100644 > --- a/Makefile > +++ b/Makefile > @@ -263,7 +263,8 @@ no-dot-config-targets := $(clean-targets) \ > $(version_h) headers headers_% archheaders archscripts \ > %asm-generic kernelversion %src-pkg dt_binding_check \ > outputmakefile > -no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease > +no-sync-config-targets := $(no-dot-config-targets) %install kernelrelease \ > + image_name > single-targets := %.a %.i %.ko %.lds %.ll %.lst %.mod %.o %.s %.symtypes %/ > > config-build := > -- > 2.27.0 > -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2021-04-15 7:35 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-02-28 6:10 [PATCH 1/4] kbuild: add image_name to no-sync-config-targets Masahiro Yamada 2021-02-28 6:10 ` [PATCH 2/4] kbuild: prefix $(srctree)/ to some included Makefiles Masahiro Yamada 2021-02-28 6:10 ` [PATCH 3/4] kbuild: spilt cc-option and friends to scripts/Makefile.compiler Masahiro Yamada 2021-04-13 12:51 ` Janosch Frank 2021-04-13 13:11 ` Christian Borntraeger 2021-04-15 7:34 ` Masahiro Yamada 2021-02-28 6:10 ` [PATCH 4/4] kbuild: include Makefile.compiler only when compiler is required Masahiro Yamada 2021-02-28 7:00 ` Masahiro Yamada 2021-03-18 21:13 ` Nathan Chancellor 2021-03-18 23:36 ` Masahiro Yamada 2021-03-08 14:10 ` [PATCH 1/4] kbuild: add image_name to no-sync-config-targets Masahiro Yamada
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).