Message ID | 20160817144322.4067391f@roar.ozlabs.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 2016-08-17 06:43, Nicholas Piggin wrote: > On Tue, 16 Aug 2016 11:23:45 +0200 > Michal Marek <mmarek@suse.com> wrote: > >> Dne 11.8.2016 v 12:16 Nicholas Piggin napsal(a): >>> $(modules): %.ko :%.o %.mod.o FORCE >>> $(call if_changed,ld_ko_o) >>> +ifdef CONFIG_BUILD_ARCH_POSTLINK >>> + $(Q)$(MAKE) -f $(srctree)/arch/$(SRCARCH)/Makefile.postlink $@ >>> +endif >> >> Why not simply branch off the existence of arch/*/Makefile.postlink and >> drop the kconfig option? > > I just did not think of it. That does seem nicer, thanks. What do > you think of this? [...] This looks cleaner, thanks! Michal -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> diff --git a/Makefile b/Makefile > index 1d26fdb..20d3bfd 100644 > --- a/Makefile > +++ b/Makefile > @@ -954,8 +954,14 @@ include/generated/autoksyms.h: FORCE > cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) > quiet_cmd_link-vmlinux = LINK $@ > > +# Optional arch pass after final link > +ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) > + cmd_postlink-vmlinux = \ > + $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) > + > vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE > +$(call if_changed,link-vmlinux) > + +$(call if_changed,postlink-vmlinux) > > # Build samples along the rest of the kernel > ifdef CONFIG_SAMPLES > @@ -1279,6 +1285,7 @@ $(clean-dirs): > > vmlinuxclean: > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean > + $(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean) > > clean: archclean vmlinuxclean > Another option would be to embed the logic in the link-vmlinux shell script. It is much simpler for normal humans to read and understand shell scripts, and it would be simpler too. > diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost > index 1366a94..a3e862e 100644 > --- a/scripts/Makefile.modpost > +++ b/scripts/Makefile.modpost > @@ -121,8 +121,14 @@ quiet_cmd_ld_ko_o = LD [M] $@ > $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \ > -o $@ $(filter-out FORCE,$^) > > +# Optional arch pass after final link > +ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) > + cmd_postlink-ko = \ > + $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) > + > $(modules): %.ko :%.o %.mod.o FORCE > $(call if_changed,ld_ko_o) > + +$(call if_changed,postlink-ko) For modules we have no script, so here we need this. Sam -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, 17 Aug 2016 11:56:33 +0200 Sam Ravnborg <sam@ravnborg.org> wrote: > > diff --git a/Makefile b/Makefile > > index 1d26fdb..20d3bfd 100644 > > --- a/Makefile > > +++ b/Makefile > > @@ -954,8 +954,14 @@ include/generated/autoksyms.h: FORCE > > cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) > > quiet_cmd_link-vmlinux = LINK $@ > > > > +# Optional arch pass after final link > > +ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) > > + cmd_postlink-vmlinux = \ > > + $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) > > + > > vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE > > +$(call if_changed,link-vmlinux) > > + +$(call if_changed,postlink-vmlinux) > > > > # Build samples along the rest of the kernel > > ifdef CONFIG_SAMPLES > > @@ -1279,6 +1285,7 @@ $(clean-dirs): > > > > vmlinuxclean: > > $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean > > + $(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean) > > > > clean: archclean vmlinuxclean > > > Another option would be to embed the logic in the link-vmlinux shell script. > It is much simpler for normal humans to read and understand shell scripts, > and it would be simpler too. I did that in the previous patch. I struggle with Makefiles too, but considering that we need the same recipe for modules, I thought just doing it the same for both was a bit nicer. But I really can go either way on it so whatever maintainers prefer I can respin. Thanks, Nick -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 385a5ef..ce93dc7 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt @@ -41,6 +41,7 @@ This document describes the Linux kernel Makefiles. --- 6.8 Custom kbuild commands --- 6.9 Preprocessing linker scripts --- 6.10 Generic header files + --- 6.11 Post-link pass === 7 Kbuild syntax for exported headers --- 7.1 header-y @@ -1237,6 +1238,21 @@ When kbuild executes, the following steps are followed (roughly): to list the file in the Kbuild file. See "7.4 generic-y" for further info on syntax etc. +--- 6.11 Post-link pass + + If the file arch/xxx/Makefile.postlink exists, this makefile + will be invoked for post-link objects (vmlinux and modules.ko) + for architectures to run post-link passes on. Must also handle + the clean target. + + This pass runs after kallsyms generation. If the architecture + needs to modify symbol locations, rather than manipulate the + kallsyms, it may be easier to add another postlink target for + .tmp_vmlinux? targets to be called from link-vmlinux.sh. + + For example, powerpc uses this to check relocation sanity of + the linked vmlinux file. + === 7 Kbuild syntax for exported headers The kernel includes a set of headers that is exported to userspace. diff --git a/Makefile b/Makefile index 1d26fdb..20d3bfd 100644 --- a/Makefile +++ b/Makefile @@ -954,8 +954,14 @@ include/generated/autoksyms.h: FORCE cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) quiet_cmd_link-vmlinux = LINK $@ +# Optional arch pass after final link +ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) + cmd_postlink-vmlinux = \ + $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) + vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE +$(call if_changed,link-vmlinux) + +$(call if_changed,postlink-vmlinux) # Build samples along the rest of the kernel ifdef CONFIG_SAMPLES @@ -1279,6 +1285,7 @@ $(clean-dirs): vmlinuxclean: $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean + $(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean) clean: archclean vmlinuxclean diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 1366a94..a3e862e 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -121,8 +121,14 @@ quiet_cmd_ld_ko_o = LD [M] $@ $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \ -o $@ $(filter-out FORCE,$^) +# Optional arch pass after final link +ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) + cmd_postlink-ko = \ + $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) + $(modules): %.ko :%.o %.mod.o FORCE $(call if_changed,ld_ko_o) + +$(call if_changed,postlink-ko) targets += $(modules)