#include <errno.h>
 #include <fcntl.h>
 #include <stdlib.h>
+#ifdef HAVE_LIBBPF_SUPPORT
 #include <bpf/libbpf.h>
 #include "bpf-event.h"
+#endif
 #include "compress.h"
 #include "env.h"
 #include "namespaces.h"
        return false;
 }
 
+#ifdef HAVE_LIBBPF_SUPPORT
 static ssize_t bpf_read(struct dso *dso, u64 offset, char *data)
 {
        struct bpf_prog_info_node *node;
        dso->data.file_size = node->info_linear->info.jited_prog_len;
        return 0;
 }
+#endif // HAVE_LIBBPF_SUPPORT
 
 static void
 dso_cache__free(struct dso *dso)
                *ret = -ENOMEM;
                return NULL;
        }
-
+#ifdef HAVE_LIBBPF_SUPPORT
        if (dso->binary_type == DSO_BINARY_TYPE__BPF_PROG_INFO)
                *ret = bpf_read(dso, cache_offset, cache->data);
-       else if (dso->binary_type == DSO_BINARY_TYPE__OOL)
+       else
+#endif
+       if (dso->binary_type == DSO_BINARY_TYPE__OOL)
                *ret = DSO__DATA_CACHE_SIZE;
        else
                *ret = file_read(dso, machine, cache_offset, cache->data);
 
        if (dso->data.status == DSO_DATA_STATUS_ERROR)
                return -1;
-
+#ifdef HAVE_LIBBPF_SUPPORT
        if (dso->binary_type == DSO_BINARY_TYPE__BPF_PROG_INFO)
                return bpf_size(dso);
-
+#endif
        return file_size(dso, machine);
 }
 
 
 #include "util/header.h"
 #include <linux/ctype.h>
 #include <linux/zalloc.h>
-#include "bpf-event.h"
 #include "cgroup.h"
 #include <errno.h>
 #include <sys/utsname.h>
-#include <bpf/libbpf.h>
 #include <stdlib.h>
 #include <string.h>
 
 struct perf_env perf_env;
 
+#ifdef HAVE_LIBBPF_SUPPORT
+#include "bpf-event.h"
+#include <bpf/libbpf.h>
+
 void perf_env__insert_bpf_prog_info(struct perf_env *env,
                                    struct bpf_prog_info_node *info_node)
 {
 
        up_write(&env->bpf_progs.lock);
 }
+#else // HAVE_LIBBPF_SUPPORT
+static void perf_env__purge_bpf(struct perf_env *env __maybe_unused)
+{
+}
+#endif // HAVE_LIBBPF_SUPPORT
 
 void perf_env__exit(struct perf_env *env)
 {
        zfree(&env->memory_nodes);
 }
 
-void perf_env__init(struct perf_env *env)
+void perf_env__init(struct perf_env *env __maybe_unused)
 {
+#ifdef HAVE_LIBBPF_SUPPORT
        env->bpf_progs.infos = RB_ROOT;
        env->bpf_progs.btfs = RB_ROOT;
        init_rwsem(&env->bpf_progs.lock);
+#endif
 }
 
 int perf_env__set_cmdline(struct perf_env *env, int argc, const char *argv[])
 
 #include <sys/utsname.h>
 #include <linux/time64.h>
 #include <dirent.h>
+#ifdef HAVE_LIBBPF_SUPPORT
 #include <bpf/libbpf.h>
+#endif
 #include <perf/cpumap.h>
 
 #include "dso.h"
        up_read(&env->bpf_progs.lock);
        return ret;
 }
-#else // HAVE_LIBBPF_SUPPORT
-static int write_bpf_prog_info(struct feat_fd *ff __maybe_unused,
-                              struct evlist *evlist __maybe_unused)
-{
-       return 0;
-}
-#endif // HAVE_LIBBPF_SUPPORT
 
 static int write_bpf_btf(struct feat_fd *ff,
                         struct evlist *evlist __maybe_unused)
        up_read(&env->bpf_progs.lock);
        return ret;
 }
+#endif // HAVE_LIBBPF_SUPPORT
 
 static int cpu_cache_level__sort(const void *a, const void *b)
 {
        fprintf(fp, "# directory data version : %"PRIu64"\n", data->dir.version);
 }
 
+#ifdef HAVE_LIBBPF_SUPPORT
 static void print_bpf_prog_info(struct feat_fd *ff, FILE *fp)
 {
        struct perf_env *env = &ff->ph->env;
 
        up_read(&env->bpf_progs.lock);
 }
+#endif // HAVE_LIBBPF_SUPPORT
 
 static void free_event_desc(struct evsel *events)
 {
        up_write(&env->bpf_progs.lock);
        return err;
 }
-#else // HAVE_LIBBPF_SUPPORT
-static int process_bpf_prog_info(struct feat_fd *ff __maybe_unused, void *data __maybe_unused)
-{
-       return 0;
-}
-#endif // HAVE_LIBBPF_SUPPORT
 
 static int process_bpf_btf(struct feat_fd *ff, void *data __maybe_unused)
 {
        free(node);
        return err;
 }
+#endif // HAVE_LIBBPF_SUPPORT
 
 static int process_compressed(struct feat_fd *ff,
                              void *data __maybe_unused)
        FEAT_OPR(MEM_TOPOLOGY,  mem_topology,   true),
        FEAT_OPR(CLOCKID,       clockid,        false),
        FEAT_OPN(DIR_FORMAT,    dir_format,     false),
+#ifdef HAVE_LIBBPF_SUPPORT
        FEAT_OPR(BPF_PROG_INFO, bpf_prog_info,  false),
        FEAT_OPR(BPF_BTF,       bpf_btf,        false),
+#endif
        FEAT_OPR(COMPRESSED,    compressed,     false),
        FEAT_OPR(CPU_PMU_CAPS,  cpu_pmu_caps,   false),
        FEAT_OPR(CLOCK_DATA,    clock_data,     false),