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)
6 # Define FFI if you want to compile ktap with FFI support. By default This
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.
15 # Do not instrument the tracer itself:
16 ifdef CONFIG_FUNCTION_TRACER
17 ORIG_CFLAGS := $(KBUILD_CFLAGS)
18 KBUILD_CFLAGS = $(subst -pg,,$(ORIG_CFLAGS))
26 FFIDIR = $(RUNTIME)/ffi
29 LIB_OBJS += $(RUNTIME)/lib_base.o $(RUNTIME)/lib_kdebug.o $(RUNTIME)/lib_timer.o \
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
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 \
44 RUNTIME_OBJS += $(RUNTIME)/kp_amalg.o
48 ifeq ($(KBUILD_MODULES), 1)
50 # call_x86_64.o is compiled from call_x86_64.S
51 RUNTIME_OBJS += $(FFIDIR)/call_x86_64.o
53 $(error ktap FFI only supports x86_64 for now!)
58 ccflags-y += -DCONFIG_KTAP_FFI
62 ktapvm-y := $(RUNTIME_OBJS)
64 KVERSION ?= $(shell uname -r)
65 KERNEL_SRC ?= /lib/modules/$(KVERSION)/build
68 $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules
71 $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules_install
73 KTAPC_CFLAGS = -Wall -O2
77 # Usage: option = $(call try-cc, source-to-build, cc-options, msg)
79 TRY_CC_OUTPUT= > /dev/null 2>&1
81 TRY_CC_MSG=echo " CHK $(3)" 1>&2;
83 try-cc = $(shell sh -c \
87 $(CC) -x c - $(2) -o "$$TMP" $(TRY_CC_OUTPUT) && echo y; \
96 Elf *elf = elf_begin(0, ELF_C_READ, 0);
104 KTAPC_CFLAGS += -DNO_LIBELF
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);
109 KTAPC_CFLAGS += -DNO_LIBELF
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 $<
142 $(UDIR)/symbol.o: $(UDIR)/symbol.c
143 $(QUIET_CC)$(CC) $(DEBUGINFO_FLAG) $(KTAPC_CFLAGS) -o $@ -c $<
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 $<
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
170 KTAPOBJS += $(UDIR)/symbol.o
173 KTAPOBJS += $(UDIR)/ffi_type.o
174 KTAPOBJS += $(UDIR)/ffi/cparser.o
175 KTAPOBJS += $(UDIR)/ffi/ctype.o
179 $(QUIET_LINK)$(CC) $(KTAPC_CFLAGS) -o $@ $(KTAPOBJS) $(KTAP_LIBS)
181 KMISC := /lib/modules/$(KVERSION)/ktapvm/
185 install -m 644 -c *.ko /lib/modules/$(KVERSION)/ktapvm/
195 cd test; sh ./run_test.sh; cd -
198 $(MAKE) -C $(KERNEL_SRC) M=$(PWD) clean