LIB_FILE      := $(addprefix $(OUTPUT),$(LIB_FILE))
  PC_FILE               := $(addprefix $(OUTPUT),$(PC_FILE))
  
- GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN) | \
 +TAGS_PROG := $(if $(shell which etags 2>/dev/null),etags,ctags)
 +
+ GLOBAL_SYM_COUNT = $(shell readelf -s --wide $(BPF_IN_SHARED) | \
                           cut -d "@" -f1 | sed 's/_v[0-9]_[0-9]_[0-9].*//' | \
                           awk '/GLOBAL/ && /DEFAULT/ && !/UND/ {print $$8}' | \
                           sort -u | wc -l)
  
  all_cmd: $(CMD_TARGETS) check
  
- $(BPF_IN): force elfdep bpfdep bpf_helper_defs.h
 -$(BPF_IN_SHARED): force elfdep bpfdep
++$(BPF_IN_SHARED): force elfdep bpfdep bpf_helper_defs.h
        @(test -f ../../include/uapi/linux/bpf.h -a -f ../../../include/uapi/linux/bpf.h && ( \
        (diff -B ../../include/uapi/linux/bpf.h ../../../include/uapi/linux/bpf.h >/dev/null) || \
        echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/bpf.h' differs from latest version at 'include/uapi/linux/bpf.h'" >&2 )) || true
        @(test -f ../../include/uapi/linux/if_xdp.h -a -f ../../../include/uapi/linux/if_xdp.h && ( \
        (diff -B ../../include/uapi/linux/if_xdp.h ../../../include/uapi/linux/if_xdp.h >/dev/null) || \
        echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/if_xdp.h' differs from latest version at 'include/uapi/linux/if_xdp.h'" >&2 )) || true
-       $(Q)$(MAKE) $(build)=libbpf
+       $(Q)$(MAKE) $(build)=libbpf OUTPUT=$(SHARED_OBJDIR) CFLAGS="$(CFLAGS) $(SHLIB_FLAGS)"
+ 
 -$(BPF_IN_STATIC): force elfdep bpfdep
++$(BPF_IN_STATIC): force elfdep bpfdep bpf_helper_defs.h
+       $(Q)$(MAKE) $(build)=libbpf OUTPUT=$(STATIC_OBJDIR)
  
 +bpf_helper_defs.h: $(srctree)/include/uapi/linux/bpf.h
 +      $(Q)$(srctree)/scripts/bpf_helpers_doc.py --header              \
 +              --file $(srctree)/include/uapi/linux/bpf.h > bpf_helper_defs.h
 +
  $(OUTPUT)libbpf.so: $(OUTPUT)libbpf.so.$(LIBBPF_VERSION)
  
- $(OUTPUT)libbpf.so.$(LIBBPF_VERSION): $(BPF_IN)
+ $(OUTPUT)libbpf.so.$(LIBBPF_VERSION): $(BPF_IN_SHARED)
 -      $(QUIET_LINK)$(CC) --shared -Wl,-soname,libbpf.so.$(LIBBPF_MAJOR_VERSION) \
 -                                  -Wl,--version-script=$(VERSION_SCRIPT) $^ -lelf -o $@
 +      $(QUIET_LINK)$(CC) $(LDFLAGS) \
 +              --shared -Wl,-soname,libbpf.so.$(LIBBPF_MAJOR_VERSION) \
 +              -Wl,--version-script=$(VERSION_SCRIPT) $^ -lelf -o $@
        @ln -sf $(@F) $(OUTPUT)libbpf.so
        @ln -sf $(@F) $(OUTPUT)libbpf.so.$(LIBBPF_MAJOR_VERSION)
  
- $(OUTPUT)libbpf.a: $(BPF_IN)
+ $(OUTPUT)libbpf.a: $(BPF_IN_STATIC)
        $(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^
  
 -$(OUTPUT)test_libbpf: test_libbpf.cpp $(OUTPUT)libbpf.a
 -      $(QUIET_LINK)$(CXX) $(INCLUDES) $^ -lelf -o $@
 +$(OUTPUT)test_libbpf: test_libbpf.c $(OUTPUT)libbpf.a
 +      $(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) $^ -lelf -o $@
  
  $(OUTPUT)libbpf.pc:
        $(QUIET_GEN)sed -e "s|@PREFIX@|$(prefix)|" \
        $(Q)$(MAKE) -C $(srctree)/tools/build/feature/ clean >/dev/null
  
  clean:
-       $(call QUIET_CLEAN, libbpf) $(RM) $(CMD_TARGETS) \
 -      $(call QUIET_CLEAN, libbpf) $(RM) -rf $(TARGETS) $(CXX_TEST_TARGET) \
++      $(call QUIET_CLEAN, libbpf) $(RM) -rf $(CMD_TARGETS) \
                *.o *~ *.a *.so *.so.$(LIBBPF_MAJOR_VERSION) .*.d .*.cmd \
-               *.pc LIBBPF-CFLAGS bpf_helper_defs.h
 -              *.pc LIBBPF-CFLAGS $(SHARED_OBJDIR) $(STATIC_OBJDIR)
++              *.pc LIBBPF-CFLAGS bpf_helper_defs.h \
++              $(SHARED_OBJDIR) $(STATIC_OBJDIR)
        $(call QUIET_CLEAN, core-gen) $(RM) $(OUTPUT)FEATURE-DUMP.libbpf