xref: /kvm-unit-tests/Makefile (revision e36a9c28fc8f8f59e0e30db244af0b17c6d04be9)
1SHELL := /usr/bin/env bash
2
3ifeq ($(wildcard config.mak),)
4$(error run ./configure first. See ./configure -h)
5endif
6
7include config.mak
8
9# Set search path for all sources
10VPATH = $(SRCDIR)
11
12libdirs-get = $(shell [ -d "lib/$(1)" ] && echo "lib/$(1) lib/$(1)/asm")
13ARCH_LIBDIRS := $(call libdirs-get,$(ARCH)) $(call libdirs-get,$(TEST_DIR))
14OBJDIRS := $(ARCH_LIBDIRS)
15
16DESTDIR := $(PREFIX)/share/kvm-unit-tests/
17
18.PHONY: arch_clean clean distclean cscope
19
20#make sure env CFLAGS variable is not used
21CFLAGS =
22
23libgcc := $(shell $(CC) --print-libgcc-file-name)
24
25libcflat := lib/libcflat.a
26cflatobjs := \
27	lib/argv.o \
28	lib/printf.o \
29	lib/string.o \
30	lib/abort.o \
31	lib/report.o \
32	lib/stack.o
33
34# libfdt paths
35LIBFDT_objdir = lib/libfdt
36LIBFDT_srcdir = $(SRCDIR)/lib/libfdt
37LIBFDT_archive = $(LIBFDT_objdir)/libfdt.a
38LIBFDT_include = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_INCLUDES))
39LIBFDT_version = $(addprefix $(LIBFDT_srcdir)/,$(LIBFDT_VERSION))
40
41OBJDIRS += $(LIBFDT_objdir)
42
43#include architecture specific make rules
44include $(SRCDIR)/$(TEST_DIR)/Makefile
45
46# cc-option
47# Usage: OP_CFLAGS+=$(call cc-option, -falign-functions=0, -malign-functions=0)
48
49cc-option = $(shell if $(CC) $(1) -S -o /dev/null -xc /dev/null \
50              > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
51
52COMMON_CFLAGS += -g $(autodepend-flags)
53COMMON_CFLAGS += -Wall -Wwrite-strings -Wclobbered -Wempty-body -Wuninitialized
54COMMON_CFLAGS += -Wignored-qualifiers -Wunused-but-set-parameter
55COMMON_CFLAGS += -Werror
56frame-pointer-flag=-f$(if $(KEEP_FRAME_POINTER),no-,)omit-frame-pointer
57fomit_frame_pointer := $(call cc-option, $(frame-pointer-flag), "")
58fnostack_protector := $(call cc-option, -fno-stack-protector, "")
59fnostack_protector_all := $(call cc-option, -fno-stack-protector-all, "")
60wno_frame_address := $(call cc-option, -Wno-frame-address, "")
61fno_pic := $(call cc-option, -fno-pic, "")
62no_pie := $(call cc-option, -no-pie, "")
63COMMON_CFLAGS += $(fomit_frame_pointer)
64COMMON_CFLAGS += $(fno_stack_protector)
65COMMON_CFLAGS += $(fno_stack_protector_all)
66COMMON_CFLAGS += $(wno_frame_address)
67COMMON_CFLAGS += $(if $(U32_LONG_FMT),-D__U32_LONG_FMT__,)
68COMMON_CFLAGS += $(fno_pic) $(no_pie)
69
70CFLAGS += $(COMMON_CFLAGS)
71CFLAGS += -Wmissing-parameter-type -Wold-style-declaration -Woverride-init
72CFLAGS += -Wmissing-prototypes -Wstrict-prototypes
73
74CXXFLAGS += $(COMMON_CFLAGS)
75
76autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d
77
78LDFLAGS += $(CFLAGS)
79
80$(libcflat): $(cflatobjs)
81	$(AR) rcs $@ $^
82
83include $(LIBFDT_srcdir)/Makefile.libfdt
84$(LIBFDT_archive): CFLAGS += -ffreestanding -I $(SRCDIR)/lib -I $(SRCDIR)/lib/libfdt -Wno-sign-compare
85$(LIBFDT_archive): $(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS))
86	$(AR) rcs $@ $^
87
88
89# Build directory target
90.PHONY: directories
91directories:
92	@mkdir -p $(OBJDIRS)
93
94%.o: %.S
95	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
96
97-include */.*.d */*/.*.d
98
99all: directories $(shell cd $(SRCDIR) && git rev-parse --verify --short=8 HEAD >$(PWD)/build-head 2>/dev/null)
100
101standalone: all
102	@scripts/mkstandalone.sh
103
104install: standalone
105	mkdir -p $(DESTDIR)
106	install tests/* $(DESTDIR)
107
108clean: arch_clean
109	$(RM) lib/.*.d $(libcflat) $(cflatobjs)
110
111libfdt_clean:
112	$(RM) $(LIBFDT_archive) \
113	$(addprefix $(LIBFDT_objdir)/,$(LIBFDT_OBJS)) \
114	$(LIBFDT_objdir)/.*.d
115
116distclean: clean libfdt_clean
117	$(RM) lib/asm lib/config.h config.mak $(TEST_DIR)-run msr.out cscope.* build-head
118	$(RM) -r tests logs logs.old
119
120cscope: cscope_dirs = lib lib/libfdt lib/linux $(TEST_DIR) $(ARCH_LIBDIRS) lib/asm-generic
121cscope:
122	$(RM) ./cscope.*
123	find -L $(cscope_dirs) -maxdepth 1 \
124		-name '*.[chsS]' -exec realpath --relative-base=$(PWD) {} \; | sort -u > ./cscope.files
125	cscope -bk
126