diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-28 13:32:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-28 13:32:28 -0400 |
commit | 1347a2cebcb4cd6ca94eda0ebc8c5c6825bc4544 (patch) | |
tree | 495eb1b7071a0890c1fa58c12139ebd6305e0e82 /Makefile | |
parent | 90324cc1b11a211e37eabd8cb863e1a1561d6b1d (diff) | |
parent | f7fc237e330deaaea4ba6726b603d4058d1e6b38 (diff) |
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull kbuild updates from Michal Marek.
Fixed up nontrivial merge conflict in Makefile as per Stephen Rothwell
and linux-next (and trivial arch/sparc/Makefile changes due to removed
sparc32 logic).
* 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
mips: Fix KBUILD_CPPFLAGS definition
kbuild: fix ia64 link
kbuild: document KBUILD_LDS, KBUILD_VMLINUX_{INIT,MAIN} and LDFLAGS_vmlinux
kbuild: link of vmlinux moved to a script
kbuild: refactor final link of sparc32
kbuild: drop unused KBUILD_VMLINUX_OBJS from top-level Makefile
kbuild: Makefile: remove unnecessary check for m68knommu ARCH
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 231 |
1 files changed, 15 insertions, 216 deletions
@@ -231,10 +231,6 @@ endif | |||
231 | # Where to locate arch specific headers | 231 | # Where to locate arch specific headers |
232 | hdr-arch := $(SRCARCH) | 232 | hdr-arch := $(SRCARCH) |
233 | 233 | ||
234 | ifeq ($(ARCH),m68knommu) | ||
235 | hdr-arch := m68k | ||
236 | endif | ||
237 | |||
238 | KCONFIG_CONFIG ?= .config | 234 | KCONFIG_CONFIG ?= .config |
239 | export KCONFIG_CONFIG | 235 | export KCONFIG_CONFIG |
240 | 236 | ||
@@ -341,7 +337,6 @@ AWK = awk | |||
341 | GENKSYMS = scripts/genksyms/genksyms | 337 | GENKSYMS = scripts/genksyms/genksyms |
342 | INSTALLKERNEL := installkernel | 338 | INSTALLKERNEL := installkernel |
343 | DEPMOD = /sbin/depmod | 339 | DEPMOD = /sbin/depmod |
344 | KALLSYMS = scripts/kallsyms | ||
345 | PERL = perl | 340 | PERL = perl |
346 | CHECK = sparse | 341 | CHECK = sparse |
347 | 342 | ||
@@ -739,197 +734,21 @@ libs-y1 := $(patsubst %/, %/lib.a, $(libs-y)) | |||
739 | libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y)) | 734 | libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y)) |
740 | libs-y := $(libs-y1) $(libs-y2) | 735 | libs-y := $(libs-y1) $(libs-y2) |
741 | 736 | ||
742 | # Build vmlinux | 737 | # Externally visible symbols (used by link-vmlinux.sh) |
743 | # --------------------------------------------------------------------------- | 738 | export KBUILD_VMLINUX_INIT := $(head-y) $(init-y) |
744 | # vmlinux is built from the objects selected by $(vmlinux-init) and | 739 | export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y) $(drivers-y) $(net-y) |
745 | # $(vmlinux-main). Most are built-in.o files from top-level directories | 740 | export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds |
746 | # in the kernel tree, others are specified in arch/$(ARCH)/Makefile. | 741 | export LDFLAGS_vmlinux |
747 | # Ordering when linking is important, and $(vmlinux-init) must be first. | ||
748 | # | ||
749 | # vmlinux | ||
750 | # ^ | ||
751 | # | | ||
752 | # +-< $(vmlinux-init) | ||
753 | # | +--< init/version.o + more | ||
754 | # | | ||
755 | # +--< $(vmlinux-main) | ||
756 | # | +--< driver/built-in.o mm/built-in.o + more | ||
757 | # | | ||
758 | # +-< kallsyms.o (see description in CONFIG_KALLSYMS section) | ||
759 | # | ||
760 | # vmlinux version (uname -v) cannot be updated during normal | ||
761 | # descending-into-subdirs phase since we do not yet know if we need to | ||
762 | # update vmlinux. | ||
763 | # Therefore this step is delayed until just before final link of vmlinux - | ||
764 | # except in the kallsyms case where it is done just before adding the | ||
765 | # symbols to the kernel. | ||
766 | # | ||
767 | # System.map is generated to document addresses of all kernel symbols | ||
768 | |||
769 | vmlinux-init := $(head-y) $(init-y) | ||
770 | vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y) | ||
771 | vmlinux-all := $(vmlinux-init) $(vmlinux-main) | ||
772 | vmlinux-lds := arch/$(SRCARCH)/kernel/vmlinux.lds | ||
773 | export KBUILD_VMLINUX_OBJS := $(vmlinux-all) | ||
774 | |||
775 | # Rule to link vmlinux - also used during CONFIG_KALLSYMS | ||
776 | # May be overridden by arch/$(ARCH)/Makefile | ||
777 | quiet_cmd_vmlinux__ ?= LD $@ | ||
778 | cmd_vmlinux__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) -o $@ \ | ||
779 | -T $(vmlinux-lds) $(vmlinux-init) \ | ||
780 | --start-group $(vmlinux-main) --end-group \ | ||
781 | $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o FORCE ,$^) | ||
782 | |||
783 | # Generate new vmlinux version | ||
784 | quiet_cmd_vmlinux_version = GEN .version | ||
785 | cmd_vmlinux_version = set -e; \ | ||
786 | if [ ! -r .version ]; then \ | ||
787 | rm -f .version; \ | ||
788 | echo 1 >.version; \ | ||
789 | else \ | ||
790 | mv .version .old_version; \ | ||
791 | expr 0$$(cat .old_version) + 1 >.version; \ | ||
792 | fi; \ | ||
793 | $(MAKE) $(build)=init | ||
794 | |||
795 | # Generate System.map | ||
796 | quiet_cmd_sysmap = SYSMAP | ||
797 | cmd_sysmap = $(CONFIG_SHELL) $(srctree)/scripts/mksysmap | ||
798 | |||
799 | # Sort exception table at build time | ||
800 | quiet_cmd_sortextable = SORTEX | ||
801 | cmd_sortextable = $(objtree)/scripts/sortextable | ||
802 | |||
803 | # Link of vmlinux | ||
804 | # If CONFIG_KALLSYMS is set .version is already updated | ||
805 | # Generate System.map and verify that the content is consistent | ||
806 | # Use + in front of the vmlinux_version rule to silent warning with make -j2 | ||
807 | # First command is ':' to allow us to use + in front of the rule | ||
808 | define rule_vmlinux__ | ||
809 | : | ||
810 | $(if $(CONFIG_KALLSYMS),,+$(call cmd,vmlinux_version)) | ||
811 | |||
812 | $(call cmd,vmlinux__) | ||
813 | $(Q)echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd | ||
814 | |||
815 | $(if $(CONFIG_BUILDTIME_EXTABLE_SORT), \ | ||
816 | $(Q)$(if $($(quiet)cmd_sortextable), \ | ||
817 | echo ' $($(quiet)cmd_sortextable) vmlinux' &&) \ | ||
818 | $(cmd_sortextable) vmlinux) | ||
819 | |||
820 | |||
821 | $(Q)$(if $($(quiet)cmd_sysmap), \ | ||
822 | echo ' $($(quiet)cmd_sysmap) System.map' &&) \ | ||
823 | $(cmd_sysmap) $@ System.map; \ | ||
824 | if [ $$? -ne 0 ]; then \ | ||
825 | rm -f $@; \ | ||
826 | /bin/false; \ | ||
827 | fi; | ||
828 | $(verify_kallsyms) | ||
829 | endef | ||
830 | |||
831 | |||
832 | ifdef CONFIG_KALLSYMS | ||
833 | # Generate section listing all symbols and add it into vmlinux $(kallsyms.o) | ||
834 | # It's a three stage process: | ||
835 | # o .tmp_vmlinux1 has all symbols and sections, but __kallsyms is | ||
836 | # empty | ||
837 | # Running kallsyms on that gives us .tmp_kallsyms1.o with | ||
838 | # the right size - vmlinux version (uname -v) is updated during this step | ||
839 | # o .tmp_vmlinux2 now has a __kallsyms section of the right size, | ||
840 | # but due to the added section, some addresses have shifted. | ||
841 | # From here, we generate a correct .tmp_kallsyms2.o | ||
842 | # o The correct .tmp_kallsyms2.o is linked into the final vmlinux. | ||
843 | # o Verify that the System.map from vmlinux matches the map from | ||
844 | # .tmp_vmlinux2, just in case we did not generate kallsyms correctly. | ||
845 | # o If 'make KALLSYMS_EXTRA_PASS=1" was used, do an extra pass using | ||
846 | # .tmp_vmlinux3 and .tmp_kallsyms3.o. This is only meant as a | ||
847 | # temporary bypass to allow the kernel to be built while the | ||
848 | # maintainers work out what went wrong with kallsyms. | ||
849 | |||
850 | last_kallsyms := 2 | ||
851 | |||
852 | ifdef KALLSYMS_EXTRA_PASS | ||
853 | ifneq ($(KALLSYMS_EXTRA_PASS),0) | ||
854 | last_kallsyms := 3 | ||
855 | endif | ||
856 | endif | ||
857 | |||
858 | kallsyms.o := .tmp_kallsyms$(last_kallsyms).o | ||
859 | |||
860 | define verify_kallsyms | ||
861 | $(Q)$(if $($(quiet)cmd_sysmap), \ | ||
862 | echo ' $($(quiet)cmd_sysmap) .tmp_System.map' &&) \ | ||
863 | $(cmd_sysmap) .tmp_vmlinux$(last_kallsyms) .tmp_System.map | ||
864 | $(Q)cmp -s System.map .tmp_System.map || \ | ||
865 | (echo Inconsistent kallsyms data; \ | ||
866 | echo This is a bug - please report about it; \ | ||
867 | echo Try "make KALLSYMS_EXTRA_PASS=1" as a workaround; \ | ||
868 | rm .tmp_kallsyms* ; /bin/false ) | ||
869 | endef | ||
870 | |||
871 | # Update vmlinux version before link | ||
872 | # Use + in front of this rule to silent warning about make -j1 | ||
873 | # First command is ':' to allow us to use + in front of this rule | ||
874 | cmd_ksym_ld = $(cmd_vmlinux__) | ||
875 | define rule_ksym_ld | ||
876 | : | ||
877 | +$(call cmd,vmlinux_version) | ||
878 | $(call cmd,vmlinux__) | ||
879 | $(Q)echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd | ||
880 | endef | ||
881 | |||
882 | # Generate .S file with all kernel symbols | ||
883 | quiet_cmd_kallsyms = KSYM $@ | ||
884 | cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \ | ||
885 | $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@ | ||
886 | 742 | ||
887 | .tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE | 743 | vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN) |
888 | $(call if_changed_dep,as_o_S) | ||
889 | 744 | ||
890 | .tmp_kallsyms%.S: .tmp_vmlinux% $(KALLSYMS) | 745 | # Final link of vmlinux |
891 | $(call cmd,kallsyms) | 746 | cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) |
747 | quiet_cmd_link-vmlinux = LINK $@ | ||
892 | 748 | ||
893 | # .tmp_vmlinux1 must be complete except kallsyms, so update vmlinux version | 749 | # Include targets which we want to |
894 | .tmp_vmlinux1: $(vmlinux-lds) $(vmlinux-all) FORCE | 750 | # execute if the rest of the kernel build went well. |
895 | $(call if_changed_rule,ksym_ld) | 751 | vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps) FORCE |
896 | |||
897 | .tmp_vmlinux2: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms1.o FORCE | ||
898 | $(call if_changed,vmlinux__) | ||
899 | |||
900 | .tmp_vmlinux3: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms2.o FORCE | ||
901 | $(call if_changed,vmlinux__) | ||
902 | |||
903 | # Needs to visit scripts/ before $(KALLSYMS) can be used. | ||
904 | $(KALLSYMS): scripts ; | ||
905 | |||
906 | # Generate some data for debugging strange kallsyms problems | ||
907 | debug_kallsyms: .tmp_map$(last_kallsyms) | ||
908 | |||
909 | .tmp_map%: .tmp_vmlinux% FORCE | ||
910 | ($(OBJDUMP) -h $< | $(AWK) '/^ +[0-9]/{print $$4 " 0 " $$2}'; $(NM) $<) | sort > $@ | ||
911 | |||
912 | .tmp_map3: .tmp_map2 | ||
913 | |||
914 | .tmp_map2: .tmp_map1 | ||
915 | |||
916 | endif # ifdef CONFIG_KALLSYMS | ||
917 | |||
918 | # Do modpost on a prelinked vmlinux. The finally linked vmlinux has | ||
919 | # relevant sections renamed as per the linker script. | ||
920 | quiet_cmd_vmlinux-modpost = LD $@ | ||
921 | cmd_vmlinux-modpost = $(LD) $(LDFLAGS) -r -o $@ \ | ||
922 | $(vmlinux-init) --start-group $(vmlinux-main) --end-group \ | ||
923 | $(filter-out $(vmlinux-init) $(vmlinux-main) FORCE ,$^) | ||
924 | define rule_vmlinux-modpost | ||
925 | : | ||
926 | +$(call cmd,vmlinux-modpost) | ||
927 | $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@ | ||
928 | $(Q)echo 'cmd_$@ := $(cmd_vmlinux-modpost)' > $(dot-target).cmd | ||
929 | endef | ||
930 | |||
931 | # vmlinux image - including updated kernel symbols | ||
932 | vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) FORCE | ||
933 | ifdef CONFIG_HEADERS_CHECK | 752 | ifdef CONFIG_HEADERS_CHECK |
934 | $(Q)$(MAKE) -f $(srctree)/Makefile headers_check | 753 | $(Q)$(MAKE) -f $(srctree)/Makefile headers_check |
935 | endif | 754 | endif |
@@ -939,22 +758,11 @@ endif | |||
939 | ifdef CONFIG_BUILD_DOCSRC | 758 | ifdef CONFIG_BUILD_DOCSRC |
940 | $(Q)$(MAKE) $(build)=Documentation | 759 | $(Q)$(MAKE) $(build)=Documentation |
941 | endif | 760 | endif |
942 | $(call vmlinux-modpost) | 761 | +$(call if_changed,link-vmlinux) |
943 | $(call if_changed_rule,vmlinux__) | ||
944 | $(Q)rm -f .old_version | ||
945 | |||
946 | # build vmlinux.o first to catch section mismatch errors early | ||
947 | ifdef CONFIG_KALLSYMS | ||
948 | .tmp_vmlinux1: vmlinux.o | ||
949 | endif | ||
950 | |||
951 | modpost-init := $(filter-out init/built-in.o, $(vmlinux-init)) | ||
952 | vmlinux.o: $(modpost-init) $(vmlinux-main) FORCE | ||
953 | $(call if_changed_rule,vmlinux-modpost) | ||
954 | 762 | ||
955 | # The actual objects are generated when descending, | 763 | # The actual objects are generated when descending, |
956 | # make sure no implicit rule kicks in | 764 | # make sure no implicit rule kicks in |
957 | $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ; | 765 | $(sort $(vmlinux-deps)): $(vmlinux-dirs) ; |
958 | 766 | ||
959 | # Handle descending into subdirectories listed in $(vmlinux-dirs) | 767 | # Handle descending into subdirectories listed in $(vmlinux-dirs) |
960 | # Preset locale variables to speed up the build process. Limit locale | 768 | # Preset locale variables to speed up the build process. Limit locale |
@@ -1181,8 +989,6 @@ endif # CONFIG_MODULES | |||
1181 | 989 | ||
1182 | # Directories & files removed with 'make clean' | 990 | # Directories & files removed with 'make clean' |
1183 | CLEAN_DIRS += $(MODVERDIR) | 991 | CLEAN_DIRS += $(MODVERDIR) |
1184 | CLEAN_FILES += vmlinux System.map \ | ||
1185 | .tmp_kallsyms* .tmp_version .tmp_vmlinux* .tmp_System.map | ||
1186 | 992 | ||
1187 | # Directories & files removed with 'make mrproper' | 993 | # Directories & files removed with 'make mrproper' |
1188 | MRPROPER_DIRS += include/config usr/include include/generated \ | 994 | MRPROPER_DIRS += include/config usr/include include/generated \ |
@@ -1428,6 +1234,7 @@ scripts: ; | |||
1428 | endif # KBUILD_EXTMOD | 1234 | endif # KBUILD_EXTMOD |
1429 | 1235 | ||
1430 | clean: $(clean-dirs) | 1236 | clean: $(clean-dirs) |
1237 | $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean | ||
1431 | $(call cmd,rmdirs) | 1238 | $(call cmd,rmdirs) |
1432 | $(call cmd,rmfiles) | 1239 | $(call cmd,rmfiles) |
1433 | @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ | 1240 | @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ |
@@ -1568,14 +1375,6 @@ quiet_cmd_depmod = DEPMOD $(KERNELRELEASE) | |||
1568 | cmd_crmodverdir = $(Q)mkdir -p $(MODVERDIR) \ | 1375 | cmd_crmodverdir = $(Q)mkdir -p $(MODVERDIR) \ |
1569 | $(if $(KBUILD_MODULES),; rm -f $(MODVERDIR)/*) | 1376 | $(if $(KBUILD_MODULES),; rm -f $(MODVERDIR)/*) |
1570 | 1377 | ||
1571 | a_flags = -Wp,-MD,$(depfile) $(KBUILD_AFLAGS) $(AFLAGS_KERNEL) \ | ||
1572 | $(KBUILD_AFLAGS_KERNEL) \ | ||
1573 | $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(KBUILD_CPPFLAGS) \ | ||
1574 | $(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(basetarget).o) | ||
1575 | |||
1576 | quiet_cmd_as_o_S = AS $@ | ||
1577 | cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< | ||
1578 | |||
1579 | # read all saved command lines | 1378 | # read all saved command lines |
1580 | 1379 | ||
1581 | targets := $(wildcard $(sort $(targets))) | 1380 | targets := $(wildcard $(sort $(targets))) |