Makefile 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. # SPDX-License-Identifier: GPL-2.0-only
  2. include ../../scripts/Makefile.include
  3. include ../../scripts/Makefile.arch
  4. srctree := $(abspath $(CURDIR)/../../../)
  5. ifeq ($(V),1)
  6. msg =
  7. else
  8. ifeq ($(silent),1)
  9. msg =
  10. else
  11. msg = @printf ' %-8s %s%s\n' "$(1)" "$(notdir $(2))" "$(if $(3), $(3))";
  12. endif
  13. MAKEFLAGS=--no-print-directory
  14. endif
  15. # Overrides for the prepare step libraries.
  16. HOST_OVERRIDES := AR="$(HOSTAR)" CC="$(HOSTCC)" LD="$(HOSTLD)" ARCH="$(HOSTARCH)" \
  17. CROSS_COMPILE="" CLANG_CROSS_FLAGS="" EXTRA_CFLAGS="$(HOSTCFLAGS)"
  18. RM ?= rm
  19. HOSTCC ?= gcc
  20. HOSTLD ?= ld
  21. HOSTAR ?= ar
  22. HOSTPKG_CONFIG ?= pkg-config
  23. CROSS_COMPILE =
  24. OUTPUT ?= $(srctree)/tools/bpf/resolve_btfids/
  25. LIBBPF_SRC := $(srctree)/tools/lib/bpf/
  26. SUBCMD_SRC := $(srctree)/tools/lib/subcmd/
  27. BPFOBJ := $(OUTPUT)/libbpf/libbpf.a
  28. LIBBPF_OUT := $(abspath $(dir $(BPFOBJ)))/
  29. SUBCMDOBJ := $(OUTPUT)/libsubcmd/libsubcmd.a
  30. SUBCMD_OUT := $(abspath $(dir $(SUBCMDOBJ)))/
  31. LIBBPF_DESTDIR := $(LIBBPF_OUT)
  32. LIBBPF_INCLUDE := $(LIBBPF_DESTDIR)include
  33. SUBCMD_DESTDIR := $(SUBCMD_OUT)
  34. SUBCMD_INCLUDE := $(SUBCMD_DESTDIR)include
  35. BINARY := $(OUTPUT)/resolve_btfids
  36. BINARY_IN := $(BINARY)-in.o
  37. all: $(BINARY)
  38. prepare: $(BPFOBJ) $(SUBCMDOBJ)
  39. $(OUTPUT) $(OUTPUT)/libsubcmd $(LIBBPF_OUT):
  40. $(call msg,MKDIR,,$@)
  41. $(Q)mkdir -p $(@)
  42. $(SUBCMDOBJ): fixdep FORCE | $(OUTPUT)/libsubcmd
  43. $(Q)$(MAKE) -C $(SUBCMD_SRC) OUTPUT=$(SUBCMD_OUT) \
  44. DESTDIR=$(SUBCMD_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \
  45. $(abspath $@) install_headers
  46. $(BPFOBJ): $(wildcard $(LIBBPF_SRC)/*.[ch] $(LIBBPF_SRC)/Makefile) | $(LIBBPF_OUT)
  47. $(Q)$(MAKE) $(submake_extras) -C $(LIBBPF_SRC) OUTPUT=$(LIBBPF_OUT) \
  48. DESTDIR=$(LIBBPF_DESTDIR) $(HOST_OVERRIDES) prefix= subdir= \
  49. $(abspath $@) install_headers
  50. LIBELF_FLAGS := $(shell $(HOSTPKG_CONFIG) libelf --cflags 2>/dev/null)
  51. ifneq ($(filter -static,$(EXTRA_LDFLAGS)),)
  52. LIBELF_LIBS := $(shell $(HOSTPKG_CONFIG) libelf --libs --static 2>/dev/null || echo -lelf -lzstd)
  53. else
  54. LIBELF_LIBS := $(shell $(HOSTPKG_CONFIG) libelf --libs 2>/dev/null || echo -lelf)
  55. endif
  56. ZLIB_LIBS := $(shell $(HOSTPKG_CONFIG) zlib --libs 2>/dev/null || echo -lz)
  57. HOSTCFLAGS_resolve_btfids += -g \
  58. -I$(srctree)/tools/include \
  59. -I$(srctree)/tools/include/uapi \
  60. -I$(LIBBPF_INCLUDE) \
  61. -I$(SUBCMD_INCLUDE) \
  62. $(LIBELF_FLAGS) \
  63. -Wall -Werror
  64. LIBS = $(LIBELF_LIBS) $(ZLIB_LIBS)
  65. export srctree OUTPUT HOSTCFLAGS_resolve_btfids Q HOSTCC HOSTLD HOSTAR
  66. include $(srctree)/tools/build/Makefile.include
  67. $(BINARY_IN): fixdep FORCE prepare | $(OUTPUT)
  68. $(Q)$(MAKE) $(build)=resolve_btfids
  69. $(BINARY): $(BPFOBJ) $(SUBCMDOBJ) $(BINARY_IN)
  70. $(call msg,LINK,$@)
  71. $(Q)$(HOSTCC) $(BINARY_IN) $(KBUILD_HOSTLDFLAGS) $(EXTRA_LDFLAGS) -o $@ $(BPFOBJ) $(SUBCMDOBJ) $(LIBS)
  72. clean_objects := $(wildcard $(OUTPUT)/*.o \
  73. $(OUTPUT)/.*.o.cmd \
  74. $(OUTPUT)/.*.o.d \
  75. $(LIBBPF_OUT) \
  76. $(LIBBPF_DESTDIR) \
  77. $(SUBCMD_OUT) \
  78. $(SUBCMD_DESTDIR) \
  79. $(OUTPUT)/resolve_btfids)
  80. ifneq ($(clean_objects),)
  81. clean: fixdep-clean
  82. $(call msg,CLEAN,$(BINARY))
  83. $(Q)$(RM) -rf $(clean_objects)
  84. else
  85. clean:
  86. endif
  87. tags:
  88. $(call msg,GEN,,tags)
  89. $(Q)ctags -R . $(LIBBPF_SRC) $(SUBCMD_SRC)
  90. FORCE:
  91. .PHONY: all FORCE clean tags prepare