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