^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) include ../scripts/Makefile.include
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) include ../scripts/Makefile.arch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) # always use the host compiler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) AR = $(HOSTAR)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) CC = $(HOSTCC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) LD = $(HOSTLD)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) ifeq ($(srctree),)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) srctree := $(patsubst %/,%,$(dir $(CURDIR)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) srctree := $(patsubst %/,%,$(dir $(srctree)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) SUBCMD_SRCDIR = $(srctree)/tools/lib/subcmd/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) LIBSUBCMD_OUTPUT = $(if $(OUTPUT),$(OUTPUT),$(CURDIR)/)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) LIBSUBCMD = $(LIBSUBCMD_OUTPUT)libsubcmd.a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) OBJTOOL := $(OUTPUT)objtool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) OBJTOOL_IN := $(OBJTOOL)-in.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) LIBELF_FLAGS := $(shell pkg-config libelf --cflags 2>/dev/null)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) LIBELF_LIBS := $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) all: $(OBJTOOL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) INCLUDES := -I$(srctree)/tools/include \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) -I$(srctree)/tools/arch/$(HOSTARCH)/include/uapi \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) -I$(srctree)/tools/arch/$(SRCARCH)/include \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) -I$(srctree)/tools/objtool/arch/$(SRCARCH)/include
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) WARNINGS := $(EXTRA_WARNINGS) -Wno-switch-default -Wno-switch-enum -Wno-packed -Wno-nested-externs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) CFLAGS := -Werror $(WARNINGS) $(KBUILD_HOSTCFLAGS) -g $(INCLUDES) $(LIBELF_FLAGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) LDFLAGS += $(LIBELF_LIBS) $(LIBSUBCMD) $(KBUILD_HOSTLDFLAGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) # Allow old libelf to be used:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) elfshdr := $(shell echo '$(pound)include <libelf.h>' | $(CC) $(CFLAGS) -x c -E - | grep elf_getshdr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) CFLAGS += $(if $(elfshdr),,-DLIBELF_USE_DEPRECATED)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) AWK = awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) SUBCMD_CHECK := n
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) SUBCMD_ORC := n
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) ifeq ($(SRCARCH),x86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) SUBCMD_CHECK := y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) SUBCMD_ORC := y
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ifeq ($(SUBCMD_ORC),y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) CFLAGS += -DINSN_USE_ORC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) export SUBCMD_CHECK SUBCMD_ORC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) export srctree OUTPUT CFLAGS SRCARCH AWK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) include $(srctree)/tools/build/Makefile.include
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) $(OBJTOOL_IN): fixdep FORCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) @$(CONFIG_SHELL) ./sync-check.sh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) @$(MAKE) $(build)=objtool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) $(OBJTOOL): $(LIBSUBCMD) $(OBJTOOL_IN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) $(QUIET_LINK)$(CC) $(OBJTOOL_IN) $(LDFLAGS) -o $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) $(LIBSUBCMD): fixdep FORCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) $(Q)$(MAKE) -C $(SUBCMD_SRCDIR) OUTPUT=$(LIBSUBCMD_OUTPUT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) clean:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) $(call QUIET_CLEAN, objtool) $(RM) $(OBJTOOL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) $(Q)find $(OUTPUT) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) $(Q)$(RM) $(OUTPUT)arch/x86/inat-tables.c $(OUTPUT)fixdep
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) FORCE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) .PHONY: clean FORCE