Merge tag 'v3.14.25' into backport/v3.14.24-ltsi-rc1+v3.14.25/snapshot-merge.wip
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / staging / ktap / Makefile
1
2 #
3 # Define NO_LIBELF if you do not want libelf dependency (e.g. cross-builds)
4 # (this will also disable resolve resolving symbols in DSO functionality)
5 #
6 # Define FFI if you want to compile ktap with FFI support. By default This
7 # toggle is off.
8 #
9 # Define amalg to enable amalgamation build, This compiles the ktapvm as
10 # one huge C file and allows GCC to generate faster and shorter code. Alas,
11 # this requires lots of memory during the build.
12 # Recommend to use amalgmation build as default.
13 amalg = 1
14 NO_LIBELF = 1
15 # Do not instrument the tracer itself:
16 ifdef CONFIG_FUNCTION_TRACER
17 ORIG_CFLAGS := $(KBUILD_CFLAGS)
18 KBUILD_CFLAGS = $(subst -pg,,$(ORIG_CFLAGS))
19 endif
20
21 all: mod ktap
22
23 INC = include
24 RUNTIME = runtime
25
26 FFIDIR = $(RUNTIME)/ffi
27 KTAP_LIBS = -lpthread
28
29 LIB_OBJS += $(RUNTIME)/lib_base.o $(RUNTIME)/lib_kdebug.o $(RUNTIME)/lib_timer.o \
30                 $(RUNTIME)/lib_ansi.o
31
32 ifndef amalg
33 ifdef FFI
34 FFI_OBJS += $(FFIDIR)/ffi_call.o $(FFIDIR)/ffi_type.o $(FFIDIR)/ffi_symbol.o \
35     $(FFIDIR)/cdata.o $(FFIDIR)/ffi_util.o
36 RUNTIME_OBJS += $(FFI_OBJS)
37 LIB_OBJS += $(RUNTIME)/lib_ffi.o
38 endif
39 RUNTIME_OBJS += $(RUNTIME)/ktap.o $(RUNTIME)/kp_load.o $(RUNTIME)/kp_obj.o \
40                 $(RUNTIME)/kp_str.o $(RUNTIME)/kp_tab.o $(RUNTIME)/kp_vm.o \
41                 $(RUNTIME)/kp_opcode.o $(RUNTIME)/kp_transport.o \
42                 $(LIB_OBJS)
43 else
44 RUNTIME_OBJS += $(RUNTIME)/kp_amalg.o
45 endif
46
47 ifdef FFI
48 ifeq ($(KBUILD_MODULES), 1)
49 ifdef CONFIG_X86_64
50 # call_x86_64.o is compiled from call_x86_64.S
51 RUNTIME_OBJS += $(FFIDIR)/call_x86_64.o
52 else
53 $(error ktap FFI only supports x86_64 for now!)
54 endif
55 endif
56
57
58 ccflags-y       += -DCONFIG_KTAP_FFI
59 endif
60
61 obj-m           += ktapvm.o
62 ktapvm-y        := $(RUNTIME_OBJS)
63
64 KVERSION ?= $(shell uname -r)
65 KERNEL_SRC ?= /lib/modules/$(KVERSION)/build
66 PWD := $(shell pwd)
67 mod:
68         $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules
69
70 modules_install:
71         $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules_install
72
73 KTAPC_CFLAGS = -Wall -O2
74
75
76 # try-cc
77 # Usage: option = $(call try-cc, source-to-build, cc-options, msg)
78 ifneq ($(V),1)
79 TRY_CC_OUTPUT= > /dev/null 2>&1
80 endif
81 TRY_CC_MSG=echo "    CHK $(3)" 1>&2;
82
83 try-cc = $(shell sh -c                                                  \
84          'TMP="/tmp/.$$$$";                                             \
85           $(TRY_CC_MSG)                                                 \
86           echo "$(1)" |                                                 \
87           $(CC) -x c - $(2) -o "$$TMP" $(TRY_CC_OUTPUT) && echo y;      \
88           rm -f "$$TMP"')
89
90
91 define SOURCE_LIBELF
92 #include <libelf.h>
93
94 int main(void)
95 {
96         Elf *elf = elf_begin(0, ELF_C_READ, 0);
97         return (long)elf;
98 }
99 endef
100
101 FLAGS_LIBELF = -lelf
102
103 ifdef NO_LIBELF
104         KTAPC_CFLAGS += -DNO_LIBELF
105 else
106 ifneq ($(call try-cc,$(SOURCE_LIBELF),$(FLAGS_LIBELF),libelf),y)
107     $(warning No libelf found, disables symbol resolving, please install elfutils-libelf-devel/libelf-dev);
108     NO_LIBELF := 1
109     KTAPC_CFLAGS += -DNO_LIBELF
110 else
111     KTAP_LIBS += -lelf
112 endif
113 endif
114
115 UDIR = userspace
116
117 $(UDIR)/lex.o: $(UDIR)/lex.c $(INC)/*
118         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
119 $(UDIR)/parser.o: $(UDIR)/parser.c $(INC)/*
120         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
121 $(UDIR)/code.o: $(UDIR)/code.c $(INC)/*
122         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
123 $(UDIR)/dump.o: $(UDIR)/dump.c $(INC)/*
124         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
125 $(UDIR)/main.o: $(UDIR)/main.c $(INC)/*
126         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
127 $(UDIR)/util.o: $(UDIR)/util.c $(INC)/*
128         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
129 $(UDIR)/ktapio.o: $(UDIR)/ktapio.c $(INC)/*
130         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
131 $(UDIR)/eventdef.o: $(UDIR)/eventdef.c $(INC)/*
132         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
133 $(UDIR)/kp_opcode.o: $(RUNTIME)/kp_opcode.c $(INC)/*
134         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
135 $(UDIR)/kp_tab.o: $(RUNTIME)/kp_tab.c $(INC)/*
136         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
137 $(UDIR)/kp_str.o: $(RUNTIME)/kp_str.c $(INC)/*
138         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
139 $(UDIR)/kp_obj.o: $(RUNTIME)/kp_obj.c $(INC)/*
140         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
141 ifndef NO_LIBELF
142 $(UDIR)/symbol.o: $(UDIR)/symbol.c
143         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
144 endif
145 ifdef FFI
146 KTAPC_CFLAGS += -DCONFIG_KTAP_FFI
147 $(UDIR)/ffi_type.o: $(RUNTIME)/ffi/ffi_type.c $(INC)/*
148         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
149 $(UDIR)/ffi/cparser.o: $(UDIR)/ffi/cparser.c $(INC)/*
150         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
151 $(UDIR)/ffi/ctype.o: $(UDIR)/ffi/ctype.c $(INC)/*
152         $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
153 endif
154
155
156 KTAPOBJS =
157 KTAPOBJS += $(UDIR)/lex.o
158 KTAPOBJS += $(UDIR)/parser.o
159 KTAPOBJS += $(UDIR)/code.o
160 KTAPOBJS += $(UDIR)/dump.o
161 KTAPOBJS += $(UDIR)/main.o
162 KTAPOBJS += $(UDIR)/util.o
163 KTAPOBJS += $(UDIR)/ktapio.o
164 KTAPOBJS += $(UDIR)/eventdef.o
165 KTAPOBJS += $(UDIR)/kp_opcode.o
166 KTAPOBJS += $(UDIR)/kp_tab.o
167 KTAPOBJS += $(UDIR)/kp_str.o
168 KTAPOBJS += $(UDIR)/kp_obj.o
169 ifndef NO_LIBELF
170 KTAPOBJS += $(UDIR)/symbol.o
171 endif
172 ifdef FFI
173 KTAPOBJS += $(UDIR)/ffi_type.o
174 KTAPOBJS += $(UDIR)/ffi/cparser.o
175 KTAPOBJS += $(UDIR)/ffi/ctype.o
176 endif
177
178 ktap: $(KTAPOBJS)
179         $(QUIET_LINK)$(CC) $(KTAPC_CFLAGS) -o $@ $(KTAPOBJS) $(KTAP_LIBS)
180
181 KMISC := /lib/modules/$(KVERSION)/ktapvm/
182
183 install: mod ktap
184         install -d $(KMISC)
185         install -m 644 -c *.ko /lib/modules/$(KVERSION)/ktapvm/
186         /sbin/depmod -a
187
188 load:
189         insmod ktapvm.ko
190
191 unload:
192         rmmod ktapvm
193
194 test: FORCE
195         cd test; sh ./run_test.sh; cd -
196
197 clean:
198         $(MAKE) -C $(KERNEL_SRC) M=$(PWD) clean
199         $(RM) ktap
200
201 PHONY += FORCE
202 FORCE:
203