Clean up perldoc for userspace utilities.
[ksplice.git] / Makefile.ksplice
blob2f0c2255ac2fd958831402eeba471a6bfb01e074
1 ksplice-makefile := $(word $(words $(MAKEFILE_LIST)), $(MAKEFILE_LIST))
2 ksplice-script = $(dir $(ksplice-makefile))ksplice-obj.pl
4 KSPLICE_MODE ?= diff
5 $(if $(filter_out snap diff,$(KSPLICE_MODE)), \
6   $(error Invalid KSPLICE_MODE $(KSPLICE_MODE).))
7 ksplice-mode-$(KSPLICE_MODE) = y
9 KSPLICE_ONLY_TARGETS ?= %
11 PHONY := __ksplice
12 __ksplice:
14 ksplice-extra = $(filter $(KSPLICE_EXTRA_MATCH),$(lib-y) $(real-objs-m) $(real-objs-y))
15 ksplice-objs = $(foreach o,$(1),$(o:=.KSPLICE) $(addsuffix .KSPLICE_helper,$(filter $(ksplice-extra),$(o))))
17 quiet_cmd_ksplice-combine = COMBINE $(@:.KSPLICE=)
18 cmd_ksplice-combine = $(ksplice-script) combine $@ $(filter $(call ksplice-objs,$(ksplice-link-deps)),$^)
19 quiet_cmd_ksplice-snap = SNAP    $(@:.KSPLICE=)
20 cmd_ksplice-snap = $(ksplice-script) snap $@
21 quiet_cmd_ksplice-diff = DIFF    $(@:.KSPLICE=)
22 cmd_ksplice-diff = $(ksplice-script) diff $@
23 quiet_cmd_ksplice-ignore = IGNORE  $(@:.KSPLICE=)
24 cmd_ksplice-ignore = touch $@
25 quiet_cmd_ksplice-cow = COW     $@
26 cmd_ksplice-cow = cp -a $@ $@.KSPLICE_pre
27 rule_ksplice-mod = $(Q)if [ -s $< ]; then echo $(<:.o.KSPLICE=) > $@; elif [ -e $@ ]; then rm -f $@; fi
28 quiet_cmd_ksplice-helper = HELPER  $(@:.KSPLICE_helper=)
29 cmd_ksplice-helper = $(ksplice-script) helper $@
31 ifeq ($(KERNELRELEASE),)
33 ifneq ($(wildcard include/linux/compile.h),)
34 MAKE += --old-file=include/linux/compile.h
35 endif
36 # Makefile.lib must be included before Makefile because they contain
37 # different filechk definitions in 2.6.12.
38 include scripts/Makefile.lib
39 include Makefile
40 CC := ksplice-cc.pl $(CC)
41 CFLAGS_KSPLICE = -ffunction-sections -fdata-sections -ksplice-cflags-api=1
42 CFLAGS_KERNEL += $(CFLAGS_KSPLICE)
43 CFLAGS_MODULE += $(CFLAGS_KSPLICE)
44 ksplice-mods += vmlinux
45 ksplice-dirs += $(addprefix _ksplice_,$(vmlinux-dirs))
46 ifdef ksplice-mode-snap
47 ksplice-before += prepare0 prepare scripts
48 endif
50 ksplice-vmlinux-objs = $(filter-out $(head-y),$(if $(vmlinux-all),$(vmlinux-all),$(vmlinux-objs)))
51 $(obj)/vmlinux.o.KSPLICE: ksplice-link-deps = $(ksplice-vmlinux-objs)
52 $(obj)/vmlinux.o.KSPLICE: $(call ksplice-objs,$(ksplice-vmlinux-objs)) FORCE
53         $(call if_changed,ksplice-combine)
54 ksplice-targets += $(obj)/vmlinux.o.KSPLICE
55 $(ksplice-vmlinux-objs:=.KSPLICE): $(ksplice-dirs) ;
57 else    # KERNELRELEASE
59 include $(srctree)/scripts/Makefile.build
60 ksplice-mods += $(obj-m:.o=)
61 ksplice-deps += $(if $(filter $(KSPLICE_ONLY_TARGETS),vmlinux),$(builtin-target:=.KSPLICE) $(lib-target:=.KSPLICE))
62 ksplice-dirs += $(addprefix _ksplice_,$(subdir-ym))
64 ifdef builtin-target
65 $(builtin-target:=.KSPLICE): ksplice-link-deps = $(obj-y)
66 $(builtin-target:=.KSPLICE): $(call ksplice-objs,$(obj-y)) FORCE
67         $(call if_changed,ksplice-combine)
68 ksplice-targets += $(builtin-target:=.KSPLICE)
69 endif
71 ifdef lib-target
72 $(lib-target:=.KSPLICE): ksplice-link-deps = $(lib-y)
73 $(lib-target:=.KSPLICE): $(call ksplice-objs,$(lib-y)) FORCE
74         $(call if_changed,ksplice-combine)
75 ksplice-targets += $(lib-target:=.KSPLICE)
76 endif
78 $(sort $(multi-used-y:=.KSPLICE) $(multi-used-m:=.KSPLICE)): ksplice-link-deps = $(addprefix $(obj)/,$($(patsubst $(obj)/%,%,$(@:.o.KSPLICE=-objs))) $($(patsubst $(obj)/%,%,$(@:.o.KSPLICE=-y))))
79 $(sort $(multi-used-y:=.KSPLICE)): $(obj)/%.o.KSPLICE: $(call ksplice-objs,$(multi-objs-y)) FORCE
80         $(call if_changed,ksplice-combine)
81 $(sort $(multi-used-m:=.KSPLICE)): $(obj)/%.o.KSPLICE: $(call ksplice-objs,$(multi-objs-m)) FORCE
82         $(call if_changed,ksplice-combine)
83 ksplice-targets += $(sort $(multi-used-y:=.KSPLICE) $(multi-used-m:=.KSPLICE))
85 ifdef ksplice-mode-snap
86 $(obj)/%.o.KSPLICE: $(obj)/%.o FORCE
87         $(if $(strip $(wildcard $<.KSPLICE_pre) $(filter $<,$?)), \
88           $(call cmd,ksplice-snap))
89 else
90 $(obj)/%.o.KSPLICE: $(obj)/%.o
91         $(call cmd,ksplice-diff)
92 endif
94 $(obj)/%.lds.KSPLICE:
95         $(call cmd,ksplice-ignore)
97 $(sort $(subdir-obj-y:=.KSPLICE)): $(ksplice-dirs) ;
99 endif   # KERNELRELEASE
101 ksplice-modnames = $(filter $(KSPLICE_ONLY_TARGETS),$(notdir $(ksplice-mods)))
102 ksplice-deps += $(ksplice-modnames:%=$(MODVERDIR)/%.mod.KSPLICE)
103 $(MODVERDIR)/%.mod.KSPLICE: $(obj)/%.o.KSPLICE
104         $(rule_ksplice-mod)
105 .PRECIOUS: $(obj)/%.o.KSPLICE
107 $(obj)/%.o.KSPLICE_helper: $(obj)/%.o.KSPLICE
108         $(call cmd,ksplice-helper)
110 define ksplice-cow-check
111         $(if $(filter-out %.KSPLICE,$@), \
112           $(if $(ksplice-mode-diff), \
113             $(if $(strip $(filter-out $(PHONY),$?) $(filter-out $(cmd_$(1)),$(cmd_$@)) $(filter-out $(cmd_$@),$(cmd_$(1)))), \
114               $(if $(wildcard $@), \
115                 $(if $(wildcard $@.KSPLICE_pre),, \
116                   $(call cmd,ksplice-cow))))))
118 endef
120 $(foreach v,if_changed if_changed_dep if_changed_rule, \
121   $(eval $(v)=$$(ksplice-cow-check)$(value $(v))))
123 __ksplice: $(ksplice-deps) $(ksplice-dirs)
124         @:
126 ksplice-cmd-files := $(wildcard $(foreach f,$(sort $(ksplice-targets)),$(dir $(f)).$(notdir $(f)).cmd))
127 ifneq ($(ksplice-cmd-files),)
128 include $(ksplice-cmd-files)
129 endif
131 ksplice := -f $(ksplice-makefile) obj
133 PHONY += $(ksplice-dirs)
134 $(ksplice-dirs): $(ksplice-before)
135         $(Q)$(MAKE) $(ksplice)=$(patsubst _ksplice_%,%,$@)
137 PHONY += FORCE
138 FORCE:
140 .PHONY: $(PHONY)