1# SPDX-License-Identifier: GPL-2.0-only 2include ../../scripts/Makefile.include 3 4ifeq ($(srctree),) 5srctree := $(patsubst %/,%,$(dir $(CURDIR))) 6srctree := $(patsubst %/,%,$(dir $(srctree))) 7srctree := $(patsubst %/,%,$(dir $(srctree))) 8endif 9 10ifeq ($(V),1) 11 Q = 12 msg = 13else 14 Q = @ 15 msg = @printf ' %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))"; 16 MAKEFLAGS=--no-print-directory 17endif 18 19OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/ 20 21LIBBPF_SRC := $(srctree)/tools/lib/bpf/ 22SUBCMD_SRC := $(srctree)/tools/lib/subcmd/ 23 24BPFOBJ := $(OUTPUT)/libbpf.a 25SUBCMDOBJ := $(OUTPUT)/libsubcmd.a 26 27BINARY := $(OUTPUT)/resolve_btfids 28BINARY_IN := $(BINARY)-in.o 29 30all: $(BINARY) 31 32$(OUTPUT): 33 $(call msg,MKDIR,,$@) 34 $(Q)mkdir -p $(OUTPUT) 35 36$(SUBCMDOBJ): fixdep FORCE 37 $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(OUTPUT) 38 39$(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(OUTPUT) 40 $(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) OUTPUT=$(abspath $(dir $@))/ $(abspath $@) 41 42CFLAGS := -g \ 43 -I$(srctree)/tools/include \ 44 -I$(srctree)/tools/include/uapi \ 45 -I$(LIBBPF_SRC) \ 46 -I$(SUBCMD_SRC) 47 48LIBS = -lelf -lz 49 50export srctree OUTPUT CFLAGS Q 51include $(srctree)/tools/build/Makefile.include 52 53$(BINARY_IN): fixdep FORCE 54 $(Q)$(MAKE) $(build)=resolve_btfids 55 56$(BINARY): $(BPFOBJ) $(SUBCMDOBJ) $(BINARY_IN) 57 $(call msg,LINK,$@) 58 $(Q)$(CC) $(BINARY_IN) $(LDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS) 59 60libsubcmd-clean: 61 $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(OUTPUT) clean 62 63libbpf-clean: 64 $(Q)$(MAKE) -C $(LIBBPF_SRC) OUTPUT=$(OUTPUT) clean 65 66clean: libsubcmd-clean libbpf-clean fixdep-clean 67 $(call msg,CLEAN,$(BINARY)) 68 $(Q)$(RM) -f $(BINARY); \ 69 find $(if $(OUTPUT),$(OUTPUT),.) -name \*.o -or -name \*.o.cmd -or -name \*.o.d | xargs $(RM) 70 71tags: 72 $(call msg,GEN,,tags) 73 $(Q)ctags -R . $(LIBBPF_SRC) $(SUBCMD_SRC) 74 75FORCE: 76 77.PHONY: all FORCE clean tags 78