Don't build the ksplice core twice.
[ksplice.git] / kmodsrc / Makefile.in
blob2b5d9e5bbf265673042d0a16509594fe437e8628
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-pack-cflags = $(KSPLICE_CFLAGS) \
30 "-DKSPLICE_MID=$(KSPLICE_MID)" \
31 $(addprefix -DKSPLICE_TARGET=,$(target)) \
32 "-DKSPLICE_VERSION=\"$(KSPLICE_VERSION)\""
34 ksplice-primary-objs = primary-$(target).o collect-primary-$(mod).o
35 ksplice-helper-objs = helper-$(target).o collect-helper-$(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-pack-vars
56 obj-m += $(KSPLICE).o $(KSPLICE)-helper.o
57 $(KSPLICE)-objs = $(ksplice-primary-objs)
58 $(KSPLICE)-helper-objs = $(ksplice-helper-objs)
59 CFLAGS_primary-$(target).o = $(ksplice-pack-cflags)
60 CFLAGS_helper-$(target).o = $(ksplice-pack-cflags)
61 CPPFLAGS_ksplice.lds = $(ksplice-pack-cflags) -P
62 endef
64 $(foreach mod,$(KSPLICE_MODULES),$(eval $(ksplice-pack-vars)))
66 ifneq ($(KSPLICE_MODULES),)
67 $(foreach mod,$(KSPLICE_MODULES),$(obj)/primary-$(target).o): $(obj)/%.o: $(src)/primary.c FORCE
68 $(call if_changed_rule,cc_o_c)
69 $(foreach mod,$(KSPLICE_MODULES),$(obj)/helper-$(target).o): $(obj)/%.o: $(src)/helper.c FORCE
70 $(call if_changed_rule,cc_o_c)
71 endif
73 $(obj)/collect-primary-%.o: $(obj)/%.o.KSPLICE_primary $(obj)/ksplice.lds FORCE
74 $(call if_changed,ksplice-collect)
75 $(obj)/collect-helper-%.o: $(obj)/%.o.KSPLICE_helper $(obj)/ksplice.lds FORCE
76 $(call if_changed,ksplice-collect)
78 ifeq ($(quiet_cmd_cpp_lds_S),)
79 quiet_cmd_cpp_lds_S = LDS $@
80 cmd_cpp_lds_S = $(CPP) -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(CPPFLAGS) $(EXTRA_CPPFLAGS) $(CPPFLAGS_$(@F)) $(cpp_flags) -D__ASSEMBLY__ -o $@ $<
82 %.lds: %.lds.S FORCE
83 $(call if_changed_dep,cpp_lds_S)
84 endif
86 $(obj)/ksplice.lds: $(src)/ksplice.lds.S FORCE
87 $(call if_changed_dep,cpp_lds_S)
89 CFLAGS_offsets.o += $(KSPLICE_CFLAGS)
90 ifeq ($(KSPLICE_SKIP_CORE),)
91 extra-y += offsets.o
92 endif
94 ifneq ($(KSPLICE_STANDALONE),)
95 CFLAGS_ksplice.o += $(KSPLICE_CFLAGS)
97 RMSYMS = \
98 apply_paravirt \
99 find_bug \
100 search_exception_tables \
101 thread_return \
102 bust_spinlocks \
103 task_curr \
104 __kernel_text_address \
105 tasklist_lock \
106 stop_machine_run \
107 module_mutex \
108 modules \
109 init_mm \
110 phys_base \
111 kallsyms_addresses \
112 kallsyms_num_syms \
113 kallsyms_names \
114 kallsyms_token_table \
115 kallsyms_token_index \
116 __module_text_address \
117 __start___ksymtab \
118 __stop___ksymtab \
119 __start___ksymtab_gpl \
120 __stop___ksymtab_gpl \
121 __start___ksymtab_gpl_future \
122 __stop___ksymtab_gpl_future \
123 __start___ksymtab_unused \
124 __stop___ksymtab_unused \
125 __start___ksymtab_unused_gpl \
126 __stop___ksymtab_unused_gpl \
127 __start___ksymtab_gpl_future \
128 __stop___ksymtab_gpl_future \
129 __start___kcrctab \
130 __start___kcrctab_gpl \
131 __start___kcrctab_gpl_future \
132 __start___kcrctab_unused \
133 __start___kcrctab_unused_gpl \
134 ftrace_trace_function
136 quiet_cmd_ksplice-rmsyms = RMSYMS $@
137 cmd_ksplice-rmsyms = \
138 $(ksplice-script) rmsyms $< $<.rmsyms $(RMSYMS) && \
139 $(LD) -r -o $@ $<.rmsyms $(src)/ksplice-rmsyms.lds
140 $(obj)/ksplice-rmsyms.o: $(obj)/ksplice.o $(obj)/offsets.o FORCE
141 $(call if_changed,ksplice-rmsyms)
142 endif # KSPLICE_STANDALONE