# SPDX-License-Identifier: GPL-2.0-only

include $(srctree)/tools/scripts/utilities.mak

STOP_ERROR :=

LIBTRACEEVENT_MIN_VERSION = 1.5
LIBTRACEFS_MIN_VERSION = 1.6

ifndef ($(NO_LIBTRACEEVENT),1)
  ifeq ($(call get-executable,$(PKG_CONFIG)),)
    $(error Error: $(PKG_CONFIG) needed by libtraceevent/libtracefs is missing on this system, please install it)
  endif
endif

define lib_setup
  $(eval LIB_INCLUDES += $(shell sh -c "$(PKG_CONFIG) --cflags lib$(1)"))
  $(eval LDFLAGS += $(shell sh -c "$(PKG_CONFIG) --libs-only-L lib$(1)"))
  $(eval EXTLIBS += $(shell sh -c "$(PKG_CONFIG) --libs-only-l lib$(1)"))
endef

$(call feature_check,libtraceevent)
ifeq ($(feature-libtraceevent), 1)
  $(call detected,CONFIG_LIBTRACEEVENT)

  TEST = $(shell sh -c "$(PKG_CONFIG) --atleast-version $(LIBTRACEEVENT_MIN_VERSION) libtraceevent > /dev/null 2>&1 && echo y || echo n")
  ifeq ($(TEST),n)
    $(info libtraceevent version is too low, it must be at least $(LIBTRACEEVENT_MIN_VERSION))
    STOP_ERROR := 1
  endif

  $(call lib_setup,traceevent)
else
  STOP_ERROR := 1
  $(info libtraceevent is missing. Please install libtraceevent-dev/libtraceevent-devel)
endif

$(call feature_check,libtracefs)
ifeq ($(feature-libtracefs), 1)
  $(call detected,CONFIG_LIBTRACEFS)

  TEST = $(shell sh -c "$(PKG_CONFIG) --atleast-version $(LIBTRACEFS_MIN_VERSION) libtracefs > /dev/null 2>&1 && echo y || echo n")
  ifeq ($(TEST),n)
    $(info libtracefs version is too low, it must be at least $(LIBTRACEFS_MIN_VERSION))
    STOP_ERROR := 1
  endif

  $(call lib_setup,tracefs)
else
  STOP_ERROR := 1
  $(info libtracefs is missing. Please install libtracefs-dev/libtracefs-devel)
endif

$(call feature_check,libcpupower)
ifeq ($(feature-libcpupower), 1)
  $(call detected,CONFIG_LIBCPUPOWER)
  CFLAGS += -DHAVE_LIBCPUPOWER_SUPPORT
  EXTLIBS += -lcpupower
else
  $(info libcpupower is missing, building without --deepest-idle-state support.)
  $(info Please install libcpupower-dev/kernel-tools-libs-devel)
endif

ifndef BUILD_BPF_SKEL
  # BPF skeletons are used to implement improved sample collection, enable
  # them by default.
  BUILD_BPF_SKEL := 1
endif

ifeq ($(BUILD_BPF_SKEL),0)
  $(info BPF skeleton support disabled, building without BPF skeleton support.)
endif

$(call feature_check,libbpf)
ifeq ($(feature-libbpf), 1)
  $(call detected,CONFIG_LIBBPF)
else
  $(info libbpf is missing, building without BPF skeleton support.)
  $(info Please install libbpf-dev/libbpf-devel)
  BUILD_BPF_SKEL := 0
endif

$(call feature_check,clang-bpf-co-re)
ifeq ($(feature-clang-bpf-co-re), 1)
  $(call detected,CONFIG_CLANG_BPF_CO_RE)
else
  $(info clang is missing or does not support BPF CO-RE, building without BPF skeleton support.)
  $(info Please install clang)
  BUILD_BPF_SKEL := 0
endif

$(call feature_check,bpftool-skeletons)
ifeq ($(feature-bpftool-skeletons), 1)
  $(call detected,CONFIG_BPFTOOL_SKELETONS)
else
  $(info bpftool is missing or not supporting skeletons, building without BPF skeleton support.)
  $(info Please install bpftool)
  BUILD_BPF_SKEL := 0
endif

ifeq ($(BUILD_BPF_SKEL),1)
  CFLAGS += -DHAVE_BPF_SKEL
  EXTLIBS += -lbpf
endif

ifeq ($(STOP_ERROR),1)
  $(error Please, check the errors above.)
endif
