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