Makefile.ksplice: Rewrite ksplice-cow-check as a wrapper function.
[ksplice.git] / kmodsrc / Makefile.in
blob435ee83a595ec99271158c1d2ebac288957b5c6b
1 prefix = @prefix@
2 datarootdir = @datarootdir@
3 datadir = @datadir@
5 ksplice-script = $(datadir)/ksplice/ksplice-obj.pl
7 KSPLICE_KID ?= $(error "You must set KSPLICE_KID.")
8 KSPLICE_VERSION ?= $(error "You must set KSPLICE_VERSION.")
9 map_printk ?= $(error "You must set map_printk.")
11 ifneq ($(KSPLICE_STANDALONE),)
12 KSPLICE_CFLAGS += -DKSPLICE_STANDALONE
13 endif
14 KSPLICE_CFLAGS += -DKSPLICE_KID=$(KSPLICE_KID)
15 KSPLICE_CFLAGS += -DMAP_PRINTK=0x$(map_printk)L
17 comma ?= ,
18 name-fix ?= $(subst $(comma),_,$(subst -,_,$(1)))
19 target = $(call name-fix,$(mod))
20 KSPLICE_MID = $(KSPLICE_KID)_$(target)
21 KSPLICE = ksplice-$(KSPLICE_MID)
22 KSPLICE_CORE = ksplice-$(KSPLICE_KID)
24 quiet_cmd_ksplice-collect = COLLECT $@
25 cmd_ksplice-collect = \
26 $(ksplice-script) finalize $< $<.final $* && \
27 $(LD) --script=$(obj)/ksplice.lds -r -o $@ $<.final
29 ksplice-mod-cflags = $(KSPLICE_CFLAGS) \
30 "-DKSPLICE_MID=$(KSPLICE_MID)" \
31 $(addprefix -DKSPLICE_TARGET=,$(target)) \
32 "-DKSPLICE_VERSION=\"$(KSPLICE_VERSION)\""
34 ksplice-new-code-objs = new-code-$(target).o collect-new-code-$(mod).o
35 ksplice-old-code-objs = old-code-$(target).o collect-old-code-$(mod).o
37 ifneq ($(KSPLICE_STANDALONE),)
38 ifeq ($(KSPLICE_SKIP_CORE),)
39 obj-m += $(KSPLICE_CORE).o
40 endif
41 UDIS86 = x86/libudis86
42 kudis86 += \
43 $(UDIS86)/itab.o \
44 $(UDIS86)/input.o \
45 $(UDIS86)/decode.o \
46 $(UDIS86)/syn.o \
47 $(UDIS86)/syn-intel.o \
48 $(UDIS86)/syn-att.o \
49 $(UDIS86)/udis86.o
50 $(KSPLICE_CORE)-objs = $(fake-ksplice.o) ksplice-rmsyms.o $(kudis86)
51 fake-ksplice.o = ksplice.o
52 $(obj)/$(KSPLICE_CORE).o: fake-ksplice.o =
53 endif
55 define ksplice-mod-vars
56 ifneq ($(KSPLICE_SHORT_NAME_HACK),)
57 obj-m += $(KSPLICE)-n.o $(KSPLICE)-o.o
58 $(KSPLICE)-n-objs = $(ksplice-new-code-objs)
59 $(KSPLICE)-o-objs = $(ksplice-old-code-objs)
60 else
61 obj-m += $(KSPLICE)-new.o $(KSPLICE)-old.o
62 $(KSPLICE)-new-objs = $(ksplice-new-code-objs)
63 $(KSPLICE)-old-objs = $(ksplice-old-code-objs)
64 endif
65 CFLAGS_new-code-$(target).o = $(ksplice-mod-cflags)
66 CFLAGS_old-code-$(target).o = $(ksplice-mod-cflags)
67 CPPFLAGS_ksplice.lds = $(ksplice-mod-cflags) -P
68 endef
70 $(foreach mod,$(KSPLICE_MODULES),$(eval $(ksplice-mod-vars)))
72 ifneq ($(KSPLICE_MODULES),)
73 $(foreach mod,$(KSPLICE_MODULES),$(obj)/new-code-$(target).o): $(obj)/%.o: $(src)/new_code_loader.c FORCE
74 $(call if_changed_rule,cc_o_c)
75 $(foreach mod,$(KSPLICE_MODULES),$(obj)/old-code-$(target).o): $(obj)/%.o: $(src)/old_code_loader.c FORCE
76 $(call if_changed_rule,cc_o_c)
77 endif
79 $(obj)/collect-new-code-%.o: $(obj)/%.o.KSPLICE_new_code $(obj)/ksplice.lds FORCE
80 $(call if_changed,ksplice-collect)
81 $(obj)/collect-old-code-%.o: $(obj)/%.o.KSPLICE_old_code $(obj)/ksplice.lds FORCE
82 $(call if_changed,ksplice-collect)
84 ifeq ($(quiet_cmd_cpp_lds_S),)
85 quiet_cmd_cpp_lds_S = LDS $@
86 cmd_cpp_lds_S = $(CPP) -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(CPPFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS_$(@F)) $(cpp_flags) -D__ASSEMBLY__ -o $@ $<
88 %.lds: %.lds.S FORCE
89 $(call if_changed_dep,cpp_lds_S)
90 endif
92 $(obj)/ksplice.lds: $(src)/ksplice.lds.S FORCE
93 $(call if_changed_dep,cpp_lds_S)
95 CFLAGS_offsets.o += $(KSPLICE_CFLAGS)
96 ifeq ($(KSPLICE_SKIP_CORE),)
97 extra-y += offsets.o
98 endif
100 ifneq ($(KSPLICE_STANDALONE),)
101 CFLAGS_ksplice.o += $(KSPLICE_CFLAGS)
103 quiet_cmd_ksplice-rmsyms = RMSYMS $@
104 cmd_ksplice-rmsyms = \
105 $(ksplice-script) rmsyms $< $<.rmsyms && \
106 $(LD) --script=$(src)/ksplice-rmsyms.lds -r -o $@ $<.rmsyms
107 $(obj)/ksplice-rmsyms.o: $(obj)/ksplice.o $(obj)/offsets.o FORCE
108 $(call if_changed,ksplice-rmsyms)
109 endif # KSPLICE_STANDALONE