ifneq ($(RT_PATCH_VERSION), 0)
ccflags-y += -DRT_PATCH_VERSION=$(RT_PATCH_VERSION)
endif
+
+# Starting with kernel 4.12, the ftrace header was moved to private headers
+# and as such is not available when building against distro headers instead
+# of the full kernel sources. In the situation, define LTTNG_FTRACE_MISSING_HEADER
+# so we can enable the compat code even if CONFIG_DYNAMIC_FTRACE is enabled.
+ifneq ($(CONFIG_DYNAMIC_FTRACE),)
+ ftrace_dep = $(srctree)/kernel/trace/trace.h
+ ftrace_dep_check = $(wildcard $(ftrace_dep))
+ have_ftrace_header = $(shell \
+ if [ $(VERSION) -ge 5 -o \( $(VERSION) -eq 4 -a $(PATCHLEVEL) -ge 12 \) ] ; then \
+ if [ -z "$(ftrace_dep_check)" ] ; then \
+ echo "no" ; \
+ exit ; \
+ fi; \
+ fi; \
+ echo "yes" ; \
+ )
+ ifeq ($(have_ftrace_header), no)
+ ccflags-y += -DLTTNG_FTRACE_MISSING_HEADER
+ endif
+endif
}
#endif
-#ifdef CONFIG_DYNAMIC_FTRACE
+#if defined(CONFIG_DYNAMIC_FTRACE) && !defined(LTTNG_FTRACE_MISSING_HEADER)
int lttng_ftrace_register(const char *name,
const char *symbol_name,
struct lttng_event *event);
endif # CONFIG_KRETPROBES
ifneq ($(CONFIG_DYNAMIC_FTRACE),)
- ftrace_dep = $(srctree)/kernel/trace/trace.h
- ftrace_dep_check = $(wildcard $(ftrace_dep))
- ftrace = $(shell \
- if [ $(VERSION) -ge 5 -o \( $(VERSION) -eq 4 -a $(PATCHLEVEL) -ge 12 \) ] ; then \
- if [ -z "$(ftrace_dep_check)" ] ; then \
- echo "warn" ; \
- exit ; \
- fi; \
- fi; \
- echo "lttng-ftrace.o" ; \
- )
- ifeq ($(ftrace),warn)
+ ifeq ($(have_ftrace_header),yes)
+ obj-$(CONFIG_LTTNG) += lttng-ftrace.o
+ else
$(warning Files $(ftrace_dep) not found. Probe "ftrace" is disabled. Use full kernel source tree to enable it.)
- ftrace =
- endif # $(ftrace),warn
- obj-$(CONFIG_LTTNG) += $(ftrace)
+ endif
endif # CONFIG_DYNAMIC_FTRACE
# vim:syntax=make