SHELL := /bin/bash ifeq ($(wildcard config.mak),) $(error run ./configure first. See ./configure -h) endif include config.mak libdirs-get = $(shell [ -d "lib/$(1)" ] && echo "lib/$(1) lib/$(1)/asm") ARCH_LIBDIRS := $(call libdirs-get,$(ARCH)) $(call libdirs-get,$(TEST_DIR)) DESTDIR := $(PREFIX)/share/kvm-unit-tests/ .PHONY: arch_clean clean distclean cscope #make sure env CFLAGS variable is not used CFLAGS = libgcc := $(shell $(CC) --print-libgcc-file-name) libcflat := lib/libcflat.a cflatobjs := \ lib/argv.o \ lib/printf.o \ lib/string.o \ lib/abort.o \ lib/report.o \ lib/stack.o # libfdt paths LIBFDT_objdir = lib/libfdt LIBFDT_srcdir = lib/libfdt LIBFDT_archive = $(LIBFDT_objdir)/libfdt.a LIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES)) LIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION)) #include architecure specific make rules include $(TEST_DIR)/Makefile # cc-option # Usage: OP_CFLAGS+=$(call cc-option, -falign-functions=0, -malign-functions=0) cc-option = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null \ > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;) CFLAGS += -g CFLAGS += $(autodepend-flags) -Wall -Werror frame-pointer-flag=-f$(if $(KEEP_FRAME_POINTER),no-,)omit-frame-pointer fomit_frame_pointer := $(call cc-option, $(frame-pointer-flag), "") fnostack_protector := $(call cc-option, -fno-stack-protector, "") fnostack_protector_all := $(call cc-option, -fno-stack-protector-all, "") wno_frame_address := $(call cc-option, -Wno-frame-address, "") fno_pic := $(call cc-option, -fno-pic, "") no_pie := $(call cc-option, -no-pie, "") CFLAGS += $(fomit_frame_pointer) CFLAGS += $(fno_stack_protector) CFLAGS += $(fno_stack_protector_all) CFLAGS += $(wno_frame_address) CFLAGS += $(if $(U32_LONG_FMT),-D__U32_LONG_FMT__,) CFLAGS += $(fno_pic) $(no_pie) CXXFLAGS += $(CFLAGS) autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d LDFLAGS += $(CFLAGS) LDFLAGS += -pthread -lrt $(libcflat): $(cflatobjs) $(AR) rcs $@ $^ include $(LIBFDT_srcdir)/Makefile.libfdt $(LIBFDT_archive): CFLAGS += -ffreestanding -I lib -I lib/libfdt -Wno-sign-compare $(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) $(AR) rcs $@ $^ %.o: %.S $(CC) $(CFLAGS) -c -nostdlib -o $@ $< -include */.*.d */*/.*.d all: $(shell git rev-parse --verify --short=8 HEAD >build-head 2>/dev/null) standalone: all @scripts/mkstandalone.sh install: standalone mkdir -p $(DESTDIR) install tests/* $(DESTDIR) clean: arch_clean $(RM) lib/.*.d $(libcflat) $(cflatobjs) libfdt_clean: $(RM) $(LIBFDT_archive) \ $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) \ $(LIBFDT_objdir)/.*.d distclean: clean libfdt_clean $(RM) lib/asm config.mak $(TEST_DIR)-run msr.out cscope.* build-head $(RM) -r tests logs logs.old cscope: cscope_dirs = lib lib/libfdt lib/linux $(TEST_DIR) $(ARCH_LIBDIRS) lib/asm-generic cscope: $(RM) ./cscope.* find -L $(cscope_dirs) -maxdepth 1 \ -name '*.[chsS]' -print | sed 's,^\./,,' | sort -u > ./cscope.files cscope -bk